当前位置: 首页 > 编程语言 > C#

OPCUA:浏览服务器根节点共享的最小代码

时间:2023-04-10 17:01:18 C#

OPCUA:浏览服务器根节点的最小代码我正在使用OPCUAFoundationSDK开发一个小型客户端。什么是最小的C#代码:我得到服务器端点(未找到),安全无。代码不应使用配置文件,也不应使用STA。对此的任何帮助都非常感谢。编辑4/2018:OPCUA.Net标准库异步工作。请参阅更新的示例。编辑9/2016:每个人都应该看到新的OPCUA.Net标准库。您可以开发可在当今所有常见平台上运行的应用程序,包括Linux、iOS、Android(通过Xamarin)和Windows。您可以找到许多示例,包括受本文启发的示例。查找文件夹SampleApplications/Samples/NetCoreConsoleClient。原帖:也许可以帮忙做作业?以上为C#学习教程:OPCUA:浏览服务器根节点极简代码分享全文。如果对大家有用,需要详细了解C#学习教程,希望大家多多关注——usingOpc.Ua;//使用Opc.Ua.Client安装-PackageOPCFoundation.NetStandard.Opc.Ua;使用Opc.Ua.Configuration;使用系统;使用System.Collections.Generic;使用系统诊断;使用System.Net;namespaceMyHomework{classProgram{staticvoidMain(string[]args){Console.WriteLine("第1步-创建应用程序配置和证书。");varconfig=newApplicationConfiguration(){ApplicationName="MyHomework",ApplicationUri=Utils.Format(@"urn:{0}:MyHomework",System.Net.Dns.GetHostName()),ApplicationType=ApplicationType.Client,SecurityConfiguration=newSecurityConfiguration{ApplicationCertificate=newCertificateIdentifier{StoreType=@"Directory",StorePath=@"%CommonApplicationData%OPCFoundationCertificateStoresMachineDefault",SubjectName=Utils.Format(@"CN={0},DC={1}","MyHomework",系统.Net.Dns.GetHostName())},TrustedIssuerCertificates=newCertificateTrustList{StoreType=@"Directory",StorePath=@"%CommonApplicationData%OPCFoundationCertificateStoresUA证书颁发机构"},TrustedPeerCertificates=newCertificateTrustList{StoreType=@"Directory",StorePath=@"%CommonApplicationData%OPCFoundationCertificateStoresUAApplications"},RejectedCertificateStore=newCertificateTrustList{StoreType=@"Directory",StorePath=@"%CommonApplicationData%OPCFoundationCertificateStoresRejectedCertificates"},AutoAcceptUntrustedCertificates=true,AddAppCertToTrustedStore=true},TransportConfigurations=newTransportConfigurationCollection(),TransportQuotas=新TransportQuotas{OperationTimeout=15000},ClientConfiguration=newClientConfiguration{DefaultSessionTimeout=60000},TraceConfiguration=newTraceConfiguration()};config.Validate(ApplicationType.Client).GetAwaiter().GetResult();如果(配置.SecurityConfiguration.AutoAcceptUntrustedCertificates){config.CertificateValidator.CertificateValidation+=(s,e)=>{e.Accept=(e.Error.StatusCode==StatusCodes.BadCertificateUntrusted);};}varapplication=newApplicationInstance{ApplicationName="MyHomework",ApplicationType=ApplicationType.Client,ApplicationConfiguration=config};application.CheckApplicationInstanceCertificate(false,2048).GetAwaiter().GetResult();varselectedEndpoint=CoreClientUtils.SelectEndpoint("opc.tcp://"+Dns.GetHostName()+":48010",useSecurity:true,operationTimeout:15000);Console.WriteLine($"第2步-创建与您的服务器的会话:{selectedEndpoint.EndpointUrl}");使用(varsession=Session.Create(config,newConfiguredEndpoint(null,selectedEndpoint,EndpointConfiguration.Create(config)),false,"",60000,null,null).GetAwaiter().GetResult()){Console.WriteLine("第3步-浏览服务器命名空间。");ReferenceDescriptionCollectionrefs;字节[】cp;session.Browse(null,null,ObjectIds.ObjectsFolder,0u,BrowseDirection.Forward,ReferenceTypeIds.HierarchicalReferences,true,(uint)NodeClass.Variable|(uint)NodeClass.Object|(uint)NodeClass.Method,outcp,outrefs);Console.WriteLine("DisplayName:BrowseName,NodeClass");foreach(varrdinrefs){Console.WriteLine("{0}:{1},{2}",rd.DisplayName,rd.BrowseName,rd.NodeClass);ReferenceDescriptionCollectionnextRefs;byte[]nextCp;session.Browse(null,null,ExpandedNodeId.ToNodeId(rd.NodeId,session.NamespaceUris),0u,BrowseDirection.Forward,ReferenceTypeIds.HierarchicalReferences,true,(uint)NodeClass.Variable|(uint)NodeClass.Object|(uint)NodeClass.Method,输出nextCp,输出nextRefs);foreach(varnextRdinnextRefs){Console.WriteLine("+{0}:{1},{2}",nextRd.DisplayName,nextRd.BrowseName,nextRd.NodeClass);}}Console.WriteLine("第4步-创建订阅。如果您愿意,可以设置更快的发布间隔。");变量订阅ption=newSubscription(session.DefaultSubscription){PublishingInterval=1000};Console.WriteLine("第5步-添加您希望监控的项目列表到订阅。");varlist=newList{newMonitoredItem(subscription.DefaultItem){DisplayName="ServerStatusCurrentTime",StartNodeId="i=2258"}};list.ForEach(i=>i.Notification+=OnNotification);subscription.AddItems(列表);Console.WriteLine("第6步-将订阅添加到会话。");session.AddSubscription(订阅);订阅.Create();Console.WriteLine("按任意键删除订阅...");控制台.ReadKey(true);}Console.WriteLine("按任意键退出...");控制台.ReadKey(true);}privatestaticvoidOnNotification(MonitoredItemitem,MonitoredItemNotificationEventArgse){foreach(varvalueinitem.DequeueValues()){Console.WriteLine("{0}:{1},{2},{3}",item.DisplayName,value.Value,value.SourceTimestamp,value.StatusCode);}}}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处: