exponenta event banner

Доступ к данным с серверов UA OPC

Обзор программирования UA OPC

Эта тема показывает основные шаги, чтобы создать приложение Унифицированной архитектуры (UA) OPC путем получения текущих и исторических данных от Быстрого запуска Основы OPC Исторический доступ к Серверу.

Примечание

Чтобы запустить пример кода в следующих шагах, вам нужен Быстрый запуск Основы OPC Исторический доступ к Серверу, работающему на вашей локальной машине. Для получения дополнительной информации установки смотрите Установку Сервер Симуляции UA OPC для Примеров UA OPC. Код требует только, чтобы незначительные изменения работали с другими серверами.

Шаг 1: найдите свой сервер UA OPC

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

Первые данные являются именем хоста сервера. Имя хоста (описательное имя как "HistorianServer" или IP-адрес такой как 192.168.16.32) квалифицирует тот компьютер в сети и используется протоколами OPC, чтобы определить доступные Серверы OPC на том компьютере. В любом приложении OPC Toolbox™ необходимо знать имя хоста Сервера OPC, так, чтобы связь с тем хостом могла быть установлена. Ваш администратор сети может предоставить список имен хоста, которые обеспечивают Серверы OPC в вашей сети. В этом примере вы будете использовать 'localhost' в качестве имени хоста, потому что вы соединитесь с Сервером OPC на той же машине как клиент.

Серверы UA OPC однозначно определяются Универсальными Местоположениями Ресурса. Подобно веб-адресам URL для сервера UA OPC запускается с opc.tcp://, и затем обеспечивает адрес сервера как имя узла, порт и адрес в стандартном тексте ASCII. Например, URL для Быстрого запуска Основы OPC Исторический доступ к Серверу является opc.tcp://localhost:62550/Quickstarts/HistoricalAccessServer.

URL Сервера UA OPC рекламируются через Сервис Открытия UA OPC, доступный на каждой хост-машине сервера UA OPC. Ваш системный администратор может предоставить список URL сервера для конкретного хоста, или можно запросить хост ко всем доступным серверам UA OPC.

Используйте функцию opcuaserverinfo, чтобы запросить хосты из командной строки.

serverList = opcuaserverinfo('localhost')
serverList = 
1x2 OPC UA ServerInfo array:
    index              Description              Hostname  Port 
    -----  -----------------------------------  --------  -----
      1    Quickstart Historical Access Server  ons-dean  62550
      2    UA Sample Server                     ons-dean  51210

Найдите сервер интереса при помощи функции findDescription, чтобы искать определенный вектор символов. В этом примере вы соединяетесь с Историческим доступом к Серверу.

hsInfo = findDescription(serverList,'Historical')
hsInfo = 
OPC UA ServerInfo 'Quickstart Historical Access Server':

   Connection Information
    Hostname: 'ons-dean'
        Port: 62550

От этого процесса открытия можно идентифицировать порт (62550), на котором сервер UA OPC прислушивается к связям.

Шаг 2: создайте клиент UA OPC и подключение к серверу

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

uaClient = opcua(hsInfo)
uaClient = 
OPC UA Client Quickstart Historical Access Server:
                     Hostname: ons-dean
                         Port: 62550
                      Timeout: 10
                       Status: Disconnected

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

connect(uaClient)
uaClient
uaClient = 
OPC UA Client Quickstart Historical Access Server:
                     Hostname: ons-dean
                         Port: 62550
                      Timeout: 10
                       Status: Connected
                  ServerState: Running
                MinSampleRate: 0 secs
          MaxHistoryReadNodes: 0
      MaxHistoryValuesPerNode: 0
                 MaxReadNodes: 0
                MaxWriteNodes: 0

Дополнительные свойства описывают возможности сервера, особенно пределы для различных операций чтения и операций записи. Предельное значение 0 средних значений сервер не накладывает прямое ограничение на ту возможность.

Шаг 3: просмотрите пространство имен сервера UA OPC

Серверы UA OPC предоставляют единое пространство имен вам, чтобы считать и записать и текущие данные и исторические данные. Пространство имен организовано как иерархия узлов. Каждый узел имеет атрибуты, которые описывают тот узел. Узел однозначно определяется двумя элементами: индекс пространства имен (числовое целое число) и идентификатор узла (числовое целое число, вектор символов, или Глобально уникальный идентификатор или ГУИД). Чтобы исключительно описать узел, необходимо обеспечить и namespaceindex и идентификатор; вы не можете обеспечить только идентификатор, потому что та сила быть повторенной для различного пространства имен индексирует.

OPC Toolbox представляет иерархию узлов через свойство пространства имен клиента UA OPC. Каждый элемент свойства пространства имен является узлом на самом верхнем уровне сервера. Каждый узел в пространстве имен имеет свойство Children, которое представляет подузлы, содержавшиеся в том узле. Можно просмотреть пространство имен графически с помощью функции browsenamespace. Получившееся диалоговое окно позволяет вам выбирать узлы из иерархии и возвращать их в выводе от функции.

