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); } }
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; }
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; }
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; }
private void buttonRL1_Click(object sender, RoutedEventArgs e) { RL1 = !RL1; General.PowSupply(RL1); buttonRL1.Background = RL1 ? ButtonOnBrush : ButtonOffBrush; }
//メインルーチン 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(); } }
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; } })); }