private bool doTest(int board, GT668Class.GtiSignal signal, GT900USBClass GT668, TestOptionsClass testOpt) { double posv = 0.0; double negv = 0.0; Console.WriteLine(""); GT668.ClearError(); nf.AddToINFO($@"", InfoLine); nf.AddToINFO($@"Testing board {board} for signal {signal}", InfoLine); GT668.Select(board); GT668.MeasureAmplitude(signal, ref posv, ref negv, 1000.0); if (posv - negv >= 0.5) { double thr_val = (posv + negv) / 2.0; nf.AddToINFO($@"Signal found on board {board} for signal {EnumHelper.GetDescription(signal)} setting threshold {Math.Round(thr_val,3)} V", InfoLine); GT668.SetReferenceClock(GT668Class.GtiRefClkSrc.GT_REF_INTERNAL, false, false); GT668.SetBlockArm(GT668Class.GtiBlkArmSrc.GT_BA_IMM, GT668Class.GtiPolarity.GT_POL_POS, false); GT668.SetArmAuxOut(GT668Class.GtiArmAuxOut.GT_AUX_OUT_OFF); GT668.SetMemoryWrapMode(true); GT668.SetT0Mode(false, true); GT668.SetInputImpendance(signal, GT668Class.GtiImpedance.GT_IMP_LO); GT668.SetInputCoupling(signal, GT668Class.GtiCoupling.GT_CPL_DC); if (testOpt.manualTreshold) { GT668.SetInputThreshold(signal, GT668Class.GtiThrMode.GT_THR_VOLTS, testOpt.treshold); } else { GT668.SetInputThreshold(signal, GT668Class.GtiThrMode.GT_THR_VOLTS, thr_val); } GT668.SetInputPrescale(signal, GT668Class.GtiPrescale.GT_DIV_16); GT668.SetMeasSkip(0, 624U); switch (signal) { case GT668Class.GtiSignal.GT_SIG_A: GT668.SetMeasInput(0, GT668Class.GtiInputSel.GT_CHA_POS); break; case GT668Class.GtiSignal.GT_SIG_B: GT668.SetMeasInput(0, GT668Class.GtiInputSel.GT_CHB_POS); break; } GT668.SetMeasEnable(0, true); GT668.SetMeasEnable(1, false); GT668.StartMeasurements(); Thread.Sleep(100); uint num2 = 0; ref uint local2 = ref num2; double num3 = 0.0; ref double local3 = ref num3;
void WorkerRunMeasurement(GT900USBClass ob, bool worker) { if (ob == null) { return; } Error(0, worker, $@"Test ErrorLog"); uint ActNumTags0 = 0; uint ActNumTags1 = 0; double start_time = ob.ReadSysTime(); int cmd_cnt = 0; Info(++cmd_cnt, worker, InfoLine, $@"StartTime:{start_time}"); int akt = 0; ob.Run = true; Thread.Sleep(ob.measConfig.sleepAfterSingleMeasurement); while ((akt < ob.measConfig.loops || ob.measConfig.loops <= 0) && isBusy(worker) && (ob.Run)) { double time = ob.ReadSysTime() - start_time; if (ob.measConfig.showAllErrors) { int er = ob.GetError(); if (er > 0) { Info(++cmd_cnt, worker, InfoLine, $@"ERROR->ReadSysTime->{akt}->Time:{time}->Error:{er}"); } } if (akt > ob.measConfig.loops && ob.measConfig.loops > 0) { break; } int readCnt = 0; var r1 = new GT668Class.GtiRealTime[2]; var r2 = new GT668Class.GtiRealTime[2]; double result = double.MinValue; double resulttime = 0; if (ob.measConfig.measType == eMeasType.freq_a) { ActNumTags0 = 0U; ActNumTags1 = 0U; while ((ActNumTags0 != ob.measConfig.numTag0) && (ob.Run) && isBusy(worker)) { ob.ReadTimetagsEx(ref r1[0], ob.measConfig.numTag0, ref ActNumTags0, ref r2[0], ob.measConfig.numTag1, ref ActNumTags1); int errRead = ob.GetError(); Thread.Sleep(ob.measConfig.sleepAfterSingleRead); if (errRead > 0) { Error(++cmd_cnt, worker, $@"ERROR->{ob.GetErrorMessage(errRead)}->StopMeasurement"); ob.StopMeasurements(); ob.ClearError(); Thread.Sleep(50); Error(++cmd_cnt, worker, $@"RestartMeasurement"); ob.StartMeasurements(); Error(++cmd_cnt, worker, $@"Measurement Restarted"); readCnt = 0; } readCnt++; } if (ob.Run) { resulttime = ob.ReadSysTime(); result = (Math.Abs(10000.0 / ((r1[1].Seconds + r1[1].Fraction) - (r1[0].Seconds + r1[0].Fraction)))) + ob.measConfig.userDefinedYOffset; } } else if (ob.measConfig.measType == eMeasType.freq_a_b) { ActNumTags0 = 0; ActNumTags1 = 0; readCnt = 0; double tm = 0.0; while (((ActNumTags0 <= 0) || (ActNumTags1 <= 0)) && ob.Run && isBusy(worker)) { ob.ReadTimetagsEx(ref r1[0], ob.measConfig.numTag0, ref ActNumTags0, ref r2[0], ob.measConfig.numTag1, ref ActNumTags1); Thread.Sleep(ob.measConfig.sleepAfterSingleRead); int errRead = ob.GetError(); //tm = ob.ReadSysTime() - start_time; if (errRead > 0) { Error(++cmd_cnt, worker, $@"{tm}: ERROR->{ob.GetErrorMessage(errRead)}->StopMeasurement"); ob.StopMeasurements(); ob.ClearError(); Thread.Sleep(50); Error(++cmd_cnt, worker, $@"{tm}: RestartMeasurement"); ob.StartMeasurements(); tm = ob.ReadSysTime() - start_time; Error(++cmd_cnt, worker, $@"{tm}: Measurement Restarted"); readCnt = 0; } readCnt++; } if (ob.Run) { tm = ob.ReadSysTime() - start_time; resulttime = Math.Round(tm, 6); result = (r1[0].Fraction - r2[0].Fraction) + ob.measConfig.userDefinedYOffset; } } else if (ob.measConfig.measType == eMeasType.pps_a_b) { ActNumTags0 = 0; ActNumTags1 = 0; readCnt = 0; while (((ActNumTags0 <= 0) || (ActNumTags1 <= 0) || (resulttime <= 0)) && ob.Run && isBusy(worker)) { ob.ReadTimetagsEx(ref r1[0], ob.measConfig.numTag0, ref ActNumTags0, ref r2[0], ob.measConfig.numTag1, ref ActNumTags1); Thread.Sleep(ob.measConfig.sleepAfterSingleRead); int errRead = ob.GetError(); if (errRead > 0) { Error(++cmd_cnt, worker, $@"ERROR->{ob.GetErrorMessage(errRead)}->StopMeasurement"); ob.StopMeasurements(); ob.ClearError(); Thread.Sleep(50); Error(++cmd_cnt, worker, $@"RestartMeasurement"); ob.StartMeasurements(); Error(++cmd_cnt, worker, $@"Measurement Restarted"); readCnt = 0; } readCnt++; if (ob.Run) { resulttime = r1[0].Seconds; } } if (ob.Run) { result = (r1[0].Fraction - r2[0].Fraction) + ob.measConfig.userDefinedYOffset; } } int err = ob.GetError(); if (err > 0) { Info(++cmd_cnt, worker, InfoLine, $@"ERROR->{akt}->Time:{time}->CountTags:{ob.measConfig.numTag0},ReadTags:{ActNumTags0}->Error:{err}"); ob.ClearError(); } time = ob.ReadSysTime() - start_time; if (ob.measConfig.showAllErrors) { err = ob.GetError(); if (err > 0) { Info(++cmd_cnt, worker, InfoLine, $@"ERROR->ReadSysTime->{akt}->Time:{time}->Error:{err}"); } } if ((result > double.MinValue) && (ob.Run)) { if (ActNumTags0 > 1) { Console.WriteLine(); } if (ob.measConfig.showResults) { var rd = new ResultDataClass(); rd.ID = Guid.NewGuid(); rd.STAMP = DateTime.Now; if (ob.measConfig.measType == eMeasType.pps_a_b) { rd.VALUE = result; rd.DATASTAMP = resulttime; Info(++cmd_cnt, worker, DataLine, $@" Tag({readCnt}): tag0->{ActNumTags0},tag1->{ActNumTags1}->{rd.DATASTAMP}={rd.VALUE}", rd); } else if (ob.measConfig.measType == eMeasType.freq_a_b) { rd.VALUE = result; rd.DATASTAMP = resulttime; Info(++cmd_cnt, worker, DataLine, $@" Tag({readCnt}): tag0->{ActNumTags0},tag1->{ActNumTags1}->{rd.DATASTAMP}={rd.VALUE}", rd); } else if (ob.measConfig.measType == eMeasType.freq_a) { rd.VALUE = result; rd.DATASTAMP = resulttime; Info(++cmd_cnt, worker, DataLine, $@" Tag({readCnt}): tag0->{ActNumTags0},tag1->{ActNumTags1}->{rd.DATASTAMP}={rd.VALUE}", rd); Thread.Sleep(200); } } else { err = ob.GetError(); Info(++cmd_cnt, worker, InfoLine, $@"{akt}->Time:{time}->CountTags:{ob.measConfig.numTag0},ReadTags:{ActNumTags0},{ActNumTags1}->Error:{err}"); } if (ob.measConfig.restartMeasurementAfterLoop && ob.Run) { ob.StopMeasurements(); Info(++cmd_cnt, worker, InfoLine, $@"Measurement stopped"); ob.StartMeasurements(); Info(++cmd_cnt, worker, InfoLine, $@"Measurement started"); } if (ob.Run) { ob.Sleep(); } akt++; Application.DoEvents(); } } Info(++cmd_cnt, worker, InfoLine, $@"Measurement loop stopped."); ob.Run = false; ob.CloseMeasurement(); Cancel(worker); }