如何使用 .NET Standard SDK 在 OPCUA 中实现 AddNodes 服务
How to implement the AddNodes service in OPCUA using the .NET Standard SDK
我是 OPCUA 的新手,可以使用一个示例来说明如何使用 official .NET Standard SDK 在 C# 中实现 AddNodes 服务。
基本上我想做的是实现我的自定义服务器并能够从客户端调用 AddNodes 服务以将一些节点添加到文件夹(并设置它们的初始值)。
我看到有多种 类 可以继承,所以我认为最好是继承 StandardServer 并覆盖 AddNodes 方法。之后,我可以创建自己的自定义节点管理器并从此方法中调用它。但是,none 示例节点管理器实现了 AddNodes 方法(即使 INodeManager 接口也没有实现)所以我想知道我是否在正确的轨道上。
是否有人已经使用此 SDK 实现了 AddNodes 服务,并且愿意给我一些提示?您是否刚刚在自定义节点管理器上创建了自己的 AddNodes 方法并在那里添加了节点?一些代码片段会很有帮助。谢谢!
我认为您的方向是正确的。 SessionServerBase
由 Opc.Ua.Services.wsdl
自动生成。 StandardServer
继承自 SessionServerBase
,仅覆盖虚方法的 子集 。
所以需要覆盖StandardServer
中的AddNodes
,下面是添加节点的例子
public override ResponseHeader AddNodes(
RequestHeader requestHeader,
AddNodesItemCollection nodesToAdd,
out AddNodesResultCollection results,
out DiagnosticInfoCollection diagnosticInfos)
{
results = null;
diagnosticInfos = null;
ValidateRequest(requestHeader);
foreach (var item in nodesToAdd)
{
if (item.NodeClass == NodeClass.Variable)
{
var node = new VariableNode
{
// TODO: Initialization
};
m_serverInternal.CoreNodeManager.AttachNode(node);
}
else if (item.NodeClass == NodeClass.VariableType)
{
var node = new VariableTypeNode
{
// TODO: Initialization
};
m_serverInternal.CoreNodeManager.AttachNode(node);
}
else
{
// TODO
}
}
return CreateResponse(requestHeader, StatusCodes.Good);
}
我是 OPCUA 的新手,可以使用一个示例来说明如何使用 official .NET Standard SDK 在 C# 中实现 AddNodes 服务。 基本上我想做的是实现我的自定义服务器并能够从客户端调用 AddNodes 服务以将一些节点添加到文件夹(并设置它们的初始值)。
我看到有多种 类 可以继承,所以我认为最好是继承 StandardServer 并覆盖 AddNodes 方法。之后,我可以创建自己的自定义节点管理器并从此方法中调用它。但是,none 示例节点管理器实现了 AddNodes 方法(即使 INodeManager 接口也没有实现)所以我想知道我是否在正确的轨道上。
是否有人已经使用此 SDK 实现了 AddNodes 服务,并且愿意给我一些提示?您是否刚刚在自定义节点管理器上创建了自己的 AddNodes 方法并在那里添加了节点?一些代码片段会很有帮助。谢谢!
我认为您的方向是正确的。 SessionServerBase
由 Opc.Ua.Services.wsdl
自动生成。 StandardServer
继承自 SessionServerBase
,仅覆盖虚方法的 子集 。
所以需要覆盖StandardServer
中的AddNodes
,下面是添加节点的例子
public override ResponseHeader AddNodes(
RequestHeader requestHeader,
AddNodesItemCollection nodesToAdd,
out AddNodesResultCollection results,
out DiagnosticInfoCollection diagnosticInfos)
{
results = null;
diagnosticInfos = null;
ValidateRequest(requestHeader);
foreach (var item in nodesToAdd)
{
if (item.NodeClass == NodeClass.Variable)
{
var node = new VariableNode
{
// TODO: Initialization
};
m_serverInternal.CoreNodeManager.AttachNode(node);
}
else if (item.NodeClass == NodeClass.VariableType)
{
var node = new VariableTypeNode
{
// TODO: Initialization
};
m_serverInternal.CoreNodeManager.AttachNode(node);
}
else
{
// TODO
}
}
return CreateResponse(requestHeader, StatusCodes.Good);
}