Эта тема показывает основные шаги, чтобы создать приложение Унифицированной архитектуры (UA) OPC путем получения текущих и исторических данных от Быстрого запуска Основы OPC Исторический доступ к Серверу.
Чтобы запустить пример кода в следующих шагах, вам нужен Быстрый запуск Основы OPC Исторический доступ к Серверу, работающему на вашей локальной машине. Для получения дополнительной информации установки смотрите Установку Сервер Симуляции UA OPC для Примеров 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 прислушивается к связям.
После определения местоположения вашего сервера 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 средних значений сервер не накладывает прямое ограничение на ту возможность.
Серверы 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.
Серверы 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.
Исторические данные хранятся для выбранных узлов на сервере 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Можно отобразить данные на графике непосредственно из получившегося объекта opc.ua.Data.
plot(dataToday)
legend showМожно также преобразовать данные в собственные типы данных MATLAB® для последующей обработки. Для получения информации об обработке данных смотрите, Визуализируют и Предварительно обрабатывают Данные о UA OPC.
Когда вы закончили обмениваться данными с Сервером OPC, необходимо отключиться от сервера.
disconnect(uaClient)
Можно затем очистить переменные OPC UA из памяти MATLAB. Обратите внимание на то, что, если вы очищаете клиент UA OPC из памяти, связь с сервером автоматически закрывается.