0

假设我有两个用户 - UserA 和 UserB。当 UserA 基于 open62541 连接到我的 OPC-UA 服务器时,我希望他看到:

Data
    - MyData1
    - MyData2
    - MyData3

当 UserB 连接时,我希望他看到:

Data
    - MyData1

可能吗?如果是这样,当我设置对象节点时我在哪里使用它

UA_Server_addObjectNode(UA_Server *server, 
                    const UA_NodeId requestedNewNodeId,
                    const UA_NodeId parentNodeId,
                    const UA_NodeId referenceTypeId,
                    const UA_QualifiedName browseName,
                    const UA_NodeId typeDefinition,
                    const UA_ObjectAttributes attr,
                    void *nodeContext, 
                    UA_NodeId *outNewNodeId)
4

1 回答 1

1

您不能直接通过UA_Server_addObjectNode.

您在 OPC UA 中寻找的概念称为视图。

来自 OPC UA 规范,第 3 部分:

查看节点类

底层系统通常很大,客户通常只对特定的数据子集感兴趣。他们不需要或不希望承担查看地址空间中他们不感兴趣的节点的负担。

为了解决这个问题,本标准定义了视图的概念。每个视图定义地址空间中节点的子集。整个地址空间是默认视图。视图中的每个节点可能仅包含其引用的子集,由视图的创建者定义。视图节点充当视图中节点的根。视图是使用表 5 中指定的 View NodeClass 定义的。

在视图的上下文中浏览时,视图中包含的所有节点都应可以从视图节点开始访问。不期望所有包含的节点都可以直接从视图节点浏览,而是从视图中包含的其他节点浏览。

视图节点不仅可以用作地址空间的附加入口点,还可以用作组织地址空间的结构,因此可以作为地址空间子集的唯一入口点。因此客户端在暴露地址空间时不应忽略视图节点。例如,不为过滤目的处理视图的简单客户端可以处理像 FolderType 类型的对象一样的视图节点(参见 5.5.3)

所以你需要做的是创建一个视图节点,并将相应的节点附加到这个视图节点上。然后用户可以从该特定视图开始浏览。

调用相应的方法UA_Server_addViewNode。然后使用该UA_Server_addReference方法引用您创建的视图节点中的其他节点。引用类型应该是Organizes.

于 2018-12-11T18:02:18.493 回答