读和写当前的OPC UA服务器数据
这个例子向您展示了如何读和写数据到一个OPC UA服务器。
在MATLAB®会话中运行这个例子,您必须安装并启动Prosys OPC UA模拟服务器。为进一步的信息,请参见的开始部分工业通信工具箱™文档。
创建一个客户端连接到服务器
您创建客户端对象使用一个查询的结果发现当地服务使用opcuaserverinfo
,或直接使用服务器的主机名和端口号连接。在这种情况下,语法使用主机和端口号。
uaClient = opcua (“localhost”,53530);连接(uaClient)
找到DoubleDataItem、FloatDataItem StaticData 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 x3 OPC UA节点数组名称NsInd标识符NodeType孩子- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 DoubleDataItem 3 DoubleDataItem变量1 2 FloatDataItem 3 FloatDataItem变量1 1 3 Int16DataItem 3 Int16DataItem变量
阅读来自节点的值
使用readValue
读一个节点的当前值。你可以查询值,更新时间戳值时,质量与价值相联系的。
[v, t, q] = readValue (uaClient,节点)
v = 3×1单元阵列{[0]}{[0]}{[0]}t = 3×1 datetime数组19 - 3月- 2019 02:52:35 19 - 3月- 2019 02:52:35 19 - 3月- 2019 02:52:35 q = OPC UA质量ID:“好”“好”“好”
当你阅读从多个节点,返回的值是作为一个单元阵列。的类数据在服务器上保存尽可能多的。
valClasses = cellfun (@class v,“UniformOutput”假)
valClasses = 3×1单元阵列{“双重”}{'单'}{' int16 '}
时间戳作为一个MATLAB®datetime变量返回。它代表了时间源服务器提供了价值。
t
t = 3×1 datetime数组19 - 3月- 2019 02:52:35 19 - 3月- 2019 02:52:35 19 - 3月- 2019 02:52:35
返回的质量作为OPC UA质量,它显示的文本描述。
问
q = OPC UA质量ID:“好”“好”“好”
你可以询问质量来确定返回的质量特征。在这个例子中,质量好就行。
短距离(q)
ans = 3×1逻辑数组1 1 1
价值不是插值,但是是一个原始值(存储服务器直接从传感器)。
内插= isInterpolated (q)生= isRaw (q)
内插= 3×1逻辑数组0 0 0生= 3×1逻辑数组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 (uaClient doubleNode) writeValue (uaClient、doubleNode dblValue + 15.6) newDbl = readValue (uaClient doubleNode)
dblValue = 12 newDbl = 27.6000
阅读和写作直接节点
可以读写直接从节点变量,只要从客户机节点创建(使用名称空间属性或browseNamespace)或者你通过客户端opcuanode
在创建节点变量的函数。
[vals, ts,战]= readValue(节点)writeValue(节点,v)
vals = 3×1单元阵列{[27.6000]}{[66]}{[4]}t = 3×1 datetime数组19 - 3月- 2019 02:52:36 19 - 3月- 2019 02:52:36 19 - 3月- 2019 02:52:36质量= OPC UA质量ID:“好”“好”“好”
断开与服务器
当你已经完成了与服务器通信,客户端从服务器断开。这也是客户端时自动执行变量在MATLAB超出范围。
断开(uaClient);