我从 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 时,会打印错误“可为空的对象必须有一个值”。请告诉我我做错了什么。
2 回答
慕少森
TA贡献2019条经验 获得超9个赞
在我的例子中,问题是 nodeId。我变了
ps.NodeId = new NodeId();
// to
ps.NodeId = new NodeId(Guid.NewGuid(), NamespaceIndex);
然后它确实出现在节点树中。
凤凰求蛊
TA贡献1825条经验 获得超4个赞
OPC-UA 的例子有更新变量的代码位,所以我不确定它有什么问题。假设我设置了良好的价值,代码可能如下所示:
variable.Value = value;
variable.Timestamp = DateTime.UtcNow;
variable.StatusCode = StatusCodes.Good;
variable.ClearChangeMasks(SystemContext, false);
- 2 回答
- 0 关注
- 114 浏览
添加回答
举报
0/150
提交
取消