private Channel ParseSeries(AnalogChannel analogChannel) { Channel channel = new Channel(); Series series = new Series(); channel.Name = analogChannel.ChannelName; channel.HarmonicGroup = 0; channel.MeasurementType = new MeasurementType(); channel.MeasurementType.Name = "Unknown"; channel.MeasurementCharacteristic = new MeasurementCharacteristic(); channel.MeasurementCharacteristic.Name = "Unknown"; channel.Phase = new Phase(); channel.Phase.Name = !string.IsNullOrEmpty(analogChannel.PhaseID) ? analogChannel.PhaseID : "Unknown"; series.Channel = channel; series.SeriesType = new SeriesType(); series.SeriesType.Name = "Values"; series.SourceIndexes = analogChannel.Index.ToString(); return channel; }
private Schema WriteSchemaFile(COMTRADEData comtradeData, string schemaFilePath) { Schema schema = Writer.CreateSchema(new List<ChannelMetadata>(), comtradeData.StationName, comtradeData.DeviceID, comtradeData.DataStartTime, comtradeData.SampleCount, samplingRate: comtradeData.SamplingRate, includeFracSecDefinition: false, nominalFrequency: m_systemFrequency); List<AnalogChannel> analogChannels = new List<AnalogChannel>(); List<DigitalChannel> digitalChannels = new List<DigitalChannel>(); int i = 1; // Populate the analog channel list with analog channel metadata foreach (COMTRADEChannelData channelData in comtradeData.AnalogChannelData) { AnalogChannel analogChannel = new AnalogChannel(); analogChannel.Index = i; analogChannel.Name = channelData.Name; analogChannel.MinValue = -short.MaxValue; analogChannel.MaxValue = short.MaxValue; analogChannel.Units = channelData.Units; if ((object)channelData.OriginalAnalogChannel != null) { analogChannel.PhaseID = channelData.OriginalAnalogChannel.PhaseID; analogChannel.CircuitComponent = channelData.OriginalAnalogChannel.CircuitComponent; analogChannel.Units = channelData.OriginalAnalogChannel.Units; analogChannel.Skew = channelData.OriginalAnalogChannel.Skew; analogChannel.PrimaryRatio = channelData.OriginalAnalogChannel.PrimaryRatio; analogChannel.SecondaryRatio = channelData.OriginalAnalogChannel.SecondaryRatio; analogChannel.ScalingIdentifier = channelData.OriginalAnalogChannel.ScalingIdentifier; if (analogChannel.Units.ToUpper().Contains("KA") || analogChannel.Units.ToUpper().Contains("KV")) channelData.Data = channelData.Data.Multiply(0.001); } analogChannel.Multiplier = (channelData.Data.Maximum - channelData.Data.Minimum) / (2 * short.MaxValue); analogChannel.Adder = (channelData.Data.Maximum + channelData.Data.Minimum) / 2.0D; analogChannels.Add(analogChannel); i++; } i = 1; // Populate the digital channel list with digital channel metadata foreach (COMTRADEChannelData channelData in comtradeData.DigitalChannelData) { DigitalChannel digitalChannel = new DigitalChannel(); digitalChannel.Index = i; digitalChannel.Name = channelData.Name; if ((object)channelData.OriginalDigitalChannel != null) { digitalChannel.PhaseID = channelData.OriginalDigitalChannel.PhaseID; digitalChannel.CircuitComponent = channelData.OriginalDigitalChannel.CircuitComponent; digitalChannel.NormalState = channelData.OriginalDigitalChannel.NormalState; } digitalChannels.Add(digitalChannel); i++; } schema.AnalogChannels = analogChannels.ToArray(); schema.DigitalChannels = digitalChannels.ToArray(); // Dump the generated schema to the schema file File.WriteAllText(FilePath.GetAbsolutePath(schemaFilePath), schema.FileImage, Encoding.ASCII); // Return the schema return schema; }