Exemplo n.º 1
0
        public static async Task<bool> WriteFw()
        {
            try
            {
                General.ResetIo();
                await Task.Delay(500);

                //試験機のK10,K11をONする処理
                General.SetK10_11(true);
                await Task.Delay(500);

                //電源ON
                General.PowSupply(true);
                await Task.Delay(500);

                return await FlashProgrammer.WriteFirmware(Constants.RwsPath_Product, State.TestSpec.FwSum);

            }
            catch
            {
                return false;
            }
            finally
            {
                //電源OFF
                await Task.Delay(300);
                General.PowSupply(false);
                await Task.Delay(300);
                //試験機のK1~K4をOFFする処理
                General.SetK10_11(false);
            }
        }
Exemplo n.º 2
0
        private void Page_Unloaded(object sender, RoutedEventArgs e)
        {
            General.PowSupply(false);

            buttonPow.Background = Brushes.Transparent;

            State.VmTestResults.ColorPc1Out = Brushes.Transparent;
            State.VmTestResults.ColorPc2Out = Brushes.Transparent;
            State.VmTestResults.ColorPc3Out = Brushes.Transparent;
            State.VmTestResults.ColorPc4Out = Brushes.Transparent;
        }
Exemplo n.º 3
0
        private void buttonPow_Click(object sender, RoutedEventArgs e)
        {
            if (FlagPow)
            {
                General.PowSupply(false);
                buttonPow.Background = ButtonOffBrush;
            }
            else
            {
                General.PowSupply(true);
                buttonPow.Background = ButtonOnBrush;
            }

            FlagPow = !FlagPow;
        }
Exemplo n.º 4
0
        private async void SetLed()
        {
            General.SetRL1(false);
            General.SetRL2(false);
            General.SetRL3(false);
            General.SetRL4(false);
            General.SetRL5(true);
            General.SetRL6(true);
            await Task.Delay(500);

            General.PowSupply(true);//RL1
            Thread.Sleep(2000);
            General.S1On();

            FlagSetLed = true;
        }
Exemplo n.º 5
0
 private void buttonRL1_Click(object sender, RoutedEventArgs e)
 {
     RL1 = !RL1;
     General.PowSupply(RL1);
     buttonRL1.Background = RL1 ? ButtonOnBrush : ButtonOffBrush;
 }
