Exemplo n.º 1
0
        public static async Task <bool> CheckAN_P(MODE mode)
        {
            bool result   = false;
            bool result上限 = false;
            bool result下限 = false;

            string Data = "";

            const int numSamples = 10;
            int       offset     = 0;

            //ローカル関数の定義■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
            List <double> GetData()
            {
                General.ClearCommlog();
                Target.SendData("ANB_P");

                while (true)//取り込んだ通信データが規定行数(サンプリング数)になるまで待つ
                {
                    if (Flags.ClickStopButton)
                    {
                        return(null);
                    }
                    if (General.CountNewline() == numSamples + 2)
                    {
                        break;
                    }
                }
                Target.Escape();
                Sleep(1500);
                int 検索開始位置 = 0;
                var List   = new List <double>();

                foreach (var i in Enumerable.Range(0, numSamples))
                {
                    var log        = State.VmComm.RX;
                    int FoundIndex = log.IndexOf("ANB_P,", 検索開始位置);
                    int 改行位置       = log.IndexOf("\r\n", FoundIndex);
                    var 取り出し1行     = log.Substring(FoundIndex, 改行位置 - FoundIndex);
                    var dataList   = 取り出し1行.Split(',');

                    List.Add(Double.Parse(dataList[offset]));
                    検索開始位置 = FoundIndex + 1;
                }
                return(List);
            };
            //■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

            try
            {
                var mess = "";
                switch (mode)
                {
                case MODE.READ_V:
                    mess = "①FGと50/60Hz入力を接続する\r\n②チェッカーの50/60Hz切替を上向きにする";
                    break;

                case MODE.READ_I_1:
                    mess = "①チェッカーのカレントトランス1,2入力切替を上向きにする\r\n②FGをカレントトランス外部入力<1>に接続する";
                    break;

                case MODE.READ_I_2:
                    mess = "①チェッカーのカレントトランス1,2入力切替を上向きにする\r\n②FGをカレントトランス外部入力<2>に接続する";
                    break;
                }
                var dialog = new DialogPic(mess, DialogPic.NAME.その他);
                dialog.ShowDialog();

                return(await Task <bool> .Run(() =>
                {
                    //電源ONする処理
                    General.PowerSupply(true);
                    if (!General.CheckDemo表示())
                    {
                        return false;
                    }

                    Sleep(1200);
                    switch (mode)
                    {
                    case MODE.READ_V:
                        offset = 3;
                        // マルチメータで出力値を計測しながらFGを調整する
                        General.Set3229Meas(General.MEAS3229_CH.CN11_1);    //マルチメータ切り替え処理を記述
                        if (!SetFG_6_5Vrms())
                        {
                            return false;
                        }
                        break;

                    case MODE.READ_I_1:
                        offset = 4;
                        // FG出力値は固
                        if (!SetFG_5_7Vrms())
                        {
                            return false;
                        }
                        break;

                    case MODE.READ_I_2:
                        offset = 5;
                        // FG出力値は固定
                        if (!SetFG_5_7Vrms())
                        {
                            return false;
                        }
                        break;
                    }

                    Sleep(500);
                    var ListData_ = GetData();
                    if (ListData_ == null)
                    {
                        return false;
                    }

                    //安定後のデータを取得する
                    //最後から5ヶのデータをサンプリング値として取得する(前半は値が安定していない可能性があるため)
                    //5個飛ばして5個を抽出(インデックスが5から10)
                    var ListData = ListData_.Skip(5).Take(5).ToList <double>();

                    switch (mode)
                    {
                    case MODE.READ_V:
                        result下限 = ListData.All(data => data >= State.TestSpec.電圧換算値_Min);
                        result上限 = ListData.All(data => data <= State.TestSpec.電圧換算値_Max);
                        result = result下限 && result上限;
                        break;

                    case MODE.READ_I_1:
                    case MODE.READ_I_2:
                        ListData.Sort();
                        result下限 = ListData[2] >= State.TestSpec.電流換算値_Min;    //中央値で判定
                        result上限 = ListData[2] <= State.TestSpec.電流換算値_Max;    //中央値で判定
                        //result下限 = ListData.All(data => data >= State.testSpec.電流換算値_Min);//初期の頃の判定方法
                        //result上限 = ListData.All(data => data <= State.testSpec.電流換算値_Max);//初期の頃の判定方法
                        result = result下限 && result上限;
                        break;
                    }



                    ListData.Sort();
                    if (result)
                    {
                        Data = ListData[2].ToString("F1");//中央値
                    }
                    else
                    {
                        if (!result下限)
                        {
                            Data = ListData[0].ToString("F1");//Min
                        }
                        else
                        {
                            Data = ListData[4].ToString("F1");//Max
                        }
                    }

                    return result;
                }));
            }
            catch
            {
                return(false);
            }
            finally
            {
                WaveFormGenerator.SourceOff();
                General.PowerSupply(false);

                //ビューモデルの更新
                switch (mode)
                {
                case MODE.READ_V:
                    State.VmTestResults.VolConverted    = Data + "Vrms";
                    State.VmTestResults.ColVolConverted = result ? OffBrush : NgBrush;
                    break;

                case MODE.READ_I_1:
                    State.VmTestResults.CT1    = Data + "Arms";
                    State.VmTestResults.ColCT1 = result ? OffBrush : NgBrush;
                    break;

                case MODE.READ_I_2:
                    State.VmTestResults.CT2    = Data + "Arms";
                    State.VmTestResults.ColCT2 = result ? OffBrush : NgBrush;
                    break;
                }
            }
        }