通过SDK的调用方法调用方法不会返回预期的输出

时间:2019-08-12 12:27:56

标签: c# opc opc-ua unified-automation-sdk

我是OPC-UA的新手。目前,在研究了Unified Automation文档提供的演示和示例之后。我能够编写一个简单的代码,该代码连接到服务器端点并调用方法。但是可悲的是,该方法没有返回预期结果。而且,如果我通过UAExpert在同一台服务器上使用相同的参数在相同的URL上调用相同的方法,则会得到预期的结果。我不知所措,不胜感激,下面是我目前编写的代码。

请让我知道我是否错过了代码。

public void Connect(string endpointUrl)
        {
            AppSession.UserIdentity = new UserIdentity();
            AppSession.SessionName = "urn:ACGIDT053:UnifiedAutomation:UaExpert";
            //AppSession.Application.CertificateGroups[0];            
            //string endpointUrl = "opc.tcp://212.43.72.27:51510/UA/WipotecServer/";
            AppSession.Connect(endpointUrl, SecuritySelection.None);
            ICertificate certificateServer = SecurityUtils.LoadCertificate(AppSession.EndpointDescription.ServerCertificate);
            AppSession.Application.TrustedStore.Add(certificateServer, true);

            /// [Step 1]
            // parse the object id.
            NodeId objectId = NodeId.Parse("ns=2;i=15108");

            // get the selected method id.            
            NodeId methodId = NodeId.Parse("ns=2;i=15057");

            // get input arguments.
            UInt32 a = 2;
            List<Variant> inputArguments = new List<Variant>
            {
                new Variant(string.Empty, TypeInfo.Scalars.String), new Variant(a,TypeInfo.Scalars.UInt32), new Variant(string.Empty, TypeInfo.Scalars.String),
                new Variant(null, TypeInfo.Arrays.ExtensionObject), new Variant(string.Empty, TypeInfo.Scalars.String)
            };

            /// [Step 2]
            List<StatusCode> inputArgumentErrors;
            List<Variant> outputArguments = null;

            // call the method on the server.
            StatusCode error = AppSession.Call(
                objectId,
                methodId,
                inputArguments,
                out inputArgumentErrors,
                out outputArguments);

            AppSession.Disconnect();

        }

服务器在代码中没有返回任何异常,所有输入参数均正确,错误状态也是如此。

更新: 过滤器表达式应为: (ip.src == 172.16.55.144 && ip.dst == 212.43.72.27)|| (ip.dst == 172.16.55.144 && ip.src == 212.43.72.27) 请在下面找到Wireshark数据包的链接: uaexpert:https://1drv.ms/u/s!ArxC3dVLzVTqhUGxsO1aDssb45er?e=tBcBRz localClient:https://1drv.ms/u/s!ArxC3dVLzVTqhUANVvKmHG5ULW6_?e=cAO5C8

更新: 根据注释中的建议更新了代码。来自wireshark的数据包,用于更新代码:https://1drv.ms/u/s!ArxC3dVLzVTqhUIuqudrkrjMn8kn?e=fAZOtd

0 个答案:

没有答案