示例#1
0
        public static Device QueryParentDeviceByIDCodeAndIPAddress(this TableOperations <Device> deviceTable, ushort idCode, string ipAddress)
        {
            IEnumerable <Device> devices = deviceTable.QueryRecordsWhere("ParentID IS NULL AND AccessID = {0}", (int)idCode);

            foreach (Device device in devices)
            {
                string deviceIP = device.ConnectionString.ParseDeviceIPFromConnectionString();

                if (string.IsNullOrWhiteSpace(deviceIP))
                {
                    continue;
                }

                if (ipAddress is null || ipAddress.Trim() == deviceIP)
                {
                    return(device);
                }
            }

            return(deviceTable.NewDevice());
        }
示例#2
0
 public static Device QueryDeviceByID(this TableOperations <Device> deviceTable, int deviceID) =>
 deviceTable.QueryRecordWhere("ID = {0}", deviceID) ?? deviceTable.NewDevice();
示例#3
0
 public static Device QueryDevice(this TableOperations <Device> deviceTable, string acronym) =>
 deviceTable.QueryRecordWhere("Acronym = {0}", acronym) ?? deviceTable.NewDevice();
示例#4
0
        private static void SavePMUDevice(ImportParameters importParams, ConfigurationCell configCell, Device parentDevice)
        {
            ConfigurationFrame       configFrame = importParams.TargetConfigFrame;
            TableOperations <Device> deviceTable = importParams.DeviceTable;
            Guid   nodeID        = importParams.NodeID;
            Device device        = s_devices.FindChildDeviceByIDCode(parentDevice.ID, configCell.IDCode) ?? deviceTable.NewDevice();
            string deviceAcronym = configCell.IDLabel;
            string deviceName    = null;

            if (string.IsNullOrWhiteSpace(deviceAcronym))
            {
                if (string.IsNullOrWhiteSpace(configCell.StationName))
                {
                    throw new InvalidOperationException("Unable to get station name or ID label for PMU from parsed device configuration cell");
                }

                deviceAcronym = configCell.StationName.GetCleanAcronym();
            }

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

            // Keep old device acronym for measurement updates
            device.OldAcronym = string.IsNullOrWhiteSpace(device.Acronym) ? deviceAcronym : device.Acronym;

            // Assign new device fields
            device.NodeID          = nodeID;
            device.ParentID        = parentDevice.ID;
            device.HistorianID     = configFrame.HistorianID;
            device.Acronym         = deviceAcronym;
            device.Name            = deviceName ?? deviceAcronym;
            device.ProtocolID      = importParams.IeeeC37_118ProtocolID;
            device.FramesPerSecond = configCell.FrameRate;
            device.AccessID        = configCell.IDCode;
            device.IsConcentrator  = false;
            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(importParams, configCell, newDevice);
            }
            else
            {
                // Update existing device record
                deviceTable.UpdateDevice(device);

                // Save associated device records
                SaveDeviceRecords(importParams, configCell, device);
            }
        }
示例#5
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);
            }
        }