如何使用.NET Standard SDK在OPCUA中实现AddNodes服务

问题描述

我对OPCUA并不陌生,可以使用一个示例,说明如何使用https://accounts.google.com/.well-known/openid-configuration在C#中实现AddNodes服务。 基本上,我要做的是实现自定义服务器,并能够从客户端调用AddNodes服务,以将一些节点添加到文件夹中(并设置其初始值)。

我已经看到有许多类可以继承,所以我认为最好是从 StandardServer 继承并重写AddNodes方法。之后,我可以创建自己的自定义节点管理器,然后从此方法中调用它。但是,没有一个示例节点管理器实现了AddNodes方法(即使INodeManager接口也没有实现),所以我想知道自己是否走在正确的轨道上。

是否有人已经使用此SDK实现了AddNodes服务,并愿意给我一些如何实现的提示?您是否只是在自定义节点管理器上创建了自己的AddNodes方法并在其中添加了节点?一些代码片段将非常有帮助。谢谢!

解决方法

我认为您的做法正确。 SessionServerBaseOpc.Ua.Services.wsdl自动生成。 StandardServer继承自SessionServerBase,仅覆盖虚拟方法的子集

因此,您需要在AddNodes中覆盖StandardServer,下面是添加节点的示例。

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);
}

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...