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); } }
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); } }