Ejemplo n.º 1
0
        public override void Initialize()
        {
            ProcessingInterval = 0;

            OnStatusMessage(MessageLevel.Info, $"Initialising OPC for device {Name}");
            base.Initialize();

            // If more data is added to the connection string the it will have to be parsed here (Look at ModbusPoller.cs for example line 456: https://github.com/GridProtectionAlliance/gsf/blob/master/Source/Libraries/Adapters/ModbusAdapters/ModbusPoller.cs)

            // Statistics
            StatisticsEngine.Register(this, "OPCUA", "OPC");

            OutputMeasurements = ParseOutputMeasurements(DataSource, false, $"FILTER ActiveMeasurements WHERE Device = '{Name}'");
            DataTable measurements = DataSource.Tables["ActiveMeasurements"];

            items = OutputMeasurements.ToDictionary(measurement =>
            {
                DataRow[] records = measurements.Select($"ID = '{measurement.Key}'");
                var reference     = records[0]["SignalReference"].ToNonNullString();
                OnStatusMessage(MessageLevel.Info, $"Linking OPC item {reference} with tag {measurement.TagName}");
                return(reference);
            });


            // OPC Init
            ApplicationInstance application = new ApplicationInstance
            {
                ApplicationName   = "OPC UA Client",
                ApplicationType   = Opc.Ua.ApplicationType.Client,
                ConfigSectionName = "Opc.Ua.Client"
            };
            ApplicationConfiguration config = application.LoadApplicationConfiguration(false).GetAwaiter().GetResult();
            bool haveAppCertificate         = application.CheckApplicationInstanceCertificate(false, 0).GetAwaiter().GetResult();

            if (!haveAppCertificate)
            {
                throw new Exception("Application instance certificate invalid!");
            }

            if (haveAppCertificate)
            {
                config.ApplicationUri = Utils.GetApplicationUriFromCertificate(config.SecurityConfiguration.ApplicationCertificate.Certificate);
                if (config.SecurityConfiguration.AutoAcceptUntrustedCertificates)
                {
                    autoAccept = true;
                }
                config.CertificateValidator.CertificateValidation += new CertificateValidationEventHandler(CertificateValidator_CertificateValidation);
            }
            else
            {
                OnStatusMessage(MessageLevel.Info, $"Missing application certificate, using unsecure connection.");
            }

            m_configuration = config;
            OnStatusMessage(MessageLevel.Info, $"OPC Initialised ({ConnectionString})");
        }