Matlab 将节点结构转换为节点数组

问题描述 投票:0回答:1

我希望使用

从 OPC_UA 服务器读取大量节点
[val] = readValue(uaClient,read_nodes_test)

为了整洁起见,我将节点存储在一个名为 OPC_UA_nodes 的结构中。问题是我找不到一种方法将此节点结构转换为 readvalue 命令所需的节点数组。

所有文档都鼓励我使用 struct2cell,然后使用 cell2mat,但是 cell2mat 不支持包含元胞数组或对象的元胞数组。

创建节点数组的最佳方法是什么?除此之外

nodes = [node1, node2, node3,..., node75]
matlab struct opc-ua
1个回答
0
投票

您可以使用

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
© www.soinside.com 2019 - 2024. All rights reserved.