public static new DataRecord_Base CreateData(byte[] srcdata) { Mode2Record ret = new Mode2Record(); ret.Data = srcdata; return ret; }
/// <summary> /// モード2データのセット /// </summary> /// <param name="reserveData"></param> /// <param name="sampleData"></param> private void SetMode2Data(Mode2Record reserveData, ref SampleData sampleData) { if (((Mode2Header)reserveData.HeaderData).Time.Hour == 23 && DateTime.Now.Hour == 0) sampleData.SampleTime = DateTime.Today.AddDays(-1).AddTicks(((Mode2Header)reserveData.HeaderData).Time.Ticks); else sampleData.SampleTime = DateTime.Today.AddTicks(((Mode2Header)reserveData.HeaderData).Time.Ticks); sampleData.ChannelDatas = new ChannelData[11]; Value_Standard valuedata = new Value_Standard(); Value_Mode2 value2data = new Value_Mode2(); List<List<decimal>> tempValueList = new List<List<decimal>>(); int channelCount = 0; int tmpIndex = 0; //有効チャンネル数取得 for (int i = 0; i < channelEnables.Length; i++) { if (channelEnables[i]) channelCount++; } //モード2データの空データを作成 for (int i = 0; i < reserveData.MeasData.chData.Length; i += channelCount) { for (int j = 0; j < channelCount; j++) { if (tempValueList.Count <= j) tempValueList.Add(new List<decimal>()); tempValueList[j].Add(((Mode2Record)reserveData).MeasData.chData[i + j]); } } //チャンネル分+回転数分ループ for (int channelIndex = 0; channelIndex < channelEnables.Length + 1; channelIndex++) { //回転数の場合 if (channelIndex == 0) { valuedata.Value = ((Mode2Header)reserveData.HeaderData).RevolutionSpeed; sampleData.ChannelDatas[channelIndex] = new ChannelData(); sampleData.ChannelDatas[channelIndex].DataValues = valuedata; } else { if (!ChannelEnables[channelIndex - 1]) continue; sampleData.ChannelDatas[channelIndex] = new ChannelData(); sampleData.ChannelDatas[channelIndex].Position = channelIndex; value2data = new Value_Mode2(); //最大振幅 ブロック1 decimal MaxValue = tempValueList[tmpIndex][0]; //温度データ ブロック2 int TempValue = (int)(tempValueList[tmpIndex][1] == 0xFFFF ? -1 : tempValueList[tmpIndex][1]); //サンプルデータ ブロック3以降 value2data.Values = tempValueList[tmpIndex].GetRange(2, tempValueList[tmpIndex].Count - 2).ToArray(); tmpIndex++; //センサ種により処理分け switch (channelsSetting.ChannelSettingList[channelIndex - 1].ChKind) { case ChannelKindType.B: case ChannelKindType.R: //B,Rセンサは温度と最大振幅ありで補償処理 for (int valueIndex = 0; valueIndex < value2data.Values.Length; valueIndex++) { value2data.Values[valueIndex] = CalcOperator.Calc(channelIndex-1, value2data.Values[valueIndex], MaxValue, TempValue); } //温度補償必要 //ブロック1 == 最大振幅 //ブロック2 == 温度データ //value2data.Values == AD値配列 break; default: //その他は演算 for (int valueIndex = 0; valueIndex < value2data.Values.Length; valueIndex++) { value2data.Values[valueIndex] = CalcOperator.Calc(channelIndex - 1, value2data.Values[valueIndex]); } break; } sampleData.ChannelDatas[channelIndex].DataValues = value2data; } } }