# OPC UA

Теги, история и аварии сервера OPC UA прямо в чате

Теги сервера OPC UA (Kepware, Ignition, SCADA, ПЛК) через шлюз, только чтение

## Как агент работает с OPC UA

Шлюз ставится службой на компьютер в сети объекта и сам подключается к серверу OPC UA по адресу opc.tcp, который вы укажете, с логином и паролем или анонимно. Данные он отправляет наружу только исходящим соединением. Подключение назначается шлюзу на вкладке «Шлюзы» в настройках подключений.

Шлюз обходит адресное пространство от Objects или от корня, который вы назовёте, берёт у числовых переменных единицы и диапазон и подписывается на изменения, а не опрашивает теги. Мёртвая зона уходит серверу фильтром изменений. Аварии читаются по Alarms & Conditions, а на сервере с моделью umati шлюз узнаёт станки, их состояние и активную программу.

По умолчанию шлюз выбирает самую сильную защищённую политику сервера и сам на None не переходит: открытый канал выбирает только владелец. Устаревшие Basic128Rsa15 и Basic256 не поддерживаются, незнакомому сертификату сервера шлюз не доверяет. Сессия шлюза умеет только читать: записи значений и вызова методов в ней нет, кроме запроса текущих аварий (ConditionRefresh).

Если связь с сервером пропала, после переподключения шлюз дочитывает пропущенное из истории сервера (HistoryRead), но не дальше недели назад. Kepware и Ignition как серверы OPC UA историю обычно не хранят, и тогда разрыв остаётся пропуском. Пока облако недоступно, значения копятся на диске шлюза и приходят после восстановления связи.

## Сценарии интеграции

### Что сейчас на линии
Агент найдёт теги по имени или описанию и покажет текущие значения с единицами, временем источника и качеством.

### Тренд за смену
Агент прочитает историю тега за смену или неделю и назовёт минимум, максимум, среднее и моменты, когда значение выходило за диапазон.

### Активные аварии
Агент соберёт аварии сервера из Alarms & Conditions: какие стоят сейчас, какие квитированы и когда поднялись.

### Состояние станков
На сервере с моделью umati агент покажет каждую машину, её состояние, режим работы, состояние каналов, коррекцию подачи и активную программу.

### Сообщение о пороге
В задаче «По событию» агент сообщит, когда значение тега выйдет за порог и продержится заданное время, и когда вернётся в норму.

### Связь с объектом
Агент скажет, когда шлюз пропал со связи и когда вернулся, и покажет пропуск в истории тега, если сервер не смог его заполнить.

## Как подключить

**Перед подключением**

- Сервер OPC UA, доступный по opc.tcp с компьютера шлюза
- Компьютер в сети объекта под службу шлюза
- Пользователь сервера с правом чтения либо разрешённый анонимный вход
- Взаимное доверие сертификатов шлюза и сервера в защищённом режиме

### Узнайте адрес эндпоинта сервера
Адрес вида opc.tcp://хост:порт есть в настройках сервера OPC UA (стандартный порт 4840). Откройте этот порт с компьютера шлюза до сервера.

### Заведите пользователя с правом чтения
Создайте на сервере пользователя, которому разрешено читать теги и их историю. Без логина и пароля шлюз входит анонимно, если сервер это разрешает.

### Доверьте сертификат шлюза на сервере
Шлюз предъявляет серверу свой сертификат приложения. Если сервер отклонил его при первой попытке, переведите этот сертификат в доверенные на сервере.

### Доверьте сертификат сервера на шлюзе
Незнакомый сертификат сервера шлюз кладёт в pki/opcua/rejected/certs/ папки данных. Перенесите его в pki/opcua/trusted/certs/.

## Частые вопросы

### Как подключить OPC UA?
Поставьте шлюз на компьютер в сети объекта и заведите его на вкладке «Шлюзы». В подключении укажите адрес вида opc.tcp://10.0.12.5:4840, а также пользователя и пароль, если сервер их требует. Затем доверьте сертификат шлюза на сервере и сертификат сервера на шлюзе.

### Что агент видит в OPC UA?
Переменные дерева сервера с типом, единицами, диапазоном и описанием, их текущие значения и историю, аварии Alarms & Conditions, а на серверах с моделью umati ещё станки с их состоянием и программой. Обход можно сузить корнем или перечнем NodeId.

### Меняет ли агент значения?
Нет. Сессия шлюза не умеет писать значения и вызывать методы. Единственный вызов в ней, ConditionRefresh, только просит сервер прислать текущие аварии заново. Квитировать аварии агент тоже не может.

### Подключение отклонено из-за сертификата. Что делать?
Незнакомый сертификат сервера шлюз кладёт в pki/opcua/rejected/certs/ папки данных. Перенесите файл в pki/opcua/trusted/certs/ или положите в pki/opcua/issuer/certs/ сертификат центра, который его выпустил. Сервер, в свою очередь, должен доверять сертификату шлюза.
