我从 OPCFoundation 示例构建了一个 OPC UA 服务器 - https://github.com/OPCFoundation/UA-.NETStandard
还编译了我自己的模型 - https://github.com/Pro/UA-ModelCompiler/tree/eebf9988940a789a4f36cbef8c5bd6340f1b2f42
在示例中,他们将生成的文件放在文件夹中,然后为 NodeManger、State 等定制类。
我已成功加载生成的 .uanodes 文件,其中包含一些示例节点。但是我无法通过服务器端的代码创建这些节点。测试时,我在函数中进行 - LoadPredefinedNodes(ISystemContext context)。
我的结构应该是对象下面的一个节点,称为“标签”,在该节点中,我想在服务器运行时动态添加节点并设置它们的属性。
我在测试时使用 Integration Object 的 OPC UA 客户端。
结构看起来正确,例如:Objects => Tags => MyTestTag (Properties: Name, Description, Value)
前两个属性是从模型文件定义中正确添加的
<!-- ### Object Types ###-->
<!-- BaseType -->
<ObjectType SymbolicName="TAG:TagType" BaseType="ua:BaseObjectType" IsAbstract="true" SupportsEvents="true" AccessLevel="ReadWrite">
<Description>Base type for all tags</Description>
<Children>
<Property SymbolicName="TAG:Name" DataType="ua:String" ValueRank="Scalar" ModellingRule="Mandatory" AccessLevel="ReadWrite">
<Description>Name of the tag</Description>
</Property>
<Property SymbolicName="TAG:Description" DataType="ua:String" ValueRank="Scalar" ModellingRule="Optional" AccessLevel="ReadWrite">
<Description>Description of the tag</Description>
</Property>
</Children>
</ObjectType>
<!-- ### Objects ###-->
<Object SymbolicName="TAG:Tags" TypeDefinition="ua:BaseObjectType">
<Description>Contains all instances of tags</Description>
<References>
<Reference IsInverse="true">
<ReferenceType>ua:Organizes</ReferenceType>
<TargetId>ua:ObjectsFolder</TargetId>
</Reference>
</References>
</Object>
第三个是我尝试从服务器端代码定义的属性。我添加了 Value 属性,但我不知道如何写它的值。
从这段代码中,一个名为 MyTestTag 的节点被添加到 Tags 节点中。从模型中添加属性“名称”和“描述”。并且“Value”属性是通过代码添加的。但是,我无法为这些属性中的任何一个设置值。
在客户端中单击属性 MyTestTag.Value 时,会打印错误“可为空的对象必须有一个值”。
请告诉我我做错了什么。
慕少森
凤凰求蛊
相关分类