Beispiel #1
0
        public static new DataRecord_Base CreateData(byte[] srcdata)
        {
            Mode2Record ret = new Mode2Record();

            ret.Data = srcdata;

            return ret;
        }
Beispiel #2
0
        /// <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;
                }
            }
        }