示例#1
0
        public static async Task<bool> CheckVref()
        {
            string HexStr = "";
            bool result = false;

            try
            {
                return await Task<bool>.Run(() =>
                {
                    //一回電源OFF→ONして再確認
                    General.PowerSupply(true);
                    Sleep(2000);
                    //デモ画面確認
                    if (!General.CheckDemo表示())
                        return false;
                    //通信ログクリア
                    General.ClearCommlog();

                    Target.SendData("@VREF*");

                    while (true)//取り込んだ通信データが規定行数(サンプリング数)になるまで待つ
                    {
                        if (Flags.ClickStopButton) return false;
                        if (General.CountNewline() == 2) break;
                    }
                    Target.Escape();

                    var log = State.VmComm.RX;
                    var FoundIndex = log.IndexOf("@VREF*,");
                    var 改行位置 = log.IndexOf("\r\n", FoundIndex);
                    var 取り出し1行 = log.Substring(FoundIndex, 改行位置 - FoundIndex);
                    var dataList = 取り出し1行.Split(',');
                    HexStr = dataList[1].Substring(1);//一文字目がスペースなので削除する
                    State.VmTestResults.Vref_Re = HexStr + "h";

                    var vrefData = State.VmTestResults.Vref.Trim('h');//末尾にhが付加されている 
                    result = (HexStr == vrefData);
                    return result;

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

                //VMの更新
                State.VmTestResults.ColVref_Re = result ? OffBrush : NgBrush;
            }
        }
        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;
                }
            }
        }
示例#3
0
        public static async Task <bool> SetInputI(NAME name)
        {
            bool result第一調整点 = false;
            bool result第二調整点 = false;

            string Data第一調整点 = "";
            string Data第二調整点 = "";

            string Data第一調整点再 = "";
            string Data第二調整点再 = "";

            State.VmTestStatus.TestLog += $" {name.ToString()} 調整";

            //ローカルの定義■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
            string GetData(string command)
            {
                General.ClearCommlog();
                Target.SendData(command);

                while (true)//取り込んだ通信データが規定行数(サンプリング数)になるまで待つ
                {
                    if (Flags.ClickStopButton)
                    {
                        return(null);
                    }
                    if (General.CountNewline() == 2)
                    {
                        break;
                    }
                }
                Target.Escape();
                Sleep(1000);
                var log        = State.VmComm.RX;
                int FoundIndex = log.IndexOf(command + ",");
                int 改行位置       = log.IndexOf("\r\n", FoundIndex);
                var 取り出し1行     = log.Substring(FoundIndex, 改行位置 - FoundIndex);
                var dataList   = 取り出し1行.Split(',');

                return(dataList[2].Substring(1));//一文字目がスペースなので削除
            };

            List <string> GetData再(string command)
            {
                General.ClearCommlog();
                Target.SendData(command);

                while (true)//取り込んだ通信データが規定行数(サンプリング数)になるまで待つ
                {
                    if (Flags.ClickStopButton)
                    {
                        return(null);
                    }
                    if (General.CountNewline() == 2)
                    {
                        break;
                    }
                }
                Target.Escape();
                Sleep(1000);
                var log        = State.VmComm.RX;
                int FoundIndex = log.IndexOf(command + ",");
                int 改行位置       = log.IndexOf("\r\n", FoundIndex);
                var 取り出し1行     = log.Substring(FoundIndex, 改行位置 - FoundIndex);
                var dataList   = 取り出し1行.Split(',');

                return(new List <string>()
                {
                    dataList[1].Substring(1), dataList[2].Substring(1)
                });                                                                               //一文字目がスペースなので削除
            };
            //■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

            try
            {
                return(await Task <bool> .Run(() =>
                {
                    SetSourc(name);
                    Sleep(1000);

                    string command = "";
                    switch (name)
                    {
                    case NAME.I_1:
                        //MessageBox.Show("CN2にシグナルソース(電流端子)を接続してください");
                        command = "I1";
                        break;

                    case NAME.I_2:
                        //MessageBox.Show("CN4にシグナルソース(電流端子)を接続してください");
                        command = "I2";
                        break;

                    case NAME.I_3:
                        //MessageBox.Show("CN6にシグナルソース(電流端子)を接続してください");
                        command = "I3";
                        break;

                    case NAME.I_4:
                        //MessageBox.Show("CN8にシグナルソース(電流端子)を接続してください");
                        command = "I4";
                        break;
                    }
                    Sleep(500);

                    //電源ONする処理
                    General.PowerSupply(true);
                    if (!General.CheckDemo表示())
                    {
                        return false;
                    }

                    HIOKI7012.OutDcI(0.000);
                    Sleep(2000);
                    Data第一調整点 = GetData(command + "1");
                    if (Data第一調整点 == null)
                    {
                        return false;
                    }
                    Sleep(500);

                    HIOKI7012.OutDcI(20.000);
                    Sleep(2000);
                    Data第二調整点 = GetData(command + "2");
                    if (Data第二調整点 == null)
                    {
                        return false;
                    }
                    Sleep(500);
                    HIOKI7012.StopSource();

                    General.PowerSupply(false);
                    Sleep(1000);

                    //電源ONする処理
                    General.PowerSupply(true);
                    if (!General.CheckDemo表示())
                    {
                        return false;
                    }

                    var ListData再 = GetData再("@" + command + "*");
                    if (ListData再 == null)
                    {
                        return false;
                    }

                    Data第一調整点再 = ListData再[0];
                    Data第二調整点再 = ListData再[1];

                    result第一調整点 = Data第一調整点 == Data第一調整点再;
                    result第二調整点 = Data第二調整点 == Data第二調整点再;

                    return result第一調整点 && result第二調整点;
                }));
            }
            catch
            {
                return(false);
            }
            finally
            {
                State.VmTestStatus.TestLog += result第一調整点 && result第二調整点? "---PASS\r\n" :"---FAIL\r\n";
                HIOKI7012.StopSource();
                General.PowerSupply(false);

                switch (name)
                {
                case NAME.I_1:
                    State.VmTestResults.I1_1      = Data第一調整点 + "h";
                    State.VmTestResults.I1_2      = Data第二調整点 + "h";
                    State.VmTestResults.I1_1RE    = Data第一調整点再 + "h";
                    State.VmTestResults.I1_2RE    = Data第二調整点再 + "h";
                    State.VmTestResults.ColI1_1   = result第一調整点 ? OffBrush : NgBrush;
                    State.VmTestResults.ColI1_2   = result第二調整点 ? OffBrush : NgBrush;
                    State.VmTestResults.ColI1_1RE = result第一調整点 ? OffBrush : NgBrush;
                    State.VmTestResults.ColI1_2RE = result第二調整点 ? OffBrush : NgBrush;
                    break;

                case NAME.I_2:
                    State.VmTestResults.I2_1      = Data第一調整点 + "h";
                    State.VmTestResults.I2_2      = Data第二調整点 + "h";
                    State.VmTestResults.I2_1RE    = Data第一調整点再 + "h";
                    State.VmTestResults.I2_2RE    = Data第二調整点再 + "h";
                    State.VmTestResults.ColI2_1   = result第一調整点 ? OffBrush : NgBrush;
                    State.VmTestResults.ColI2_2   = result第二調整点 ? OffBrush : NgBrush;
                    State.VmTestResults.ColI2_1RE = result第一調整点 ? OffBrush : NgBrush;
                    State.VmTestResults.ColI2_2RE = result第二調整点 ? OffBrush : NgBrush;
                    break;

                case NAME.I_3:
                    State.VmTestResults.I3_1      = Data第一調整点 + "h";
                    State.VmTestResults.I3_2      = Data第二調整点 + "h";
                    State.VmTestResults.I3_1RE    = Data第一調整点再 + "h";
                    State.VmTestResults.I3_2RE    = Data第二調整点再 + "h";
                    State.VmTestResults.ColI3_1   = result第一調整点 ? OffBrush : NgBrush;
                    State.VmTestResults.ColI3_2   = result第二調整点 ? OffBrush : NgBrush;
                    State.VmTestResults.ColI3_1RE = result第一調整点 ? OffBrush : NgBrush;
                    State.VmTestResults.ColI3_2RE = result第二調整点 ? OffBrush : NgBrush;
                    break;

                case NAME.I_4:
                    State.VmTestResults.I4_1      = Data第一調整点 + "h";
                    State.VmTestResults.I4_2      = Data第二調整点 + "h";
                    State.VmTestResults.I4_1RE    = Data第一調整点再 + "h";
                    State.VmTestResults.I4_2RE    = Data第二調整点再 + "h";
                    State.VmTestResults.ColI4_1   = result第一調整点 ? OffBrush : NgBrush;
                    State.VmTestResults.ColI4_2   = result第二調整点 ? OffBrush : NgBrush;
                    State.VmTestResults.ColI4_1RE = result第一調整点 ? OffBrush : NgBrush;
                    State.VmTestResults.ColI4_2RE = result第二調整点 ? OffBrush : NgBrush;
                    break;
                }
            }
        }
