主要内容

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

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

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

使用对Local Discovery Service的查询结果创建客户端对象opcuaserverinfo,或直接使用所连接服务器的主机名和端口号。在这种情况下,使用主机和端口号语法。

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

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

staticNode = findNodeByName (uaClient。名称空间,“StaticData”“好玩”);dataItemsNode = findNodeByName (staticNode,“DataItems”“好玩”);doubleNode = findNodeByName (dataItemsNode,“DoubleDataItem”);floatNode = findNodeByName (dataItemsNode,“FloatDataItem”);int16Node = findNodeByName (dataItemsNode,“Int16DataItem”);节点= [doubleNode、floatNode int16Node]
Node = 1x3 OPC UA Node array: index Name nind 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,节点)
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'

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

valClasses = cellfun (@class v,“UniformOutput”假)
valClasses = 3×1 cell array {'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 = OPC UA质量ID: 'Good' 'Good' 'Good'

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

短距离(q)
Ans = 3×1 logical array 1 1 1

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

isInterpolated = isInterpolated(q) raw = isw (q)
Interpolated = 3×1 logical array 0 0 0 raw = 3×1 logical array 1 1 1

向节点写入数据

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

newValues = {65 4};writeValue (uaClient、节点newValues);

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

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);