主要内容

读写当前OPC UA服务器数据

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

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

使用对本地发现服务的查询结果创建客户端对象opcuaserverinfo,或者直接使用正在连接的服务器的主机名和端口号。在本例中,使用主机和端口号语法。

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

在staticdata命名空间中查找doubledataitem,floatdataitem和int16dataitem节点。

staticNode = findNodeByName (uaClient。名称空间,'staticdata'“好玩”);dataitemsnode = findnodebodename(staticnode,“DataItems”“好玩”);doubleNode = findNodeByName (dataItemsNode,'doubledataitem');floatNode = findNodeByName (dataItemsNode,“FloatDataItem”);int16Node = findNodeByName (dataItemsNode,“Int16DataItem”);节点= [doubleNode、floatNode int16Node]
NodeType Children ----- -------------- ----- -------------- -------- -------- 1 DoubleDataItem 3 DoubleDataItem Variable 1 2 FloatDataItem 3 FloatDataItem Variable 1 3 Int16DataItem 3 Int16DataItem Variable 1

从节点读取值

readValue读取节点的当前值。您可以查询Value、更新Value时的Timestamp,以及写入值时与该值关联的Quality。

[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 19-Mar-2019 02:52:35 q = OPC UA质量ID: '好' '好' '好'

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

valClasses = cellfun (@class v,“UniformOutput”,错误的)
valClasses = 3×1 cell array {'double'} {'single'} {'int16'}

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

t
t = 3×1 datetime阵列19-mar-2019 02:52:35 19-mar-2019 02:52:35 19-mar-2019 02:52:35

质量返回为OPC UA质量,它显示为文本描述。

q = OPC UA质量ID:‘好’‘好’‘好’

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

短距离(q)
ans = 3×1逻辑阵列1 1 1

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

interpolated = isInterpolated(q) raw = israel (q)
Interpolated = 3×1 logical array 0 0 0 raw = 3×1 logical array 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(Uaclient,DoubleNode)WriteValue(Uaclient,DoubleNode,Dblvalue + 15.6)NewdBl = ReadValue(Uaclient,DoubleNode)
dblvalue = 12 newdbl = 27.6000

直接读写节点

您可以直接从节点变量写入和读取,只要该节点是从客户机创建的(使用Namespace属性或browseNamespace),或者将客户机传递给opcuanode.在创建节点变量时调用。

[val,ts,qual] = readValue(nodes) writeValue(nodes,v)
vals = 3×1个单元阵列{[27.6000]} {[66]} {[--4]} {[-4]} ts = 3×1 datetime阵列19-mar-2019 02:52:36 19-mar-2019 02:52:362019年3月19日02:52:36 Qual = OPC UA质量ID:'好'“好”'好'

断开与服务器

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

断开(uaClient);