将 ModelCompiler 的编译输出获取到 .NET OPC-UA Server
Get compilation output by ModelCompiler into .NET OPC-UA Server
我使用 [1] 中的 ModelCompiler 来编译我的信息模型。现在,我正在寻找一种方法将信息模型导入我的 .NET 服务器(基于 [2] 中的 .NET Core 服务器示例),包括作为 NuGet 包的 .NET OPC-UA 堆栈 [3].
Boiler、MemoryBuffer 和 TestData 示例使用专用节点管理器(继承自 SampleNodeManager)。我的第一个想法是为我的信息模型编写这样一个专用的节点管理器(继承自CustomNodeManager2),但这似乎很复杂。
似乎有比编写节点管理器更简单的方法(参见[4] node.js 服务器)。 .NET 实现提供了一些方法来将包含预定义节点 [5] 或 NodeSet2 文件 [6] 的文件解析为 NodeStateCollection。
解析后的 NodeStateCollection 需要执行哪些步骤才能使节点为 .NET 服务器所知?
[1] https://github.com/OPCFoundation/UA-ModelCompiler
[2] https://github.com/OPCFoundation/UA-.NETStandard
[3] https://www.nuget.org/packages/OPCFoundation.NetStandard.Opc.Ua/
[4]
[5]
[6]
你是对的,你必须写一个自己的Server(继承自StandardServer)和一个自己的NodeManager(继承自CustomNodeManager2),但这并不费力...
- 将 Opc.Ua.ModelCompiler.exe 的所有输出文件添加到您的解决方案中,作为 class 文件或嵌入资源
- 实施服务器以通过反射加载您的类型
server.Factory.AddEncodeableTypes(this.GetType().Assembly);
- 实施 NodeManager
SetNamespaces(MyNamespace.Namespaces.DataTypes);
//...
NodeStateCollection predefinedNodes = new NodeStateCollection();
predefinedNodes.LoadFromBinaryResource(context,"MyNamespace.DataTypes.Types.PredefinedNodes.uanodes", this.GetType().Assemly, true);
完整示例,请查看:
我使用 [1] 中的 ModelCompiler 来编译我的信息模型。现在,我正在寻找一种方法将信息模型导入我的 .NET 服务器(基于 [2] 中的 .NET Core 服务器示例),包括作为 NuGet 包的 .NET OPC-UA 堆栈 [3].
Boiler、MemoryBuffer 和 TestData 示例使用专用节点管理器(继承自 SampleNodeManager)。我的第一个想法是为我的信息模型编写这样一个专用的节点管理器(继承自CustomNodeManager2),但这似乎很复杂。
似乎有比编写节点管理器更简单的方法(参见[4] node.js 服务器)。 .NET 实现提供了一些方法来将包含预定义节点 [5] 或 NodeSet2 文件 [6] 的文件解析为 NodeStateCollection。 解析后的 NodeStateCollection 需要执行哪些步骤才能使节点为 .NET 服务器所知?
[1] https://github.com/OPCFoundation/UA-ModelCompiler
[2] https://github.com/OPCFoundation/UA-.NETStandard
[3] https://www.nuget.org/packages/OPCFoundation.NetStandard.Opc.Ua/
[4]
[5]
[6]
你是对的,你必须写一个自己的Server(继承自StandardServer)和一个自己的NodeManager(继承自CustomNodeManager2),但这并不费力...
- 将 Opc.Ua.ModelCompiler.exe 的所有输出文件添加到您的解决方案中,作为 class 文件或嵌入资源
- 实施服务器以通过反射加载您的类型
server.Factory.AddEncodeableTypes(this.GetType().Assembly);
- 实施 NodeManager
SetNamespaces(MyNamespace.Namespaces.DataTypes);
//...
NodeStateCollection predefinedNodes = new NodeStateCollection();
predefinedNodes.LoadFromBinaryResource(context,"MyNamespace.DataTypes.Types.PredefinedNodes.uanodes", this.GetType().Assemly, true);
完整示例,请查看: