Beispiel #1
0
        private void MetroWindow_Closed(object sender, EventArgs e)
        {
            try
            {
                while (Flags.Initializing周辺機器)
                {
                    ;
                }

                Target.ClosePort();

                if (Flags.StateEpx64)
                {
                    General.ResetIo();
                    General.io.Close();//IO閉じる
                }

                if (Flags.State5107B)
                {
                    General.osc.Close();
                }

                if (Flags.State323x)
                {
                    Hioki3239.ClosePort();
                }

                if (Flags.StateWavGen)
                {
                    WaveFormGenerator.Close();
                }

                if (Flags.State7012)
                {
                    HIOKI7012.ClosePort();
                }

                if (!State.Save個別データ())
                {
                    MessageBox.Show("個別データの保存に失敗しました");
                }
                if (!General.SaveRetryLog())
                {
                    MessageBox.Show("リトライログの保存に失敗しました");
                }
            }
            catch
            {
            }
        }
        public static bool SetFG_5_7Vrms()
        {
            try
            {
                double 入力電圧初期値 = 2.85;//Vrms
                WaveFormGenerator.サイン波出力(50.0, 50.0, 入力電圧初期値, 0.0);

                return(true);
            }
            catch
            {
                return(false);
            }
        }
Beispiel #3
0
        public static bool SetFG_6Vrms()
        {
            double value = WaveFormGenerator.Flag33220 ? 0.00025 : 0.001;

            try
            {
                double 入力電圧初期値 = 3.020;//Vrms
                double OutBuff = 0;
                WaveFormGenerator.サイン波出力(50.0, 50.0, 入力電圧初期値, 0.0);
                OutBuff = 入力電圧初期値;
                //AGI33220A.サイン波出力(50.0, 50.0, 入力電圧初期値, 0.0);

                var Tm = new GeneralTimer(15000);
                Tm.Start();
                while (true)
                {
                    if (Tm.FlagTimeout || Flags.ClickStopButton)
                    {
                        return(false);
                    }
                    Hioki3239.GetAcVolt(Hioki3239.ACV_Range.R20V);
                    if (Hioki3239.VoltData >= 6.000 && Hioki3239.VoltData <= 6.005)
                    {
                        break;
                    }

                    if (Hioki3239.VoltData < 6.000)
                    {
                        OutBuff += value;
                        WaveFormGenerator.ChangeVoltage(OutBuff);
                        //AGI33220A.ChangeVoltage(入力電圧初期値 + (0.001 * cnt));
                    }
                    else if (Hioki3239.VoltData > 6.005)
                    {
                        OutBuff -= value;
                        WaveFormGenerator.ChangeVoltage(OutBuff);
                        //AGI33220A.ChangeVoltage(入力電圧初期値 - (0.001 * cnt));
                    }
                    Sleep(500);
                }
                return(true);
            }
            catch
            {
                return(false);
            }
        }
Beispiel #4
0
 public static async Task <bool> InitAll()
 {
     return(await Task <bool> .Run(() =>
     {
         Sleep(3000);
         io.Close();
         Sleep(200);
         HIOKI7012.ClosePort();
         Sleep(200);
         Hioki3239.ClosePort();
         Sleep(200);
         osc.Close();
         Sleep(200);
         WaveFormGenerator.Close();
         Sleep(200);
         FindSerialPort.GetDeviceNames();
         Sleep(500);
         Flags.StateEpx64 = General.io.InitEpx64R(0x7F);//0111 1111  ※P7入力 その他出力
         if (!Flags.StateEpx64)
         {
             return false;
         }
         Flags.State7012 = HIOKI7012.Init7012();
         if (!Flags.State7012)
         {
             return false;
         }
         Flags.State323x = Hioki3239.Init323x();
         if (!Flags.State323x)
         {
             return false;
         }
         Flags.State5107B = General.osc.Init();
         if (!Flags.State5107B)
         {
             return false;
         }
         Flags.StateWavGen = WaveFormGenerator.Initialize();
         if (!Flags.StateWavGen)
         {
             return false;
         }
         return true;
     }));
 }
        public static bool SetFG_6_5Vrms()
        {
            try
            {
                double 入力電圧初期値 = 3.275;//Vrms
                WaveFormGenerator.サイン波出力(50.0, 50.0, 入力電圧初期値, 0.0);
                double buff = 入力電圧初期値;
                Tm.Stop();
                Tm.Interval = 18000;
                FlagTimer   = true;
                Tm.Start();
                while (true)
                {
                    if (!FlagTimer || Flags.ClickStopButton)
                    {
                        return(false);
                    }
                    Application.DoEvents();
                    Hioki3239.GetAcVolt(Hioki3239.ACV_Range.R20V);
                    if (Hioki3239.VoltData >= 6.497 && Hioki3239.VoltData <= 6.503)
                    {
                        break;
                    }

                    if (Hioki3239.VoltData < 6.497)
                    {
                        buff += 0.002;
                        WaveFormGenerator.ChangeVoltage(buff);
                    }
                    else if (Hioki3239.VoltData > 6.503)
                    {
                        buff -= 0.002;
                        WaveFormGenerator.ChangeVoltage(buff);
                    }
                    Sleep(200);
                }
                return(true);
            }
            catch
            {
                return(false);
            }
        }
        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;
                }
            }
        }
