主要内容

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

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

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

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

uaClient=opcua(“本地主机”,53530); 连接(uaClient)

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

staticNode=findNodeByName(uaClient.Namespace,“静态数据”,“-一次”);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日期时间数组2019年3月19日02:52:35 2019年3月19日02:52:35 2019年3月19日02:52:35

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

Q
q=OPC UA质量ID:“好”“好”“好”

您可以查询质量以确定返回质量的特征。在本例中,质量良好。

isGood(q)
ans=3×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(uaClient,doubleNode)writeValue(uaClient,doubleNode,dblValue+15.6)newDbl=readValue(uaClient,doubleNode)
dblValue=12新Dbl=27.6000

直接读写节点

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

[VAL,ts,qual]=读取值(节点)写入值(节点,v)
VAL=3×1单元格数组{[27.6000]}{[66]}{[-4]}ts=3×1日期时间数组2019年3月19日02:52:36 2019年3月19日02:52:36 2019年3月19日02:52:36 qual=OPC UA质量ID:“良好”“良好”“良好”

断开与服务器的连接

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

断开连接(uaClient);