Как я могу узнать, потеряно ли соединение с ПЛК после того, как я подписал тег?

#opc #opc-ua

#opc #opc-ua

Вопрос:

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

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

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

Ответ №1:

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

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

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

Комментарии:

1. Я не проверял код состояния входящего уведомления. Я только что протестировал, и как только соединение с плк потеряно, я получаю уведомление с неверным кодом состояния. Примечание: я использую KEPServerEX. Действительно спасибо за ответ.