Beispiel #7
0
        public static void Init周辺機器()//TODO:
        {
            Flags.Initializing周辺機器 = true;

            Target.OpenPort();//COM1のため、無条件でOKとする 判定はしない

            //EPX64Sの初期化
            bool StopEpx64 = false;

            Task.Run(() =>
            {
                //IOボードの初期化
                io = new EPX64R();
                while (true)
                {
                    if (Flags.StopInit周辺機器)
                    {
                        break;
                    }

                    Flags.StateEpx64 = General.io.InitEpx64R(0x7F);//0111 1111  ※P7入力 その他出力
                    if (Flags.StateEpx64)
                    {
                        //IOボードのリセット(出力をすべてLする)
                        ResetIo();
                        break;
                    }

                    Sleep(500);
                }
                StopEpx64 = true;
            });

            //ファンクションジェネレータの初期化
            bool StopWavGen = false;

            Task.Run(() =>
            {
                while (true)
                {
                    if (Flags.StopInit周辺機器)
                    {
                        break;
                    }

                    Flags.StateWavGen = WaveFormGenerator.Initialize();
                    if (Flags.StateWavGen)
                    {
                        break;
                    }

                    Thread.Sleep(400);
                }

                StopWavGen = true;
            });

            //HIOKI7012の初期化
            bool Stop7012 = false;

            Task.Run(() =>
            {
                while (true)
                {
                    if (Flags.StopInit周辺機器)
                    {
                        break;
                    }

                    Flags.State7012 = HIOKI7012.Init7012();
                    if (Flags.State7012)
                    {
                        HIOKI7012.StopSource();
                        break;
                    }
                    Sleep(500);
                }

                Stop7012 = true;
            });

            //USBシリアル変換器を使うので、通信がかち合わないように順番に初期化を行う
            //マルチメータの初期化
            //オシロスコープの初期化
            bool Stop323x  = false;
            bool Stop5107B = false;

            osc = new DS_5107B();
            Task.Run(() =>
            {
                while (true)
                {
                    if (Flags.StopInit周辺機器 || (Flags.State323x && Flags.State5107B))
                    {
                        break;
                    }


                    if (!Flags.State323x)
                    {
                        Flags.State323x = Hioki3239.Init323x();
                    }

                    if (!Flags.State5107B)
                    {
                        Flags.State5107B = osc.Init();
                        if (Flags.State5107B)
                        {
                            osc.SetBasicConf();
                        }
                    }
                    Sleep(500);
                }
                Stop323x = Stop5107B = true;
            });

            Task.Run(() =>
            {
                while (true)
                {
                    CheckAll周辺機器フラグ();

                    //EPX64Sの初期化の中で、K100、K101の溶着チェックを行っているが、これがNGだとしてもInit周辺機器()は終了する
                    var IsAllStopped = StopEpx64 && Stop7012 && Stop5107B && Stop323x && StopWavGen;

                    if (Flags.AllOk周辺機器接続 || IsAllStopped)
                    {
                        break;
                    }
                    Thread.Sleep(400);
                }
                Flags.Initializing周辺機器 = false;
            });
        }
Beispiel #8
0
        public static async Task <List <double> > GetMasterData(MODE mode)
        {
            try
            {
                return(await Task <bool> .Run(() =>
                {
                    //電源ONする処理
                    General.PowerSupply(true);
                    if (!General.CheckDemo表示())
                    {
                        return null;
                    }
                    Sleep(1500);

                    if (!SetFG_6Vrms())
                    {
                        return null;                //ファンクションジェネレータを調整する
                    }
                    Sleep(500);

                    //モードによりオシロの設定を変更する(時間軸の設定のみ)
                    if (mode == MODE.位相制御)
                    {
                        General.osc.Set位相制御();
                    }
                    else
                    {
                        General.osc.Setサイクル制御();
                    }

                    Sleep(1000);

                    //波形出力コマンド送信
                    if (mode == MODE.位相制御)
                    {
                        Target.SendData("MVP 50 50");
                        Sleep(3500);
                    }
                    else
                    {
                        Target.SendData("MVP 50 50");
                        Sleep(4000);
                        Target.SendData("MVC 50");
                        Sleep(3500);
                    }

                    //波形データ取得
                    if (!GetWavData())
                    {
                        return null;
                    }


                    return FilterData;
                }));
            }
            catch
            {
                return(null);
            }
            finally
            {
                WaveFormGenerator.SourceOff();
                General.PowerSupply(false);
            }
        }
