Обозначение


Описание

Блок OpcUA сервер обеспечивает реализацию сервера по протоколу OpcUA.

Назначение входов и выходов

ВходыТипОписание
ipstrлокальный IP адрес
prti16локальный порт
sdrstrсетевой стек (только для QNX):"/", "/sock2" и т.д.
sti32статус сервера в соответствии со спецификацией OpcUA (Part5 12.6), особый случай -1 - выключает сервер полностью
slu8дополнительный статус сервера, ServiceLevel в соответсвии со спецификацией OpcUA (Part5 6.6.2.4.2)
mbu32максимальный размер буфера, минимальный размер 8192 (если задано меньше, то используется 8192)
maxu8максимально разрешенное количество соединений
cfgu32дополнительная конфигурация
ВыходыТипОписание
sti32текущий статус сервера (см. вход st)
cnu8количество активных соединений (сумма cnDbg, cnPA, cnOth)
cnDbgu8количество соединений с отладчиком среды разработки
cnPAu8количество соединений с клиентами OpcUAClient
cnOthu8количество соединений с другими клиентами

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

С точки зрения OPCUA клиента исполняемая программа выглядит как дерево, в котором модуль представлен также как в представлении Дерево в среде разработки (за исключением страниц, они не отображаются как отдельные объекты). Клиент может прочитать дерево модуля при помощи стандартных сервисов View Service Set. Узлы представлены двумя типами: Отношение между основными узлами имеет тип HasComponent. Отношение между входом/выходом и его свойством имеет тип HasProperty.
Тип адреса используется числовой (NodeId.IdentifierType = Numeric):
Для организации доступа к данным по строковым идентификаторам необходимо создать внутри блока OpcUAServer дерево разделов. Для этого:
  1. Откройте в Полигоне дополнительное представление Дерево и там выберите для отображения библиотеку paOpcUA
  2. Из раздела "Шаблоны.." скопируйте раздел дерева в блок OpcUAServer
  3. Этот раздел является корнем дерева для соответсвующего Namespace, значение ns можно поменять, имя раздела должно соответсвовать необходимому ns
  4. Внутри раздела создайте структуру подразделов, имена разделов составляют начало полного строкового идентификатора данного, к которому добавляется алиас самого входа/выхода
  5. В разделы добавьте ссылки на входы-выходы из программы (для этого нужно на Странице выделить вход/выход и с нажатым Ctrl перетащить его в раздел)
Пример:

В примере структура подразделов, у которых заданы имена, в раздел добавлен вход с алиасом XQ01. Соответсвующий адрес данного: NS2|String|03ABCCQ001XQ01
Допускается добавлять в разделы как ссылки целые блоки, тогда имя или алиас блока будет служить аналогом имени подраздела.

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

Зона нечувствительности (prop_deadzone) - позволяет задать абсолютную зону нечувствительности на стороне сервера. Если значение изменилось больше, чем величина prop_deadzone, то оно передается клиенту. Согласно спецификации OPCUA данный параметр должен устанавливаться на стороне клиента, поэтому возможность установить его на стороне сервера является дополнительной, предусмотрена для особых случаев когда клиент не поддерживает этот параметр. При соединении с клиентом OpcUAClient, prop_deadzone надо задавать на стороне клиента, заданная на стороне сервера всегда игнорируется.
Интервал принудительной отправки (мс) (prop_reftime) - позволяет организовать принудительную отправку данного в подписке независимо от изменения значения и настроек зоны нечувствительности. Заданный интервал отсчитывается от момента последней отправки значения. При использовании в качестве клиента блока OpcUAClient данный параметр можно (и желательно) задавать на стороне клиента, при использовании других клиентов - только на стороне сервера.
ВАЖНО: для того чтобы свойства входов/выходов работали как описано выше, необходимо добавить их в любой раздел внутри модуля и установить свойство модуля "Трансляция: включить свойства входов/выходов" = "только из разделов".

Дополнительная концигурация обмена

Дополнительные настройки конфигурируются битами входного регистра cfg:
бит 8 - включить поддержку безопасности (см. примечание 1 под таблицей): бит 16 - включить отображение узла Server при браузинге (например, cfg=0x10000)

