Функция объявлений TwinCAT 3 InvokeRpcMethod() не работает и выдает ошибку Значение равно нулю для символа

Я хочу вызвать/вызвать метод ПЛК из ADS.

На основе примера, описанного в определении функции (TcAdsClient.InvokeRpcMethod) здесь [https://infosys.beckhoff.com/index.php?content=../content/1031/tcadsnetref/6358337803.html&id=]

Я попытался сделать аналогичную функцию на стороне ПЛК и попытался вызвать на стороне ADS, но это не сработало и выдало мне ошибку «Значение не может быть нулевым» для символа.

Ниже показано, как вызвать метод.

short result = (short)client.InvokeRpcMethod("MAIN", "M_Add", new object[] {(short)1, (short)4});

Да ПЛК работает и клиент подключен Я могу получить доступ к другим переменным ПЛК. Все, что я пытаюсь, это следовать примеру кода, приведенному в ссылке выше. Ниже приведено исключение, которое я получаю при вызове «InvokeRpcMethod()».

введите здесь описание изображения

введите здесь описание изображения


person Ash24    schedule 02.07.2019    source источник
comment
Не могли бы вы лучше объяснить, из чего вы получаете, что значение не может быть нулевой ошибкой? Вы уверены, что клиент подключен и т.д.?   -  person Quirzo    schedule 03.07.2019
comment
Я изменил свой вопрос с более подробной информацией.   -  person Ash24    schedule 03.07.2019


Ответы (1)


Если вы хотите выполнить удаленный вызов процедур ADS, вам нужно вызвать метод функционального блока, а не программный метод.

Так что просто создайте функциональный блок, скажем, FB_AdsManager и объявите его в MAIN следующим образом:

fbAdsManager    : FB_AdsManager;

FB_AdsManager имеет метод adsRemoteCall (не забудьте атрибут {attribute 'TcRpcEnable'})

Теперь вы можете вызвать метод из вашей программы:

client.InvokeRpcMethod("MAIN.fbAdsManager", "adsRemoteCall", new object[] {});
person Filippo Boido    schedule 03.07.2019
comment
Спасибо. Работал как вы описали. (*лучше, чем устаревшая документация Beckhoff) - person Ash24; 08.07.2019