Считайте и запишите текущие серверные данные UA OPC

Этот пример показывает вам, как читать и записать данные к серверу UA OPC. Чтобы запустить этот пример в вашем сеансе работы с MATLAB, необходимо будет установить и запустить Сервер Симуляции UA Prosys OPC. Считайте раздел Getting Started документации OPC Toolbox для получения дополнительной информации.

Создайте клиент и подключение к серверу

Вы создаете объекты клиента с помощью результатов запроса к Локальному Сервису Открытия с помощью opcuaserverinfo, или непосредственно с помощью имени хоста и номера порта сервера вы соединяетесь с. В этом случае используйте синтаксис номера порта и хост.

uaClient = opcua('localhost',53530);
connect(uaClient)

Найдите DoubleDataItem, FloatDataItem и узлы Int16DataItem в пространстве имен StaticData.

staticNode = findNodeByName(uaClient.Namespace,'StaticData','-once');
dataItemsNode = findNodeByName(staticNode,'DataItems','-once');
doubleNode = findNodeByName(dataItemsNode,'DoubleDataItem');
floatNode = findNodeByName(dataItemsNode,'FloatDataItem');
int16Node = findNodeByName(dataItemsNode,'Int16DataItem');
nodes = [doubleNode,floatNode,int16Node]
nodes = 

1x3 OPC UA Node array:
    index       Name       NsInd    Identifier    NodeType  Children
    -----  --------------  -----  --------------  --------  --------
      1    DoubleDataItem  3      DoubleDataItem  Variable  1
      2    FloatDataItem   3      FloatDataItem   Variable  1
      3    Int16DataItem   3      Int16DataItem   Variable  1

Считайте значения из узлов

Используйте readValue считать текущее значение узла. Можно запросить Значение, Метка времени, когда Значение было обновлено, и Качество, сопоставленное со значением, когда записано.

[v,t,q] = readValue(uaClient,nodes)
v =

  3×1 cell array

    {[0]}
    {[0]}
    {[0]}


t = 

  3×1 datetime array

   19-Mar-2019 02:52:35
   19-Mar-2019 02:52:35
   19-Mar-2019 02:52:35


q = 

OPC UA Quality ID:
	'Good'
	'Good'
	'Good'

Когда вы читаете из нескольких узлов, Значения возвращены как массив ячеек. Класс данных по серверу сохраняется как можно больше.

valClasses = cellfun(@class,v,'UniformOutput',false)
valClasses =

  3×1 cell array

    {'double'}
    {'single'}
    {'int16' }

Метка времени возвращена как переменная datetime MATLAB®. Это представляет время, когда источник ввел значение к серверу.

t
t = 

  3×1 datetime array

   19-Mar-2019 02:52:35
   19-Mar-2019 02:52:35
   19-Mar-2019 02:52:35

Качество возвращено как Качество UA OPC, которое отображается как текстовое описание.

q
q = 

OPC UA Quality ID:
	'Good'
	'Good'
	'Good'

Можно опросить Качество, чтобы определить характеристики возвращенного качества. В этом примере качество хорошо.

isGood(q)
ans =

  3×1 logical array

   1
   1
   1

Значение не интерполировано, но является необработанным значением (сохраненный сервером непосредственно от датчика).

interpolated = isInterpolated(q)

raw = isRaw(q)
interpolated =

  3×1 logical array

   0
   0
   0


raw =

  3×1 logical array

   1
   1
   1

Запись данных к узлам

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

newValues = {12,65,-4};
writeValue(uaClient,nodes,newValues);

Проверять, что значения были записаны правильно и получают значение снова.

serverValues = readValue(uaClient,nodes)
serverValues =

  3×1 cell array

    {[12]}
    {[65]}
    {[-4]}

Можно обновить значения непосредственно в массиве ячеек и записать их обратно к серверу.

serverValues{2} = serverValues{2} + 1;
writeValue(uaClient,nodes,serverValues);

Считайте и запишите значения с одним узлом

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

dblValue = readValue(uaClient, doubleNode)
writeValue(uaClient, doubleNode, dblValue+15.6)
newDbl = readValue(uaClient, doubleNode)
dblValue =

    12


newDbl =

   27.6000

Чтение и запись в узлы непосредственно

Можно записать и читать непосредственно из переменной узла, пока тот узел был создан от клиента (использующий свойство Namespace или browseNamespace), или вы передали клиент opcuanode функционируйте при создании переменной узла.

[vals,ts,qual] = readValue(nodes)
writeValue(nodes,v)
vals =

  3×1 cell array

    {[27.6000]}
    {[     66]}
    {[     -4]}


ts = 

  3×1 datetime array

   19-Mar-2019 02:52:36
   19-Mar-2019 02:52:36
   19-Mar-2019 02:52:36


qual = 

OPC UA Quality ID:
	'Good'
	'Good'
	'Good'

Отключитесь от сервера

Когда вы закончите связываться с сервером, отключите клиент от сервера. Это также автоматически выполняется, когда клиентская переменная выходит из осциллографа в MATLAB.

disconnect(uaClient);