Как я могу узнать, потеряно ли соединение plc после того, как я подписал тэг? - PullRequest
0 голосов
/ 17 апреля 2019

Я создал клиентское приложение с подпиской для отслеживания нескольких тегов через сервер OPC UA (c #).Если соединение между сервером OPC и ПЛК потеряно во время работы клиента, клиент прекращает получать информацию с сервера и никогда не уведомляется о том, что ПЛК больше недоступен.

Я оцениваюреализовать операцию периодического чтения для одного тега через сервер OPC, чтобы фактически узнать, активно ли соединение plc, но если в OPC UA есть собственный механизм, я бы хотел этого избежать.

Есть лиспособ (например, событие) уведомить клиента о том, что соединение с plc потеряно для действующей подписки?

1 Ответ

2 голосов
/ 17 апреля 2019

Соответствующий сервер OPC UA должен отправлять уведомление с одним из «плохих» кодов состояния, если соединение с целевой системой потеряно.Это обычное событие уведомления, тот же канал, что и у «хороших», оно просто несет другое DataValue, в котором, как оказалось, имеется StatusCode с соответствующими битами, установленными так, что это указывает на проблему.

Итак, вам нужнопроверьте StatusCode во входящих уведомлениях.Если вы уже делаете это, но сервер действительно ничего не отправляет в случае потери связи, вам нужно пожаловаться продавцу сервера, потому что такое поведение не совсем приемлемо для любого серьезного сервера.

Примечание.это способы указать «фильтр» изменения данных при подписке на отслеживаемый элемент, и вы можете указать, хотите ли вы получать уведомления, например, когда меняется только отметка времени, а не значение и т. д. Но независимо от того, как установлен фильтр, изменения вStatusCode всегда отправляются.Поэтому проблема не может быть в неправильной установке фильтра.

...