Exemplo n.º 6
0
        //メインルーチン
        public async Task Test()
        {
            Flags.Testing = true;

            State.VmTestStatus.Message = Constants.MessWait;

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



            General.cam.ImageOpacity = 1.0;

            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));
                }
            }
            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;

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


                    switch (d.s.Key)
                    {
                    case 100:    //コネクタ実装チェック
                        if (await コネクタチェック.CheckCn())
                        {
                            break;
                        }
                        goto case 1000;

                    case 200:    //電源電圧チェック ac100
                        if (await 電圧チェック.CheckVoltAsync(電圧チェック.CH.AC100))
                        {
                            break;
                        }
                        goto case 1000;

                    case 201:    //電源電圧チェック VDD
                        if (await 電圧チェック.CheckVoltAsync(電圧チェック.CH.VDD))
                        {
                            break;
                        }
                        goto case 1000;

                    case 202:    //電源電圧チェック VCC1
                        if (await 電圧チェック.CheckVoltAsync(電圧チェック.CH.VCC1))
                        {
                            break;
                        }
                        goto case 1000;

                    case 300:    //製品プログラム書き込み
                        if (State.VmTestStatus.CheckWriteFw == true)
                        {
                            break;
                        }
                        if (await 書き込み.WriteFw())
                        {
                            break;
                        }
                        goto case 1000;

                    case 500:    //電源電圧チェック VCC2
                        General.SetRL5(true);
                        if (await 電圧チェック.CheckVoltAsync(電圧チェック.CH.VCC2_RELAY_ON))
                        {
                            break;
                        }
                        goto case 1000;

                    case 600:    //シーケンスチェック
                        if (await シーケンスチェック.CheckDout())
                        {
                            break;
                        }
                        SetTestLog("---- FAIL\r\n");
                        goto case 1000;

                    case 1000:    //NGだっときの処理
                        if (Flags.AddDecision)
                        {
                            SetTestLog("---- FAIL\r\n");
                        }
                        FailStepNo = d.s.Key;
                        if (FailStepNo == 600)
                        {
                            FailTitle = シーケンスチェック.ErrTitle;
                        }
                        else
                        {
                            FailTitle = d.s.Value;
                        }

                        General.PowSupply(false);
                        await Task.Delay(500);


                        if (RetryCnt++ != Constants.RetryCount)
                        {
                            //リトライ履歴リスト更新
                            State.RetryLogList.Add(FailStepNo.ToString() + "," + FailTitle + "," + System.DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));
                            Flags.Retry = true;
                            General.cam.ResetFlag();    //LEDテストでNGになったときは、カメラのフラグを初期化しないとNG枠が出たままになる
                            goto Retry;
                        }
                        goto FAIL;    //自動リトライ後の作業者への確認はしない
                    }
                    //↓↓各ステップが合格した時の処理です↓↓
                    if (Flags.AddDecision)
                    {
                        SetTestLog("---- PASS\r\n");
                    }


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


                    State.VmTestStatus.進捗度 = (int)(((d.i + 1) / (double)テスト項目最新.Count()) * 100);
                }


                //↓↓すべての項目が合格した時の処理です↓↓
                General.PowSupply(false);
                await Task.Delay(1000);

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

                await General.Discharge();

                State.VmTestStatus.Message = Constants.MessRemove;

                //通しで試験が合格したときの処理です(検査データを保存して、シリアルナンバーをインクリメントする)
                if (State.VmTestStatus.CheckUnitTest != true) //null or False アプリ立ち上げ時はnullになっている!
                {
                    if (!General.SaveTestData())
                    {
                        FailStepNo = 5000;
                        FailTitle  = "検査データ保存";
                        goto FAIL_DATA_SAVE;
                    }

                    General.StampOn();//合格印押し

                    //当日試験合格数をインクリメント ビューモデルはまだ更新しない
                    State.Setting.TodayOkCount++;
                }



                FlagTestTime = false;

                State.VmTestStatus.Colorlabel判定  = Brushes.DeepSkyBlue;
                State.VmTestStatus.Decision      = "PASS";
                State.VmTestStatus.ColorDecision = effect判定表示PASS;

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

                General.PlaySound(General.soundPassLong);

                await Task.Run(() =>
                {
                    while (true)
                    {
                        if (General.CheckPressOpen())
                        {
                            break;
                        }
                        Thread.Sleep(100);
                    }
                    General.player.Stop();
                });

                return;

                //不合格時の処理
FAIL:
                General.ResetIo();
                await Task.Delay(500);

                await General.Discharge();

FAIL_DATA_SAVE:

                FlagTestTime = false;
                State.VmTestStatus.Message = Constants.MessRemove;


                //当日試験不合格数をインクリメント ビューモデルはまだ更新しない
                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);

                await Task.Run(() =>
                {
                    while (true)
                    {
                        if (General.CheckPressOpen())
                        {
                            break;
                        }
                        Thread.Sleep(100);
                    }
                });

                return;
            }
            catch
            {
                System.Windows.Forms.MessageBox.Show("想定外の例外発生DEATH!!!\r\n申し訳ありませんが再起動してください");
                Environment.Exit(0);
            }
            finally
            {
                State.Setting.TotalTestCount++;//トータルテスト回数は内部的に保持するだけでViewには表示しない
                General.ResetIo();
                SbRingLoad();

                General.ResetViewModel();
                RefreshDataContext();

                General.cam.ResetFlag();

                //次の検査の前に、試験機のリレーRL1の接点が溶着していないかチェックしておく
                General.CheckPowRelay();
            }
        }
