主要内容

读写当前OPC UA服务器数据

此示例向您展示了如何将数据读取和写入OPC UA Server。要在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,'dataitems''-一次');doubleNode = findnodebyname(dataItemsnode,“DoubleDataItem”);floatnode = findnodebyname(dataItemsnode,'floatdataitem');int16Node = findNodeByName (dataItemsNode,'int16dataitem');节点= [DoubleNode,Floatnode,Int16node]
节点= 1×3 OPC UA节点数组:索引名称NsInd标识符的NodeType儿童----- -------------- ----- ---------------------------------------10blesataitem 3 Doubledataitem变量1 2 floatdataitem 3 floatdataitem变量1 3 int16dataitem 3 int16dataitem变量1

从节点读取值

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

[v,t,q] = ReadValue(Uaclient,节点)
v = 3×1个单元阵列{[0]} {[0]} {[0]} {[0]} t = 3×1 datetime阵列19-mar-2019 02:52:35 19-mar-2019 02:52:35 19-Mar-2019 02:52:35 Q = OPC UA质量ID:'好''好''好'

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

valclasses = cellfun(@ class,v,'统一输出'假)
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 = OPC UA质量ID: 'Good' 'Good' 'Good'

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

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

该值未插入,但是是原始值(由服务器直接从传感器存储)。

插值= IsInterpolated(Q)RAW = ISRAW(Q)
插值= 3×1逻辑阵列0 0 0 RAW = 3×1逻辑阵列1 1 1

将数据写入节点

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

newValues = {12,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属性或BowerNenamespace)或将客户端传递给客户端,您就可以直接从节点变量编写和读取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);