示例#4
0
        public static async Task <bool> CheckInputI(NAME name)
        {
            await Task.Delay(1500);

            bool result   = false;
            bool result下限 = false;
            bool result上限 = false;

            string resultData = "";

            const int SampleCnt = 5;

            var ListData = new List <double>();

            State.VmTestStatus.TestLog += $" {name.ToString()} 10mA確認";

            //ラムダ式の定義■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
            Action GetData = () =>
            {
                General.ClearCommlog();
                Target.SendData("I_IN");

                while (true)//取り込んだ通信データが規定行数(サンプリング数)になるまで待つ
                {
                    if (Flags.ClickStopButton)
                    {
                        return;
                    }
                    if (General.CountNewline() == SampleCnt + 2)
                    {
                        break;
                    }
                }
                Target.Escape();
                int offset = 0;
                switch (name)
                {
                case NAME.I_1:
                    offset = 1;
                    break;

                case NAME.I_2:
                    offset = 2;
                    break;

                case NAME.I_3:
                    offset = 3;
                    break;

                case NAME.I_4:
                    offset = 4;
                    break;
                }


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

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

            //■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

            try
            {
                return(await Task <bool> .Run(() =>
                {
                    SetSourc(name);
                    Sleep(1000);

                    //電源ONする処理
                    General.PowerSupply(true);
                    if (!General.CheckDemo表示())
                    {
                        return false;
                    }

                    HIOKI7012.OutDcI(10.000);
                    Sleep(2000);
                    GetData();
                    Sleep(500);
                    HIOKI7012.StopSource();
                    General.PowerSupply(false);

                    result下限 = ListData.All(data => data >= State.TestSpec.I_10mA_Min);
                    result上限 = ListData.All(data => data <= State.TestSpec.I_10mA_Max);
                    result = result下限 && result上限;

                    ListData.Sort();
                    if (result)
                    {
                        resultData = ListData[SampleCnt / 2].ToString("F3") + "mA";//中央値
                    }
                    else
                    {
                        if (!result下限)
                        {
                            resultData = ListData[0].ToString("F3") + "mA";//Min
                        }
                        else
                        {
                            resultData = ListData[SampleCnt - 1].ToString("F3") + "mA";//Max
                        }
                    }

                    return result;
                }));
            }
            catch
            {
                return(false);
            }
            finally
            {
                State.VmTestStatus.TestLog += result? "---PASS\r\n" :"---FAIL\r\n";
                HIOKI7012.StopSource();
                General.PowerSupply(false);

                switch (name)
                {
                case NAME.I_1:
                    State.VmTestResults.I1_10mA    = resultData;
                    State.VmTestResults.ColI1_10mA = result ? OffBrush : NgBrush;
                    break;

                case NAME.I_2:
                    State.VmTestResults.I2_10mA    = resultData;
                    State.VmTestResults.ColI2_10mA = result ? OffBrush : NgBrush;
                    break;

                case NAME.I_3:
                    State.VmTestResults.I3_10mA    = resultData;
                    State.VmTestResults.ColI3_10mA = result ? OffBrush : NgBrush;
                    break;

                case NAME.I_4:
                    State.VmTestResults.I4_10mA    = resultData;
                    State.VmTestResults.ColI4_10mA = result ? OffBrush : NgBrush;
                    break;
                }
            }
        }
示例#5
0
        public static async Task <bool> SetInputV(MODE mode)
        {
            bool FlagTimeout = false;

            System.Timers.Timer Tm;

            //タイマー(ウィンドウハンドル取得用)の設定
            Tm          = new System.Timers.Timer();
            Tm.Enabled  = false;
            Tm.Interval = 10000;
            Tm.Elapsed += (o, e) =>
            {
                Tm.Stop();
                FlagTimeout = true;
            };


            bool result第一調整点 = false;
            bool result第二調整点 = false;

            string Data第一調整点 = "";
            string Data第二調整点 = "";

            string Data第一調整点再 = "";
            string Data第二調整点再 = "";

            State.VmTestStatus.TestLog += $" {mode.ToString()} 調整";

            //ローカル関数の定義■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
            string GetData(string command)
            {
                General.ClearCommlog();
                Target.SendData(command);

                Tm.Stop();
                FlagTimeout = false;
                Tm.Start();
                while (true)//取り込んだ通信データが規定行数(サンプリング数)になるまで待つ
                {
                    if (FlagTimeout || Flags.ClickStopButton)
                    {
                        return(null);
                    }
                    if (General.CountNewline() == 2)
                    {
                        break;
                    }
                }
                Target.Escape();
                Sleep(1000);
                var log        = State.VmComm.RX;
                int FoundIndex = log.IndexOf(command + ",");
                int 改行位置       = log.IndexOf("\r\n", FoundIndex);
                var 取り出し1行     = log.Substring(FoundIndex, 改行位置 - FoundIndex);
                var dataList   = 取り出し1行.Split(',');

                return(dataList[2].Substring(1));//一文字目がスペースなので削除
            };

            List <string> GetData再(string command)
            {
                General.ClearCommlog();
                Target.SendData(command);

                Tm.Stop();
                FlagTimeout = false;
                Tm.Start();
                while (true)//取り込んだ通信データが規定行数(サンプリング数)になるまで待つ
                {
                    if (FlagTimeout || Flags.ClickStopButton)
                    {
                        return(null);
                    }
                    if (General.CountNewline() == 2)
                    {
                        break;
                    }
                }
                Target.Escape();
                Sleep(1000);
                var log        = State.VmComm.RX;
                int FoundIndex = log.IndexOf(command + ",");
                int 改行位置       = log.IndexOf("\r\n", FoundIndex);
                var 取り出し1行     = log.Substring(FoundIndex, 改行位置 - FoundIndex);
                var dataList   = 取り出し1行.Split(',');

                return(new List <string>()
                {
                    dataList[1].Substring(1), dataList[2].Substring(1)
                });                                                                               //一文字目がスペースなので削除
            };
            //■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

            try
            {
                return(await Task <bool> .Run(() =>
                {
                    string command = "";
                    switch (mode)
                    {
                    case MODE.V_1:
                        //メッセージボックス表示("CN2にシグナルソース(電圧端子)を接続してください");
                        General.Set7012Source(General.SOURCE_CH.V1);
                        command = "V1";
                        break;

                    case MODE.V_2:
                        //メッセージボックス表示("CN4にシグナルソース(電圧端子)を接続してください");
                        General.Set7012Source(General.SOURCE_CH.V2);
                        command = "V2";
                        break;

                    case MODE.V_3:
                        //メッセージボックス表示("CN6にシグナルソース(電圧端子)を接続してください");
                        General.Set7012Source(General.SOURCE_CH.V3);
                        command = "V3";
                        break;

                    case MODE.V_4:
                        //メッセージボックス表示("CN8にシグナルソース(電圧端子)を接続してください");
                        General.Set7012Source(General.SOURCE_CH.V4);
                        command = "V4";
                        break;
                    }
                    Sleep(500);
                    //電源ONする処理
                    General.PowerSupply(true);
                    if (!General.CheckDemo表示())
                    {
                        return false;
                    }

                    HIOKI7012.OutDcV(0.500);
                    Sleep(2000);
                    Data第一調整点 = GetData(command + "1");
                    if (Data第一調整点 == null)
                    {
                        return false;
                    }
                    Sleep(500);

                    HIOKI7012.OutDcV(10.000);
                    Sleep(2000);
                    Data第二調整点 = GetData(command + "2");
                    if (Data第二調整点 == null)
                    {
                        return false;
                    }
                    Sleep(500);

                    General.PowerSupply(false);
                    Sleep(1000);

                    //電源ONする処理
                    General.PowerSupply(true);
                    if (!General.CheckDemo表示())
                    {
                        return false;
                    }

                    var ListData再 = GetData再("@" + command + "*");
                    if (ListData再 == null)
                    {
                        return false;
                    }

                    Data第一調整点再 = ListData再[0];
                    Data第二調整点再 = ListData再[1];

                    result第一調整点 = Data第一調整点 == Data第一調整点再;
                    result第二調整点 = Data第二調整点 == Data第二調整点再;

                    return result第一調整点 && result第二調整点;
                }));
            }
            catch
            {
                return(false);
            }
            finally
            {
                State.VmTestStatus.TestLog += result第一調整点 && result第二調整点 ? "---PASS\r\n" : "---FAIL\r\n";
                HIOKI7012.StopSource();
                General.PowerSupply(false);

                switch (mode)
                {
                case MODE.V_1:
                    State.VmTestResults.V1_1      = Data第一調整点 + "h";
                    State.VmTestResults.V1_2      = Data第二調整点 + "h";
                    State.VmTestResults.V1_1RE    = Data第一調整点再 + "h";
                    State.VmTestResults.V1_2RE    = Data第二調整点再 + "h";
                    State.VmTestResults.ColV1_1   = result第一調整点 ? OffBrush : NgBrush;
                    State.VmTestResults.ColV1_2   = result第二調整点 ? OffBrush : NgBrush;
                    State.VmTestResults.ColV1_1RE = result第一調整点 ? OffBrush : NgBrush;
                    State.VmTestResults.ColV1_2RE = result第二調整点 ? OffBrush : NgBrush;
                    break;

                case MODE.V_2:
                    State.VmTestResults.V2_1      = Data第一調整点 + "h";
                    State.VmTestResults.V2_2      = Data第二調整点 + "h";
                    State.VmTestResults.V2_1RE    = Data第一調整点再 + "h";
                    State.VmTestResults.V2_2RE    = Data第二調整点再 + "h";
                    State.VmTestResults.ColV2_1   = result第一調整点 ? OffBrush : NgBrush;
                    State.VmTestResults.ColV2_2   = result第二調整点 ? OffBrush : NgBrush;
                    State.VmTestResults.ColV2_1RE = result第一調整点 ? OffBrush : NgBrush;
                    State.VmTestResults.ColV2_2RE = result第二調整点 ? OffBrush : NgBrush;
                    break;

                case MODE.V_3:
                    State.VmTestResults.V3_1      = Data第一調整点 + "h";
                    State.VmTestResults.V3_2      = Data第二調整点 + "h";
                    State.VmTestResults.V3_1RE    = Data第一調整点再 + "h";
                    State.VmTestResults.V3_2RE    = Data第二調整点再 + "h";
                    State.VmTestResults.ColV3_1   = result第一調整点 ? OffBrush : NgBrush;
                    State.VmTestResults.ColV3_2   = result第二調整点 ? OffBrush : NgBrush;
                    State.VmTestResults.ColV3_1RE = result第一調整点 ? OffBrush : NgBrush;
                    State.VmTestResults.ColV3_2RE = result第二調整点 ? OffBrush : NgBrush;
                    break;

                case MODE.V_4:
                    State.VmTestResults.V4_1      = Data第一調整点 + "h";
                    State.VmTestResults.V4_2      = Data第二調整点 + "h";
                    State.VmTestResults.V4_1RE    = Data第一調整点再 + "h";
                    State.VmTestResults.V4_2RE    = Data第二調整点再 + "h";
                    State.VmTestResults.ColV4_1   = result第一調整点 ? OffBrush : NgBrush;
                    State.VmTestResults.ColV4_2   = result第二調整点 ? OffBrush : NgBrush;
                    State.VmTestResults.ColV4_1RE = result第一調整点 ? OffBrush : NgBrush;
                    State.VmTestResults.ColV4_2RE = result第二調整点 ? OffBrush : NgBrush;
                    break;
                }
            }
        }
        public static async Task <bool> CheckPWPV(MODE mode)
        {
            try
            {
                var mess = "";
                switch (mode)
                {
                case MODE.Motor_L:
                    mess = "パルスモータが ひだり に4回転するのを確認してください\r\nA(左) → B(右)の順に回ります\r\nOKボタンを押すと回ります";
                    break;

                case MODE.Motor_R:
                    mess = "パルスモータが みぎ に4回転するのを確認してください\r\nA(左) → B(右)の順に回ります\r\nOKボタンを押すと回ります";
                    break;
                }
                var dialog = new DialogPic(mess, DialogPic.NAME.その他);
                dialog.ShowDialog();

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

                    switch (mode)
                    {
                    case MODE.Motor_L:

                        Target.SendData("PWPV1 800 0");    //モータA 左回転
                        var tm = new GeneralTimer(11000);
                        tm.Start();
                        while (true)
                        {
                            if (tm.FlagTimeout)
                            {
                                return(false);
                            }
                            if (State.VmComm.RX.Contains(">>"))
                            {
                                break;
                            }
                        }
                        Sleep(150);
                        General.ClearCommlog();
                        Target.SendData("PWPV2 800 0");    //モータB 左回転
                        tm.Start();
                        while (true)
                        {
                            if (tm.FlagTimeout)
                            {
                                return(false);
                            }
                            if (State.VmComm.RX.Contains(">>"))
                            {
                                break;
                            }
                        }
                        break;

                    case MODE.Motor_R:
                        Target.SendData("PWPV1 0 800");    //モータA 右回転
                        var tm2 = new GeneralTimer(11000);
                        tm2.Start();
                        while (true)
                        {
                            if (tm2.FlagTimeout)
                            {
                                return(false);
                            }
                            if (State.VmComm.RX.Contains(">>"))
                            {
                                break;
                            }
                        }
                        Sleep(150);
                        General.ClearCommlog();
                        Target.SendData("PWPV2 0 800");    //モータB 右回転
                        tm2.Start();
                        while (true)
                        {
                            if (tm2.FlagTimeout)
                            {
                                return(false);
                            }
                            if (State.VmComm.RX.Contains(">>"))
                            {
                                break;
                            }
                        }
                        break;
                    }
                    return(true);
                });

                if (!re)
                {
                    return(false);
                }

                dialog = new DialogPic("モータが正しく回転しましたか?", DialogPic.NAME.その他, soundSw: false);
                dialog.ShowDialog();

                return(Flags.DialogReturn);
            }
            catch
            {
                return(false);
            }
            finally
            {
                General.PowerSupply(false);
            }
        }