Exemplo n.º 7
0
        public static bool CheckVolt(CH ch)
        {
            bool   result   = false;
            Double measData = 0;
            double Max      = 0;
            double Min      = 0;

            //AC100V計測用(安全のため、トランスで降圧して計測するので、出力電圧に係数をかけた値で判定する)
            double k = 8.5106;//100/11.75 = 8.5106 → 100:11.75=トランス入力電圧:トランス出力電圧から、トランス入力電圧 = (100/11.75)*トランス出力電圧

            try
            {
                General.ResetRelay_7502();
                Thread.Sleep(200);

                if (ch == CH.AC100)
                {
                    General.PowSupply(false);
                }
                else
                {
                    if (!Flags.PowOn)
                    {
                        General.PowSupply(true);
                        Thread.Sleep(1500);
                    }
                }

                switch (ch)
                {
                case CH.VDD:
                    Max = State.TestSpec.VddMax;
                    Min = State.TestSpec.VddMin;
                    General.SetK14(true);    //VDDと7062のV端子を接続する処理
                    break;

                case CH.VCC1:
                    Max = State.TestSpec.Vcc1Max;
                    Min = State.TestSpec.Vcc1Min;
                    General.SetK15(true);    //Vcc1と7062のV端子を接続する処理
                    break;

                case CH.VCC2_RELAY_OFF:
                    Max = State.TestSpec.Vcc2RelayOffMax;
                    Min = State.TestSpec.Vcc2RelayOffMin;
                    General.SetK16(true);    //Vcc2と7062のV端子を接続する処理
                    break;

                case CH.VCC2_RELAY_ON:
                    Max = State.TestSpec.Vcc2RelayOnMax;
                    Min = State.TestSpec.Vcc2RelayOnMin;
                    General.SetK16(true);    //Vcc2と7062のV端子を接続する処理
                    break;

                case CH.AC100:
                    Max = State.TestSpec.Ac100Max;
                    Min = State.TestSpec.Ac100Min;
                    General.SetK17(true);    //AC100V計測用トランスと7062のV端子を接続する処理
                    break;
                }


                Thread.Sleep(400);

                if (ch == CH.AC100)
                {
                    if (!General.multimeter.SetVoltAc())
                    {
                        return(false);
                    }
                }
                else
                {
                    if (!General.multimeter.SetVoltDc())
                    {
                        return(false);
                    }
                }

                Thread.Sleep(600);

                if (!General.multimeter.Measure())
                {
                    return(false);
                }

                if (ch == CH.AC100)
                {
                    measData = General.multimeter.VoltData * k;
                }
                else
                {
                    measData = General.multimeter.VoltData;
                }

                return(result = (measData > Min && measData < Max));
            }
            catch
            {
                return(result = false);
            }

            finally
            {
                //リレーを初期化する処理
                General.ResetRelay_7502();

                //ビューモデルの更新
                switch (ch)
                {
                case CH.VDD:
                    State.VmTestResults.VolVdd      = measData.ToString("F2") + "V";
                    State.VmTestResults.ColorVolVdd = result ? Brushes.Transparent : General.NgBrush;
                    break;

                case CH.VCC1:
                    State.VmTestResults.VolVcc1      = measData.ToString("F2") + "V";
                    State.VmTestResults.ColorVolVcc1 = result ? Brushes.Transparent : General.NgBrush;
                    break;

                case CH.VCC2_RELAY_OFF:
                    State.VmTestResults.VolVcc2Off      = measData.ToString("F2") + "V";
                    State.VmTestResults.ColorVolVcc2Off = result ? Brushes.Transparent : General.NgBrush;
                    break;

                case CH.VCC2_RELAY_ON:
                    State.VmTestResults.VolVcc2On      = measData.ToString("F2") + "V";
                    State.VmTestResults.ColorVolVcc2On = result ? Brushes.Transparent : General.NgBrush;
                    break;

                case CH.AC100:
                    State.VmTestResults.VolAc100      = measData.ToString("F2") + "V";
                    State.VmTestResults.ColorVolAc100 = result ? Brushes.Transparent : General.NgBrush;
                    break;
                }

                //NGだった場合、エラー詳細情報の規格値を更新する
                if (!result)
                {
                    switch (ch)
                    {
                    case CH.VDD:
                        State.VmTestStatus.Spec = "規格値 : " + State.TestSpec.VddMin.ToString("F2") + "~" + State.TestSpec.VddMax.ToString("F2") + "V";
                        break;

                    case CH.VCC1:
                        State.VmTestStatus.Spec = "規格値 : " + State.TestSpec.Vcc1Min.ToString("F2") + "~" + State.TestSpec.Vcc1Max.ToString("F2") + "V";
                        break;

                    case CH.VCC2_RELAY_OFF:
                        State.VmTestStatus.Spec = "規格値 : " + State.TestSpec.Vcc2RelayOffMin.ToString("F2") + "~" + State.TestSpec.Vcc2RelayOffMax.ToString("F2") + "V";
                        break;

                    case CH.VCC2_RELAY_ON:
                        State.VmTestStatus.Spec = "規格値 : " + State.TestSpec.Vcc2RelayOnMin.ToString("F2") + "~" + State.TestSpec.Vcc2RelayOnMax.ToString("F2") + "V";
                        break;

                    case CH.AC100:
                        State.VmTestStatus.Spec = "規格値 : " + State.TestSpec.Ac100Min.ToString("F2") + "~" + State.TestSpec.Ac100Max.ToString("F2") + "V";
                        break;
                    }

                    string data = measData.ToString("F2");

                    State.VmTestStatus.MeasValue = "計測値 : " + data + "V";
                }
            }
        }
        public static async Task <bool> CheckDout()
        {
            const bool on  = true;
            const bool off = false;

            bool FlagTimeout = false;
            var  tmTimeout   = new System.Timers.Timer();

            tmTimeout.Elapsed += (sender, e) =>
            {
                FlagTimeout = true;
            };

            return(await Task <bool> .Run(() =>
            {
                try
                {
                    General.ResetIo();
                    Thread.Sleep(1500);


                    Flags.AddDecision = false;
                    ResetViewModel();
                    InitList();//テストスペック初期化

                    //テストログの更新
                    State.VmTestStatus.TestLog += "\r\nテストモード + 電源投入";

                    General.SetRL1(false);
                    General.SetRL2(false);
                    General.SetRL3(false);
                    General.SetRL4(false);
                    General.SetRL5(true);
                    General.SetRL6(true);
                    Thread.Sleep(500);

                    General.PowSupply(true);//RL1
                    SetInput(on, off, off, off, on, on, off);
                    //SetExp(off, off, off, off, off, on, off);//マイコン特採対応 2017.11.9 ※限定です
                    SetExp(off, off, off, off, on, off, off);
                    Thread.Sleep(2000);

                    State.VmTestStatus.TestLog += "\r\nソフトVerチェック";
                    ErrTitle = "ソフトVerチェック";


                    if (!AnalysisInputData())
                    {
                        return false;
                    }
                    State.VmTestStatus.TestLog += "---PASS";

                    ////マイコン特採対応 2017.11.9 ※限定です
                    //State.VmTestStatus.TestLog += "\r\nLED2(緑)カラーチェック";
                    //ErrTitle = "LED2(緑)カラーチェック";
                    //if (!Test_Led.CheckColor(Test_Led.NAME.LED2)) return false;
                    //State.VmTestStatus.TestLog += "---PASS";

                    State.VmTestStatus.TestLog += "\r\nLED1(黄)カラーチェック";
                    ErrTitle = "LED1(黄)カラーチェック";
                    if (!Test_Led.CheckColor(Test_Led.NAME.LED1))
                    {
                        return false;
                    }
                    State.VmTestStatus.TestLog += "---PASS";

                    //ここで製品のRY1、RY2がOFFしているはずなので、VCC2(RelayOff状態)を計測する
                    State.VmTestStatus.TestLog += "\r\n電源電圧チェック Vcc2(RY1,RY2 ON)";
                    ErrTitle = "電源電圧チェック Vcc2(RY1,RY2 ON)";
                    if (!電圧チェック.CheckVolt(電圧チェック.CH.VCC2_RELAY_OFF))
                    {
                        return false;
                    }
                    State.VmTestStatus.TestLog += "---PASS";

                    State.VmTestStatus.TestLog += "\r\nS1 OnOffチェック";
                    ErrTitle = "S1 OnOffチェック";
                    SetInput(on, off, off, off, on, on, on);
                    SetExp(off, off, off, off, off, off, off);
                    General.S1On();
                    Thread.Sleep(2000);
                    if (!AnalysisInputData())
                    {
                        return false;
                    }
                    State.VmTestStatus.TestLog += "---PASS";

                    State.VmTestStatus.TestLog += "\r\nフロートスイッチ下限チェック";
                    ErrTitle = "フロートスイッチ下限チェック";
                    SetInput(on, on, off, off, on, on, off);
                    SetExp(off, off, off, off, on, off, off);
                    General.SetRL2(true);
                    Thread.Sleep(2000);
                    if (!AnalysisInputData())
                    {
                        return false;
                    }
                    State.VmTestStatus.TestLog += "---PASS";


                    State.VmTestStatus.TestLog += "\r\nフロートスイッチ上限チェック 1";
                    ErrTitle = "フロートスイッチ上限チェック 1";
                    SetInput(on, on, on, off, on, on, off);
                    SetExp(off, off, off, on, off, on, off);
                    FlagTimeout = false;
                    tmTimeout.Interval = 2000;
                    tmTimeout.Start();
                    General.SetRL3(true);
                    while (true)
                    {
                        if (FlagTimeout)
                        {
                            return false;
                        }
                        if (AnalysisInputData())
                        {
                            break;
                        }
                    }
                    State.VmTestStatus.TestLog += "---PASS";

                    State.VmTestStatus.TestLog += "\r\nフロートスイッチ上限チェック 2";
                    ErrTitle = "フロートスイッチ上限チェック 2";
                    SetExp(off, on, off, on, off, on, off);
                    FlagTimeout = false;
                    tmTimeout.Interval = 4000;
                    tmTimeout.Start();
                    while (true)
                    {
                        if (FlagTimeout)
                        {
                            return false;
                        }
                        if (AnalysisInputData())
                        {
                            break;
                        }
                    }
                    State.VmTestStatus.TestLog += "---PASS";

                    State.VmTestStatus.TestLog += "\r\nLED2(緑)カラーチェック";
                    ErrTitle = "LED2(緑)カラーチェック";
                    if (!Test_Led.CheckColor(Test_Led.NAME.LED2))
                    {
                        return false;
                    }
                    State.VmTestStatus.TestLog += "---PASS";


                    State.VmTestStatus.TestLog += "\r\nフロートスイッチ漏れチェック①";
                    ErrTitle = "フロートスイッチ漏れチェック①";
                    SetInput(on, on, on, on, on, on, off);
                    SetExp(off, off, off, off, off, off, on);
                    General.SetRL4(true);
                    Thread.Sleep(2000);
                    if (!AnalysisInputData())
                    {
                        return false;
                    }
                    State.VmTestStatus.TestLog += "---PASS";

                    State.VmTestStatus.TestLog += "\r\nLED3(赤)カラーチェック";
                    ErrTitle = "LED3(赤)カラーチェック";
                    if (!Test_Led.CheckColor(Test_Led.NAME.LED3))
                    {
                        return false;
                    }
                    State.VmTestStatus.TestLog += "---PASS";


                    State.VmTestStatus.TestLog += "\r\nフロートスイッチ漏れチェック②";
                    ErrTitle = "フロートスイッチ漏れチェック②";
                    SetInput(on, on, on, on, off, on, off);
                    SetExp(off, off, on, off, off, off, off);
                    General.SetRL5(false);
                    Thread.Sleep(2000);
                    if (!AnalysisInputData())
                    {
                        return false;
                    }
                    State.VmTestStatus.TestLog += "---PASS";
                    Thread.Sleep(2000);

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