主要内容

读取和写入当前OPC UA服务器数据

此示例向您展示了如何向OPC UA服务器读取和写入数据。要在MATLAB会话中运行此示例,您需要安装并启动Prosys OPC UA Simulation server。有关详细信息,请阅读OPC工具箱文档的入门部分。

创建客户端并连接到服务器

使用对本地发现服务的查询结果创建客户端对象opcuaserverinfo,或直接使用要连接的服务器的主机名和端口号。在这种情况下,请使用主机和端口号语法。

uaClient=opcua(“localhost”,53530); 连接(uaClient)

在StaticData命名空间中找到DoubleDataItem、FloatDataItem和Int16DataItem节点。

staticNode=findNodeByName(uaClient.Namespace,“StaticData”,“-一次”);dataItemsNode = findNodeByName (staticNode,“数据项”,“-一次”); doubleNode=findNodeByName(dataItemsNode,“DoubleDataItem”); floatNode=findNodeByName(dataItemsNode,“浮动数据项”);int16Node = findNodeByName (dataItemsNode,“Int16DataItem”); 节点=[doubleNode、floatNode、int16Node]
nodes=1x3 OPC UA节点数组:索引名NsInd Identifier节点类型子节点--------------------------------------------------1 DoubleDataItem 3 DoubleDataItem变量1 2 FloatDataItem 3 FloatDataItem变量1 3 Int16DataItem 3 Int16DataItem变量1

从节点读取值

使用读值读取节点的当前值。您可以查询值、值更新时的时间戳以及写入时与值关联的质量。

[v,t,q]=readValue(uaClient,节点)
v=3×1单元数组{[0]}{[0]}{[0]}t=3×1日期时间数组2019年3月19日02:52:35 2019年3月19日02:52:35 2019年3月19日02:52:35 q=OPC UA质量ID:“好”“好”“好”

当您从多个节点读取数据时,这些值将作为单元格数组返回。服务器上的数据类将尽可能保留。

valClasses=cellfun(@class,v,“UniformOutput”假)
valClasses=3×1单元数组{'double'}{'single'}{'int16'}

时间戳作为MATLAB®datetime变量返回。它表示源向服务器提供值的时间。

t
t = 3×1 datetime array 19-Mar-2019 02:52:35 19-Mar-2019 02:52:35 19-Mar-2019 02:52:35

该质量作为OPC UA质量返回,并显示为文本描述。

q
q = OPC UA质量ID: 'Good' 'Good' 'Good'

您可以询问质量以确定返回的质量的特征。在这个例子中,质量是好的。

isGood(q)
Ans = 3×1 logical array 1 1 1

该值不是插值的,而是原始值(由服务器直接从传感器存储)。

插值=isInterpolated(q)原始=isRaw(q)
插值=3×1逻辑阵列0 0原始=3×1逻辑阵列1 1

将数据写入节点

可以将数据写入任何标量节点。当写入多个节点时,必须传递值的单元格数组,每个要写入的节点对应一个值。

newValues={12,65,-4};writeValue(uaClient、节点、新值);

验证值是否正确写入,然后再次检索该值。

serverValues=readValue(uaClient,节点)
serverValues = 3×1单元阵列{[12]}{[65]}{[4]}

您可以直接在单元数组中更新值,并将它们写回服务器。

serverValues{2}=serverValues{2}+1;writeValue(uaClient、节点、serverValues);

使用单个节点读取和写入值

在处理单个节点时,可以直接接收和传递该值,而不需要使用单元格数组。

dblValue = readValue(uclient, doubleNode) writeValue(uclient, doubleNode, dblValue+15.6) newDbl = readValue(uclient, doubleNode)
dblValue = 12 newDbl = 27.6000

直接读写节点

只要该节点是从客户端创建的(使用Namespace属性或browseNamespace),或者您将客户端传递给opcuanode函数在创建节点变量时使用。

[val,ts,qual] = readValue(nodes) writeValue(nodes,v)
val = 3×1 cell array {[27.6000]} {[66]} {[-4]} ts = 3×1 datetime array 19- 3 -2019 02:52:36 19- 3 -2019 02:52:36 qu= OPC UA Quality ID: 'Good' 'Good' 'Good'

断开与服务器的连接

完成与服务器的通信后,断开客户端与服务器的连接。当客户端变量超出MATLAB的范围时,也会自动执行此操作。

断开连接(uaClient);