private IConfigurationFrame RequestConfigurationFrame(string connectionString) { using (CommonPhasorServices phasorServices = new CommonPhasorServices()) { phasorServices.StatusMessage += (sender, e) => LogStatusMessage(e.Argument.Replace("**", "")); phasorServices.ProcessException += (sender, e) => LogException(e.Argument); return(phasorServices.RequestDeviceConfiguration(connectionString)); } }
public ConfigurationFrame LoadConfigurationFrame(string sourceData) { string connectionString = ""; IConfigurationFrame GetConfigurationFrame() { try { ConnectionSettings connectionSettings; SoapFormatter formatter = new SoapFormatter { AssemblyFormat = FormatterAssemblyStyle.Simple, TypeFormat = FormatterTypeStyle.TypesWhenNeeded, Binder = Serialization.LegacyBinder }; using (MemoryStream source = new MemoryStream(Encoding.UTF8.GetBytes(sourceData))) connectionSettings = formatter.Deserialize(source) as ConnectionSettings; if ((object)connectionSettings != null) { connectionString = connectionSettings.ConnectionString; Dictionary <string, string> connectionStringKeyValues = connectionString.ParseKeyValuePairs(); connectionString = "transportProtocol=" + connectionSettings.TransportProtocol + ";" + connectionStringKeyValues.JoinKeyValuePairs(); if ((object)connectionSettings.ConnectionParameters != null) { switch (connectionSettings.PhasorProtocol) { case PhasorProtocol.BPAPDCstream: GSF.PhasorProtocols.BPAPDCstream.ConnectionParameters bpaParameters = connectionSettings.ConnectionParameters as GSF.PhasorProtocols.BPAPDCstream.ConnectionParameters; if ((object)bpaParameters != null) { connectionString += "; iniFileName=" + bpaParameters.ConfigurationFileName + "; refreshConfigFileOnChange=" + bpaParameters.RefreshConfigurationFileOnChange + "; parseWordCountFromByte=" + bpaParameters.ParseWordCountFromByte; } break; case PhasorProtocol.FNET: GSF.PhasorProtocols.FNET.ConnectionParameters fnetParameters = connectionSettings.ConnectionParameters as GSF.PhasorProtocols.FNET.ConnectionParameters; if ((object)fnetParameters != null) { connectionString += "; timeOffset=" + fnetParameters.TimeOffset + "; stationName=" + fnetParameters.StationName + "; frameRate=" + fnetParameters.FrameRate + "; nominalFrequency=" + (int)fnetParameters.NominalFrequency; } break; case PhasorProtocol.SelFastMessage: GSF.PhasorProtocols.SelFastMessage.ConnectionParameters selParameters = connectionSettings.ConnectionParameters as GSF.PhasorProtocols.SelFastMessage.ConnectionParameters; if ((object)selParameters != null) { connectionString += "; messagePeriod=" + selParameters.MessagePeriod; } break; case PhasorProtocol.IEC61850_90_5: GSF.PhasorProtocols.IEC61850_90_5.ConnectionParameters iecParameters = connectionSettings.ConnectionParameters as GSF.PhasorProtocols.IEC61850_90_5.ConnectionParameters; if ((object)iecParameters != null) { connectionString += "; useETRConfiguration=" + iecParameters.UseETRConfiguration + "; guessConfiguration=" + iecParameters.GuessConfiguration + "; parseRedundantASDUs=" + iecParameters.ParseRedundantASDUs + "; ignoreSignatureValidationFailures=" + iecParameters.IgnoreSignatureValidationFailures + "; ignoreSampleSizeValidationFailures=" + iecParameters.IgnoreSampleSizeValidationFailures; } break; case PhasorProtocol.Macrodyne: GSF.PhasorProtocols.Macrodyne.ConnectionParameters macrodyneParameters = connectionSettings.ConnectionParameters as GSF.PhasorProtocols.Macrodyne.ConnectionParameters; if ((object)macrodyneParameters != null) { connectionString += "; protocolVersion=" + macrodyneParameters.ProtocolVersion + "; iniFileName=" + macrodyneParameters.ConfigurationFileName + "; refreshConfigFileOnChange=" + macrodyneParameters.RefreshConfigurationFileOnChange + "; deviceLabel=" + macrodyneParameters.DeviceLabel; } break; } } connectionString += "; accessID=" + connectionSettings.PmuID; connectionString += "; phasorProtocol=" + connectionSettings.PhasorProtocol; using (CommonPhasorServices phasorServices = new CommonPhasorServices()) { phasorServices.StatusMessage += (sender, e) => LogStatusMessage(e.Argument.Replace("**", "")); phasorServices.ProcessException += (sender, e) => LogException(e.Argument); return(phasorServices.RequestDeviceConfiguration(connectionString)); } } using (MemoryStream source = new MemoryStream(Encoding.UTF8.GetBytes(sourceData))) return(formatter.Deserialize(source) as IConfigurationFrame); } catch { return(new ConfigurationErrorFrame()); } } IConfigurationFrame sourceFrame = GetConfigurationFrame(); if (sourceFrame is ConfigurationErrorFrame) { return(new ConfigurationFrame()); } ConfigurationFrame derivedFrame; // Create a new simple concrete configuration frame for JSON serialization converted from equivalent configuration information int protocolID = 0, deviceID = 0, phasorID = -1; // Start phasor ID's at less than -1 since associated voltage == -1 is reserved as unselected if (!string.IsNullOrWhiteSpace(connectionString)) { Dictionary <string, string> settings = connectionString.ParseKeyValuePairs(); protocolID = GetProtocolID(settings["phasorProtocol"]); } derivedFrame = new ConfigurationFrame { IDCode = sourceFrame.IDCode, FrameRate = sourceFrame.FrameRate, ConnectionString = connectionString, ProtocolID = protocolID }; foreach (IConfigurationCell sourceCell in sourceFrame.Cells) { // Create new derived configuration cell ConfigurationCell derivedCell = new ConfigurationCell { ID = --deviceID, // Provide a negative index so any database lookup will return null ParentID = null, IDCode = sourceCell.IDCode, StationName = sourceCell.StationName, IDLabel = sourceCell.IDLabel }; // Create equivalent derived frequency definition IFrequencyDefinition sourceFrequency = sourceCell.FrequencyDefinition; if (sourceFrequency != null) { derivedCell.FrequencyDefinition = new FrequencyDefinition { Label = sourceFrequency.Label } } ; int sourceIndex = 0; // Create equivalent derived phasor definitions foreach (IPhasorDefinition sourcePhasor in sourceCell.PhasorDefinitions) { derivedCell.PhasorDefinitions.Add(new PhasorDefinition { ID = --phasorID, Label = sourcePhasor.Label, PhasorType = sourcePhasor.PhasorType.ToString(), SourceIndex = ++sourceIndex }); } // Create equivalent derived analog definitions (assuming analog type = SinglePointOnWave) foreach (IAnalogDefinition sourceAnalog in sourceCell.AnalogDefinitions) { derivedCell.AnalogDefinitions.Add(new AnalogDefinition { Label = sourceAnalog.Label, AnalogType = sourceAnalog.AnalogType.ToString() }); } // Create equivalent derived digital definitions foreach (IDigitalDefinition sourceDigital in sourceCell.DigitalDefinitions) { derivedCell.DigitalDefinitions.Add(new DigitalDefinition { Label = sourceDigital.Label }); } // Add cell to frame derivedFrame.Cells.Add(derivedCell); } derivedFrame.IsConcentrator = derivedFrame.Cells.Count > 1; return(derivedFrame); }