From 944862dde06befd21f18391b0425397678014d69 Mon Sep 17 00:00:00 2001 From: Milan Hanajik Date: Wed, 22 May 2019 07:52:13 +0200 Subject: [PATCH] iPerlCommunicationForm : (1) OutOfRange / Q2OutOfRange aren't an RFID error, (2) CommFailed cleanup, (3) WriteQ2Correction(..) cleanup (updateQ2adjByCalibFactor arg. --- .../iPerlCommunicationForm.cs | 114 ++++++++++-------- 1 file changed, 67 insertions(+), 47 deletions(-) diff --git a/TBF/BenchControl/TestMethods/iPerlCommunication/iPerlCommunicationForm.cs b/TBF/BenchControl/TestMethods/iPerlCommunication/iPerlCommunicationForm.cs index 77fa55bf5..0f826ada2 100644 --- a/TBF/BenchControl/TestMethods/iPerlCommunication/iPerlCommunicationForm.cs +++ b/TBF/BenchControl/TestMethods/iPerlCommunication/iPerlCommunicationForm.cs @@ -38,10 +38,11 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication Verify, /// C = 12 WrongIPerlType, /// D = 13 OutOfRange, /// E = 14 - MissingTest, /// F = 15 - RFPowerRecordMissing, /// 10H = 16 - HeadDisabledByUser, /// 11H = 17 - WrongArguments, /// 12H = 18 + Q2OutOfRange, /// F = 15 + MissingTest, /// 10H = 16 + RFPowerRecordMissing, /// 11H = 17 + HeadDisabledByUser, /// 12H = 18 + WrongArguments, /// 13H = 19 } @@ -758,7 +759,7 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication /// RFID communication activity call /// if ((ihead == null) || ihead.Disabled || !ckbState[wmNr0]) error = CommErr.HeadDisabledByUser; - else if (wm == null || ihead.CommFailed) error = CommErr.CommFailed; + else if (wm == null) error = CommErr.CommFailed; #if IPERL else if (currentActivity.ToLower().Contains(ReadConfigurationStr.ToLower())) error = ReadConfiguration(threadID, ihead, wm, ref resultStr); else if (currentActivity.ToLower().Contains(SetTestModeStr.ToLower())) error = SetTestMode(threadID, ihead, wm, ref resultStr); @@ -772,13 +773,13 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication else if (currentActivity.ToLower().Equals(ReadQ2CorrectionStr.ToLower())) error = ReadQ2Correction(threadID, ihead, wm, ref resultStr); else if (currentActivity.ToLower().Equals(ResetQ2CorrectionStr.ToLower())) error = ResetQ2Correction(threadID, ihead, wm, ref resultStr); else if (currentActivity.ToLower().Equals(InitOrReadQ2CorrectionStr.ToLower())) error = InitOrReadQ2Correction(threadID, ihead, wm, ref resultStr); - else if (currentActivity.ToLower().Equals(WriteQ2CorrectionStr.ToLower())) error = WriteQ2Correction(threadID, ihead, wm, currentTest, ref resultStr, Q2CorrType.Standard, null, false); - else if (currentActivity.ToLower().Equals(WriteQ2CorrectionAltStr.ToLower())) error = WriteQ2Correction(threadID, ihead, wm, currentTest, ref resultStr, Q2CorrType.Dewa, null, false); - else if (currentActivity.ToLower().Contains(WriteQ2CorrectionGreeceStr.ToLower())) error = WriteQ2Correction(threadID, ihead, wm, currentTest, ref resultStr, Q2CorrType.Greece, currentActivity.Substring(WriteQ2CorrectionGreeceStr.Length).Trim(), true); - else if (currentActivity.ToLower().Contains(WriteQ2CorrectionRLStr.ToLower())) error = WriteQ2Correction(threadID, ihead, wm, currentTest, ref resultStr, Q2CorrType.RL, currentActivity.Substring(WriteQ2CorrectionRLStr.Length).Trim(), true); - else if (currentActivity.ToLower().Contains(WriteQ2CorrectionLRStr.ToLower())) error = WriteQ2Correction(threadID, ihead, wm, currentTest, ref resultStr, Q2CorrType.LR, currentActivity.Substring(WriteQ2CorrectionLRStr.Length).Trim(), true); - else if (currentActivity.ToLower().Contains(UpdateQ2CorrectionsStr.ToLower())) error = WriteQ2Correction(threadID, ihead, wm, currentTest, ref resultStr, Q2CorrType.Update, currentActivity.Substring(UpdateQ2CorrectionsStr.Length).Trim(), true); - else if (currentActivity.ToLower().Contains(ConditnlUpdateQ2CorrectionsStr.ToLower())) error = WriteQ2Correction(threadID, ihead, wm, currentTest, ref resultStr, Q2CorrType.ConditionalUpdate, currentActivity.Substring(ConditnlUpdateQ2CorrectionsStr.Length).Trim(), true); + else if (currentActivity.ToLower().Equals(WriteQ2CorrectionStr.ToLower())) error = WriteQ2Correction(threadID, ihead, wm, currentTest, ref resultStr, Q2CorrType.Standard, null); + else if (currentActivity.ToLower().Equals(WriteQ2CorrectionAltStr.ToLower())) error = WriteQ2Correction(threadID, ihead, wm, currentTest, ref resultStr, Q2CorrType.Dewa, null); + else if (currentActivity.ToLower().Contains(WriteQ2CorrectionGreeceStr.ToLower())) error = WriteQ2Correction(threadID, ihead, wm, currentTest, ref resultStr, Q2CorrType.Greece, currentActivity.Substring(WriteQ2CorrectionGreeceStr.Length).Trim()); + else if (currentActivity.ToLower().Contains(WriteQ2CorrectionRLStr.ToLower())) error = WriteQ2Correction(threadID, ihead, wm, currentTest, ref resultStr, Q2CorrType.RL, currentActivity.Substring(WriteQ2CorrectionRLStr.Length).Trim()); + else if (currentActivity.ToLower().Contains(WriteQ2CorrectionLRStr.ToLower())) error = WriteQ2Correction(threadID, ihead, wm, currentTest, ref resultStr, Q2CorrType.LR, currentActivity.Substring(WriteQ2CorrectionLRStr.Length).Trim()); + else if (currentActivity.ToLower().Contains(UpdateQ2CorrectionsStr.ToLower())) error = WriteQ2Correction(threadID, ihead, wm, currentTest, ref resultStr, Q2CorrType.Update, currentActivity.Substring(UpdateQ2CorrectionsStr.Length).Trim()); + else if (currentActivity.ToLower().Contains(ConditnlUpdateQ2CorrectionsStr.ToLower())) error = WriteQ2Correction(threadID, ihead, wm, currentTest, ref resultStr, Q2CorrType.ConditionalUpdate, currentActivity.Substring(ConditnlUpdateQ2CorrectionsStr.Length).Trim()); else if (currentActivity.ToLower().Equals(Reset2HzCorrectionStr.ToLower())) error = Reset2HzCorrection(threadID, ihead, wm, ref resultStr); else if (currentActivity.ToLower().Equals(Write2HzCorrectionStr.ToLower())) error = Write2HzCorrection(threadID, ihead, wm, ref resultStr); #endif @@ -797,29 +798,38 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication } else if (error == CommErr.None) { - OnCommCompleted(null, new CommCompletedEventArgs(threadID, wmNr0, ihead, wm, resultStr, error)); + OnCommCompleted(null, new CommCompletedEventArgs(threadID, wmNr0, ihead, wm, resultStr, CommErr.None)); } - else if (ihead.CommFailed || error == CommErr.CommFailed) - { - if ((wm.ResultCode & (int)Results.Entities.ResultCode.RfidErrorCodeMask) == 0) - { - wm.ResultCode |= (((int)error << 16) | ((int)tests[i].ItemNr << 20)); - } + else if ((error == CommErr.OutOfRange) || (error == CommErr.Q2OutOfRange)) + { + OnCommCompleted(null, new CommCompletedEventArgs(threadID, wmNr0, ihead, wm, resultStr, CommErr.None)); + } + else if (ihead.CommFailed || (error == CommErr.CommFailed)) + { + ihead.CommFailed = true; + + if ((wm.ResultCode & (int)Results.Entities.ResultCode.RfidErrorCodeMask) == 0) + { + wm.ResultCode |= (((int)error << 16) | ((int)tests[i].ItemNr << 20)); + } OnCommCompleted(null, new CommCompletedEventArgs(threadID, wmNr0, ihead, wm, Strings.RFID_communication_failed, error)); - } - else - { - if ((wm.ResultCode & (int)Results.Entities.ResultCode.RfidErrorCodeMask) == 0) - { - wm.ResultCode |= (((int)error << 16) | ((int)tests[i].ItemNr << 20)); - } + } + else + { + ihead.CommFailed = true; + + if ((wm.ResultCode & (int)Results.Entities.ResultCode.RfidErrorCodeMask) == 0) + { + wm.ResultCode |= (((int)error << 16) | ((int)tests[i].ItemNr << 20)); + } string failureCauseLocal = string.Format(Strings.failed_0_1_exclamation, currentActivity, error); + rfidDataLogger.ErrorFormat("Group={0}, Board={1}, {2}", currentGroup, ihead.MuxBoardNrOrGroup14, failureCauseLocal); + OnCommCompleted(null, new CommCompletedEventArgs(threadID, wmNr0, ihead, wm, failureCauseLocal, error)); - rfidDataLogger.ErrorFormat("Group={0}, Board={1}, {2}", currentGroup, ihead.MuxBoardNrOrGroup14, failureCauseLocal); - ihead.CommFailed = true; - } + } + break; } @@ -1181,17 +1191,25 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication UInt16.TryParse(arguments[0], out factorLimitLo) && factorLimitLo > 0 && UInt16.TryParse(arguments[1], out factorLimitHi) && factorLimitHi > 0) { + /// + /// Lower and upper limits for the calibration factor are specified as iPerlCommunication activity arguments + /// if (ihead.LastTestResult == null || !ihead.LastTestResult.TestDone) return CommErr.MissingTest; newCalibFactor = ihead.CalculateNewCalibFactor(ihead.LastTestResult, ihead.CalibFactor, factorLimitLo, factorLimitHi); } else if (arguments.Length == 1 && UInt16.TryParse(arguments[0], out val) && val > 0) { - newCalibFactor = val; /// Update with specified value + /// + /// Calibration factor value is specified as an iPerlCommunication activity argument + /// + newCalibFactor = val; /// Update with specified value } else if (arguments.Length == 1 && wm.GetTestData(arguments[0]) != null) { - /// Get test data is test name + /// + /// Adjustment test name is specified as an iPerlCommunication activity argument + /// Results.Entities.TestData adjustTestData = wm.GetTestData(arguments[0]); Results.Entities.MeterTestRslt adjustTestRslt; if (adjustTestData == null) @@ -1223,6 +1241,9 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication } else { + /// + /// Otherwise the last test is supposed to be an adjustment test + /// if (ihead.LastTestResult == null || !ihead.LastTestResult.TestDone) return CommErr.MissingTest; newCalibFactor = ihead.CalculateNewCalibFactor(ihead.LastTestResult, ihead.CalibFactor, ihead.FactorLimitLo, ihead.FactorLimitHi); @@ -1230,6 +1251,9 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication } else { + /// + /// No iPerlCommunication activity arguments --> The last test is supposed to be an adjustment test + /// if (ihead.LastTestResult == null || !ihead.LastTestResult.TestDone) return CommErr.MissingTest; newCalibFactor = ihead.CalculateNewCalibFactor(ihead.LastTestResult, ihead.CalibFactor, ihead.FactorLimitLo, ihead.FactorLimitHi); @@ -1842,7 +1866,7 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication /// String passed to caller /// true on success static CommErr WriteQ2Correction(int threadId, IperlHead ihead, Results.Entities.WaterMeter wm, Test test, ref string resultStr, - Q2CorrType q2CorrType, string restOfLine, bool updateQ2adjByCalibFactor) + Q2CorrType q2CorrType, string restOfLine) { if ((q2CorrType == Q2CorrType.ConditionalUpdate) && wm.PassedFromTests()) { @@ -1892,12 +1916,6 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication q2adjResult.VolumeRef += oneMTR.VolumeRef; } - if (updateQ2adjByCalibFactor) - { - if (wm.OrigCalibFactor == 0) return CommErr.OutOfRange; - q2adjResult.VolumeMeter *= ((double)wm.CalibFactor / (double)wm.OrigCalibFactor); - } - q2adjResult.Error = Config.Formulas.ErrorFromVolumes(q2adjResult.VolumeMeter, q2adjResult.VolumeRef); } } @@ -1931,12 +1949,6 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication q2adjResult2.VolumeRef += oneMTR.VolumeRef; } - if (updateQ2adjByCalibFactor) - { - if (wm.OrigCalibFactor == 0) return CommErr.OutOfRange; - q2adjResult2.VolumeMeter *= ((double)wm.CalibFactor / (double)wm.OrigCalibFactor); - } - q2adjResult2.Error = Config.Formulas.ErrorFromVolumes(q2adjResult2.VolumeMeter, q2adjResult2.VolumeRef); } } @@ -1960,6 +1972,9 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication /// if ((q2CorrType == Q2CorrType.Update) || (q2CorrType == Q2CorrType.ConditionalUpdate)) { + /// + /// Update or ConditionalUpdate: 1. Calculate updates, not corrections, 2. Use error limits from this test + /// double errLimitLo = test.ErrLimLo + test.Uncertainty; double errLimitHi = test.ErrLimHi - test.Uncertainty; @@ -1986,11 +2001,14 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication ihead.Q2CorrRL = wm.Q2CorrRL; ihead.Q2CorrLR = wm.Q2CorrLR; resultStr = string.Format("Q2 error is out of range => no Q2 correction"); - return CommErr.OutOfRange; + return CommErr.Q2OutOfRange; } } else { + /// + /// Regular Q2 corrections: 1. Use error limits from 'q2adjResult' + /// double errLimitLo = q2adjTestData.ErrLimLo + q2adjTestData.Uncertainty; double errLimitHi = q2adjTestData.ErrLimHi - q2adjTestData.Uncertainty; @@ -2011,7 +2029,7 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication errLimitHi.ToString("F1")); resultStr = string.Format("Q2 error is out of range => no Q2 correction"); - return CommErr.OutOfRange; + return CommErr.Q2OutOfRange; } } @@ -2081,7 +2099,9 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication /// /// Write calculated Q2 correction factors into the water meter - /// + /// + if (ihead.CommFailed) return CommErr.CommFailed; + if (OpenPort(threadId, ihead) != 0) return CommErr.OpenPort; /// Open RFID port CommErr error = CommErr.Write; if (q2CorrType == Q2CorrType.RL)