Обозначение

Описание
Блок OpcUA клиент обеспечивает реализацию одной подписки к серверу по протоколу OpcUA.
Входы и выходы, которыми необходимо обмениваться с сервером, должны быть добавлены в раздел 'Данные' внутри этого блока.
Назначение входов и выходов
| Входы | Тип | Описание |
| enb | u8 | разрешение на работу блока: 0 - выключен, 1 - включен, 2 - в резерве |
| wait | u32 | таймаут ожидания ответа от сервера, мс |
| lip | str | локальный IP адрес |
| lprt | i16 | локальный порт |
| sdr | str | сетевой стек (только для QNX):"/", "/sock2" и т.д. |
| rip | str | IP адрес сервера |
| rprt | i16 | порт сервера |
| usr | str | логин для доступа к серверу |
| psw | str | пароль для доступа к серверу |
| pbl | dbl | интервал работы подписки в мс (PublishingInterval) |
| lfc | u32 | время жизни подписки в циклах (LifetimeCount) |
| kac | u32 | максимальное значение keep-alive счетчика в циклах (MaxKeepAliveCount) |
| wcon | b | отправлять значения выходов при установке соединения |
| routs | b | читать выходы |
| cfg | u32 | дополнительная конфигурация работы |
| Выходы | Тип | Описание |
| sts | i32 | статус работы: 0 - нет обмена, 1 - обмен, 2 - в резерве, >2 - переходное состояние, <0 - системная ошибка |
| sst | i32 | статус сервера в соответствии со спецификацией OpcUA (Part5 12.6) |
| ssl | u8 | дополнительный статус сервера, ServiceLevel в соответствии со спецификацией OpcUA (Part5 6.6.2.4.2) |
| sid | u32 | ID подписки |
| ssn | u32 | номер уведомления подписки |
| rcnt | u32 | количество принятых пакетов |
| wcnt | u32 | количество отправленных пакетов |
| sss | u32 | статус подписки |
Статус работы
Выход sts может принимать одно из следующих значений:
- 0 - нет обмена
- 1 - обмен данными
- 2 - в резерве, соединение установлено, значения выходов sst и ssl актуальные, обмена данными нет
- 3 - в процессе установки соединения
- 4 - в процессе разрыва соединения
- 5 - сервер вернул ошибку (более подробную информацию программа печатает в консоль)
- 6 - внутренняя ошибка, перезапуск соединения
- -1 - системная ошибка, невозможно выделить локальный сокет для установки соединения
- -2 - системная ошибка, невозможно использовать локальный порт для установки соединения
Выход sss отображает статус подписки, в котором каждый бит имеет определенное значение:
| номер бита | значение 1 |
|---|---|
| ошибки | |
| 0 | подписка не работает |
| 1 | есть данные, не найденные в сервере |
| информация | |
| 16 | подключение к серверу paOpcUA |
Настройка обмена с сервером
Один блок OpcUAClient соответствует одной подписке в сервере OPCUA (Subscription в спецификации OPCUA).
Кроме этого клиент позволяет записывает данные в сервер.
Входы lip, lprt, sdr, rip, rprt, usr и psw задают настройки сетевого соединения с сервером.
Входы pbl, lfc и kac задают параметры подписки согласно спецификации OPCUA.
При настройке блока удобно использовать некоторые свойства модуля. Для этого можно использовать технологию SQL запросов.
Примеры SQL запросов:
- "
SELECT value FROM blocks_prop WHERE indx=:module AND type="prop_ip" " - получает значение свойства "IP адрес" (prop_ip) из свойств текущего модуля, обычно задается на входе lip SELECT value FROM blocks_prop WHERE indx=:module AND type="prop_debug_port" - получает значение свойства "Порт отладчика" (prop_debug_port) из свойств текущего модуля, обычно задается на входе lprtSELECT value FROM blocks_prop WHERE indx=:module AND type="prop_0" - получает значение свойства "Пользовательское свойство 0" (prop_debug_port) из свойств текущего модуля, обычно используются на входах rip и rprt
Режимы работы клиента
Значение на входе enb определяет режим работы клиента:
- 0 - соединение с сервером разорвано, обмена нет
- 1 - соединение с сервером установлено, обмен работает
- 2 - соединение с сервером установлено, обмена нет. В этом режиме клиент читает от сервера только значения статусов (выходы sst и ssl), такой вариант можно использозвать для выбора одного из нескольких серверов.
Конфигурирование данных
Клиент читает и пишет данные (входы и выходы других функциональных блоков), добавленные внутрь раздела "Данные". Добавить данное можно одним из
следующих способов:
- Открыть на одной странице блок OpcUAClient, на другой странице блок с входом/выходом, который необходимо добавить. Выделить вход/выход и с нажатым Ctrl перетащить его в блок OpcUAClient. Отпустить, выбрать команду "Добавить".
- Открыть блок OpcUAClient в дереве (со страницы это проще всего сделать командой "Показать в дереве"), раскрыть его. Вход/выходов перетащить в раздел "Данные", выбрать команду "Добавить".
Период опроса (мс) (prop_sinter) - задает период опроса (samplingInterval), если данное необходимо собирать в таймерном
потоке. Значение 0 (или отсутсвие свойства) означает опрос каждый цикл работы подписки в фоне. Значения >0 должны быть кратны таймерному промежутку (если значение
не кратно, то оно принудительно "округляется" вниз), в этом случае значение анализируется в каждом таймерном цикле и добавляется в очередь, если проходит проверку
на зону нечувствительности. Для такой работы в проекте обязательно должен быть добавлен блок OpcUAServerTimer
Размер очереди (prop_qsize) - задает размер очереди (queueSize) данного в подписке. Применяется для сбора данных в таймере (см. свойство "Период опроса").
Интервал принудительной отправки (мс) (prop_reftime) - позволяет организовать принудительную отправку данного в подписке независимо от
изменения значения и настроек зоны нечувствительности. Заданный интервал отсчитывается от момента последней отправки значения. Это нестандартная функция, поэтому работает
только если в качестве сервера выступает блок OpcUAServer.
ID источника/приемника (prop_srcid) - числовой идентификатор данного из сервера (NodeId DataEncoding 0x02 Numeric).
Сервером является другой модуль проекта Полигон:
Это свойство добавляется автоматически при выполнении команды "Назначить источником", для этого необходимо: выделить вход или выход другого модуля, который необходимо читать, и перетащить его в настраиваемый вход. Если свойство не добавлено, то клиент читает из сервера значение такого же входа, данный случай используется в частности для синхронизации данных между дублированными модулями (подробнее см. библиотеку paSync).
Сторонний сервер:
Значение свойства задается строкой в формате 0:id:ns. Например, значение свойства 0:34:2 задает идентификатор ns=2;i=34
Сервером является другой модуль проекта Полигон:
Это свойство добавляется автоматически при выполнении команды "Назначить источником", для этого необходимо: выделить вход или выход другого модуля, который необходимо читать, и перетащить его в настраиваемый вход. Если свойство не добавлено, то клиент читает из сервера значение такого же входа, данный случай используется в частности для синхронизации данных между дублированными модулями (подробнее см. библиотеку paSync).
Сторонний сервер:
Значение свойства задается строкой в формате 0:id:ns. Например, значение свойства 0:34:2 задает идентификатор ns=2;i=34
Выходы, добавленные в раздел "Данные" и имеющие свойство ID источника/приемника, клиент записывает в сервер. Периодичность записи зависит от значения свойства Зона нечувствительности у выхода:
При записи данного клиент также пишет качество (равное 0) и метку времени ServerTimestamp.
Если свойство ID источника/приемника для выхода не задано, то клиент читает из сервера значение такого же выхода, данный случай можно использовать в частности для синхронизации данных между дублированными модулями (подробнее см. библиотеку paSync).
- свойство отсутствует - запись производится каждый цикл работы клиента;
- 0 - запись производится при любом изменении значения;
- >0 - запись производится, если значение изменилось больше чем размер зоны нечувствительности;
При записи данного клиент также пишет качество (равное 0) и метку времени ServerTimestamp.
Если свойство ID источника/приемника для выхода не задано, то клиент читает из сервера значение такого же выхода, данный случай можно использовать в частности для синхронизации данных между дублированными модулями (подробнее см. библиотеку paSync).
ВАЖНО: для того чтобы свойства входов/выходов работали как описано выше, необходимо установить свойство модуля
"Трансляция: включить свойства входов/выходов" = "только из разделов".
Дополнительная концигурация обмена
Нестандартные возможности клиента конфигурируются младшими битами входного регистра cfg:
бит 0 - разрывать связь, если данное подписки не найдено в сервере
бит 1 - при routs=1 читать только те выходы, у которых есть свойство Уставка
бит 2 - при записи отправлять также SourceTimestamp (по значению равной ServerTimestamp)
бит 0 - разрывать связь, если данное подписки не найдено в сервере
бит 1 - при routs=1 читать только те выходы, у которых есть свойство Уставка
бит 2 - при записи отправлять также SourceTimestamp (по значению равной ServerTimestamp)
Настройки безопасности задаются старшими битами входа cfg:
бит 8 - устанавливать соединение в режиме SIGN (схема Basic256Sha256)
бит 9 - включить шифрование (режим SIGNANDENCRYPT, схема Basic256Sha256)
Для работы Basic256Sha256 необходимы файлы сертификата и закрытого ключа клиента, файл сертификата удаленного сервера. Файлы должны находится на диске контроллера в той же папке что и исполняемый модуль, и называться:
бит 8 - устанавливать соединение в режиме SIGN (схема Basic256Sha256)
бит 9 - включить шифрование (режим SIGNANDENCRYPT, схема Basic256Sha256)
Для работы Basic256Sha256 необходимы файлы сертификата и закрытого ключа клиента, файл сертификата удаленного сервера. Файлы должны находится на диске контроллера в той же папке что и исполняемый модуль, и называться:
- opcua-client.cer - сертификат клиента в формате DER
- opcua-client-key.pem - закрытый ключ клиента
- opcua-remote-server.cer - сертификат удаленного сервера в формате DER