OPC UA-сервер

Каждый ПЛК, программируемый в Полигон, является OPC UA-сервером, так как Отладчик подключается к контроллеру как OPC UA-клиент.

Преднастроенный OPC UA-сервер добавляется автоматически при создании модуля из шаблона Модуль с отладчиком для контроллера в месте работы Фон, программа Debug.

При настройке блока OpcUAServer удобно использовать некоторые свойства модуля. Для этого можно использовать технологию SQL-запросов. Такие запросы автоматически добавляются на входы ip и prt при создании модуля из шаблона Модуль с отладчиком для контроллера. Это позволяет изменять IP-адрес и порт в одном месте, и использовать эти значения в разных частях проекта.

Запрос IP-адреса (prop_ip):

"<sql>SELECT value FROM blocks_prop WHERE indx=:module AND type="prop_ip"</sql>"

Запрос номера порта (prop_debug_port):

<sql>SELECT value FROM blocks_prop WHERE indx=:module AND type="prop_debug_port"</sql>
Graphic
Преднастроенный OPC UA-сервер

Адресация данных

С точки зрения OPC UA-клиента исполняемая программа выглядит как дерево, в котором модуль представлен так же, как в представлении Дерево в среде разработки (за исключением страниц, они не отображаются как отдельные объекты).

Graphic
Дерево проекта
Graphic
Дерево проекта при чтении OPC UA-клиентом (UaExpert)

Узлы дерева представлены двумя типами:

  • для модуля, места работы, программы, раздела и функционального блока NodeClass = Object

    ;
  • для входов, выходов и их свойств NodeClass = Variable.

Отношение между основными узлами (Reference) имеет тип HasComponent. Отношение между входом/выходом и его свойством имеет тип HasProperty.

Тип адреса используется числовой (NodeId.IdentifierType = Numeric) и имеет два параметра:

  • ns (NamespaceIndex);

  • i (Identifier).

Для модуля, места работы, программы, раздела и функционального блока i равен индексу – свойство компонента Индекс.

Для модуля, места работы, программы, раздела и функционального блока ns равен 0x8000 (32768 в десятичной системе счисления).

Graphic
Индекс блока в программе
Graphic
NodeId блока при чтении OPC UA-клиентом (UaExpert)

Для входов: i равен свойству Индекс блока, ns равен свойству Порядок.

Graphic
Свойства входа в программе
Graphic
Свойства входа при чтении OPC UA-клиентом (UaExpert)

Для выходов: i равен свойству Индекс блока, ns равен свойству Порядок при побитовом сложении с 0x8000.

Graphic
Свойства выхода в программе
Graphic
Свойства выхода при чтении OPC UA-клиентом (UaExpert)

Сбор данных для подписок в Фоне и в Таймере

Сбор данных для подписок OPC UA-сервера производится в фоновом потоке. Для того, чтобы собирать данные подписок в таймерном прерывании, необходимо добавить добавить блок OpcUaServerTimer на любую страницу места работы Таймер.

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

В частности, это можно использовать для отладки программы в представлении График. График подключается к OPC UA-серверу контроллера в качестве клиента с добавленными в него данными. Помимо добавления блока OpcUAServerTimer для сбора данных графика в таймере перед его запуском в настройках следует установить флаг Делать отсчеты в таймере.

Graphic
Пример работы графика в фоне
Graphic
Пример работы графика в таймере

Надо учитывать, что при инициализации подписки OPC UA-клиентом с дискретизацией, кратной таймерному промежутку, в контроллере выделяется память для хранения очереди накапливаемых значений.

Примечание

Если сбор данных в таймере используется только для целей отладки, перед вводом ПЛК в работу блок OpcUAServerTimer рекомендуется отключать (вход enb = 0), чтобы не нагружать место работы Таймер.

Авторизация

В Полигон поддерживается два вида авторизации для доступа к OPC UA-серверу: анонимный доступ и доступ по логину и паролю.

Все блоки OpcUAServer, добавленные в модуль, обеспечивают по умолчанию доступ ко всем входам/выходам проекта в том случае, если клиент использует для авторизации имя пользователя admin (свойство модуля Пароль admin). Этот способ соединения также использует и отладчик среды разработки.

Graphic
Пароль admin

Чтобы ограничить видимость частей проекта для клиента, следует использовать другие учетные записи.

Анонимный доступ по умолчанию предоставляет доступ только к диагностической информации: дате трансляции, идентификатору модуля, ПК, с которого транслировалась программа, пользователь ПК, версия проекта.

Graphic
Чтение OPC UA-клиентом (UaExpert) с анонимным доступом

Помимо пользователя admin в среде есть возможность подключения еще 7 пользователями – user1, …, user7. Пароль для user1, …, user7 устанавливается свойствами модуля Пароль user1, …, Пароль user7. По умолчанию для пользователей user1, …,user7 также доступна только диагностическая информация.

Graphic
Пароль user1

Для того, чтобы разрешить анонимный доступ или доступ пользователями user1, …, user7 к частям проекта, следует добавить узлам проекта свойство Разрешить доступ.

Для разрешения анонимного доступа необходимо установить Разрешить доступ = user0 для пользователей user1, …,user7Разрешить доступ = user1, …,user7.

Свойство Разрешить доступ можно добавить для разделов и программ.

Внимание
Чтобы разрешить в программе доступ к входам/выходам блоков, все узлы дерева проекта, находящиеся выше данной программы, также должны иметь такое же свойство Разрешить доступ.
Graphic
Свойство Разрешить доступ = user1
Graphic
Чтение OPC UA-клиентом (UaExpert) с user1

Все указанные выше пароли вступают в силу только после трансляции модуля.

Ограничение подключений к серверу

По умолчанию к блоку OpcUAServer возможно подключение клиентами с любыми IP адресами при условии отсутствия ограничения межсетевым экраном.

В блоке OpcUAServer также есть возможность ограничить доступ – для этого необходимо создать у блока дополнительные группы входов m_allowed_clients, по одной на каждый разрешенный IP-адрес.

Входы cip позволяют ограничить подключения только определенными IP-адресами. Входы cpr задают разные приоритеты для адресов.

Graphic
OpcUAServer с разрешенным IP-адресом

При использовании cip и cpr OPC UA-сервер не будет принимать подключений ни с каких IP-адресов, кроме заданных.

Свойства входов/выходов данных, влияющих на обмен с клиентом

В среде Полигон для входов/выходов, участвующих в обмене по OPC UA, можно задать свойства, влияющие на обмен с клиентом.

Свойство Зона нечувствительности (prop_deadzone) позволяет задать абсолютную зону нечувствительности на стороне сервера. Если значение изменилось больше, чем величина зоны нечувствительности, то оно передается клиенту.

Если задать Зона нечувствительности = 0, значение будет передаваться при изменении.

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

При соединении с клиентом OpcUAClient свойство Зона нечувствительности следует задавать на стороне клиента. Заданная на стороне сервера зона нечувствительности игнорируется.

Свойство Интервал принудительной отправки (в мс) (prop_reftime) позволяет организовать принудительную отправку данного в подписке независимо от изменения значения и настроек зоны нечувствительности. Заданный интервал отсчитывается от момента последней отправки значения. При использовании в качестве клиента OpcUAClient данный параметр можно (и желательно) задавать на стороне клиента, при использовании других клиентов – только на стороне сервера.

Внимание
Для корректной работы данных свойств входов/выходов необходимо добавить их в любой раздел внутри модуля и установить свойство модуля Трансляция: включить свойства входов/выходов = Только из разделов.