Open62541笔记(一)判断节点身份标识

本文详细介绍了OPCUA服务器中节点标识的结构和类型,包括Numeric和String,通过示例展示了如何设置和查看节点标识。同时,解释了DisplayName的作用,将其比喻为节点的别名或小名,而节点标识则类似于节点的唯一身份证。文章还提到了Description作为节点的描述信息,并展示了如何设置BrowseName。
摘要由CSDN通过智能技术生成

首先我们来看一下源码中的这两个数据结构,下面的论述均是基于此。

* An identifier for a node in the address space of an OPC UA Server. */
enum UA_NodeIdType {
    UA_NODEIDTYPE_NUMERIC    = 0, /* In the binary encoding, this can also
                                   * become 1 or 2 (two-byte and four-byte
                                   * encoding of small numeric nodeids) */
    UA_NODEIDTYPE_STRING     = 3,
    UA_NODEIDTYPE_GUID       = 4,
    UA_NODEIDTYPE_BYTESTRING = 5
};

typedef struct {
    UA_UInt16 namespaceIndex;
    enum UA_NodeIdType identifierType;
    union {
        UA_UInt32     numeric;
        UA_String     string;
        UA_Guid       guid;
        UA_ByteString byteString;
    } identifier;
} UA_NodeId;

UA_NodeId类型中包含了节点所在的名字空间,节点标识类型,以及节点标识类型的值。其中节点标识类型有四种,这里我们暂且只讨论前两种分别是数值和字符串。节点类型通过一个枚举给出,数值类型为0,1,2。0为默认,1指定为2个字节,2指定为4个字节。3为字符串类型。
我们采用字符串标识变量节点,调用接口函数:UA_NodeId varNodeId = UA_NODEID_STRING(2, varName);
UA_NodeId point_4 = addVariable(server, objectId, UA_TYPES_UINT16);函数里,函数调用后,以及修改value的值之后分别打印varNodeId.identifier.string.data的值。
printf("varNode.identifier = %s\n", varNodeId.identifier.string.data);
打印字符串值
三次打印结果是一样的,证明是同一个变量节点。
同样,在UaExpert客户端中我们也可以看到变量节点的标识信息。
在这里插入图片描述
其中NS2代表名字空间为2;
string代表标识类型为string;
The answer是string的值。

下面我将节点的标识改为数字,首先定义一个id,int id = 99;然后在初始化这个节点时,用数字标识它:UA_NodeId varNodeId = UA_NODEID_NUMERIC(2, id);
我们在UA expert客户端中再次查看此变量节点:
在这里插入图片描述
此节点的标识变成了numeric,标识的值为定义的99。

另外,如何理解一个节点标识和displayName的关系呢?

attr.displayName = UA_LOCALIZEDTEXT("en-US",varName);

我们可以把一个变量节点想象为一个人,节点标识就是他的身份证,其中如果用numeric标识,就是身份证号码,如果用string标识就是人的姓名。而displayName可以理解成人的小名。因此我们只要通过节点的身份标识就一定可以找到此节点。

attr.description = UA_LOCALIZEDTEXT("en-US",displayname);

Description则为对此节点的描述。
BrowseName用以下函数UA_QualifiedName myIntegerName = UA_QUALIFIEDNAME(2, displayname);定义。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值