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

你如何读取和写入数据到OPC UA服务器这个例子显示。要在您的MATLAB会话中运行这个例子,你需要安装并启动PROSYS OPC UA模拟服务器。阅读OPC工具箱文档以获取更多信息的入门部分。

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

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

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

在StaticData名称空间中查找双重dataitem、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儿童----- -------------- ----- -------------  -------- 1 DoubleDataItem 3 DoubleDataItem变量1 2 3 FloatDataItem可变FloatDataItem 1 3 3 Int16DataItem Int16DataItem变量1

从节点读取值

使用readValue读取节点的当前值。写的时候可以查询值,当数值是更新的时间戳和质量与价值相关联。

[V,T,Q] = readValue(uaClient,节点)
V = 3×1点单元阵列{[0]} {[0]} {[0]} T = 3×1阵列的日期时间19-MAR-2019 2点52分35秒19-MAR-2019 2点52分35秒19-mar-2019 2点52分35秒q = OPC UA质量ID: '良好' '良好' '良好'

当您从多个节点读取时,值返回为单元阵列。该类服务器上的数据被保存尽可能多地。

valClasses = cellfun(@类,V,'UniformOutput'假)
valClasses = 3×1单元阵列{ '双'} { '单'} { 'INT16'}

时间戳返回为一个MATLAB®日期时间变量。它代表当源提供的值到服务器的时间。

Ť
19- 2019 02:52:35 19- 2019 02:52:35 19- 2019 02:52:35 19- 2019 02:52:35 19- 2019 02:52:35

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

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

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

isGood(q)中
ans = 3×1逻辑数组1 1 1

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

插值= isInterpolated(q)的原料= isRaw(q)的
插值= 3×1阵列逻辑0 0 0原= 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(uaClient, doubleNode); writeValue(uaClient, doubleNode, dblValue+15.6); newDbl = readValue(uaClient, doubleNode)
dblValue = 12 newDbl = 27.6000

直接读写节点

你可以写,直接从节点可变的读取,只要该节点是从客户端创建(使用Namespace属性或browseNamespace),或者你通过客户端的opcuanode创建节点变量时发挥作用。

[vals,ts,qual] = readValue(节点)和writeValue(节点,v)
vals = 3×1 cell array {[27.6000]} {[66]} {[-4]} ts = 3×1 datetime array 19-Mar-2019 02:52:36 19-Mar-2019 02:52:36 19-Mar-2019 02:52:36 qual = OPC UA质量标识:‘好’‘好’‘好’

从服务器断开连接

当您完成与服务器通信,从服务器断开连接客户端。这当客户端变量在MATLAB去的范围之也会自动执行。

断开(uaClient);