Этот пример показывает вам, как читать и записать данные к серверу 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);