Авторизация

Все блоки OpcUAServer, добавленные в модуль, обеспечивают по-умолчанию доступ ко всем входам-выходам проекта в том случае если клиент использует для авторизации имя пользователя admin. Этот способ соединения в том числе использует и отладчик среды разработки. Чтобы ограничить видимость частей проекта для клиента необходимо использовать другие учетные записи. При подключении к проекту клиентом OPCUA можно использовать 9 вариантов пользователь-пароль: Все указанные выше пароли можно изменить только перетранслировав модуль.

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

По-умолчанию блок OpcUAServer принимает покдлючения клиентов с любых ip адресов. Ограничить подключения можно стандартными системными настройками firewall. Однако в самом блоке тоже есть такая возможность - для этого необходимо добавить в блок дополнительные группы входов, по одной на каждый ip адрес. Кроме ограничения подключений только с определенных ip она позволяет также задать разные приоритеты для них.

В таком случае сервер не будет принимать подключений ни с каких ip адресов, кроме заданных. Выход csti показывает количество соединений с соответсвующего ip.

Использование свойств модуля для установки констант на входах блока

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

Поддержка сервисов по спецификации OPCUA

Service Set есть Комментарии
    Service
SecureChannel Service Set
OpenSecureChannel да Поддерживаются:
  • securityMode=NONE и securityPolicyUri="http://opcfoundation.org/UA/SecurityPolicy#None"
  • securityMode=SIGN или SIGNANDENCRYPT и securityPolicyUri="http://opcfoundation.org/UA/SecurityPolicy#Basic256Sha256" (см. примечание 1 под таблицей)
CloseSecureChannel да
Discovery Service Set
FindServers да
GetEndpoints да
Session Service Set
CreateSession да
ActivateSession да В качестве UserIdentityToken поддерживаются:
  • AnonymousIdentityToken (анонимный доступ)
  • UserNameIdentityToken (доступ с логином и паролем)
  • X509IdentityToken (см. примечание 1 под таблицей)
CloseSession да
Cancel нет
NodeManagement Service Set нет
View Service Set
Browse да В качестве displayName используется свойство:
  • Полный алиас
  • или Комментарии, если Полный алиас пустой
  • или Имя, если Комментарии и Полный алиас пустые
В качестве BrowseName используется индекс узла с шестнадцатеричном формате.
BrowseNext да
TranslateBrowsePathsToNodeIds да Внутри RelativePath игнорируются поля referenceTypeId, isInverse и includeSubtypes. В качестве targetName используется свойство:
  • Полный алиас
  • или Комментарии, если Полный алиас пустой
  • или Имя, если Комментарии и Полный алиас пустые
RegisterNodes да ничего не делает
UnregisterNodes да ничего не делает
Query Service Set нет
Attribute Service Set
Read да Параметр maxAge игнорируется, сервер всегда возвращает текущее значение.
HistoryRead нет
Write да Поддерживается запись только значений (атрибут Value). Запись отдельных элементов массива не поддерживается.
HistoryUpdate нет
Method Service Set
Call да
MonitoredItem Service Set
CreateMonitoredItems да Из фильтров поддерживается только DataChangeFilter, и только с абсолютной зоной нечувствительности.
ModifyMonitoredItems да
SetMonitoringMode да
SetTriggering нет
DeleteMonitoredItems да
Subscription Service Set
CreateSubscription да
ModifySubscription да
SetPublishingMode да
Publish да
Republish да Размер очереди равен 10.
TransferSubscriptions да
DeleteSubscriptions да

Примечание 1: настройка безопасности

Поддержка SIGN и SIGNANDENCRYPT для схемы Basic256Sha256 и авторизации при помощи X509IdentityToken включается, если установлен бит 8 на входе cfg (например, cfg = 0x0100).
Для работы Basic256Sha256 необходимы файлы сертификата и закрытого ключа, они должны находится на диске контроллера в той же папке что и исполняемый модуль, и называться: Для авторизации при помощи X509IdentityToken необходимо: