Ejemplo n.º 1
0
 private void renewSessionThread()
 {
     while (!ClassDisposing)
     {
         if ((DateTime.Now - LastTimeSessionRenewed).TotalMinutes > SessionRenewalPeriodMins ||
             (DateTime.Now - LastTimeOPCServerFoundAlive).TotalSeconds > 60)
         {
             Console.WriteLine("Renewing Session");
             try
             {
                 OPCSession.Close();
                 OPCSession.Dispose();
             }
             catch { }
             InitializeOPCUAClient();
             LastTimeSessionRenewed = DateTime.Now;
         }
         Thread.Sleep(2000);
     }
 }
Ejemplo n.º 2
0
            public void InitializeOPCUAClient()
            {
                //Console.WriteLine("Step 1 - Create application configuration and certificate.");
                var config = new ApplicationConfiguration()
                {
                    ApplicationName       = MyApplicationName,
                    ApplicationUri        = Utils.Format(@"urn:{0}:" + MyApplicationName + "", ServerAddress),
                    ApplicationType       = ApplicationType.Client,
                    SecurityConfiguration = new SecurityConfiguration
                    {
                        ApplicationCertificate = new CertificateIdentifier {
                            StoreType = @"Directory", StorePath = @"%CommonApplicationData%\OPC Foundation\CertificateStores\MachineDefault", SubjectName = Utils.Format(@"CN={0}, DC={1}", MyApplicationName, ServerAddress)
                        },
                        TrustedIssuerCertificates = new CertificateTrustList {
                            StoreType = @"Directory", StorePath = @"%CommonApplicationData%\OPC Foundation\CertificateStores\UA Certificate Authorities"
                        },
                        TrustedPeerCertificates = new CertificateTrustList {
                            StoreType = @"Directory", StorePath = @"%CommonApplicationData%\OPC Foundation\CertificateStores\UA Applications"
                        },
                        RejectedCertificateStore = new CertificateTrustList {
                            StoreType = @"Directory", StorePath = @"%CommonApplicationData%\OPC Foundation\CertificateStores\RejectedCertificates"
                        },
                        AutoAcceptUntrustedCertificates = true,
                        AddAppCertToTrustedStore        = true
                    },
                    TransportConfigurations = new TransportConfigurationCollection(),
                    TransportQuotas         = new TransportQuotas {
                        OperationTimeout = 15000
                    },
                    ClientConfiguration = new ClientConfiguration {
                        DefaultSessionTimeout = 60000
                    },
                    TraceConfiguration = new TraceConfiguration()
                };

                config.Validate(ApplicationType.Client).GetAwaiter().GetResult();
                if (config.SecurityConfiguration.AutoAcceptUntrustedCertificates)
                {
                    config.CertificateValidator.CertificateValidation += (s, e) => { e.Accept = (e.Error.StatusCode == StatusCodes.BadCertificateUntrusted); };
                }
                var application = new ApplicationInstance
                {
                    ApplicationName          = MyApplicationName,
                    ApplicationType          = ApplicationType.Client,
                    ApplicationConfiguration = config
                };

                application.CheckApplicationInstanceCertificate(false, 2048).GetAwaiter().GetResult();
                //string serverAddress = Dns.GetHostName();
                string serverAddress    = ServerAddress;;
                var    selectedEndpoint = CoreClientUtils.SelectEndpoint("opc.tcp://" + serverAddress + ":" + ServerPortNumber + "", useSecurity: SecurityEnabled, operationTimeout: 15000);

                // Console.WriteLine($"Step 2 - Create a session with your server: {selectedEndpoint.EndpointUrl} ");
                OPCSession = Session.Create(config, new ConfiguredEndpoint(null, selectedEndpoint, EndpointConfiguration.Create(config)), false, "", 60000, null, null).GetAwaiter().GetResult();
                {
                    //Console.WriteLine("Step 4 - Create a subscription. Set a faster publishing interval if you wish.");
                    var subscription = new Subscription(OPCSession.DefaultSubscription)
                    {
                        PublishingInterval = 1000
                    };
                    //Console.WriteLine("Step 5 - Add a list of items you wish to monitor to the subscription.");
                    var list = new List <MonitoredItem> {
                    };
                    //list.Add(new MonitoredItem(subscription.DefaultItem) { DisplayName = "M0404.CPU945.iBatchOutput", StartNodeId = "ns=2;s=M0404.CPU945.iBatchOutput" });
                    list.Add(new MonitoredItem(subscription.DefaultItem)
                    {
                        DisplayName = "ServerStatusCurrentTime", StartNodeId = "i=2258"
                    });
                    foreach (KeyValuePair <string, TagClass> td in TagList)
                    {
                        list.Add(new MonitoredItem(subscription.DefaultItem)
                        {
                            DisplayName = td.Value.DisplayName, StartNodeId = "ns=" + OPCNameSpace + ";s=" + td.Value.NodeID + ""
                        });
                    }
                    list.ForEach(i => i.Notification += OnTagValueChange);
                    subscription.AddItems(list);
                    //Console.WriteLine("Step 6 - Add the subscription to the session.");
                    OPCSession.AddSubscription(subscription);
                    subscription.Create();
                }
            }