serverNodes = browseNamespace(uaClient)

Когда вы нажимаете ОК, выбранные пункты возвращены в выводе.

serverNodes = 
1x2 OPC UA Node array:
    index           Name           NsInd  Identifier  NodeType  Children
    -----  ----------------------  -----  ----------  --------  --------
      1    MinSupportedSampleRate  0      2272        Variable  0
      2    MaxArrayLength          0      11702       Variable  0

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

Шаг 4: считайте текущие значения из сервера UA OPC

Серверы UA OPC обеспечивают доступ и к текущим значениям и к историческим ценностям их узлов Variable. С OPC Toolbox вы используете массивы Узлов, чтобы считать текущие значения из сервера. Текущие данные включают значение, метка времени, что сервер получил значение данных от датчика и качество, описывающее точность и источник значения данных.

[val, ts, qual] = readValue(uaClient,serverNodes)
val = 
    [0 secs]
    [     0]
ts = 
   30-Jun-2015 05:05:13
   30-Jun-2015 05:05:13
qual = 
OPC UA Quality ID:
	'Good'
	'Good'

Для получения дополнительной информации о чтении и записи текущих значений, см. "Чтение и Запись Текущие Серверные данные UA OPC.

Шаг 5: считайте исторические данные из сервера UA OPC

Исторические данные хранятся для выбранных узлов на сервере UA OPC. Узлы сервера, полученные на предыдущем шаге, не будут заархивированы сервером, потому что значения обычно не изменяются. Можно запросить свойство Historizing Узла определить, архивирует ли сервер в настоящее время данные для того узла.

Поскольку список serverNode является массивом, необходимо собрать выходные параметры с помощью конкатенации.

[serverNodes.Historizing]
ans =
     0     0

Ни один из узлов сервера в настоящее время не historized. Кроме того, сервер не предоставляет исторический доступ к этим узлам, как свидетельствуется свойством AccessLevelHistory узлов.

{serverNodes.AccessLevelHistory}
ans = 
    'none'    'none'

Чтобы определить местоположение узлов с историей, запросите сервер для Двойных и узлов Int32 в родительском узле Sample.

sampleNode = findNodeByName(uaClient.Namespace,'Sample')
sampleNode = 
OPC UA Node object:
                      Name: Sample
               Description: 
            NamespaceIndex: 2
                Identifier: Sample
                  NodeType: Object
                    Parent: Archive
                  Children: 14 nodes.

Узел Sample является узлом Object, таким образом, он не имеет никакого Значения. Однако это имеет 14 Дочерних элементов. Найдите Двойные и дочерние узлы Int32.

doubleNode = findNodeByName(sampleNode,'Double');
int32Node = findNodeByName(sampleNode,'Int32')
int32Node = 
OPC UA Node object:
                      Name: Int32
               Description: 
            NamespaceIndex: 2
                Identifier: 1:Quickstarts.HistoricalAccessServer.Data.Sample.Int32.txt
                  NodeType: Variable
                    Parent: Sample
                  Children: 2 nodes.
            ServerDataType: Int32
        AccessLevelCurrent: read
        AccessLevelHistory: read/write
               Historizing: 0

Несмотря на то, что Int32 и Двойные узлы в настоящее время не архивируются (Historizing является ложным), можно считать данные об истории из узлов (история регистрировалась при запуске, и затем выключалась). Чтобы Считывать все данные сохраненные на сервере в области значений требуемого времени, используйте функцию readHistory, передавание узлов, чтобы читать и время передвигается, по которому можно считать данные.

dataToday = readHistory(uaClient,[doubleNode,int32Node],datetime('today'),datetime('now'))
dataToday = 
1-by-2 OPC UA Data object:
     Name        Value           Start Timestamp           End Timestamp            Quality      
    ------  ---------------  -----------------------  -----------------------  ------------------
    Double  9 double values  2015-06-30 04:00:10.000  2015-06-30 04:01:30.000  3 unique qualities
    Int32   12 int32 values  2015-06-30 04:00:02.000  2015-06-30 04:01:30.000  3 unique qualities

Шаг 6: отобразите данные на графике

Можно отобразить данные на графике непосредственно из получившегося объекта opc.ua.Data.

plot(dataToday)
legend show

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

Шаг 7: Очистка

Когда вы закончили обмениваться данными с Сервером OPC, необходимо отключиться от сервера.

disconnect(uaClient)

Можно затем очистить переменные OPC UA из памяти MATLAB. Обратите внимание на то, что, если вы очищаете клиент UA OPC из памяти, связь с сервером автоматически закрывается.