我希望使用
从 OPC_UA 服务器读取大量节点[val] = readValue(uaClient,read_nodes_test)
为了整洁起见,我将节点存储在一个名为 OPC_UA_nodes 的结构中。问题是我找不到一种方法将此节点结构转换为 readvalue 命令所需的节点数组。
所有文档都鼓励我使用 struct2cell,然后使用 cell2mat,但是 cell2mat 不支持包含元胞数组或对象的元胞数组。
创建节点数组的最佳方法是什么?除此之外
nodes = [node1, node2, node3,..., node75]
您可以使用
structfun
迭代 OPC_UA
中的所有字段,如果您提供的函数只是 @(x)x
,则将返回该结构体字段中的节点。由于它们都是可以连接成数组的标量对象,因此它们将会如此。
设置示例:
OPC_UA = struct();
OPC_UA.node1 = opcuanode(1, 'node1');
OPC_UA.node2 = opcuanode(2, 'node2');
OPC_UA.node3 = opcuanode(3, 'node3');
使用
structfun
将所有节点放入数组中:
nodes = structfun( @(x)x, OPC_UA );
一种更详细的方法可以让您选择使用
OPC_UA
的哪些字段,就像这样,使用动态 struct.(fieldname)
语法循环遍历字段名称:
fn = fieldnames( OPC_UA );
nodes = opc.ua.Node.empty(0,1);
for i = 1:numel(fn)
nodes(i,1) = OPC_UA.(fn{i});
end