1

我是 OPC UA 服务器开发的初学者。我正在使用 .NET 环境来创建一个具有我自己的信息模型的服务器,该信息模型是在 UAModeler 上创建的。

当我实例化我的信息模型中可用的节点时,只有那些设置为 Mandatory 的节点才能成功实例化。我试图找到一种方法如何实例化剩余的节点,这些节点也被目的设置为可选的建模规则。

下面是节点管理器类的代码片段:

`Console.WriteLine("正在加载 Im 2.1 模型。"); ImportUaNodeset(Assembly.GetEntryAssembly(), "informationmodel_2.0.xml"); Console.WriteLine("IM 成功加载");

            CreateObjectSettings settings = new CreateObjectSettings()
            {
                ParentNodeId = UnifiedAutomation.UaBase.ObjectIds.ObjectsFolder,
                ReferenceTypeId = UnifiedAutomation.UaBase.ReferenceTypeIds.Organizes,
                RequestedNodeId = new NodeId("IM", DefaultNamespaceIndex),
                BrowseName = new QualifiedName("Departments", DefaultNamespaceIndex),
                TypeDefinitionId = UnifiedAutomation.UaBase.ObjectTypeIds.FolderType

            };
            ObjectNode controllersNode = CreateObject(Server.DefaultRequestContext, settings);

            settings = new CreateObjectSettings()
            {
                ParentNodeId = controllersNode.NodeId,
                ReferenceTypeId = UnifiedAutomation.UaBase.ReferenceTypeIds.Organizes,
                RequestedNodeId = new NodeId(DepartmentA, DefaultNamespaceIndex),
                BrowseName = new QualifiedName(DepartmentA, DefaultNamespaceIndex),
                TypeDefinitionId = new NodeId(My.MyIm.ObjectTypes.BodyshopProductionEquipmentType, DefaultNamespaceIndex)

            };

            CreateObject(Server.DefaultRequestContext, settings);
            
            ProductionDataNode = FindInMemoryNode(new NodeId(DepartmentA + ".ProductionData", DefaultNamespaceIndex)) as VariableNode;
            CounterPerTypeNode = FindInMemoryNode(new NodeId(DepartmentA + ".ProductionData.CounterPerType", DefaultNamespaceIndex)) as VariableNode;`
           

任何建议或类似的已解决示例都将受到高度评价。

谢谢

4

1 回答 1

1

我没有使用统一自动化 SDK 的经验,但在 OPCFoundation 堆栈中,您必须手动创建节点。

这通常在CreateAddressSpace节点管理器类的方法中完成,请参阅锅炉示例

建模角色可选指示服务器必须决定是否需要创建。

于 2020-12-10T14:35:09.743 回答