Ejemplo n.º 1
0
        public static new DataRecord_Base CreateData(byte[] srcdata)
        {
            Mode3Record ret = new Mode3Record();

            ret.Data = srcdata;

            return ret;
        }
Ejemplo n.º 2
0
        /// <summary>
        /// モード3データのセット
        /// </summary>
        /// <param name="reserveData"></param>
        /// <param name="sampleData"></param>
        private void SetMode3Data(Mode3Record reserveData, ref SampleData sampleData)
        {
            sampleData.SampleTime = DateTime.Now;

            sampleData.ChannelDatas = new ChannelData[11];
            Value_Standard valuedata = null;

            //データ取得用オフセット
            int dataoffset = 0;

            //チャンネル分+回転数分ループ
            for (int channelIndex = 0; channelIndex < channelEnables.Length + 1; channelIndex++)
            {
                if (channelIndex != 0 && !ChannelEnables[channelIndex - 1]) continue;

                sampleData.ChannelDatas[channelIndex] = new ChannelData();
                sampleData.ChannelDatas[channelIndex].Position = channelIndex;


                //回転数の場合
                if (channelIndex == 0)
                {
                }
                else
                {
                    //モード3データを生成

                    //センサ種により処理分け
                    switch (channelsSetting.ChannelSettingList[channelIndex - 1].ChKind)
                    {
                        case ChannelKindType.B:
                            valuedata = new Value_Standard();

                            //補償演算
                            valuedata.Value = CalcOperator.Calc(channelIndex - 1
                                , reserveData.MeasData.chData[dataoffset + 2]
                                , reserveData.MeasData.chData[dataoffset]
                                , (reserveData.MeasData.chData[dataoffset + 1] == 0xFFFF ? -1 : reserveData.MeasData.chData[dataoffset + 1]));
                            
                            //valuedata.Value = SystemSetting.CalibrationTables[channelIndex - 1].Calc(
                            //    reserveData.MeasData.chData[dataoffset + 2]
                            //    , reserveData.MeasData.chData[dataoffset]
                            //    , reserveData.MeasData.chData[dataoffset + 1]);

                            //温度補償必要
                            //chData[dataoffset] == 最大振幅
                            //chData[dataoffset + 1] == 温度データ
                            //chData[dataoffset + 2] == AD値

                            //臨時
                            //valuedata.Value = reserveData.MeasData.chData[dataoffset + 2];

                            sampleData.ChannelDatas[channelIndex].DataValues = valuedata;
                            break;

                        case ChannelKindType.R:

                            valuedata = new Value_Standard();

                            //補償演算
                            valuedata.Value = CalcOperator.Calc(channelIndex - 1
                                , reserveData.MeasData.chData[dataoffset + 1]
                                , tempValue:(reserveData.MeasData.chData[dataoffset] == 0xFFFF ? -1 : reserveData.MeasData.chData[dataoffset]));


                            ////温度補償
                            //valuedata.Value = SystemSetting.CalibrationTables[channelIndex - 1].Calc(
                            //    reserveData.MeasData.chData[dataoffset + 1]
                            //    , -1
                            //    , reserveData.MeasData.chData[dataoffset]);

                            //温度補償必要
                            //chData[dataoffset] == 温度データ
                            //chData[dataoffset + 1] == AD値

                            //臨時
                            //valuedata.Value = reserveData.MeasData.chData[dataoffset + 1];

                            sampleData.ChannelDatas[channelIndex].DataValues = valuedata;

                            break;

                        default:
                            //B,Rセンサ以外は1つ目がデータ
                            valuedata = new Value_Standard();

                            //LセンサでChannelの0要求があった場合
                            if (channelsSetting.ChannelSettingList[channelIndex - 1].ChKind == ChannelKindType.L &&
                                channelIndex == L_ZeroSettingRequestNo)
                            {
                                SystemSetting.DataTagSetting.GetTag(SystemSetting.RelationSetting.RelationList[channelIndex].TagNo_1).StaticZero = reserveData.MeasData.chData[dataoffset];
                                L_ZeroSettingRequestNo = 0;
                            }

                            //補償演算
                            valuedata.Value = CalcOperator.Calc(channelIndex - 1, reserveData.MeasData.chData[dataoffset]);

                            //valuedata.Value = reserveData.MeasData.chData[dataoffset];

                            sampleData.ChannelDatas[channelIndex].DataValues = valuedata;

                            break;
                    }

                    //次チャンネルのデータに移動
                    dataoffset += 3;
                }
            }
        }