Beispiel #9
0
        //メインルーチン
        public async Task Test()
        {
            Flags.Click確認Button = false;
            Flags.Testing       = true;
            Flags.Retry         = false;

            General.SetMetalMode();
            General.SetBgm();
            State.VmTestStatus.Message = Constants.MessWait;

            //現在のテーマ透過度の保存
            State.CurrentThemeOpacity = State.VmMainWindow.ThemeOpacity;
            General.SetRadius(true);

            State.VmMainWindow.ThemeBlurEffectRadius = 25;



            await Task.Delay(500);

            FlagTestTime = true;
            Timer();

            int    FailStepNo = 0;
            int    RetryCnt   = 0;//リトライ用に使用する
            string FailTitle  = "";


            var テスト項目最新 = new List <TestSpecs>();

            if (State.VmTestStatus.CheckUnitTest == true)
            {
                //チェックしてある項目の百の桁の解析
                var re    = Int32.Parse(State.VmTestStatus.UnitTestName.Split('_').ToArray()[0]);
                int 位桁    = Int32.Parse(State.VmTestStatus.UnitTestName.Substring(0, (re >= 1000) ? 2 : 1));
                var 抽出データ = State.テスト項目.Where(p => (p.Key / 100) == 位桁);
                foreach (var p in 抽出データ)
                {
                    テスト項目最新.Add(new TestSpecs(p.Key, p.Value, p.PowSw));
                }
            }
            else
            {
                テスト項目最新 = State.テスト項目;
            }



            try
            {
                //IO初期化
                General.ResetIo();
                Thread.Sleep(400);



                foreach (var d in テスト項目最新.Select((s, i) => new { i, s }))
                {
Retry:
                    State.VmTestStatus.Spec      = "規格値 : ---";
                    State.VmTestStatus.MeasValue = "計測値 : ---";
                    Flags.AddDecision            = true;

                    //試験開始時は、CN10はチェッカー側ハーネスに接続する
                    General.SetCn10to6ダイヤル抵抗();
                    //General.SetCn10toChecker();

                    SetTestLog(d.s.Key.ToString() + "_" + d.s.Value);

                    if (d.s.PowSw)
                    {
                        if (!Flags.PowerOn)
                        {
                            General.PowerSupply(true);
                        }
                    }
                    else
                    {
                        General.PowerSupply(false);
                        await Task.Delay(100);
                    }

                    switch (d.s.Key)
                    {
                    case 100:    //コネクタ実装チェック
                        General.io.ReadInputData(EPX64R.PORT.P7);
                        byte re = (byte)(General.io.P7InputData & 0x0F);
                        if (re != 0x00)
                        {
                            goto case 5000;
                        }
                        break;

                    case 200:    //テストプログラム書き込み
                        if (State.VmTestStatus.CheckWriteTestFwPass == true)
                        {
                            break;
                        }
                        if (await 書き込み.WriteFw())
                        {
                            break;
                        }
                        goto case 5000;

                    case 300:    //電源電圧チェック +12V
                        if (await TEST_電源電圧.CheckVolt(TEST_電源電圧.VOL_CH._12V))
                        {
                            break;
                        }
                        goto case 5000;

                    case 301:    //電源電圧チェック +5V
                        if (await TEST_電源電圧.CheckVolt(TEST_電源電圧.VOL_CH._5V))
                        {
                            break;
                        }
                        goto case 5000;

                    case 302:    //電源電圧チェック +3.3V
                        if (await TEST_電源電圧.CheckVolt(TEST_電源電圧.VOL_CH._3_3V))
                        {
                            break;
                        }
                        goto case 5000;

                    case 303:    //電源電圧チェック AVDD
                        if (await TEST_電源電圧.CheckVolt(TEST_電源電圧.VOL_CH.AVDD))
                        {
                            break;
                        }
                        goto case 5000;

                    case 304:    //電源電圧チェック AVCC
                        if (await TEST_電源電圧.CheckVolt(TEST_電源電圧.VOL_CH.AVCC))
                        {
                            break;
                        }
                        goto case 5000;

                    case 305:    //電源電圧チェック VREF
                        if (await TEST_電源電圧.CheckVolt(TEST_電源電圧.VOL_CH.VREF))
                        {
                            break;
                        }
                        goto case 5000;

                    case 306:    //電源電圧チェック AVCCD
                        if (await TEST_電源電圧.CheckVolt(TEST_電源電圧.VOL_CH.AVCCD))
                        {
                            break;
                        }
                        goto case 5000;

                    case 307:    //電源電圧チェック S5V
                        if (await TEST_電源電圧.CheckVolt(TEST_電源電圧.VOL_CH.S5V))
                        {
                            break;
                        }
                        goto case 5000;

                    case 400:    //入力回路チェック OFF
                        if (await TEST_入力回路チェック.CheckDIN(TEST_入力回路チェック.MODE.OFF))
                        {
                            break;
                        }
                        goto case 5000;

                    case 401:    //入力回路チェック ON
                        if (await TEST_入力回路チェック.CheckDIN(TEST_入力回路チェック.MODE.ON))
                        {
                            break;
                        }
                        goto case 5000;

                    case 500:    //入力回路チェック OFF
                        if (await TEST_入力回路チェック.CheckANA2_P(TEST_入力回路チェック.MODE.OFF))
                        {
                            break;
                        }
                        goto case 5000;

                    case 501:    //入力回路チェック ON
                        if (await TEST_入力回路チェック.CheckANA2_P(TEST_入力回路チェック.MODE.ON))
                        {
                            break;
                        }
                        goto case 5000;

                    case 600:    //SCR駆動回路チェック 位相制御モード
                        var dialog_600 = new DialogPic("①周波数入力切切替を上向き\r\n②内部電流選択を下向き\r\n③FGと50/60Hz入力を接続\r\n④オシロと電流モニタを接続", DialogPic.NAME.その他);
                        dialog_600.ShowDialog();

                        await TEST_SCR駆動回路.Set();

                        //電源ONする処理
                        if (await TEST_SCR駆動回路.CheckWave(TEST_SCR駆動回路.MODE.位相制御))
                        {
                            break;
                        }


                        goto case 5000;

                    case 601:    //SCR駆動回路チェック サイクル制御モード
                        if (Flags.Retry)
                        {
                            General.PowerSupply(false);
                            await Task.Delay(300);

                            if (!await TEST_SCR駆動回路.Set())
                            {
                                goto case 5000;
                            }
                        }
                        if (await TEST_SCR駆動回路.CheckWave(TEST_SCR駆動回路.MODE.サイクル制御))
                        {
                            WaveFormGenerator.SourceOff();
                            break;
                        }

                        goto case 5000;

                    case 700:    //AD入力回路チェック AN_A8
                        if (await TEST_AD入力チェック.CheckANA1_P(TEST_AD入力チェック.CH.ANA8))
                        {
                            break;
                        }
                        goto case 5000;

                    case 701:    //AD入力回路チェック AN_A4
                        if (await TEST_AD入力チェック.CheckANA1_P(TEST_AD入力チェック.CH.ANA4))
                        {
                            break;
                        }
                        goto case 5000;

                    case 702:    //AD入力回路チェック AN_A0
                        if (await TEST_AD入力チェック.CheckANA1_P(TEST_AD入力チェック.CH.ANA0))
                        {
                            break;
                        }
                        goto case 5000;

                    case 703:    //AD入力回路チェック AN_A9
                        if (await TEST_AD入力チェック.CheckANA1_P(TEST_AD入力チェック.CH.ANA9))
                        {
                            break;
                        }
                        goto case 5000;

                    case 704:    //AD入力回路チェック AN_A5
                        if (await TEST_AD入力チェック.CheckANA1_P(TEST_AD入力チェック.CH.ANA5))
                        {
                            break;
                        }
                        goto case 5000;

                    case 705:    //AD入力回路チェック AN_A1
                        if (await TEST_AD入力チェック.CheckANA1_P(TEST_AD入力チェック.CH.ANA1))
                        {
                            break;
                        }
                        goto case 5000;

                    case 706:    //AD入力回路チェック AN_A10
                        if (await TEST_AD入力チェック.CheckANA1_P(TEST_AD入力チェック.CH.ANA10))
                        {
                            break;
                        }
                        goto case 5000;

                    case 707:    //AD入力回路チェック AN_A6
                        if (await TEST_AD入力チェック.CheckANA1_P(TEST_AD入力チェック.CH.ANA6))
                        {
                            break;
                        }
                        goto case 5000;

                    case 708:    //AD入力回路チェック AN_A2
                        if (await TEST_AD入力チェック.CheckANA1_P(TEST_AD入力チェック.CH.ANA2))
                        {
                            break;
                        }
                        goto case 5000;

                    case 709:    //AD入力回路チェック AN_A11
                        if (await TEST_AD入力チェック.CheckANA1_P(TEST_AD入力チェック.CH.ANA11))
                        {
                            break;
                        }
                        goto case 5000;

                    case 710:    //AD入力回路チェック AN_A7
                        if (await TEST_AD入力チェック.CheckANA1_P(TEST_AD入力チェック.CH.ANA7))
                        {
                            break;
                        }
                        goto case 5000;

                    case 711:    //AD入力回路チェック AN_A3
                        if (await TEST_AD入力チェック.CheckANA1_P(TEST_AD入力チェック.CH.ANA3))
                        {
                            break;
                        }
                        goto case 5000;

                    case 800:    //パルス入力回路チェック(左)
                        if (await TEST_パルス入力回路.CheckFLW(TEST_パルス入力回路.MODE.LEFT))
                        {
                            break;
                        }
                        goto case 5000;

                    case 801:    //パルス入力回路チェック(中)
                        if (await TEST_パルス入力回路.CheckFLW(TEST_パルス入力回路.MODE.MIDDLE))
                        {
                            break;
                        }
                        goto case 5000;

                    case 802:    //パルス入力回路チェック(右)
                        if (await TEST_パルス入力回路.CheckFLW(TEST_パルス入力回路.MODE.RIGHT))
                        {
                            break;
                        }
                        goto case 5000;

                    case 900:    //比例弁回転動作チェック(モータAB 左)
                        if (await TEST_比例弁回転動作.CheckPWPV(TEST_比例弁回転動作.MODE.Motor_L))
                        {
                            break;
                        }
                        goto case 5000;

                    case 901:    //比例弁回転動作チェック(モータAB 右)
                        if (await TEST_比例弁回転動作.CheckPWPV(TEST_比例弁回転動作.MODE.Motor_R))
                        {
                            break;
                        }
                        goto case 5000;

                    case 1000:    //警報用Pt100回路チェック 発報点
                        if (await TEST_警報点.Check警報点())
                        {
                            break;
                        }
                        goto case 5000;

                    case 1001:    //警報用Pt100回路チェック 断線
                        if (await TEST_警報点.CheckDisconnection())
                        {
                            break;
                        }
                        goto case 5000;

                    case 1100:    //AC電源電圧読取り回路チェック
                        if (await TEST_出力回路.CheckAN_P(TEST_出力回路.MODE.READ_V))
                        {
                            break;
                        }
                        goto case 5000;

                    case 1200:    //負荷電流読取り回路チェック CT1
                        if (await TEST_出力回路.CheckAN_P(TEST_出力回路.MODE.READ_I_1))
                        {
                            break;
                        }
                        goto case 5000;

                    case 1201:    //負荷電流読取り回路チェック CT2
                        if (await TEST_出力回路.CheckAN_P(TEST_出力回路.MODE.READ_I_2))
                        {
                            break;
                        }
                        goto case 5000;

                    case 1300:    //RS232Cチェック
                        if (await TEST_通信.CheckRS232C())
                        {
                            break;
                        }
                        goto case 5000;

                    case 1301:    //RS485-1チェック
                        if (await TEST_通信.CheckRS485_1())
                        {
                            break;
                        }
                        goto case 5000;

                    case 1302:    //RS485-2チェック
                        if (await TEST_通信.CheckRS485_2())
                        {
                            break;
                        }
                        goto case 5000;

                    case 1303:    //表示基板チェック
                        if (await TEST_通信.CheckDISP())
                        {
                            break;
                        }
                        goto case 5000;

                    case 1400:    //Vrefチェック
                        if (await TEST_VREF.SetVref())
                        {
                            break;
                        }
                        goto case 5000;

                    case 1401:    //Vrefチェック 再
                        if (await TEST_VREF.CheckVref())
                        {
                            break;
                        }
                        goto case 5000;

                    case 1500:    //出力回路チェック デジタル出力
                        if (await TEST_出力回路.CheckOUTP())
                        {
                            break;
                        }
                        goto case 5000;

                    case 1600:    //PWTMP_A 電流温度モニタ1 DV9
                        if (await TEST_出力回路.CheckPWTMP_A(TEST_出力回路.DV_CH.DV9))
                        {
                            break;
                        }
                        goto case 5000;

                    case 1601:    //PWTMP_A 電流温度モニタ2 DV11
                        if (await TEST_出力回路.CheckPWTMP_A(TEST_出力回路.DV_CH.DV11))
                        {
                            break;
                        }
                        goto case 5000;

                    case 1700:    //PWTMP_V 電圧温度モニタ1 DV10
                        if (await TEST_出力回路.CheckPWTMP_V(TEST_出力回路.DV_CH.DV10))
                        {
                            break;
                        }
                        goto case 5000;

                    case 1701:    //PWTMP_V 電圧温度モニタ2 DV12
                        if (await TEST_出力回路.CheckPWTMP_V(TEST_出力回路.DV_CH.DV12))
                        {
                            break;
                        }
                        goto case 5000;

                    case 1800:    //PWINV インバータ回転司令 DV13
                        if (await TEST_出力回路.CheckPWINV())
                        {
                            break;
                        }
                        goto case 5000;

                    case 1900:    //PWIOUT 操作量 電流1 DV1
                        if (await TEST_出力回路.CheckPWIOUT(TEST_出力回路.DV_CH.DV1))
                        {
                            break;
                        }
                        goto case 5000;

                    case 1901:    //PWIOUT 操作量 電流2 DV3
                        if (await TEST_出力回路.CheckPWIOUT(TEST_出力回路.DV_CH.DV3))
                        {
                            break;
                        }
                        goto case 5000;

                    case 1902:    //PWIOUT 操作量 電流3 DV5
                        if (await TEST_出力回路.CheckPWIOUT(TEST_出力回路.DV_CH.DV5))
                        {
                            break;
                        }
                        goto case 5000;

                    case 1903:    //PWIOUT 操作量 電流4 DV7
                        if (await TEST_出力回路.CheckPWIOUT(TEST_出力回路.DV_CH.DV7))
                        {
                            break;
                        }
                        goto case 5000;

                    case 2000:    //PWVOUT 操作量 電圧1 DV2
                        if (await TEST_出力回路.CheckPWVOUT(TEST_出力回路.DV_CH.DV2))
                        {
                            break;
                        }
                        goto case 5000;

                    case 2001:    //PWVOUT 操作量 電圧2 DV4
                        if (await TEST_出力回路.CheckPWVOUT(TEST_出力回路.DV_CH.DV4))
                        {
                            break;
                        }
                        goto case 5000;

                    case 2002:    //PWVOUT 操作量 電圧3 DV6
                        if (await TEST_出力回路.CheckPWVOUT(TEST_出力回路.DV_CH.DV6))
                        {
                            break;
                        }
                        goto case 5000;

                    case 2003:    //PWVOUT 操作量 電圧4 DV8
                        if (await TEST_出力回路.CheckPWVOUT(TEST_出力回路.DV_CH.DV8))
                        {
                            break;
                        }
                        goto case 5000;

                    case 2100:    //PV1,2 調整
                        Flags.AddDecision           = false;
                        State.VmTestStatus.TestLog += "\r\n";
                        var mess   = "①プレスを開けて、CN18とCN26にケーブルを接続してください\r\n②CN1とCN3にダイヤル抵抗器を接続してください";
                        var dialog = new DialogPic(mess, DialogPic.NAME.その他);
                        dialog.ShowDialog();
                        if (!await TEST_PT100.SetPT100(TEST_PT100.MODE.PV12, TEST_PT100.POINT.FIRST))
                        {
                            goto case 5000;
                        }
                        if (!await TEST_PT100.SetPT100(TEST_PT100.MODE.PV12, TEST_PT100.POINT.SECOND))
                        {
                            goto case 5000;
                        }
                        if (!await TEST_PT100.SetPT100(TEST_PT100.MODE.PV12, TEST_PT100.POINT.THIRD))
                        {
                            goto case 5000;
                        }
                        if (!await TEST_PT100.ReadPt100(TEST_PT100.NAME_PV.PV1))
                        {
                            goto case 5000;
                        }
                        if (!await TEST_PT100.ReadPt100(TEST_PT100.NAME_PV.PV2))
                        {
                            goto case 5000;
                        }
                        if (!await TEST_PT100.Check60(TEST_PT100.MODE.PV12))
                        {
                            goto case 5000;
                        }
                        break;

                    case 2200:    //PV3,4 調整
                        Flags.AddDecision           = false;
                        State.VmTestStatus.TestLog += "\r\n";
                        mess   = "①プレスを開けて、CN18とCN26にケーブルを接続してください\r\n②CN5とCN7にダイヤル抵抗器を接続してください";
                        dialog = new DialogPic(mess, DialogPic.NAME.その他);
                        dialog.ShowDialog();
                        if (!await TEST_PT100.SetPT100(TEST_PT100.MODE.PV34, TEST_PT100.POINT.FIRST))
                        {
                            goto case 5000;
                        }
                        if (!await TEST_PT100.SetPT100(TEST_PT100.MODE.PV34, TEST_PT100.POINT.SECOND))
                        {
                            goto case 5000;
                        }
                        if (!await TEST_PT100.SetPT100(TEST_PT100.MODE.PV34, TEST_PT100.POINT.THIRD))
                        {
                            goto case 5000;
                        }
                        if (!await TEST_PT100.ReadPt100(TEST_PT100.NAME_PV.PV3))
                        {
                            goto case 5000;
                        }
                        if (!await TEST_PT100.ReadPt100(TEST_PT100.NAME_PV.PV4))
                        {
                            goto case 5000;
                        }
                        if (!await TEST_PT100.Check60(TEST_PT100.MODE.PV34))
                        {
                            goto case 5000;
                        }
                        break;

                    case 2600:    //Pt100センサー断線チェック Normal
                        if (await TEST_PT100センサ断線.CheckNormal())
                        {
                            break;
                        }
                        goto case 5000;

                    case 2601:    //Pt100センサー断線チェック A断線
                        if (await TEST_PT100センサ断線.Check断線(TEST_PT100センサ断線.MODE.A断線))
                        {
                            break;
                        }
                        goto case 5000;

                    case 2602:    //Pt100センサー断線チェック B断線
                        if (await TEST_PT100センサ断線.Check断線(TEST_PT100センサ断線.MODE.B_1断線))
                        {
                            break;
                        }
                        goto case 5000;

                    case 2603:    //Pt100センサー断線チェック B'断線
                        if (await TEST_PT100センサ断線.Check断線(TEST_PT100センサ断線.MODE.B_2断線))
                        {
                            break;
                        }
                        goto case 5000;

                    case 2700:    //電流入力回路調整 I_1
                        Flags.AddDecision           = false;
                        State.VmTestStatus.TestLog += "\r\n";
                        dialog = new DialogPic("ケーブルを外して、プレスを閉じてください!!!", DialogPic.NAME.その他);
                        dialog.ShowDialog();
                        if (!await TEST_電流入力回路.SetInputI(TEST_電流入力回路.NAME.I_1))
                        {
                            goto case 5000;
                        }
                        if (!await TEST_電流入力回路.CheckInputI(TEST_電流入力回路.NAME.I_1))
                        {
                            goto case 5000;
                        }
                        break;

                    case 2701:    //電流入力回路調整 I_2
                        Flags.AddDecision           = false;
                        State.VmTestStatus.TestLog += "\r\n";
                        if (!await TEST_電流入力回路.SetInputI(TEST_電流入力回路.NAME.I_2))
                        {
                            goto case 5000;
                        }
                        if (!await TEST_電流入力回路.CheckInputI(TEST_電流入力回路.NAME.I_2))
                        {
                            goto case 5000;
                        }
                        break;

                    case 2702:    //電流入力回路調整 I_3
                        Flags.AddDecision           = false;
                        State.VmTestStatus.TestLog += "\r\n";
                        if (!await TEST_電流入力回路.SetInputI(TEST_電流入力回路.NAME.I_3))
                        {
                            goto case 5000;
                        }
                        if (!await TEST_電流入力回路.CheckInputI(TEST_電流入力回路.NAME.I_3))
                        {
                            goto case 5000;
                        }
                        break;

                    case 2703:    //電流入力回路調整 I_4
                        Flags.AddDecision           = false;
                        State.VmTestStatus.TestLog += "\r\n";
                        if (!await TEST_電流入力回路.SetInputI(TEST_電流入力回路.NAME.I_4))
                        {
                            goto case 5000;
                        }
                        if (!await TEST_電流入力回路.CheckInputI(TEST_電流入力回路.NAME.I_4))
                        {
                            goto case 5000;
                        }
                        break;

                    case 2800:    //電圧入力回路調整 V_1
                        Flags.AddDecision           = false;
                        State.VmTestStatus.TestLog += "\r\n";
                        if (!await TEST_電圧入力回路.SetInputV(TEST_電圧入力回路.MODE.V_1))
                        {
                            goto case 5000;
                        }
                        if (!await TEST_電圧入力回路.CheckInputV(TEST_電圧入力回路.MODE.V_1))
                        {
                            goto case 5000;
                        }
                        break;

                    case 2801:    //電圧入力回路調整 V_2
                        Flags.AddDecision           = false;
                        State.VmTestStatus.TestLog += "\r\n";
                        if (!await TEST_電圧入力回路.SetInputV(TEST_電圧入力回路.MODE.V_2))
                        {
                            goto case 5000;
                        }
                        if (!await TEST_電圧入力回路.CheckInputV(TEST_電圧入力回路.MODE.V_2))
                        {
                            goto case 5000;
                        }
                        break;

                    case 2802:    //電圧入力回路調整 V_3
                        Flags.AddDecision           = false;
                        State.VmTestStatus.TestLog += "\r\n";
                        if (!await TEST_電圧入力回路.SetInputV(TEST_電圧入力回路.MODE.V_3))
                        {
                            goto case 5000;
                        }
                        if (!await TEST_電圧入力回路.CheckInputV(TEST_電圧入力回路.MODE.V_3))
                        {
                            goto case 5000;
                        }
                        break;

                    case 2803:    //電圧入力回路調整 V_4
                        Flags.AddDecision           = false;
                        State.VmTestStatus.TestLog += "\r\n";
                        if (!await TEST_電圧入力回路.SetInputV(TEST_電圧入力回路.MODE.V_4))
                        {
                            goto case 5000;
                        }
                        if (!await TEST_電圧入力回路.CheckInputV(TEST_電圧入力回路.MODE.V_4))
                        {
                            goto case 5000;
                        }
                        break;

                    case 2900:    //2線式液漏れセンサ回路 調整
                        Flags.AddDecision           = false;
                        State.VmTestStatus.TestLog += "\r\n";
                        if (!await TEST_2線式液漏れセンサ回路.SetLeak())
                        {
                            goto case 5000;
                        }
                        if (!await TEST_2線式液漏れセンサ回路.CheckLeak())
                        {
                            goto case 5000;
                        }
                        break;



                    case 5000:    //NGだっときの処理
                        if (Flags.AddDecision)
                        {
                            SetTestLog("---- FAIL\r\n");
                        }
                        FailStepNo = d.s.Key;
                        FailTitle  = d.s.Value;

                        Flags.Retry = true;
                        WaveFormGenerator.SourceOff();
                        HIOKI7012.StopSource();
                        General.PowerSupply(false);
                        General.ResetIo();
                        State.VmTestStatus.IsActiveRing = false;    //リング表示してる可能性があるので念のため消す処理

                        if (Flags.ClickStopButton)
                        {
                            goto CHECK_RETRY;
                        }

                        if (RetryCnt++ != Constants.RetryCount)
                        {
                            //リトライ履歴リスト更新
                            State.RetryLogList.Add(FailStepNo.ToString() + "," + FailTitle + "," + System.DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));
                            goto Retry;
                        }

CHECK_RETRY:
                        General.PlaySoundLoop(General.soundAlarm);
                        var YesNoResult = MessageBox.Show("この項目はNGですがリトライしますか?", "", MessageBoxButtons.YesNo);
                        General.StopSound();

                        //何が選択されたか調べる
                        if (YesNoResult == DialogResult.Yes)
                        {
                            RetryCnt = 0;
                            Flags.ClickStopButton = false;
RETRY_INIT:
                            State.VmTestStatus.Message = "周辺機器を初期化しています。。。";
                            var reInit = await General.InitAll();

                            State.VmTestStatus.Message = Constants.MessWait;
                            if (!reInit)
                            {
                                var YesNoResult2 = MessageBox.Show("周辺機器の初期化に失敗しました\r\nリトライしますか??", "", MessageBoxButtons.YesNo);
                                if (YesNoResult2 == DialogResult.Yes)
                                {
                                    goto RETRY_INIT;
                                }
                                goto FAIL;
                            }


                            goto Retry;
                        }

                        goto FAIL;    //自動リトライ後の作業者への確認はしない
                    }
                    //↓↓各ステップが合格した時の処理です↓↓
                    if (Flags.AddDecision)
                    {
                        SetTestLog("---- PASS\r\n");
                    }

                    State.VmTestStatus.IsActiveRing = false;

                    //リトライステータスをリセットする
                    RetryCnt    = 0;
                    Flags.Retry = false;

                    await Task.Run(() =>
                    {
                        var CurrentProgValue = State.VmTestStatus.進捗度;
                        var NextProgValue    = (int)(((d.i + 1) / (double)テスト項目最新.Count()) * 100);
                        var 化量 = NextProgValue - CurrentProgValue;
                        foreach (var p in Enumerable.Range(1, 化量))
                        {
                            State.VmTestStatus.進捗度 = CurrentProgValue + p;
                            if (State.VmTestStatus.CheckUnitTest == false)
                            {
                                Thread.Sleep(10);
                            }
                        }
                    });

                    if (Flags.ClickStopButton)
                    {
                        goto FAIL;
                    }
                }


                //↓↓すべての項目が合格した時の処理です↓↓
                General.ResetIo();
                WaveFormGenerator.SourceOff();
                HIOKI7012.StopSource();
                await Task.Delay(500);

                State.VmTestStatus.Message            = Constants.MessRemove;
                State.VmTestStatus.StartButtonContent = Constants.確認;
                State.VmTestStatus.StartButtonEnable  = false;

                //通しで試験した時は検査データを保存する
                if (State.VmTestStatus.CheckUnitTest != true) //null or False アプリ立ち上げ時はnullになっている!
                {
                    if (!General.SaveTestData())
                    {
                        FailStepNo = 5000;
                        FailTitle  = "検査データ保存";
                        goto FAIL_DATA_SAVE;
                    }
                }

                FlagTestTime = false;

                State.VmTestStatus.Colorlabel判定  = Brushes.AntiqueWhite;
                State.VmTestStatus.Decision      = Flags.MetalMode ? "WIN" : "PASS";
                State.VmTestStatus.ColorDecision = effect判定表示PASS;

                ResetRing();
                SetDecision();
                SbPass();

                //通しで試験が合格したときの処理です(検査データを保存して、シリアルナンバーをインクリメントする)
                if (State.VmTestStatus.CheckUnitTest != true) //null or False アプリ立ち上げ時はnullになっている!
                {
                    //当日試験合格数をインクリメント ビューモデルはまだ更新しない
                    State.Setting.TodayOkCount++;

                    //これ重要!!! シリアルナンバーをインクリメントし、次の試験に備える ビューモデルはまだ更新しない
                    State.NewSerial++;

                    Flags.ShowLabelPage = true;
                    General.PlaySound(General.soundPass);
                    await Task.Delay(3900);

                    State.VmTestStatus.StartButtonEnable = true;
                    return;
                }
                else
                {
                    State.VmTestStatus.Message = Constants.MessRemove;
                    Flags.ShowLabelPage        = false;

                    State.VmTestStatus.StartButtonEnable = true;
                    StopButtonBlinkOn();
                    await Task.Run(() =>
                    {
                        while (true)
                        {
                            if (Flags.Click確認Button)
                            {
                                break;
                            }
                            Thread.Sleep(100);
                        }
                    });

                    StopButtonBlinkOff();
                    return;
                }


                //不合格時の処理
FAIL:


                General.ResetIo();
                await Task.Delay(500);

FAIL_DATA_SAVE:


                FlagTestTime = false;
                State.VmTestStatus.Message            = Constants.MessRemove;
                State.VmTestStatus.StartButtonContent = Constants.確認;
                State.VmTestStatus.StartButtonEnable  = true;

                //当日試験不合格数をインクリメント ビューモデルはまだ更新しない
                State.Setting.TodayNgCount++;
                await Task.Delay(100);

                State.VmTestStatus.Colorlabel判定  = Brushes.AliceBlue;
                State.VmTestStatus.Decision      = "FAIL";
                State.VmTestStatus.ColorDecision = effect判定表示FAIL;

                SetErrorMessage(FailStepNo, FailTitle);

                var NgDataList = new List <string>()
                {
                    State.VmMainWindow.Opecode,
                    State.VmMainWindow.Operator,
                    System.DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"),
                    State.VmTestStatus.FailInfo,
                    State.VmTestStatus.Spec,
                    State.VmTestStatus.MeasValue
                };

                General.SaveNgData(NgDataList);


                ResetRing();
                SetDecision();
                SetErrInfo();
                SbFail();

                General.PlaySound(General.soundFail);
                StopButtonBlinkOn();
                await Task.Run(() =>
                {
                    while (true)
                    {
                        if (Flags.Click確認Button)
                        {
                            break;
                        }
                        Thread.Sleep(100);
                    }
                });

                StopButtonBlinkOff();

                return;
            }
            catch
            {
                System.Windows.Forms.MessageBox.Show("想定外の例外発生DEATH!!!\r\n申し訳ありませんが再起動してください");
                Environment.Exit(0);
            }
            finally
            {
                General.ResetIo();
                SbRingLoad();

                if (Flags.ShowLabelPage)
                {
                    State.uriOtherInfoPage      = new Uri("Page/Test/ラベル貼り付け.xaml", UriKind.Relative);
                    State.VmMainWindow.TabIndex = 3;
                }
                else
                {
                    General.ResetViewModel();
                    RefreshDataContext();
                }
            }
        }