exponenta event banner

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

Этот пример показывает вам, как читать и записать данные к серверу UA OPC.

ПРЕДПОСЫЛКИ:

Установите сервер симуляции UA OPC для примеров UA OPC

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

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

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

Найдите Двойное, Плавание и узлы Int16 в Помехах. Скалярное пространство имен.

staticNode = findNodeByName(uaClient.Namespace,'Static','-once');
scalarNode = findNodeByName(staticNode,'Scalar','-once');
doubleNode = findNodeByName(scalarNode,'DoubleValue');
floatNode = findNodeByName(scalarNode,'FloatValue');
int16Node = findNodeByName(scalarNode,'Int16Value');
nodes = [doubleNode,floatNode,int16Node];
disp(nodes)
1x3 OPC UA Node array:
    index     Name      NsInd  Identifier  NodeType  Children
    -----  -----------  -----  ----------  --------  --------
      1    DoubleValue  2      10226       Variable  0
      2    FloatValue   2      10225       Variable  0
      3    Int16Value   2      10219       Variable  0

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

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

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

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

disp(v)
disp(cellfun(@class,v,'UniformOutput',false))
    [ 2.2933e-35]
    [-9.0353e-26]
    [     -29737]

    'double'
    'single'
    'int16'

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

disp(t)
   12-Apr-2016 16:48:11
   12-Apr-2016 16:48:11
   12-Apr-2016 16:48:11

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

disp(q)
OPC UA Quality ID:
	'Good'
	'Good'
	'Good'

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

disp(isGood(q))
   1
   1
   1

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

interpolated = isInterpolated(q)
raw = isRaw(q)
interpolated =

   0
   0
   0


raw =

   1
   1
   1

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

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

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

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

serverValues = readValue(uaClient,nodes)
serverValues = 

    [12]
    [65]
    [-4]

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

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

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

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

dblValue = readValue(uaClient, doubleNode)
writeValue(uaClient, doubleNode, 12)
newDbl = readValue(uaClient, doubleNode)
dblValue =

    12


newDbl =

    12

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

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

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

    [12]
    [66]
    [-4]


ts = 

   12-Apr-2016 16:48:11
   12-Apr-2016 16:48:11
   12-Apr-2016 16:48:11


qual = 

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

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

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

disconnect(uaClient);