Esempio n. 1
0
        public static void SaveConnection(ImportParameters importParams)
        {
            AdoDataConnection            connection      = importParams.Connection;
            ConfigurationFrame           configFrame     = importParams.TargetConfigFrame;
            TableOperations <Device>     deviceTable     = importParams.DeviceTable;
            TableOperations <SignalType> signalTypeTable = new(connection);
            Guid   nodeID           = importParams.NodeID;
            string connectionString = importParams.EditedConnectionString;

            // Load a list of all existing device records
            s_devices = deviceTable.QueryRecords().ToArray();

            // Apply other connection string parameters that are specific to device operation
            importParams.EditedConnectionString = string.Format(ConnectionStringTemplate, importParams.EditedConnectionString);

            if (s_deviceSignalTypes is null)
            {
                s_deviceSignalTypes = signalTypeTable.LoadSignalTypes("PMU").ToDictionary(key => key.Acronym, StringComparer.OrdinalIgnoreCase);
            }

            if (s_phasorSignalTypes is null)
            {
                s_phasorSignalTypes = signalTypeTable.LoadSignalTypes("Phasor").ToDictionary(key => key.Acronym, StringComparer.OrdinalIgnoreCase);
            }

            Device device = s_devices.FindDeviceByIDCodeAndIPAddress(configFrame.IDCode, importParams.IPAddress) ?? deviceTable.NewDevice();
            Dictionary <string, string> settings = connectionString.ParseKeyValuePairs();

            bool autoStartDataParsingSequence = true;
            bool skipDisableRealTimeData      = false;

            // Handle connection string parameters that are fields in the device table
            if (settings.ContainsKey("autoStartDataParsingSequence"))
            {
                autoStartDataParsingSequence = bool.Parse(settings["autoStartDataParsingSequence"]);
                settings.Remove("autoStartDataParsingSequence");
                connectionString = settings.JoinKeyValuePairs();
            }

            if (settings.ContainsKey("skipDisableRealTimeData"))
            {
                skipDisableRealTimeData = bool.Parse(settings["skipDisableRealTimeData"]);
                settings.Remove("skipDisableRealTimeData");
                connectionString = settings.JoinKeyValuePairs();
            }

            string deviceAcronym = configFrame.Acronym;
            string deviceName    = null;

            if (string.IsNullOrWhiteSpace(deviceAcronym))
            {
                if (string.IsNullOrWhiteSpace(configFrame.Name))
                {
                    throw new InvalidOperationException("Unable to get name or acronym for PDC from parsed configuration frame");
                }

                deviceAcronym = configFrame.Name.GetCleanAcronym();
            }

            if (!string.IsNullOrWhiteSpace(configFrame.Name))
            {
                deviceName = configFrame.Name;
            }

            device.NodeID                       = nodeID;
            device.ParentID                     = null;
            device.HistorianID                  = configFrame.HistorianID;
            device.Acronym                      = deviceAcronym;
            device.Name                         = deviceName ?? deviceAcronym;
            device.ProtocolID                   = importParams.IeeeC37_118ProtocolID;
            device.FramesPerSecond              = configFrame.FrameRate;
            device.AccessID                     = configFrame.IDCode;
            device.IsConcentrator               = true;
            device.ConnectionString             = connectionString;
            device.AutoStartDataParsingSequence = autoStartDataParsingSequence;
            device.SkipDisableRealTimeData      = skipDisableRealTimeData;
            device.Enabled                      = true;

            // Check if this is a new device or an edit to an existing one
            if (device.ID == 0)
            {
                // Add new device record
                deviceTable.AddNewDevice(device);

                // Get newly added device with auto-incremented ID
                Device newDevice = deviceTable.QueryDevice(device.Acronym);

                // Save associated PMU records
                UpdatePMUDevices(importParams, newDevice);
            }
            else
            {
                // Update existing device record
                deviceTable.UpdateDevice(device);

                // Save associated PMU records
                UpdatePMUDevices(importParams, device);
            }
        }
        private void SaveDeviceConnection(IConfigurationFrame configFrame, string connectionString, ushort comPort, ushort idCode, ScanParameters scanParams)
        {
            TableOperations <Device> deviceTable = scanParams.DeviceTable;
            Guid nodeID = scanParams.NodeID;

            ShowUpdateMessage($"{Tab2}Saving device connection...");

            // Query existing device record, creating new one if not found
            Device device = scanParams.Devices.FindDeviceByComPort(comPort) ?? deviceTable.NewDevice();
            bool   skipDisableRealTimeData;

            // Handle connection string parameters that are fields in the device table
            (skipDisableRealTimeData, connectionString) = ExtractFieldAssignedSkipDisableRealTimeData(connectionString);

            IConfigurationCell deviceConfig = configFrame.Cells[0];

            string deviceAcronym = deviceConfig.IDLabel;
            string deviceName    = null;

            if (string.IsNullOrWhiteSpace(deviceAcronym) && !string.IsNullOrWhiteSpace(deviceConfig.StationName))
            {
                deviceAcronym = GetCleanAcronym(deviceConfig.StationName.ToUpperInvariant().Replace(" ", "_"));
            }
            else
            {
                throw new InvalidOperationException("Unable to get station name or ID label from device configuration frame");
            }

            if (!string.IsNullOrWhiteSpace(deviceConfig.StationName))
            {
                deviceName = deviceConfig.StationName;
            }

            device.NodeID                       = nodeID;
            device.Acronym                      = deviceAcronym;
            device.Name                         = deviceName ?? deviceAcronym;
            device.ProtocolID                   = scanParams.IeeeC37_118ProtocolID;
            device.FramesPerSecond              = configFrame.FrameRate;
            device.AccessID                     = idCode;
            device.IsConcentrator               = false;
            device.ConnectionString             = connectionString;
            device.AutoStartDataParsingSequence = true;
            device.SkipDisableRealTimeData      = skipDisableRealTimeData;
            device.Enabled                      = true;

            // Check if this is a new device or an edit to an existing one
            if (device.ID == 0)
            {
                // Add new device record
                deviceTable.AddNewDevice(device);

                // Get newly added device with auto-incremented ID
                Device newDevice = deviceTable.QueryDevice(device.Acronym);

                // Save associated device records
                SaveDeviceRecords(configFrame, newDevice, scanParams);
            }
            else
            {
                // Update existing device record
                deviceTable.UpdateDevice(device);

                // Save associated device records
                SaveDeviceRecords(configFrame, device, scanParams);
            }
        }