示例#7
0
        const int numSamples = 3; //サンプリング数はここで変更する
                                  //※奇数で指定すること(中央値を計測結果として表示するため)

        public static async Task <bool> CheckANA1_P(CH ch)
        {
            bool result0v  = false;
            bool result5v  = false;
            bool result10v = false;

            bool result0v下限  = false;
            bool result0v上限  = false;
            bool result5v下限  = false;
            bool result5v上限  = false;
            bool result10v下限 = false;
            bool result10v上限 = false;

            string Data0v  = "";
            string Data5v  = "";
            string Data10v = "";

            int offset = 0;

            //ローカル関数の定義■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
            List <double> GetData(double OutVal)
            {
                General.ClearCommlog();
                //シグナルソースから電圧出力
                HIOKI7012.OutDcV(OutVal);
                Sleep(1000);

                Target.SendData("ANA1_P");

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

                foreach (var i in Enumerable.Range(0, numSamples))
                {
                    var log        = State.VmComm.RX;
                    int FoundIndex = log.IndexOf("ANA1_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
            {
                return(await Task <bool> .Run(() =>
                {
                    switch (ch)
                    {
                    case CH.ANA0:
                        offset = offsetAna0;
                        Set7012Source(SOURCE_CH.A0);
                        break;

                    case CH.ANA1:
                        offset = offsetAna1;
                        Set7012Source(SOURCE_CH.A1);
                        break;

                    case CH.ANA2:
                        offset = offsetAna2;
                        Set7012Source(SOURCE_CH.A2);
                        break;

                    case CH.ANA3:
                        offset = offsetAna3;
                        Set7012Source(SOURCE_CH.A3);
                        break;

                    case CH.ANA4:
                        offset = offsetAna4;
                        Set7012Source(SOURCE_CH.A4);
                        break;

                    case CH.ANA5:
                        offset = offsetAna5;
                        Set7012Source(SOURCE_CH.A5);
                        break;

                    case CH.ANA6:
                        offset = offsetAna6;
                        Set7012Source(SOURCE_CH.A6);
                        break;

                    case CH.ANA7:
                        offset = offsetAna7;
                        Set7012Source(SOURCE_CH.A7);
                        break;

                    case CH.ANA8:
                        offset = offsetAna8;
                        Set7012Source(SOURCE_CH.A8);
                        break;

                    case CH.ANA9:
                        offset = offsetAna9;
                        Set7012Source(SOURCE_CH.A9);
                        break;

                    case CH.ANA10:
                        offset = offsetAna10;
                        Set7012Source(SOURCE_CH.A10);
                        break;

                    case CH.ANA11:
                        offset = offsetAna11;
                        Set7012Source(SOURCE_CH.A11);
                        break;
                    }
                    //電源ONする処理
                    General.PowerSupply(true);
                    if (!General.CheckDemo表示())
                    {
                        return false;
                    }

                    var List_Data0v = GetData(0.0);
                    var List_Data5v = GetData(5.0);
                    var List_Data10v = GetData(10.0);
                    if (List_Data0v == null || List_Data5v == null || List_Data10v == null)
                    {
                        return false;
                    }

                    result0v下限 = List_Data0v.All(data => data >= State.TestSpec.AdInput_0Min);
                    result0v上限 = List_Data0v.All(data => data <= State.TestSpec.AdInput_0Max);
                    result0v = result0v下限 && result0v上限;

                    result5v下限 = List_Data5v.All(data => data >= State.TestSpec.AdInput_5Min);
                    result5v上限 = List_Data5v.All(data => data <= State.TestSpec.AdInput_5Max);
                    result5v = result5v下限 && result5v上限;

                    result10v下限 = List_Data10v.All(data => data >= State.TestSpec.AdInput_10Min);
                    result10v上限 = List_Data10v.All(data => data <= State.TestSpec.AdInput_10Max);
                    result10v = result10v下限 && result10v上限;

                    List_Data0v.Sort();
                    if (result0v)
                    {
                        Data0v = List_Data0v[numSamples / 2].ToString("F3");//中央値
                    }
                    else
                    {
                        if (!result0v下限)
                        {
                            Data0v = List_Data0v[0].ToString("F3");//Min
                        }
                        else
                        {
                            Data0v = List_Data0v[numSamples - 1].ToString("F3");//Max
                        }
                    }

                    List_Data5v.Sort();
                    if (result5v)
                    {
                        Data5v = List_Data5v[numSamples / 2].ToString("F3");//中央値
                    }
                    else
                    {
                        if (!result5v下限)
                        {
                            Data5v = List_Data5v[0].ToString("F3");//Min
                        }
                        else
                        {
                            Data5v = List_Data5v[numSamples - 1].ToString("F3");//Max
                        }
                    }

                    List_Data10v.Sort();
                    if (result10v)
                    {
                        Data10v = List_Data10v[numSamples / 2].ToString("F3");//中央値
                    }
                    else
                    {
                        if (!result10v下限)
                        {
                            Data10v = List_Data10v[0].ToString("F3");//Min
                        }
                        else
                        {
                            Data10v = List_Data10v[numSamples - 1].ToString("F3");//Max
                        }
                    }

                    return result0v && result5v && result10v;
                }));
            }
            catch
            {
                return(false);
            }
            finally
            {
                General.PowerSupply(false);
                Sleep(300);

                //ビューモデルの更新
                switch (ch)
                {
                case CH.ANA0:
                    State.VmTestResults.A0_0     = Data0v;
                    State.VmTestResults.A0_5     = Data5v;
                    State.VmTestResults.A0_10    = Data10v;
                    State.VmTestResults.ColA0_0  = result0v ? OffBrush : NgBrush;
                    State.VmTestResults.ColA0_5  = result5v ? OffBrush : NgBrush;
                    State.VmTestResults.ColA0_10 = result10v ? OffBrush : NgBrush;
                    break;

                case CH.ANA1:
                    State.VmTestResults.A1_0     = Data0v;
                    State.VmTestResults.A1_5     = Data5v;
                    State.VmTestResults.A1_10    = Data10v;
                    State.VmTestResults.ColA1_0  = result0v ? OffBrush : NgBrush;
                    State.VmTestResults.ColA1_5  = result5v ? OffBrush : NgBrush;
                    State.VmTestResults.ColA1_10 = result10v ? OffBrush : NgBrush;
                    break;

                case CH.ANA2:
                    State.VmTestResults.A2_0     = Data0v;
                    State.VmTestResults.A2_5     = Data5v;
                    State.VmTestResults.A2_10    = Data10v;
                    State.VmTestResults.ColA2_0  = result0v ? OffBrush : NgBrush;
                    State.VmTestResults.ColA2_5  = result5v ? OffBrush : NgBrush;
                    State.VmTestResults.ColA2_10 = result10v ? OffBrush : NgBrush;
                    break;

                case CH.ANA3:
                    State.VmTestResults.A3_0     = Data0v;
                    State.VmTestResults.A3_5     = Data5v;
                    State.VmTestResults.A3_10    = Data10v;
                    State.VmTestResults.ColA3_0  = result0v ? OffBrush : NgBrush;
                    State.VmTestResults.ColA3_5  = result5v ? OffBrush : NgBrush;
                    State.VmTestResults.ColA3_10 = result10v ? OffBrush : NgBrush;
                    break;

                case CH.ANA4:
                    State.VmTestResults.A4_0     = Data0v;
                    State.VmTestResults.A4_5     = Data5v;
                    State.VmTestResults.A4_10    = Data10v;
                    State.VmTestResults.ColA4_0  = result0v ? OffBrush : NgBrush;
                    State.VmTestResults.ColA4_5  = result5v ? OffBrush : NgBrush;
                    State.VmTestResults.ColA4_10 = result10v ? OffBrush : NgBrush;
                    break;

                case CH.ANA5:
                    State.VmTestResults.A5_0     = Data0v;
                    State.VmTestResults.A5_5     = Data5v;
                    State.VmTestResults.A5_10    = Data10v;
                    State.VmTestResults.ColA5_0  = result0v ? OffBrush : NgBrush;
                    State.VmTestResults.ColA5_5  = result5v ? OffBrush : NgBrush;
                    State.VmTestResults.ColA5_10 = result10v ? OffBrush : NgBrush;
                    break;

                case CH.ANA6:
                    State.VmTestResults.A6_0     = Data0v;
                    State.VmTestResults.A6_5     = Data5v;
                    State.VmTestResults.A6_10    = Data10v;
                    State.VmTestResults.ColA6_0  = result0v ? OffBrush : NgBrush;
                    State.VmTestResults.ColA6_5  = result5v ? OffBrush : NgBrush;
                    State.VmTestResults.ColA6_10 = result10v ? OffBrush : NgBrush;
                    break;

                case CH.ANA7:
                    State.VmTestResults.A7_0     = Data0v;
                    State.VmTestResults.A7_5     = Data5v;
                    State.VmTestResults.A7_10    = Data10v;
                    State.VmTestResults.ColA7_0  = result0v ? OffBrush : NgBrush;
                    State.VmTestResults.ColA7_5  = result5v ? OffBrush : NgBrush;
                    State.VmTestResults.ColA7_10 = result10v ? OffBrush : NgBrush;
                    break;

                case CH.ANA8:
                    State.VmTestResults.A8_0     = Data0v;
                    State.VmTestResults.A8_5     = Data5v;
                    State.VmTestResults.A8_10    = Data10v;
                    State.VmTestResults.ColA8_0  = result0v ? OffBrush : NgBrush;
                    State.VmTestResults.ColA8_5  = result5v ? OffBrush : NgBrush;
                    State.VmTestResults.ColA8_10 = result10v ? OffBrush : NgBrush;
                    break;

                case CH.ANA9:
                    State.VmTestResults.A9_0     = Data0v;
                    State.VmTestResults.A9_5     = Data5v;
                    State.VmTestResults.A9_10    = Data10v;
                    State.VmTestResults.ColA9_0  = result0v ? OffBrush : NgBrush;
                    State.VmTestResults.ColA9_5  = result5v ? OffBrush : NgBrush;
                    State.VmTestResults.ColA9_10 = result10v ? OffBrush : NgBrush;
                    break;

                case CH.ANA10:
                    State.VmTestResults.A10_0     = Data0v;
                    State.VmTestResults.A10_5     = Data5v;
                    State.VmTestResults.A10_10    = Data10v;
                    State.VmTestResults.ColA10_0  = result0v ? OffBrush : NgBrush;
                    State.VmTestResults.ColA10_5  = result5v ? OffBrush : NgBrush;
                    State.VmTestResults.ColA10_10 = result10v ? OffBrush : NgBrush;
                    break;

                case CH.ANA11:
                    State.VmTestResults.A11_0     = Data0v;
                    State.VmTestResults.A11_5     = Data5v;
                    State.VmTestResults.A11_10    = Data10v;
                    State.VmTestResults.ColA11_0  = result0v ? OffBrush : NgBrush;
                    State.VmTestResults.ColA11_5  = result5v ? OffBrush : NgBrush;
                    State.VmTestResults.ColA11_10 = result10v ? OffBrush : NgBrush;
                    break;
                }
            }
        }
示例#8
0
        public static async Task <bool> SetPT100(MODE mode, POINT point)
        {
            var result1  = false;
            var result2  = false;
            var strData1 = "";
            var strData2 = "";

            var mess = "";
            var max  = 0.0;
            var min  = 0.0;

            var cmd1 = "";
            var cmd2 = "";

            State.VmTestStatus.TestLog += $" {mode.ToString()} {point.ToString()}調整";

            //ローカル関数の定義■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
            string GetData(string command)
            {
                General.ClearCommlog();
                Target.SendData(command);

                while (true)//取り込んだ通信データが規定行数(サンプリング数)になるまで待つ
                {
                    if (Flags.ClickStopButton)
                    {
                        return(null);
                    }
                    if (General.CountNewline() == 2)
                    {
                        break;
                    }
                }
                Target.Escape();
                Sleep(1000);
                var log        = State.VmComm.RX;
                int FoundIndex = log.IndexOf(command + ",");
                int 改行位置       = log.IndexOf("\r\n", FoundIndex);
                var 取り出し1行     = log.Substring(FoundIndex, 改行位置 - FoundIndex);
                var dataList   = 取り出し1行.Split(',');

                return(dataList[2].Substring(1));//一文字目がスペースなので削除
            };
            //■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

            try
            {
                await Task.Delay(500);

                if (!await CheckComm())
                {
                    return(false);
                }

                switch (point)
                {
                case POINT.FIRST:
                    max  = State.TestSpec.PV第一Max;
                    min  = State.TestSpec.PV第一Min;
                    mess = "ダイヤル抵抗器を108.96オームに設定してください";
                    cmd1 = mode == MODE.PV12 ? "PV11" : "PV31";
                    cmd2 = mode == MODE.PV12 ? "PV21" : "PV41";
                    General.PlaySound(General.sound108_96);
                    break;

                case POINT.SECOND:
                    max  = State.TestSpec.PV第二Max;
                    min  = State.TestSpec.PV第二Min;
                    mess = "ダイヤル抵抗器を149.83オームに設定してください";
                    cmd1 = mode == MODE.PV12 ? "PV12" : "PV32";
                    cmd2 = mode == MODE.PV12 ? "PV22" : "PV42";
                    General.PlaySound(General.sound149_83);
                    break;

                case POINT.THIRD:
                    max  = State.TestSpec.PV第三Max;
                    min  = State.TestSpec.PV第三Min;
                    mess = "ダイヤル抵抗器を183.19オームに設定してください";
                    cmd1 = mode == MODE.PV12 ? "PV13" : "PV33";
                    cmd2 = mode == MODE.PV12 ? "PV23" : "PV43";
                    General.PlaySound(General.sound183_19);
                    break;
                }

                var dialog = new DialogPic(mess, DialogPic.NAME.その他, soundSw: false);
                dialog.ShowDialog();
                await Task.Delay(4000);

                await Task.Run(() =>
                {
                    strData1 = GetData(cmd1);
                    strData2 = GetData(cmd2);
                });

                if (strData1 == null || strData2 == null)
                {
                    return(false);
                }

                //第一調整点の調整値が適正な範囲内にあるかチェック
                int Data1 = Convert.ToInt32(strData1, 16);
                int Data2 = Convert.ToInt32(strData2, 16);

                result1 = min < Data1 && Data1 < max;
                result2 = min < Data2 && Data2 < max;

                return(result1 && result2);
            }
            catch
            {
                return(false);
            }
            finally
            {
                State.VmTestStatus.TestLog += result1 && result2? "---PASS\r\n" :"---FAIL\r\n";
                General.PowerSupply(false);

                if (mode == MODE.PV12)
                {
                    switch (point)
                    {
                    case POINT.FIRST:
                        VmTestResults.PV1_1    = strData1 + "h";
                        VmTestResults.PV2_1    = strData2 + "h";
                        VmTestResults.ColPV1_1 = result1 ? OffBrush : NgBrush;
                        VmTestResults.ColPV2_1 = result2 ? OffBrush : NgBrush;
                        break;

                    case POINT.SECOND:
                        VmTestResults.PV1_2    = strData1 + "h";
                        VmTestResults.PV2_2    = strData2 + "h";
                        VmTestResults.ColPV1_2 = result1 ? OffBrush : NgBrush;
                        VmTestResults.ColPV2_2 = result2 ? OffBrush : NgBrush;
                        break;

                    case POINT.THIRD:
                        VmTestResults.PV1_3    = strData1 + "h";
                        VmTestResults.PV2_3    = strData2 + "h";
                        VmTestResults.ColPV1_3 = result1 ? OffBrush : NgBrush;
                        VmTestResults.ColPV2_3 = result2 ? OffBrush : NgBrush;
                        break;
                    }
                }
                else
                {
                    switch (point)
                    {
                    case POINT.FIRST:
                        VmTestResults.PV3_1    = strData1 + "h";
                        VmTestResults.PV4_1    = strData2 + "h";
                        VmTestResults.ColPV3_1 = result1 ? OffBrush : NgBrush;
                        VmTestResults.ColPV4_1 = result2 ? OffBrush : NgBrush;
                        break;

                    case POINT.SECOND:
                        VmTestResults.PV3_2    = strData1 + "h";
                        VmTestResults.PV4_2    = strData2 + "h";
                        VmTestResults.ColPV3_2 = result1 ? OffBrush : NgBrush;
                        VmTestResults.ColPV4_2 = result2 ? OffBrush : NgBrush;
                        break;

                    case POINT.THIRD:
                        VmTestResults.PV3_3    = strData1 + "h";
                        VmTestResults.PV4_3    = strData2 + "h";
                        VmTestResults.ColPV3_3 = result1 ? OffBrush : NgBrush;
                        VmTestResults.ColPV4_3 = result2 ? OffBrush : NgBrush;
                        break;
                    }
                }
            }
        }
示例#9
0
        public static async Task <bool> ReadPt100(NAME_PV name)
        {
            bool result1 = false;
            bool result2 = false;
            bool result3 = false;

            string Data1 = "";
            string Data2 = "";
            string Data3 = "";

            string Data1再 = "";
            string Data2再 = "";
            string Data3再 = "";

            State.VmTestStatus.TestLog += $" {name.ToString()} 読み出し";
            //ローカル関数の定義■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
            List <string> GetData再(string command)
            {
                General.ClearCommlog();
                Target.SendData(command);

                while (true)//取り込んだ通信データが規定行数(サンプリング数)になるまで待つ
                {
                    if (Flags.ClickStopButton)
                    {
                        return(null);
                    }
                    if (General.CountNewline() == 2)
                    {
                        break;
                    }
                }
                Target.Escape();
                Sleep(1000);
                var log        = State.VmComm.RX;
                int FoundIndex = log.IndexOf(command + ",");
                int 改行位置       = log.IndexOf("\r\n", FoundIndex);
                var 取り出し1行     = log.Substring(FoundIndex, 改行位置 - FoundIndex);
                var dataList   = 取り出し1行.Split(',');

                return(new List <string>()
                {
                    dataList[1].Substring(1), dataList[2].Substring(1), dataList[3].Substring(1)
                });                                                                                                         //一文字目がスペースなので削除
            };
            //■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

            try
            {
                await Task.Delay(1500);//EEPROMの読み出し確認なので電源OFFして少し待つ

                if (!await CheckComm())
                {
                    return(false);
                }
                return(await Task <bool> .Run(() =>
                {
                    var cmd = "";
                    switch (name)
                    {
                    case NAME_PV.PV1:
                        cmd = "@PV1*";
                        Data1 = State.VmTestResults.PV1_1.Trim('h');
                        Data2 = State.VmTestResults.PV1_2.Trim('h');
                        Data3 = State.VmTestResults.PV1_3.Trim('h');
                        break;

                    case NAME_PV.PV2:
                        cmd = "@PV2*";
                        Data1 = State.VmTestResults.PV2_1.Trim('h');
                        Data2 = State.VmTestResults.PV2_2.Trim('h');
                        Data3 = State.VmTestResults.PV2_3.Trim('h');
                        break;

                    case NAME_PV.PV3:
                        cmd = "@PV3*";
                        Data1 = State.VmTestResults.PV3_1.Trim('h');
                        Data2 = State.VmTestResults.PV3_2.Trim('h');
                        Data3 = State.VmTestResults.PV3_3.Trim('h');
                        break;

                    case NAME_PV.PV4:
                        cmd = "@PV4*";
                        Data1 = State.VmTestResults.PV4_1.Trim('h');
                        Data2 = State.VmTestResults.PV4_2.Trim('h');
                        Data3 = State.VmTestResults.PV4_3.Trim('h');
                        break;
                    }

                    var List再 = GetData再(cmd);
                    if (List再 == null)
                    {
                        return false;
                    }

                    Data1再 = List再[0];
                    Data2再 = List再[1];
                    Data3再 = List再[2];

                    result1 = Data1再 == Data1;
                    result2 = Data2再 == Data2;
                    result3 = Data3再 == Data3;

                    return result1 && result2 && result3;
                }));
            }
            catch
            {
                return(false);
            }
            finally
            {
                State.VmTestStatus.TestLog += result1 && result2 && result3? "---PASS\r\n" :"---FAIL\r\n";
                General.PowerSupply(false);

                switch (name)
                {
                case NAME_PV.PV1:
                    State.VmTestResults.PV1_1RE    = Data1再 + "h";
                    State.VmTestResults.PV1_2RE    = Data2再 + "h";
                    State.VmTestResults.PV1_3RE    = Data3再 + "h";
                    State.VmTestResults.ColPV1_1RE = result1 ? OffBrush : NgBrush;
                    State.VmTestResults.ColPV1_2RE = result2 ? OffBrush : NgBrush;
                    State.VmTestResults.ColPV1_3RE = result3 ? OffBrush : NgBrush;
                    break;

                case NAME_PV.PV2:
                    State.VmTestResults.PV2_1RE    = Data1再 + "h";
                    State.VmTestResults.PV2_2RE    = Data2再 + "h";
                    State.VmTestResults.PV2_3RE    = Data3再 + "h";
                    State.VmTestResults.ColPV2_1RE = result1 ? OffBrush : NgBrush;
                    State.VmTestResults.ColPV2_2RE = result2 ? OffBrush : NgBrush;
                    State.VmTestResults.ColPV2_3RE = result3 ? OffBrush : NgBrush;
                    break;

                case NAME_PV.PV3:
                    State.VmTestResults.PV3_1RE    = Data1再 + "h";
                    State.VmTestResults.PV3_2RE    = Data2再 + "h";
                    State.VmTestResults.PV3_3RE    = Data3再 + "h";
                    State.VmTestResults.ColPV3_1RE = result1 ? OffBrush : NgBrush;
                    State.VmTestResults.ColPV3_2RE = result2 ? OffBrush : NgBrush;
                    State.VmTestResults.ColPV3_3RE = result3 ? OffBrush : NgBrush;
                    break;

                case NAME_PV.PV4:
                    State.VmTestResults.PV4_1RE    = Data1再 + "h";
                    State.VmTestResults.PV4_2RE    = Data2再 + "h";
                    State.VmTestResults.PV4_3RE    = Data3再 + "h";
                    State.VmTestResults.ColPV4_1RE = result1 ? OffBrush : NgBrush;
                    State.VmTestResults.ColPV4_2RE = result2 ? OffBrush : NgBrush;
                    State.VmTestResults.ColPV4_3RE = result3 ? OffBrush : NgBrush;
                    break;
                }
            }
        }
        public static async Task <bool> Check断線(MODE mode)
        {
            bool resultPV1 = false;
            bool resultPV2 = false;
            bool resultPV3 = false;
            bool resultPV4 = false;

            var ListDataPV1 = new List <string>();
            var ListDataPV2 = new List <string>();
            var ListDataPV3 = new List <string>();
            var ListDataPV4 = new List <string>();

            const string messA = "Circ.CUT";
            const string messB = "Circ.SHORT";

            const int SampleCnt = 3;

            //ラムダ式の定義■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
            Func <bool> GetData = () =>
            {
                try
                {
                    General.ClearCommlog();
                    Target.SendData("TEMP");

                    while (true)//取り込んだ通信データが規定行数(サンプリング数)になるまで待つ
                    {
                        if (Flags.ClickStopButton)
                        {
                            return(false);
                        }
                        if (General.CountNewline() == SampleCnt + 2)
                        {
                            break;
                        }
                    }
                    Target.Escape();
                    Sleep(1000);

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

                        ListDataPV1.Add(dataList[1].Substring(1));//一文字目がスペースのため
                        ListDataPV2.Add(dataList[2].Substring(1));
                        ListDataPV3.Add(dataList[3].Substring(1));
                        ListDataPV4.Add(dataList[4].Substring(1));

                        検索開始位置 = FoundIndex + 1;
                    }
                    return(true);
                }
                catch
                {
                    return(false);
                }
            };

            //■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

            try
            {
                var dialogMess = "";
                switch (mode)
                {
                case MODE.A断線:
                    dialogMess = "チェッカーのA線をすべて上に向けてください";
                    break;

                case MODE.B_1断線:
                    dialogMess = "チェッカーのB線をすべて上に向けてください";
                    break;

                case MODE.B_2断線:
                    dialogMess = "チェッカーのB’線をすべて上に向けてください";
                    break;
                }

                var dialog = new DialogPic(dialogMess, DialogPic.NAME.その他);
                dialog.ShowDialog();

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

                    if (!GetData())
                    {
                        return false;
                    }
                    Sleep(500);

                    General.PowerSupply(false);
                    Sleep(1000);

                    string mess = "";
                    if (mode == MODE.A断線)
                    {
                        mess = messA;
                    }
                    else
                    {
                        mess = messB;
                    }

                    resultPV1 = ListDataPV1.All(data => data == mess);
                    resultPV2 = ListDataPV1.All(data => data == mess);
                    resultPV3 = ListDataPV1.All(data => data == mess);
                    resultPV4 = ListDataPV1.All(data => data == mess);

                    return resultPV1 && resultPV2 && resultPV3 && resultPV4;
                }));
            }
            catch
            {
                return(false);
            }
            finally
            {
                General.PowerSupply(false);

                switch (mode)
                {
                case MODE.A断線:
                    VmTestResults.PV1_A    = resultPV1 ? "OK" : "NG";
                    VmTestResults.PV2_A    = resultPV2 ? "OK" : "NG";
                    VmTestResults.PV3_A    = resultPV3 ? "OK" : "NG";
                    VmTestResults.PV4_A    = resultPV4 ? "OK" : "NG";
                    VmTestResults.ColPV1_A = resultPV1 ? OffBrush : NgBrush;
                    VmTestResults.ColPV2_A = resultPV2 ? OffBrush : NgBrush;
                    VmTestResults.ColPV3_A = resultPV3 ? OffBrush : NgBrush;
                    VmTestResults.ColPV4_A = resultPV4 ? OffBrush : NgBrush;
                    break;

                case MODE.B_1断線:
                    VmTestResults.PV1_B1    = resultPV1 ? "OK" : "NG";
                    VmTestResults.PV2_B1    = resultPV2 ? "OK" : "NG";
                    VmTestResults.PV3_B1    = resultPV3 ? "OK" : "NG";
                    VmTestResults.PV4_B1    = resultPV4 ? "OK" : "NG";
                    VmTestResults.ColPV1_B1 = resultPV1 ? OffBrush : NgBrush;
                    VmTestResults.ColPV2_B1 = resultPV2 ? OffBrush : NgBrush;
                    VmTestResults.ColPV3_B1 = resultPV3 ? OffBrush : NgBrush;
                    VmTestResults.ColPV4_B1 = resultPV4 ? OffBrush : NgBrush;
                    break;

                case MODE.B_2断線:
                    VmTestResults.PV1_B2    = resultPV1 ? "OK" : "NG";
                    VmTestResults.PV2_B2    = resultPV2 ? "OK" : "NG";
                    VmTestResults.PV3_B2    = resultPV3 ? "OK" : "NG";
                    VmTestResults.PV4_B2    = resultPV4 ? "OK" : "NG";
                    VmTestResults.ColPV1_B2 = resultPV1 ? OffBrush : NgBrush;
                    VmTestResults.ColPV2_B2 = resultPV2 ? OffBrush : NgBrush;
                    VmTestResults.ColPV3_B2 = resultPV3 ? OffBrush : NgBrush;
                    VmTestResults.ColPV4_B2 = resultPV4 ? OffBrush : NgBrush;
                    break;
                }
            }
        }
        public static async Task <bool> CheckNormal()
        {
            bool resultPV1   = false;
            bool resultPV1下限 = false;
            bool resultPV1上限 = false;

            bool resultPV2   = false;
            bool resultPV2下限 = false;
            bool resultPV2上限 = false;

            bool resultPV3   = false;
            bool resultPV3下限 = false;
            bool resultPV3上限 = false;

            bool resultPV4   = false;
            bool resultPV4下限 = false;
            bool resultPV4上限 = false;

            string dataPV1 = "";
            string dataPV2 = "";
            string dataPV3 = "";
            string dataPV4 = "";

            const int SampleCnt = 5;

            var ListDataPV1 = new List <double>();
            var ListDataPV2 = new List <double>();
            var ListDataPV3 = new List <double>();
            var ListDataPV4 = new List <double>();


            //ラムダ式の定義■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
            Func <bool> GetData = () =>
            {
                try
                {
                    General.ClearCommlog();
                    Target.SendData("TEMP");

                    while (true)//取り込んだ通信データが規定行数(サンプリング数)になるまで待つ
                    {
                        if (Flags.ClickStopButton)
                        {
                            return(false);
                        }
                        if (General.CountNewline() == SampleCnt + 2)
                        {
                            break;
                        }
                    }
                    Target.Escape();
                    Sleep(1000);

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

                        ListDataPV1.Add(Double.Parse(dataList[1]));
                        ListDataPV2.Add(Double.Parse(dataList[2]));
                        ListDataPV3.Add(Double.Parse(dataList[3]));
                        ListDataPV4.Add(Double.Parse(dataList[4]));

                        検索開始位置 = FoundIndex + 1;
                    }

                    return(true);
                }
                catch
                {
                    return(false);
                }
            };

            //■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

            try
            {
                var dialog = new DialogPic("①CN1,3,5,7にチェッカーからのケーブルを接続してください\r\n②チェッカーの断線スイッチをすべて下に向けてください", DialogPic.NAME.その他);
                dialog.ShowDialog();

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

                    if (!GetData())
                    {
                        return false;
                    }
                    Sleep(500);

                    General.PowerSupply(false);
                    Sleep(1000);

                    resultPV1下限 = ListDataPV1.All(data => data >= State.TestSpec.PT100_NormalTemp_Min);
                    resultPV1上限 = ListDataPV1.All(data => data <= State.TestSpec.PT100_NormalTemp_Max);
                    resultPV1 = resultPV1下限 && resultPV1上限;

                    resultPV2下限 = ListDataPV2.All(data => data >= State.TestSpec.PT100_NormalTemp_Min);
                    resultPV2上限 = ListDataPV2.All(data => data <= State.TestSpec.PT100_NormalTemp_Max);
                    resultPV2 = resultPV2下限 && resultPV2上限;

                    resultPV3下限 = ListDataPV3.All(data => data >= State.TestSpec.PT100_NormalTemp_Min);
                    resultPV3上限 = ListDataPV3.All(data => data <= State.TestSpec.PT100_NormalTemp_Max);
                    resultPV3 = resultPV3下限 && resultPV3上限;

                    resultPV4下限 = ListDataPV4.All(data => data >= State.TestSpec.PT100_NormalTemp_Min);
                    resultPV4上限 = ListDataPV4.All(data => data <= State.TestSpec.PT100_NormalTemp_Max);
                    resultPV4 = resultPV4下限 && resultPV4上限;


                    ListDataPV1.Sort();
                    if (resultPV1)
                    {
                        dataPV1 = ListDataPV1[SampleCnt / 2].ToString("F1") + "℃";//中央値
                    }
                    else
                    {
                        if (!resultPV1下限)
                        {
                            dataPV1 = ListDataPV1[0].ToString("F1") + "℃";//Min
                        }
                        else
                        {
                            dataPV1 = ListDataPV1[SampleCnt - 1].ToString("F1") + "℃";//Max
                        }
                    }

                    ListDataPV2.Sort();
                    if (resultPV2)
                    {
                        dataPV2 = ListDataPV2[SampleCnt / 2].ToString("F1") + "℃";//中央値
                    }
                    else
                    {
                        if (!resultPV2下限)
                        {
                            dataPV2 = ListDataPV2[0].ToString("F1") + "℃";//Min
                        }
                        else
                        {
                            dataPV2 = ListDataPV2[SampleCnt - 1].ToString("F1") + "℃";//Max
                        }
                    }

                    ListDataPV3.Sort();
                    if (resultPV3)
                    {
                        dataPV3 = ListDataPV3[SampleCnt / 2].ToString("F1") + "℃";//中央値
                    }
                    else
                    {
                        if (!resultPV3下限)
                        {
                            dataPV3 = ListDataPV3[0].ToString("F1") + "℃";//Min
                        }
                        else
                        {
                            dataPV3 = ListDataPV3[SampleCnt - 1].ToString("F1") + "℃";//Max
                        }
                    }

                    ListDataPV4.Sort();
                    if (resultPV4)
                    {
                        dataPV4 = ListDataPV4[SampleCnt / 2].ToString("F1") + "℃";//中央値
                    }
                    else
                    {
                        if (!resultPV4下限)
                        {
                            dataPV4 = ListDataPV4[0].ToString("F1") + "℃";//Min
                        }
                        else
                        {
                            dataPV4 = ListDataPV4[SampleCnt - 1].ToString("F1") + "℃";//Max
                        }
                    }

                    return resultPV1 && resultPV2 && resultPV3 && resultPV4;
                }));
            }
            catch
            {
                return(false);
            }
            finally
            {
                General.PowerSupply(false);

                VmTestResults.PV1_N    = dataPV1;
                VmTestResults.PV2_N    = dataPV2;
                VmTestResults.PV3_N    = dataPV3;
                VmTestResults.PV4_N    = dataPV4;
                VmTestResults.ColPV1_N = resultPV1 ? OffBrush : NgBrush;
                VmTestResults.ColPV2_N = resultPV2 ? OffBrush : NgBrush;
                VmTestResults.ColPV3_N = resultPV3 ? OffBrush : NgBrush;
                VmTestResults.ColPV4_N = resultPV4 ? OffBrush : NgBrush;
            }
        }