diff --git a/TBF/BenchControl/Output/FileWriters/IperlLogger/Writer.cs b/TBF/BenchControl/Output/FileWriters/IperlLogger/Writer.cs index 67f345ec8..7a507cc09 100644 --- a/TBF/BenchControl/Output/FileWriters/IperlLogger/Writer.cs +++ b/TBF/BenchControl/Output/FileWriters/IperlLogger/Writer.cs @@ -141,12 +141,12 @@ namespace TBF.BenchControl.Output.FileWriters.IperlLogger WriteLogsToDisk(logger, batch); logger.Flush(); logger.Close(); - log.WarnFormat("{0} : Batch {1} written OK", Name, batch.BatchNr); + log.WarnFormat("{0} : Batch #{1} written OK", Name, batch.BatchNr); } - catch + catch (Exception exc) { anyError = true; - log.WarnFormat("{0} : Failed to write batch {1}", Name, batch.BatchNr); + log.WarnFormat("{0} : Failed to write batch #{1}: {2}", Name, batch.BatchNr, exc.Message); } } @@ -223,248 +223,242 @@ namespace TBF.BenchControl.Output.FileWriters.IperlLogger } - try - { - logger.WriteLine("[Wasserzähler-Daten]"); - logger.WriteLine(string.Format("PruefPunkte={0}", (maxPruefungsNr > 15) ? 20 : ((maxPruefungsNr > 10) ? 15 : ((maxPruefungsNr > 5) ? 10 : 5)))); - logger.WriteLine(string.Format("Typ={0}", batch.ProcedureName)); /// iP 020 Q3_4 R160 A XXXX - logger.WriteLine(string.Format("MetroKlasse={0}", wmData.MetrologicalClass)); - logger.WriteLine(string.Format("Zulassungszeichen={0}", wmData.ApprovalInfo)); - logger.WriteLine(string.Format("Qn={0}", wmData.Q3_Qn.ToString("F1", Program.AltCulture))); - logger.WriteLine(string.Format("Impulsrate=1")); - logger.WriteLine(string.Format("WZid={0}", wmData.WMTypeId)); - logger.WriteLine(string.Format("RevWzTyp={0}", wm0.WMTypeRevision)); - logger.WriteLine(string.Format("RevPruefstandWzTyp=2")); + logger.WriteLine("[Wasserzähler-Daten]"); + logger.WriteLine(string.Format("PruefPunkte={0}", (maxPruefungsNr > 15) ? 20 : ((maxPruefungsNr > 10) ? 15 : ((maxPruefungsNr > 5) ? 10 : 5)))); + logger.WriteLine(string.Format("Typ={0}", batch.ProcedureName)); /// iP 020 Q3_4 R160 A XXXX + logger.WriteLine(string.Format("MetroKlasse={0}", wmData.MetrologicalClass)); + logger.WriteLine(string.Format("Zulassungszeichen={0}", wmData.ApprovalInfo)); + logger.WriteLine(string.Format("Qn={0}", wmData.Q3_Qn.ToString("F1", Program.AltCulture))); + logger.WriteLine(string.Format("Impulsrate=1")); + logger.WriteLine(string.Format("WZid={0}", wmData.WMTypeId)); + logger.WriteLine(string.Format("RevWzTyp={0}", wm0.WMTypeRevision)); + logger.WriteLine(string.Format("RevPruefstandWzTyp=2")); - for (int j = 0; j < testInfos.Length; j++) + for (int j = 0; j < testInfos.Length; j++) + { + if (testInfos[j].PruefungsNrLog != 0) { - if (testInfos[j].PruefungsNrLog != 0) - { - string fId = testInfos[j].PruefungsNrLog.ToString("D2"); - string qBz = testInfos[j].QBezeichnungLog; - Results.Entities.MeterTestRslt wm0r = wm0trs[j]; - bool pb_100_110 = (testInfos[j].Range == Range.R100_110); + string fId = testInfos[j].PruefungsNrLog.ToString("D2"); + string qBz = testInfos[j].QBezeichnungLog; + Results.Entities.MeterTestRslt wm0r = wm0trs[j]; + bool pb_100_110 = (testInfos[j].Range == Range.R100_110); - if (wm0r != null) + if (wm0r != null) + { + /// An existing test + logger.WriteLine(string.Format("Durchfluss{0}={1}", fId, Units.ConvertTo(Unit.lph, (wm0r.Qfrom() + wm0r.Qto()) / 2).ToString("F1", Program.AltCulture))); + logger.WriteLine(string.Format("Prüfzeit{0}={1}", fId, wm0r.TargetTime().ToString("F0"))); + logger.WriteLine(string.Format("Prüfbereich100_110{0}={1}", fId, (pb_100_110 ? 1 : 0))); + logger.WriteLine(string.Format("PrüfbereichMin{0}={1}", fId, (pb_100_110 ? 100 : 90))); + logger.WriteLine(string.Format("PrüfbereichMax{0}={1}", fId, (pb_100_110 ? 110 : 100))); + logger.WriteLine(string.Format("QBezeichnung{0}={1}", fId, qBz)); + if (testInfos[j].PruefungsNrLog > 0) { - /// An existing test - logger.WriteLine(string.Format("Durchfluss{0}={1}", fId, Units.ConvertTo(Unit.lph, (wm0r.Qfrom() + wm0r.Qto()) / 2).ToString("F1", Program.AltCulture))); - logger.WriteLine(string.Format("Prüfzeit{0}={1}", fId, wm0r.TargetTime().ToString("F0"))); - logger.WriteLine(string.Format("Prüfbereich100_110{0}={1}", fId, (pb_100_110 ? 1 : 0))); - logger.WriteLine(string.Format("PrüfbereichMin{0}={1}", fId, (pb_100_110 ? 100 : 90))); - logger.WriteLine(string.Format("PrüfbereichMax{0}={1}", fId, (pb_100_110 ? 110 : 100))); - logger.WriteLine(string.Format("QBezeichnung{0}={1}", fId, qBz)); - if (testInfos[j].PruefungsNrLog > 0) - { - /// Test is not an adjustment - logger.WriteLine(string.Format("PosFehlergrenze{0}={1}", fId, (wm0r.ErrLimHi() - wm0r.Uncertainty()).ToString("F1", Program.AltCulture))); - logger.WriteLine(string.Format("NegFehlergrenze{0}={1}", fId, (wm0r.ErrLimLo() + wm0r.Uncertainty()).ToString("F1", Program.AltCulture))); - logger.WriteLine(string.Format("PosFehlergrenzeWarm{0}=0,0", fId)); - logger.WriteLine(string.Format("NegFehlergrenzeWarm{0}=0,0", fId)); - } - } - else - { - logger.WriteLine(string.Format("Durchfluss{0}=0,0", fId)); - logger.WriteLine(string.Format("Prüfzeit{0}=0", fId)); - logger.WriteLine(string.Format("Prüfbereich100_110{0}=0", fId)); - logger.WriteLine(string.Format("PrüfbereichMin{0}=0", fId)); - logger.WriteLine(string.Format("PrüfbereichMax{0}=0", fId)); - logger.WriteLine(string.Format("QBezeichnung{0}=", fId)); + /// Test is not an adjustment + logger.WriteLine(string.Format("PosFehlergrenze{0}={1}", fId, (wm0r.ErrLimHi() - wm0r.Uncertainty()).ToString("F1", Program.AltCulture))); + logger.WriteLine(string.Format("NegFehlergrenze{0}={1}", fId, (wm0r.ErrLimLo() + wm0r.Uncertainty()).ToString("F1", Program.AltCulture))); + logger.WriteLine(string.Format("PosFehlergrenzeWarm{0}=0,0", fId)); + logger.WriteLine(string.Format("NegFehlergrenzeWarm{0}=0,0", fId)); } } - } - - logger.WriteLine(string.Format("GetriebeImpulse=2,000")); /// 2,000 - logger.WriteLine(string.Format("OptikAufsetzen=0")); /// 0 - logger.WriteLine(string.Format("Warm_Kalt=0")); /// 0 - logger.WriteLine(string.Format("Füllzeit=0")); /// 0 - logger.WriteLine(string.Format("EvakVorneZeit=0")); /// 0 - logger.WriteLine(string.Format("EvakHintenZeit={0}", 0)); /// 90 - logger.WriteLine(string.Format("Spüllzeit={0}", 0)); /// 60 - logger.WriteLine(string.Format("Spüldurchfluss={0}", 0)); /// 5000,0 - logger.WriteLine(string.Format("Abpresszeit={0}", 0)); /// 60 - logger.WriteLine(string.Format("Abpressdruck={0}", 0)); /// 0,0 - logger.WriteLine(string.Format("Entwässerzeit={0}", 0)); /// 10 - logger.WriteLine(string.Format("DinA4_Format={0}", 0)); /// 0 - logger.WriteLine(string.Format("Netzwerk_Format={0}", 0)); /// 0 - logger.WriteLine(string.Format("Zählernr_Format={0}", 0)); /// 1 - logger.WriteLine(string.Format("WZ_Gruppe=24")); /// 24 - iPerl - logger.WriteLine(string.Format("MittelwertTiefe={0}", 0)); /// 1 - logger.WriteLine(string.Format("EndKriterium={0}", 0)); /// 0 - logger.WriteLine(string.Format("Justieren={0}", 1)); /// 1 - logger.WriteLine(string.Format("Bemerkung=")); /// - logger.WriteLine(string.Format("Gesamtprüfzeit={0}", totalTestTime.ToString("F0"))); - logger.WriteLine(string.Format("Gegenprüfung={0}", 0)); /// 0 - logger.WriteLine(string.Format("Geändert_von={0}", 6)); /// 4459 - logger.WriteLine(string.Format("Geändert_am={0:dd.MM.yyyy HH:mm:ss}", DateTime.Now)); /// 29.05.2015 13:46:17 - - for (int i = 0; i < batch.WaterMeters.Count; i++) - { - Results.Entities.WaterMeter wMtr = batch.WaterMeters[i]; - - if ((wMtr != null) && (wMtr.ErrorFlags & ((int)ErrorFlagMask.E25 | (int)ErrorFlagMask.E26 | (int)ErrorFlagMask.E27 | (int)ErrorFlagMask.E28)) == 0) + else { - bool testRsltIsMissing = false; - Results.Entities.MeterTestRslt[] wmtrs = new Results.Entities.MeterTestRslt[testInfos.Length]; + logger.WriteLine(string.Format("Durchfluss{0}=0,0", fId)); + logger.WriteLine(string.Format("Prüfzeit{0}=0", fId)); + logger.WriteLine(string.Format("Prüfbereich100_110{0}=0", fId)); + logger.WriteLine(string.Format("PrüfbereichMin{0}=0", fId)); + logger.WriteLine(string.Format("PrüfbereichMax{0}=0", fId)); + logger.WriteLine(string.Format("QBezeichnung{0}=", fId)); + } + } + } + + logger.WriteLine(string.Format("GetriebeImpulse=2,000")); /// 2,000 + logger.WriteLine(string.Format("OptikAufsetzen=0")); /// 0 + logger.WriteLine(string.Format("Warm_Kalt=0")); /// 0 + logger.WriteLine(string.Format("Füllzeit=0")); /// 0 + logger.WriteLine(string.Format("EvakVorneZeit=0")); /// 0 + logger.WriteLine(string.Format("EvakHintenZeit={0}", 0)); /// 90 + logger.WriteLine(string.Format("Spüllzeit={0}", 0)); /// 60 + logger.WriteLine(string.Format("Spüldurchfluss={0}", 0)); /// 5000,0 + logger.WriteLine(string.Format("Abpresszeit={0}", 0)); /// 60 + logger.WriteLine(string.Format("Abpressdruck={0}", 0)); /// 0,0 + logger.WriteLine(string.Format("Entwässerzeit={0}", 0)); /// 10 + logger.WriteLine(string.Format("DinA4_Format={0}", 0)); /// 0 + logger.WriteLine(string.Format("Netzwerk_Format={0}", 0)); /// 0 + logger.WriteLine(string.Format("Zählernr_Format={0}", 0)); /// 1 + logger.WriteLine(string.Format("WZ_Gruppe=24")); /// 24 - iPerl + logger.WriteLine(string.Format("MittelwertTiefe={0}", 0)); /// 1 + logger.WriteLine(string.Format("EndKriterium={0}", 0)); /// 0 + logger.WriteLine(string.Format("Justieren={0}", 1)); /// 1 + logger.WriteLine(string.Format("Bemerkung=")); /// + logger.WriteLine(string.Format("Gesamtprüfzeit={0}", totalTestTime.ToString("F0"))); + logger.WriteLine(string.Format("Gegenprüfung={0}", 0)); /// 0 + logger.WriteLine(string.Format("Geändert_von={0}", 6)); /// 4459 + logger.WriteLine(string.Format("Geändert_am={0:dd.MM.yyyy HH:mm:ss}", DateTime.Now)); /// 29.05.2015 13:46:17 + + for (int i = 0; i < batch.WaterMeters.Count; i++) + { + Results.Entities.WaterMeter wMtr = batch.WaterMeters[i]; + + if ((wMtr == null) || (wMtr.ErrorFlags & ((int)ErrorFlagMask.E25 | (int)ErrorFlagMask.E26 | (int)ErrorFlagMask.E27 | (int)ErrorFlagMask.E28)) != 0) + { + logger.WriteLine(); + logger.WriteLine(string.Format("[Zählerdaten_{0}]", wMtr.WMPosition)); + logger.WriteLine("geprüft=0"); + } + else + { + bool testRsltIsMissing = false; + Results.Entities.MeterTestRslt[] wmtrs = new Results.Entities.MeterTestRslt[testInfos.Length]; + for (int j = 0; j < testInfos.Length; j++) + { + if (testInfos[j].PruefungsNrLog != 0) + { + wmtrs[j] = wMtr.GetMeterTestRslt(testInfos[j].TestName); + if (wmtrs[j] == null) testRsltIsMissing = true; /// Missing test result for one of specified tests + } + } + + logger.WriteLine(); + logger.WriteLine(string.Format("[Zählerdaten_{0}]", wMtr.WMPosition)); + + if (testRsltIsMissing) + { + logger.WriteLine("geprüft=0"); + } + else + { + logger.WriteLine("geprüft=1"); + logger.WriteLine(string.Format("Zählernummer=")); + logger.WriteLine(string.Format("FertigsNr={0}", wMtr.SerialNr)); + logger.WriteLine(string.Format("bestanden={0}", wMtr.Passed ? 1 : 0)); /// 1 + logger.WriteLine(string.Format("Prüfflag={0}", wMtr.HydrPruefung)); /// 96 + logger.WriteLine(string.Format("FestWertWZ=0")); /// 0 + logger.WriteLine(string.Format("Dicht={0}", 1)); /// 1 + logger.WriteLine(string.Format("PrüfIndex={0}", wMtr.Pruefindex)); /// 7301 + logger.WriteLine(string.Format("GeprüftIndex=1")); /// 1 + for (int j = 0; j < testInfos.Length; j++) { if (testInfos[j].PruefungsNrLog != 0) { - wmtrs[j] = wMtr.GetMeterTestRslt(testInfos[j].TestName); - if (wmtrs[j] == null) testRsltIsMissing = true; /// Missing test result for one of specified tests - } - } + Results.Entities.MeterTestRslt mtr = wmtrs[j]; + string flID = testInfos[j].PruefungsNrLog.ToString("D2"); - logger.WriteLine(); - logger.WriteLine(string.Format("[Zählerdaten_{0}]", wMtr.WMPosition)); - - if (testRsltIsMissing) - { - logger.WriteLine("geprüft=0"); - } - else - { - logger.WriteLine("geprüft=1"); - logger.WriteLine(string.Format("Zählernummer=")); - logger.WriteLine(string.Format("FertigsNr={0}", wMtr.SerialNr)); - logger.WriteLine(string.Format("bestanden={0}", wMtr.Passed ? 1 : 0)); /// 1 - logger.WriteLine(string.Format("Prüfflag={0}", wMtr.HydrPruefung)); /// 96 - logger.WriteLine(string.Format("FestWertWZ=0")); /// 0 - logger.WriteLine(string.Format("Dicht={0}", 1)); /// 1 - logger.WriteLine(string.Format("PrüfIndex={0}", wMtr.Pruefindex)); /// 7301 - logger.WriteLine(string.Format("GeprüftIndex=1")); /// 1 - - for (int j = 0; j < testInfos.Length; j++) - { - if (testInfos[j].PruefungsNrLog != 0) + if (mtr != null) { - Results.Entities.MeterTestRslt mtr = wmtrs[j]; - string flID = testInfos[j].PruefungsNrLog.ToString("D2"); - - if (mtr != null) - { - logger.WriteLine(string.Format("Q{0}bestanden={1}", flID, 1)); - logger.WriteLine(string.Format("Durchfluss{0}={1}", flID, Utils.DoubleToStr(Units.ConvertTo(Unit.lph, mtr.FlowVolume()), 5, true))); - logger.WriteLine(string.Format("Fehler{0}={1}", flID, mtr.Error.ToString(Program.AltCulture))); - logger.WriteLine(string.Format("ZeitImpulse{0}={1}", flID, mtr.TestTime.ToString(Program.AltCulture))); - logger.WriteLine(string.Format("Impulse{0}={1}", flID, 0)); - logger.WriteLine(string.Format("Volumen{0}={1}", flID, mtr.VolumeMeter.ToString(Program.AltCulture))); - logger.WriteLine(string.Format("KorrFehler{0}={1}", flID, ((testInfos[j].TestName == "Q2") && mtr.WaterMeter.Q2CorrectionDone) ? mtr.WaterMeter.Q2ErrWOCorrection.ToString(Program.AltCulture) - : mtr.Error.ToString(Program.AltCulture))); - logger.WriteLine(string.Format("KorrDurchfluss{0}={1}", flID, 0)); - logger.WriteLine(string.Format("Q{0}KorrBestanden={1}", flID, 0)); - logger.WriteLine(string.Format("Anfangsstand{0}={1}", flID, 0)); /// TODO - logger.WriteLine(string.Format("Endstand{0}={1}", flID, 0)); /// TODO - logger.WriteLine(string.Format("QMittelwert{0}={1}", flID, Utils.DoubleToStr(Units.ConvertTo(Unit.lph, mtr.FlowVolume()), 5, true))); - logger.WriteLine(string.Format("QStandardAbweichung{0}={1}", flID, 0)); - logger.WriteLine(string.Format("ImpedanzMittelwert{0}={1}", flID, "0,00000")); - logger.WriteLine(string.Format("AusfallGrund{0}={1}", flID, 0)); - } + logger.WriteLine(string.Format("Q{0}bestanden={1}", flID, 1)); + logger.WriteLine(string.Format("Durchfluss{0}={1}", flID, Utils.DoubleToStr(Units.ConvertTo(Unit.lph, mtr.FlowVolume()), 5, true))); + logger.WriteLine(string.Format("Fehler{0}={1}", flID, mtr.Error.ToString(Program.AltCulture))); + logger.WriteLine(string.Format("ZeitImpulse{0}={1}", flID, mtr.TestTime.ToString(Program.AltCulture))); + logger.WriteLine(string.Format("Impulse{0}={1}", flID, 0)); + logger.WriteLine(string.Format("Volumen{0}={1}", flID, mtr.VolumeMeter.ToString(Program.AltCulture))); + logger.WriteLine(string.Format("KorrFehler{0}={1}", flID, ((testInfos[j].TestName == "Q2") && mtr.WaterMeter.Q2CorrectionDone) ? mtr.WaterMeter.Q2ErrWOCorrection.ToString(Program.AltCulture) + : mtr.Error.ToString(Program.AltCulture))); + logger.WriteLine(string.Format("KorrDurchfluss{0}={1}", flID, 0)); + logger.WriteLine(string.Format("Q{0}KorrBestanden={1}", flID, 0)); + logger.WriteLine(string.Format("Anfangsstand{0}={1}", flID, 0)); /// TODO + logger.WriteLine(string.Format("Endstand{0}={1}", flID, 0)); /// TODO + logger.WriteLine(string.Format("QMittelwert{0}={1}", flID, Utils.DoubleToStr(Units.ConvertTo(Unit.lph, mtr.FlowVolume()), 5, true))); + logger.WriteLine(string.Format("QStandardAbweichung{0}={1}", flID, 0)); + logger.WriteLine(string.Format("ImpedanzMittelwert{0}={1}", flID, "0,00000")); + logger.WriteLine(string.Format("AusfallGrund{0}={1}", flID, 0)); } } - - logger.WriteLine(string.Format("AusfallGrundGesamt={0}", 0)); - logger.WriteLine(string.Format("AuftragNum={0}", wMtr.PurchaseOrder)); - logger.WriteLine(string.Format("MaterialNum={0}", 38140500)); - logger.WriteLine(string.Format("Prefix={0}", "8SEN01")); - logger.WriteLine(string.Format("Suffix=")); - logger.WriteLine(string.Format("Palette={0}", 0)); - logger.WriteLine(string.Format("Umkarton={0}", 0)); - logger.WriteLine(string.Format("ZNr_komplett=")); - logger.WriteLine(string.Format("OptikBewertung=0,00000")); - logger.WriteLine(string.Format("IdProduziert={0}", 0)); - logger.WriteLine(string.Format("Calibration_alt={0}", wMtr.OrigCalibFactor)); - logger.WriteLine(string.Format("Calibration={0}", wMtr.CalibFactor)); - logger.WriteLine(string.Format("Firmware={0}", wMtr.FWVersion)); /// 5.066 - logger.WriteLine(string.Format("FlexFlowFehler={0}", 0)); /// 0 - logger.WriteLine(string.Format("FlexFlowAuftrag={0}", 0)); /// 4248189 - logger.WriteLine(string.Format("JustierWert=0,2")); /// 0,2 - logger.WriteLine(string.Format("Corrected2Hz={0}", wMtr.Hz2CorrectionDone ? 1 : 0)); - logger.WriteLine(string.Format("Q2Corrected={0}", wMtr.Q2CorrectionDone ? 1 : 0)); - logger.WriteLine(string.Format("Q2CorrectionRight={0}", wMtr.Q2CorrLR)); - logger.WriteLine(string.Format("Q2CorrectionLeft={0}", wMtr.Q2CorrRL)); - logger.WriteLine(string.Format("Q2CorrectionFlowRight={0}", wMtr.Q2CorrFlowRight)); - logger.WriteLine(string.Format("FlowDirectionRight={0}", wMtr.Q2CorrFlowRight)); - logger.WriteLine(string.Format("Position={0}", wMtr.WMPosition)); - } - } - } - - logger.WriteLine(); - logger.WriteLine("[Prüfdaten]"); - /// - logger.WriteLine(string.Format("Startzeit={0}", batch.StartTime.ToString("HH:mm:ss"))); - logger.WriteLine(string.Format("Endezeit={0}", batch.EndTime.ToString("HH:mm:ss"))); - logger.WriteLine(string.Format("Datum={0}", batch.StartTime.ToString("dd.MM.yyyy"))); - logger.WriteLine(string.Format("GesamtDauer={0}", batch.EndTime.Subtract(batch.StartTime).TotalSeconds)); - logger.WriteLine(string.Format("Dichtprüfung={0}", 0)); /// 1 - - - foreach (var cti in testInfos) - { - if (cti.PruefungsNrLog != 0) - { - string pNrStr = cti.PruefungsNrLog.ToString("D2"); - Results.Entities.TestRslt tr = wm0.GetTestRslt(cti.TestName); - - if (tr != null) - { - logger.WriteLine(string.Format("Q{0}_geprüft=1", pNrStr)); - WriteOneToDisk(logger, pNrStr, tr); } - else - { - logger.WriteLine(string.Format("Q{0}_geprüft=0", pNrStr)); - } - } + + logger.WriteLine(string.Format("AusfallGrundGesamt={0}", 0)); + logger.WriteLine(string.Format("AuftragNum={0}", wMtr.PurchaseOrder)); + logger.WriteLine(string.Format("MaterialNum={0}", 38140500)); + logger.WriteLine(string.Format("Prefix={0}", "8SEN01")); + logger.WriteLine(string.Format("Suffix=")); + logger.WriteLine(string.Format("Palette={0}", 0)); + logger.WriteLine(string.Format("Umkarton={0}", 0)); + logger.WriteLine(string.Format("ZNr_komplett=")); + logger.WriteLine(string.Format("OptikBewertung=0,00000")); + logger.WriteLine(string.Format("IdProduziert={0}", 0)); + logger.WriteLine(string.Format("Calibration_alt={0}", wMtr.OrigCalibFactor)); + logger.WriteLine(string.Format("Calibration={0}", wMtr.CalibFactor)); + logger.WriteLine(string.Format("Firmware={0}", wMtr.FWVersion)); /// 5.066 + logger.WriteLine(string.Format("FlexFlowFehler={0}", 0)); /// 0 + logger.WriteLine(string.Format("FlexFlowAuftrag={0}", 0)); /// 4248189 + logger.WriteLine(string.Format("JustierWert=0,2")); /// 0,2 + logger.WriteLine(string.Format("Corrected2Hz={0}", wMtr.Hz2CorrectionDone ? 1 : 0)); + logger.WriteLine(string.Format("Q2Corrected={0}", wMtr.Q2CorrectionDone ? 1 : 0)); + logger.WriteLine(string.Format("Q2CorrectionRight={0}", wMtr.Q2CorrLR)); + logger.WriteLine(string.Format("Q2CorrectionLeft={0}", wMtr.Q2CorrRL)); + logger.WriteLine(string.Format("Q2CorrectionFlowRight={0}", wMtr.Q2CorrFlowRight)); + logger.WriteLine(string.Format("FlowDirectionRight={0}", wMtr.Q2CorrFlowRight)); + logger.WriteLine(string.Format("Position={0}", wMtr.WMPosition)); + } } + } - logger.WriteLine(string.Format("FüllenDruck={0}", 0)); /// 0,00 - logger.WriteLine(string.Format("EvakVorneDruck={0}", 0)); /// 0,00 - logger.WriteLine(string.Format("EvakHintenDruck={0}", 0)); /// -1,00 - logger.WriteLine(string.Format("Spüldurchfluss={0}", 0)); /// 4722,00 - logger.WriteLine(string.Format("AbpressDruck={0}", 0)); /// 20,13 - logger.WriteLine(string.Format("AbpressDruckVorne={0}", 0)); /// 20,16 - logger.WriteLine(string.Format("AbpressDruckBeginn={0}", 0)); /// 0,00 - logger.WriteLine(string.Format("EntwässernDruck={0}", 0)); /// -1,00 - logger.WriteLine(string.Format("ZaehlwerktestAnfang={0}", 0)); /// 0,00000 - logger.WriteLine(string.Format("ZaehlwerktestEnde={0}", 0)); /// 0,00000 - logger.WriteLine(string.Format("ZaehlwerktestImpulse={0}", 0)); /// 0 - logger.WriteLine(string.Format("MeldungZaehler={0}", 0)); /// 0 + logger.WriteLine(); + logger.WriteLine("[Prüfdaten]"); + /// + logger.WriteLine(string.Format("Startzeit={0}", batch.StartTime.ToString("HH:mm:ss"))); + logger.WriteLine(string.Format("Endezeit={0}", batch.EndTime.ToString("HH:mm:ss"))); + logger.WriteLine(string.Format("Datum={0}", batch.StartTime.ToString("dd.MM.yyyy"))); + logger.WriteLine(string.Format("GesamtDauer={0}", batch.EndTime.Subtract(batch.StartTime).TotalSeconds)); + logger.WriteLine(string.Format("Dichtprüfung={0}", 0)); /// 1 - logger.WriteLine(); - logger.WriteLine("[allgemein]"); - /// - logger.WriteLine(string.Format("Prüfer={0}", batch.UserName)); - logger.WriteLine(string.Format("PrüferID={0}", batch.UserNumber)); - logger.WriteLine(string.Format("AuftragKompakt={0}", 0)); /// 4248189 - logger.WriteLine(string.Format("VariantenCode={0}", "IP")); /// IPRO04CMECAZDKAMMXB1AA2011201101AEUAA1XX314NM1XXXLX - logger.WriteLine(string.Format("SollStückzahl={0}", 3)); /// 1000 - logger.WriteLine(string.Format("IstStückzahl={0}", 3)); /// 61 - logger.WriteLine(string.Format("Bemerkung=§")); /// § - logger.WriteLine(string.Format("BetriebsArt={0}", 3)); /// C - logger.WriteLine(string.Format("BuchstabenVorEtikett=8SEN01")); /// 8SEN01 - logger.WriteLine(string.Format("BuchstabenNachEtikett=")); /// - logger.WriteLine(string.Format("StehenderStartStop={0}", 0)); /// 0 - logger.WriteLine(string.Format("ID_WzPruefreihe={0}", batch.BatchNr)); /// 2583 - logger.WriteLine(string.Format("ID_Pruefstand={0}", 18000 + batch.TestBenchId)); /// 18004 - logger.WriteLine(string.Format("DichteKorrektur=0,00000")); /// 0,00000 - logger.WriteLine(string.Format("LuftauftriebsKorrekturfaktor=1,00000")); /// 1,00100 - logger.WriteLine(string.Format("ProgrammVersion={0}", Program.Version)); - logger.WriteLine(string.Format("LetzteAenderung={0}", Program.BuildDateTime.ToShortDateString())); - logger.WriteLine(string.Format("QuarzTakt={0}", 0)); /// 1953,125 - - /// Close the file - logger.Close(); - logger = null; - } - catch (Exception exc) + foreach (var cti in testInfos) { - log.ErrorFormat("Results not saved to disk: {0}", exc.Message); - return Retv.Error; + if (cti.PruefungsNrLog != 0) + { + string pNrStr = cti.PruefungsNrLog.ToString("D2"); + Results.Entities.TestRslt tr = wm0.GetTestRslt(cti.TestName); + + if (tr != null) + { + logger.WriteLine(string.Format("Q{0}_geprüft=1", pNrStr)); + WriteOneToDisk(logger, pNrStr, tr); + } + else + { + logger.WriteLine(string.Format("Q{0}_geprüft=0", pNrStr)); + } + } } + + logger.WriteLine(string.Format("FüllenDruck={0}", 0)); /// 0,00 + logger.WriteLine(string.Format("EvakVorneDruck={0}", 0)); /// 0,00 + logger.WriteLine(string.Format("EvakHintenDruck={0}", 0)); /// -1,00 + logger.WriteLine(string.Format("Spüldurchfluss={0}", 0)); /// 4722,00 + logger.WriteLine(string.Format("AbpressDruck={0}", 0)); /// 20,13 + logger.WriteLine(string.Format("AbpressDruckVorne={0}", 0)); /// 20,16 + logger.WriteLine(string.Format("AbpressDruckBeginn={0}", 0)); /// 0,00 + logger.WriteLine(string.Format("EntwässernDruck={0}", 0)); /// -1,00 + logger.WriteLine(string.Format("ZaehlwerktestAnfang={0}", 0)); /// 0,00000 + logger.WriteLine(string.Format("ZaehlwerktestEnde={0}", 0)); /// 0,00000 + logger.WriteLine(string.Format("ZaehlwerktestImpulse={0}", 0)); /// 0 + logger.WriteLine(string.Format("MeldungZaehler={0}", 0)); /// 0 + + + logger.WriteLine(); + logger.WriteLine("[allgemein]"); + /// + logger.WriteLine(string.Format("Prüfer={0}", batch.UserName)); + logger.WriteLine(string.Format("PrüferID={0}", batch.UserNumber)); + logger.WriteLine(string.Format("AuftragKompakt={0}", 0)); /// 4248189 + logger.WriteLine(string.Format("VariantenCode={0}", "IP")); /// IPRO04CMECAZDKAMMXB1AA2011201101AEUAA1XX314NM1XXXLX + logger.WriteLine(string.Format("SollStückzahl={0}", 3)); /// 1000 + logger.WriteLine(string.Format("IstStückzahl={0}", 3)); /// 61 + logger.WriteLine(string.Format("Bemerkung=§")); /// § + logger.WriteLine(string.Format("BetriebsArt={0}", 3)); /// C + logger.WriteLine(string.Format("BuchstabenVorEtikett=8SEN01")); /// 8SEN01 + logger.WriteLine(string.Format("BuchstabenNachEtikett=")); /// + logger.WriteLine(string.Format("StehenderStartStop={0}", 0)); /// 0 + logger.WriteLine(string.Format("ID_WzPruefreihe={0}", batch.BatchNr)); /// 2583 + logger.WriteLine(string.Format("ID_Pruefstand={0}", 18000 + batch.TestBenchId)); /// 18004 + logger.WriteLine(string.Format("DichteKorrektur=0,00000")); /// 0,00000 + logger.WriteLine(string.Format("LuftauftriebsKorrekturfaktor=1,00000")); /// 1,00100 + logger.WriteLine(string.Format("ProgrammVersion={0}", Program.Version)); + logger.WriteLine(string.Format("LetzteAenderung={0}", Program.BuildDateTime.ToShortDateString())); + logger.WriteLine(string.Format("QuarzTakt={0}", 0)); /// 1953,125 #endif return Retv.OK; /// OK } diff --git a/TBF/BenchControl/TestMethods/iPerlCommunication/iPerlCommunicationForm.cs b/TBF/BenchControl/TestMethods/iPerlCommunication/iPerlCommunicationForm.cs index 5dcfbde21..c8651ec35 100644 --- a/TBF/BenchControl/TestMethods/iPerlCommunication/iPerlCommunicationForm.cs +++ b/TBF/BenchControl/TestMethods/iPerlCommunication/iPerlCommunicationForm.cs @@ -1,5 +1,5 @@ /// -/// Copyright (c) 2015-2018 Sensus Slovensko a.s. +/// Copyright (c) 2015-2019 Sensus Slovensko a.s. /// //#define VERIFY_ACTIVE_MODE //#define VERIFY_Q2_CORR_RESET @@ -37,7 +37,7 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication CmdTest, /// B = 11 Verify, /// C = 12 WrongIPerlType, /// D = 13 - CalibFactorOoRange, /// E = 14 + OutOfRange, /// E = 14 MissingTest, /// F = 15 RFPowerRecordMissing, /// 10H = 16 HeadDisabledByUser, /// 11H = 17 @@ -264,11 +264,14 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication public const string NormalizeCalibrationV4FactorsStr = "Normalize calibration_V4"; public const string ReadQ2CorrectionStr = "Read Q2 corrections"; public const string ResetQ2CorrectionStr = "Reset Q2 correction"; - public const string WriteQ2CorrectionStr = "Write Q2 correction"; - public const string WriteQ2CorrectionAltStr = "Write Q2 correction Alt"; - public const string WriteQ2CorrectionGreeceStr = "Write Q2 correction Greece"; - public const string WriteQ2CorrectionRLStr = "Write Q2 correction R-L"; - public const string WriteQ2CorrectionLRStr = "Write Q2 correction L-R"; + public const string InitOrReadQ2CorrectionStr = "Init or read Q2 corrections"; + public const string WriteQ2CorrectionStr = "Write Q2 correction"; /// No arguments + public const string WriteQ2CorrectionAltStr = "Write Q2 correction Alt"; /// No arguments + public const string WriteQ2CorrectionGreeceStr = "Write Q2 correction Greece"; /// Arguments: test_name + public const string WriteQ2CorrectionRLStr = "Write Q2 correction R-L"; /// Arguments: test_name + public const string WriteQ2CorrectionLRStr = "Write Q2 correction L-R"; /// Arguments: test_name + public const string UpdateQ2CorrectionsStr = "Update Q2 corrections"; /// Arguments: R-L_test_name L-R_test_name + public const string ConditnlUpdateQ2CorrectionsStr = "Conditional update of Q2 corrections"; /// Arguments: R-L_test_name L-R_test_name public const string Reset2HzCorrectionStr = "Reset 2Hz correction"; public const string Write2HzCorrectionStr = "Write 2Hz correction"; @@ -350,20 +353,8 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication /// /// Number of text boxes for serial numbers public iPerlCommunicationForm(TestMethodCfg cfg, Test test, iPerlCommunicationParams testParams) - : this() + : this(cfg, new List { test }, new List { testParams }) { - checkBoxesEditMode = false; - - iPerlCommunicationForm.cfg = cfg; - iPerlCommunicationForm.tests = new List(); - iPerlCommunicationForm.tests.Add(test); - iPerlCommunicationForm.multiTestParams = new List(); - iPerlCommunicationForm.multiTestParams.Add(testParams); - - ProcessData.RegisterReaders = StateMachine.GetMetersPath(test).RegisterReaders; - activityLabel.Text = testParams.Activity; - - ConstructorCommon(); } /// @@ -592,6 +583,14 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication { Text = Strings.Water_Meter_States; saveButton.Text = Strings.Save; + + sampleLabel1.Text = Strings.Direction_and_pulses_are_OK; + sampleLabel2.Text = Strings.There_are_no_opto_pulses; + sampleLabel3.Text = Strings.Direction_is_NOK; + + samplePictureBox1.BackColor = OptoAndDirOKColor; + samplePictureBox2.BackColor = OptoNokColor; + samplePictureBox3.BackColor = DirNokColor; } @@ -709,18 +708,18 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication for (int i = 0; i < multiTestParams.Count; i++ ) { - iPerlCommunicationParams testParams = multiTestParams[i]; + Test currentTest = tests[i]; + iPerlCommunicationParams currentTestParams = multiTestParams[i]; + string currentActivity = currentTestParams.Activity; /// Current activity TBF.UiBridge.TestProgressEventArgs.SetEstimatedTimes(new int[] { 0, 0, 10, 0, 140, 0, 0, 0 }); TBF.UiBridge.Bridge.OnTestProgress(null, new TBF.UiBridge.TestProgressEventArgs(tests[i], Config.Entities.Progress.JustStarted)); - string activity = testParams.Activity; /// Current activity - if (threadID == 0) { rfidDataLogger.InfoFormat(""); /// Makes the log more readable when there is a lot of data - rfidDataLogger.WarnFormat("Activity = {0}", activity); + rfidDataLogger.WarnFormat("Activity = {0}", currentActivity); rfidDataLogger.InfoFormat(""); /// Makes the log more readable when there is a lot of data } @@ -758,25 +757,30 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication /// /// RFID communication activity call /// - if (ihead.Disabled || !ckbState[wmNr0]) error = CommErr.HeadDisabledByUser; - else if (activity.ToLower().Contains(ReadConfigurationStr.ToLower())) error = ReadConfiguration(threadID, ihead, wm, ref resultStr); - else if (activity.ToLower().Contains(SetTestModeStr.ToLower())) error = SetTestMode(threadID, ihead, wm, ref resultStr); - else if (activity.ToLower().Equals(SetActiveModeStr.ToLower())) error = SetActiveMode(threadID, ihead, wm, ref resultStr); - else if (activity.ToLower().Equals(ReadCalibrationStr.ToLower())) error = ReadCalibration(threadID, ihead, wm, ref resultStr); - else if (activity.ToLower().Equals(ReadCalibrationV4Str.ToLower())) error = ReadCalibrationV4(threadID, ihead, wm, ref resultStr); - else if (activity.ToLower().Contains(WriteCalibrationFactorStr.ToLower())) error = WriteCalibrationFactor(threadID, ihead, wm, ref resultStr); - else if (activity.ToLower().Contains(WriteCalibrationV4FactorsStr.ToLower())) error = WriteCalibrationV4Factors(threadID, ihead, wm, ref resultStr); - else if (activity.ToLower().Equals(NormalizeCalibrationFactorStr.ToLower())) error = NormalizeCalibrationFactor(threadID, ihead, wm, ref resultStr); - else if (activity.ToLower().Equals(NormalizeCalibrationV4FactorsStr.ToLower())) error = NormalizeCalibrationV4Factors(threadID, ihead, wm, ref resultStr); - else if (activity.ToLower().Equals(ResetQ2CorrectionStr.ToLower())) error = ResetQ2Correction(threadID, ihead, wm, ref resultStr); - else if (activity.ToLower().Equals(WriteQ2CorrectionStr.ToLower())) error = WriteQ2Correction(threadID, ihead, wm, ref resultStr, Q2CorrType.Standard, null, false); - else if (activity.ToLower().Equals(WriteQ2CorrectionAltStr.ToLower())) error = WriteQ2Correction(threadID, ihead, wm, ref resultStr, Q2CorrType.Dewa, null, false); - else if (activity.ToLower().Contains(WriteQ2CorrectionGreeceStr.ToLower())) error = WriteQ2Correction(threadID, ihead, wm, ref resultStr, Q2CorrType.Greece, activity.Substring(WriteQ2CorrectionGreeceStr.Length).Trim(), true); - else if (activity.ToLower().Contains(WriteQ2CorrectionRLStr.ToLower())) error = WriteQ2Correction(threadID, ihead, wm, ref resultStr, Q2CorrType.RL, activity.Substring(WriteQ2CorrectionRLStr.Length).Trim(), true); - else if (activity.ToLower().Contains(WriteQ2CorrectionLRStr.ToLower())) error = WriteQ2Correction(threadID, ihead, wm, ref resultStr, Q2CorrType.LR, activity.Substring(WriteQ2CorrectionLRStr.Length).Trim(), true); - else if (activity.ToLower().Equals(ReadQ2CorrectionStr.ToLower())) error = ReadQ2Correction(threadID, ihead, wm, ref resultStr); - else if (activity.ToLower().Equals(Reset2HzCorrectionStr.ToLower())) error = Reset2HzCorrection(threadID, ihead, wm, ref resultStr); - else if (activity.ToLower().Equals(Write2HzCorrectionStr.ToLower())) error = Write2HzCorrection(threadID, ihead, wm, ref resultStr); + if (ihead.Disabled || !ckbState[wmNr0]) error = CommErr.HeadDisabledByUser; +#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); + else if (currentActivity.ToLower().Equals(SetActiveModeStr.ToLower())) error = SetActiveMode(threadID, ihead, wm, ref resultStr); + else if (currentActivity.ToLower().Equals(ReadCalibrationStr.ToLower())) error = ReadCalibration(threadID, ihead, wm, ref resultStr); + else if (currentActivity.ToLower().Equals(ReadCalibrationV4Str.ToLower())) error = ReadCalibrationV4(threadID, ihead, wm, ref resultStr); + else if (currentActivity.ToLower().Contains(WriteCalibrationFactorStr.ToLower())) error = WriteCalibrationFactor(threadID, ihead, wm, ref resultStr); + else if (currentActivity.ToLower().Contains(WriteCalibrationV4FactorsStr.ToLower())) error = WriteCalibrationV4Factors(threadID, ihead, wm, ref resultStr); + else if (currentActivity.ToLower().Equals(NormalizeCalibrationFactorStr.ToLower())) error = NormalizeCalibrationFactor(threadID, ihead, wm, ref resultStr); + else if (currentActivity.ToLower().Equals(NormalizeCalibrationV4FactorsStr.ToLower())) error = NormalizeCalibrationV4Factors(threadID, ihead, wm, ref resultStr); + 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(Reset2HzCorrectionStr.ToLower())) error = Reset2HzCorrection(threadID, ihead, wm, ref resultStr); + else if (currentActivity.ToLower().Equals(Write2HzCorrectionStr.ToLower())) error = Write2HzCorrection(threadID, ihead, wm, ref resultStr); +#endif else { error = CommErr.None; @@ -810,7 +814,7 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication wm.ResultCode |= (((int)error << 16) | ((int)tests[i].ItemNr << 20)); } - string failureCauseLocal = string.Format(Strings.failed_0_1_exclamation, activity, error); + string failureCauseLocal = string.Format(Strings.failed_0_1_exclamation, currentActivity, error); OnCommCompleted(null, new CommCompletedEventArgs(threadID, wmNr0, ihead, wm, failureCauseLocal, error)); rfidDataLogger.ErrorFormat("Group={0}, Board={1}, {2}", currentGroup, ihead.MuxBoardNrOrGroup14, failureCauseLocal); ihead.CommFailed = true; @@ -1228,7 +1232,7 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication newCalibFactor = ihead.CalculateNewCalibFactor(ihead.LastTestResult, ihead.CalibFactor, ihead.FactorLimitLo, ihead.FactorLimitHi); } - if (newCalibFactor == 0) return CommErr.CalibFactorOoRange; + if (newCalibFactor == 0) return CommErr.OutOfRange; /// /// Start communication with iPerl @@ -1396,7 +1400,7 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication return CommErr.WrongArguments; } - if (newCalibFactor == 0 || newCalibFactorLNA == 0) return CommErr.CalibFactorOoRange; + if (newCalibFactor == 0 || newCalibFactorLNA == 0) return CommErr.OutOfRange; /// /// Start communication with iPerl @@ -1488,6 +1492,7 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication return avgTestRslt; } +#if IPERL /// /// Normalize calibration factor in case ti is close to value 8000. @@ -1665,13 +1670,14 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication resultStr = "Q2 corrections successfully read"; ihead.Q2CorrLR = (int)((SByte)rdData[0]); ihead.Q2CorrRL = (int)((SByte)rdData[1]); -#if IPERL + ihead.Q2CorrectionDone = (ihead.Q2CorrRL != 0) || (ihead.Q2CorrLR != 0); + if (wm != null) { wm.Q2CorrLR = ihead.Q2CorrLR; wm.Q2CorrRL = ihead.Q2CorrRL; + wm.Q2CorrectionDone = ihead.Q2CorrectionDone; } -#endif } ClosePort(threadId, ihead); /// Close RFID port @@ -1688,6 +1694,18 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication /// String passed to caller /// true on success static CommErr ResetQ2Correction(int threadId, IperlHead ihead, Results.Entities.WaterMeter wm, ref string resultStr) + { + return SetQ2Correction(threadId, ihead, wm, ref resultStr, 0, 0); + } + + /// + /// Reset both Q2 correction factors in the memory to 0. + /// Read them back to verify factors were written correctly. + /// + /// Water meter object + /// String passed to caller + /// true on success + static CommErr SetQ2Correction(int threadId, IperlHead ihead, Results.Entities.WaterMeter wm, ref string resultStr, int factorLR, int factorRL) { if (ihead.CommFailed) return CommErr.CommFailed; @@ -1696,13 +1714,24 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication CommErr error = CommErr.Write; /// Write zero Q2 correction - byte[] wrData = new byte[2] { 0, 0 }; + byte[] wrData = new byte[2] { (byte)factorLR, (byte)factorRL }; /// for (int j = 0; j < cfg.MaxCommRetries; j++) { if (0 == WriteRequestPort(threadId, ihead, MessageID.MetrologyMemory, Q2CorrFactorsAddr, wrData.Length, wrData, cfg.CommTimeout)) { - error = CommErr.None; + ihead.Q2CorrRL = factorRL; + ihead.Q2CorrLR = factorLR; + ihead.Q2CorrectionDone = (factorRL != 0) || (factorLR != 0); + + if (wm != null) + { + wm.Q2CorrRL = ihead.Q2CorrRL; + wm.Q2CorrLR = ihead.Q2CorrLR; + wm.Q2CorrectionDone = ihead.Q2CorrectionDone; + } + + error = CommErr.None; break; } } @@ -1744,6 +1773,21 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication } + static CommErr InitOrReadQ2Correction(int threadId, IperlHead ihead, Results.Entities.WaterMeter wm, ref string resultStr) + { + if (ihead.CommFailed) return CommErr.CommFailed; + + if (wm.Pruefindex == 1) + { + return SetQ2Correction(threadId, ihead, wm, ref resultStr, ihead.InitQ2CorrLR, ihead.InitQ2CorrRL); + } + else + { + return ReadQ2Correction(threadId, ihead, wm, ref resultStr); + } + } + + /// /// Reset 2Hz correction factor in the memory to 0. /// @@ -1810,42 +1854,56 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication /// /// Write the calculated Q2 correction factors to the memory. /// Read them back to verify factors were written correctly. + /// + /// Write Q2 correction + /// Write Q2 correction Alt + /// Write Q2 correction [Greece | R-L | L-R] testname + /// Update Q2 corrections + /// Conditional update of Q2 corrections /// /// Water meter object /// String passed to caller /// true on success - static CommErr WriteQ2Correction(int threadId, IperlHead ihead, Results.Entities.WaterMeter wm, ref string resultStr, Q2CorrType q2CorrType, string q2TestName, bool updateQ2adjByCalibFactor) + static CommErr WriteQ2Correction(int threadId, IperlHead ihead, Results.Entities.WaterMeter wm, Test test, ref string resultStr, + Q2CorrType q2CorrType, string restOfLine, bool updateQ2adjByCalibFactor) { - //if (ihead == null || ihead.CommFailed) return CommErr.CommFailed; + if ((q2CorrType == Q2CorrType.ConditionalUpdate) && wm.PassedFromTests()) + { + resultStr = string.Format("No Q2 correction update (iPerl is OK)"); + return CommErr.None; /// No Q2 correction when doing conditional update and WM passed + } - Results.Entities.MeterTestRslt q2adjResult; - Results.Entities.TestData q2adjTestData; - /// - if (string.IsNullOrEmpty(q2TestName)) + if ((wm == null) || (ihead == null) || ihead.CommFailed) return CommErr.CommFailed; + + Results.Entities.MeterTestRslt q2adjResult; /// The only test or the 1st test (the test in R-L direction) + Results.Entities.TestData q2adjTestData; + + Results.Entities.MeterTestRslt q2adjResult2 = null; /// 2nd test name for a test in L-R direction + Results.Entities.TestData q2adjTestData2 = null; + + string[] args = new string[0]; + if (!string.IsNullOrEmpty(restOfLine)) + { + args = restOfLine.Split(new char[] { ' ' }); + } + + if (args.Length == 0) { /// In case of no test name argument, ihead.LastTestResult is used (if it exists) - if (ihead.LastTestResult != null && ihead.LastTestResult.TestDone) - { - q2adjResult = ihead.LastTestResult; - q2adjTestData = q2adjResult.TestRslt.TestData; - } - else - { - return CommErr.MissingTest; - } + if ((ihead.LastTestResult == null) || !ihead.LastTestResult.TestDone) return CommErr.MissingTest; + q2adjResult = ihead.LastTestResult; + q2adjTestData = q2adjResult.TestRslt.TestData; } - else + else // if (args.Length >= 1) { - /// Get test data is test name - q2adjTestData = wm.GetTestData(q2TestName); - if (q2adjTestData == null) - { - return CommErr.MissingTest; - } - else if (q2adjTestData.Repeats == 1) + /// Get test data from (the 1st) test name + q2adjTestData = wm.GetTestData(args[0]); + if (q2adjTestData == null) return CommErr.MissingTest; + + if (q2adjTestData.Repeats == 1) { /// Find a test result if Repets == 1 - q2adjResult = wm.GetMeterTestRslt(q2TestName); + q2adjResult = wm.GetMeterTestRslt(args[0]); if (q2adjResult == null || !q2adjResult.TestDone) return CommErr.MissingTest; } else @@ -1854,41 +1912,137 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication q2adjResult = new Results.Entities.MeterTestRslt(); for (int i = 1; i <= q2adjTestData.Repeats; i++) { - Results.Entities.MeterTestRslt oneMTR = wm.GetMeterTestRslt(string.Format("{0} ({1}/{2})", q2TestName, i, q2adjTestData.Repeats)); + Results.Entities.MeterTestRslt oneMTR = wm.GetMeterTestRslt(string.Format("{0} ({1}/{2})", args[0], i, q2adjTestData.Repeats)); if (oneMTR == null || !oneMTR.TestDone) return CommErr.MissingTest; q2adjResult.VolumeMeter += oneMTR.VolumeMeter; q2adjResult.VolumeRef += oneMTR.VolumeRef; } -#if IPERL - if (updateQ2adjByCalibFactor) + + if (updateQ2adjByCalibFactor) { - if (wm.OrigCalibFactor == 0) return CommErr.CalibFactorOoRange; + if (wm.OrigCalibFactor == 0) return CommErr.OutOfRange; q2adjResult.VolumeMeter *= ((double)wm.CalibFactor / (double)wm.OrigCalibFactor); } -#endif + q2adjResult.Error = Config.Formulas.ErrorFromVolumes(q2adjResult.VolumeMeter, q2adjResult.VolumeRef); } } - /// - if (q2adjResult == null) return CommErr.CommFailed; /// This should never happen - ihead.Q2ErrWOCorrection = q2adjResult.Error; - ihead.Q2CorrectionDone = false; - ihead.Q2CorrRL = 0; - - double q2Correction = 0; - Byte q2CorrRL = 0; - Byte q2CorrLR = 0; - - /// - /// Calculate Q2 correction form an error measured at Q2 (q2adjResult.Error) - /// - if (!ihead.CalculateQ2CorrectionFactor(q2adjResult, q2adjTestData, out q2Correction)) + if (args.Length >= 2) { - return CommErr.None; /// Q2 error is too large, water meter failed anyhow + /// Get the 2nd test data from the 2nd test name + q2adjTestData2 = wm.GetTestData(args[1]); + if (q2adjTestData2 == null) return CommErr.MissingTest; + + if (q2adjTestData2.Repeats == 1) + { + /// Find a test result if Repets == 1 + q2adjResult2 = wm.GetMeterTestRslt(args[1]); + if (q2adjResult2 == null || !q2adjResult2.TestDone) return CommErr.MissingTest; + } + else + { + /// Calculate a summarized test result if Repeats > 1 + q2adjResult2 = new Results.Entities.MeterTestRslt(); + for (int i = 1; i <= q2adjTestData2.Repeats; i++) + { + Results.Entities.MeterTestRslt oneMTR = wm.GetMeterTestRslt(string.Format("{0} ({1}/{2})", args[1], i, q2adjTestData2.Repeats)); + if (oneMTR == null || !oneMTR.TestDone) return CommErr.MissingTest; + + q2adjResult2.VolumeMeter += oneMTR.VolumeMeter; + 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); + } } + + if (q2adjResult == null) return CommErr.MissingTest; /// This should never happen + if ((q2CorrType == Q2CorrType.Update || q2CorrType == Q2CorrType.ConditionalUpdate) && (q2adjResult2 == null)) + { + return CommErr.MissingTest; /// This should never happen, 2 test names required as activity arguments + } + + /// + /// Calculate Q2 correction factor(s) from an error measured at Q2 + /// + double q2Correction = 0; + double q2Correction2 = 0; /// L-R direction + /// + if ((q2CorrType == Q2CorrType.Update) || (q2CorrType == Q2CorrType.ConditionalUpdate)) + { + double errLimitLo = test.ErrLimLo + test.Uncertainty; + double errLimitHi = test.ErrLimHi - test.Uncertainty; + + if (errLimitLo <= q2adjResult.Error && q2adjResult.Error <= errLimitHi && + errLimitLo <= q2adjResult2.Error && q2adjResult2.Error <= errLimitHi) + { + /// Calculate updated Q2 correction factors + q2Correction = ihead.CalculateQ2CorrectionFactor(q2adjResult, q2adjTestData.Qfrom, wm.Q2CorrRL); + q2Correction2 = ihead.CalculateQ2CorrectionFactor(q2adjResult2, q2adjTestData2.Qfrom, wm.Q2CorrLR); + } + else + { + /// At least one of Q2 errors is out of range for the Q2 correction + /// Q2 error is out of range for the Q2 correction + log.WarnFormat("OoR => no Q2 correction: Pos={0}, PCB#={1}, ***Q2_RL err={2}%***, ***Q2_LR err={3}%***, CalTarget={4}%, [Lo={5}%, Hi={6}%]", + ihead.Name, + ihead.SerialNr, + q2adjResult.Error.ToString("F2"), + q2adjResult2.Error.ToString("F2"), + ihead.CalibTarget.ToString("F1"), + errLimitLo.ToString("F1"), + errLimitHi.ToString("F1")); + + ihead.Q2CorrectionDone = false; + ihead.Q2CorrRL = wm.Q2CorrRL; + ihead.Q2CorrLR = wm.Q2CorrLR; + resultStr = string.Format("Q2 error is out of range => no Q2 correction"); + return CommErr.OutOfRange; + } + } + else + { + double errLimitLo = q2adjTestData.ErrLimLo + q2adjTestData.Uncertainty; + double errLimitHi = q2adjTestData.ErrLimHi - q2adjTestData.Uncertainty; + + if ((errLimitLo <= q2adjResult.Error) && (q2adjResult.Error <= errLimitHi)) + { + /// Calculate Q2 correction factor (assuming it was 0 when doing a test) + ihead.Q2ErrWOCorrection = q2adjResult.Error; + q2Correction = ihead.CalculateQ2CorrectionFactor(q2adjResult, q2adjTestData.Qfrom); + } + else + { + /// Q2 error is out of range for the Q2 correction + log.WarnFormat("OoR => no Q2 correction: Pos={0}, PCB#={1}, ***Q2adj err={2}%***, CalTarget={3}%, [Lo={4}%, Hi={5}%]", + ihead.Name, + ihead.SerialNr, + q2adjResult.Error.ToString("F2"), + ihead.CalibTarget.ToString("F1"), + errLimitLo.ToString("F1"), + errLimitHi.ToString("F1")); + + ihead.Q2ErrWOCorrection = q2adjResult.Error; + ihead.Q2CorrectionDone = false; + ihead.Q2CorrRL = 0; + resultStr = string.Format("Q2 error is out of range => no Q2 correction"); + return CommErr.OutOfRange; + } + } + + + Byte q2CorrRL = 0; + Byte q2CorrLR = 0; + /// if (q2CorrType == Q2CorrType.Standard) { /// @@ -1950,6 +2104,11 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication q2CorrLR = (byte)((int)Math.Round(q2Correction) & 0x000000FF); } + else if ((q2CorrType == Q2CorrType.Update) || (q2CorrType == Q2CorrType.ConditionalUpdate)) + { + q2CorrRL = (byte)((int)Math.Round(q2Correction) & 0x000000FF); + q2CorrLR = (byte)((int)Math.Round(q2Correction2) & 0x000000FF); + } if (OpenPort(threadId, ihead) != 0) return CommErr.OpenPort; /// Open RFID port @@ -1957,7 +2116,9 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication if (q2CorrType == Q2CorrType.RL) { - /// Write R->L Q2 correction factor only + /// + /// Write R-L Q2 correction factor only + /// byte[] wrData = new byte[1] { q2CorrRL }; for (int j = 0; j < cfg.MaxCommRetries; j++) { @@ -1970,7 +2131,9 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication } else if (q2CorrType == Q2CorrType.LR) { - /// Write L->R Q2 correction factor only + /// + /// Write L-R Q2 correction factor only + /// byte[] wrData = new byte[1] { q2CorrLR }; for (int j = 0; j < cfg.MaxCommRetries; j++) { @@ -1983,7 +2146,9 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication } else { + /// /// Write both Q2 correction factors + /// byte[] wrData = new byte[2] { q2CorrLR, q2CorrRL }; for (int j = 0; j < cfg.MaxCommRetries; j++) { @@ -2013,20 +2178,12 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication error = CommErr.None; resultStr = string.Format("Q2 factors: R-flow={0}, L-flow={1}", (SByte)q2CorrRFlow, (SByte)q2CorrLFlow); rfidDataLogger.Warn(ihead.Name + ": " + resultStr); - ihead.Q2CorrectionDone = true; - ihead.Q2Correction = q2Correction; - if (q2CorrType != Q2CorrType.LR) ihead.Q2CorrRFlow = (int)(sbyte)q2CorrRFlow; - if (q2CorrType != Q2CorrType.RL) ihead.Q2CorrLFlow = (int)(sbyte)q2CorrLFlow; -#if IPERL - if (wm != null) - { - wm.Q2ErrWOCorrection = ihead.Q2ErrorWOCorrection; - wm.Q2CorrectionDone = ihead.Q2CorrectionDone; - wm.Q2Correction = ihead.Q2Correction; - if (q2CorrType != Q2CorrType.LR) wm.Q2CorrRFlow = ihead.Q2CorrRFlow; - if (q2CorrType != Q2CorrType.RL) wm.Q2CorrLFlow = ihead.Q2CorrLFlow; - } -#endif + + wm.Q2ErrWOCorrection = ihead.Q2ErrorWOCorrection; + wm.Q2CorrectionDone = ihead.Q2CorrectionDone = true; + wm.Q2Correction = ihead.Q2Correction = q2Correction; + if (q2CorrType != Q2CorrType.LR) wm.Q2CorrRFlow = ihead.Q2CorrRFlow = (int)(sbyte)q2CorrRFlow; + if (q2CorrType != Q2CorrType.RL) wm.Q2CorrLFlow = ihead.Q2CorrLFlow = (int)(sbyte)q2CorrLFlow; break; } } @@ -2053,8 +2210,8 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication ihead.Q2Correction = q2Correction; if (q2CorrType != Q2CorrType.LR) ihead.Q2CorrRL = (int)(sbyte)q2CorrRL; if (q2CorrType != Q2CorrType.RL) ihead.Q2CorrLR = (int)(sbyte)q2CorrLR; - #if IPERL - if (wm != null) + + if (wm != null) { wm.Q2ErrWOCorrection = ihead.Q2ErrWOCorrection; wm.Q2CorrectionDone = ihead.Q2CorrectionDone; @@ -2062,7 +2219,6 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication if (q2CorrType != Q2CorrType.LR) wm.Q2CorrRL = ihead.Q2CorrRL; if (q2CorrType != Q2CorrType.RL) wm.Q2CorrLR = ihead.Q2CorrLR; } - #endif } #endif @@ -2107,14 +2263,14 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication error = CommErr.None; ihead.Hz2Correction = hz2CorrectionFactor; ihead.Hz2CorrectionDone = true; -#if IPERL - if (wm != null) + + if (wm != null) { wm.Hz2CorrectionDone = ihead.Hz2CorrectionDone; wm.Hz2Correction = ihead.Hz2Correction; } -#endif - break; + + break; } } @@ -2137,15 +2293,15 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication resultStr = string.Format("2Hz factor = {0}", (SByte)hz2CorrectionByte); rfidDataLogger.Warn(ihead.Name + ": " + resultStr); ihead.Hz2CorrectionFactor = hz2CorrectionFactor; - #if IPERL - if (wm != null) + + if (wm != null) { wm.Diff2Hz8Hz = ihead.Diff2Hz8Hz; wm.Hz2CorrectionDone = ihead.Hz2CorrectionDone; wm.Hz2Correction = ihead.Hz2CorrectionFactor; } -#endif - break; + + break; } } } @@ -2156,14 +2312,13 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication rfidDataLogger.Warn(ihead.Name + ": " + resultStr); ihead.Hz2CorrectionDone = true; ihead.Hz2Correction = hz2CorrectionFactor; - #if IPERL + if (wm != null) { wm.Diff2Hz8Hz = ihead.Diff2Hz8Hz; wm.Hz2CorrectionDone = ihead.Hz2CorrectionDone; wm.Hz2Correction = ihead.Hz2Correction; } - #endif } #endif @@ -2171,7 +2326,7 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication return error; } - +#endif /// IPERL #endregion /// diff --git a/TBF/BenchControl/TestMethods/iPerlCommunication/iPerlCommunicationForm.designer.cs b/TBF/BenchControl/TestMethods/iPerlCommunication/iPerlCommunicationForm.designer.cs index 3aac92da1..3c51c1d73 100644 --- a/TBF/BenchControl/TestMethods/iPerlCommunication/iPerlCommunicationForm.designer.cs +++ b/TBF/BenchControl/TestMethods/iPerlCommunication/iPerlCommunicationForm.designer.cs @@ -227,6 +227,12 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication this.checkBoxImage47 = new TBF.BenchControl.TestMethods.iPerlCommunication.CheckBoxImage(); this.checkBoxImage48 = new TBF.BenchControl.TestMethods.iPerlCommunication.CheckBoxImage(); this.saveButton = new System.Windows.Forms.Button(); + this.samplePictureBox1 = new System.Windows.Forms.PictureBox(); + this.samplePictureBox2 = new System.Windows.Forms.PictureBox(); + this.samplePictureBox3 = new System.Windows.Forms.PictureBox(); + this.sampleLabel1 = new System.Windows.Forms.Label(); + this.sampleLabel2 = new System.Windows.Forms.Label(); + this.sampleLabel3 = new System.Windows.Forms.Label(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox48)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox47)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox46)).BeginInit(); @@ -323,6 +329,9 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication ((System.ComponentModel.ISupportInitialize)(this.checkBoxImage46)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.checkBoxImage47)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.checkBoxImage48)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.samplePictureBox1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.samplePictureBox2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.samplePictureBox3)).BeginInit(); this.SuspendLayout(); // // wmTextBox2 @@ -1289,7 +1298,7 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication // this.activityLabel.AutoSize = true; this.activityLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 27.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.activityLabel.Location = new System.Drawing.Point(31, 22); + this.activityLabel.Location = new System.Drawing.Point(189, 22); this.activityLabel.Name = "activityLabel"; this.activityLabel.Size = new System.Drawing.Size(225, 42); this.activityLabel.TabIndex = 95; @@ -2315,12 +2324,69 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication this.saveButton.Visible = false; this.saveButton.Click += new System.EventHandler(this.saveButton_Click); // + // samplePictureBox1 + // + this.samplePictureBox1.Location = new System.Drawing.Point(7, 7); + this.samplePictureBox1.Name = "samplePictureBox1"; + this.samplePictureBox1.Size = new System.Drawing.Size(23, 23); + this.samplePictureBox1.TabIndex = 193; + this.samplePictureBox1.TabStop = false; + // + // samplePictureBox2 + // + this.samplePictureBox2.Location = new System.Drawing.Point(7, 32); + this.samplePictureBox2.Name = "samplePictureBox2"; + this.samplePictureBox2.Size = new System.Drawing.Size(23, 23); + this.samplePictureBox2.TabIndex = 194; + this.samplePictureBox2.TabStop = false; + // + // samplePictureBox3 + // + this.samplePictureBox3.Location = new System.Drawing.Point(7, 57); + this.samplePictureBox3.Name = "samplePictureBox3"; + this.samplePictureBox3.Size = new System.Drawing.Size(23, 23); + this.samplePictureBox3.TabIndex = 195; + this.samplePictureBox3.TabStop = false; + // + // sampleLabel1 + // + this.sampleLabel1.AutoSize = true; + this.sampleLabel1.Location = new System.Drawing.Point(36, 12); + this.sampleLabel1.Name = "sampleLabel1"; + this.sampleLabel1.Size = new System.Drawing.Size(139, 13); + this.sampleLabel1.TabIndex = 196; + this.sampleLabel1.Text = "Direction and pulses are OK"; + // + // sampleLabel2 + // + this.sampleLabel2.AutoSize = true; + this.sampleLabel2.Location = new System.Drawing.Point(36, 37); + this.sampleLabel2.Name = "sampleLabel2"; + this.sampleLabel2.Size = new System.Drawing.Size(125, 13); + this.sampleLabel2.TabIndex = 197; + this.sampleLabel2.Text = "There are no opto pulses"; + // + // sampleLabel3 + // + this.sampleLabel3.AutoSize = true; + this.sampleLabel3.Location = new System.Drawing.Point(36, 62); + this.sampleLabel3.Name = "sampleLabel3"; + this.sampleLabel3.Size = new System.Drawing.Size(85, 13); + this.sampleLabel3.TabIndex = 198; + this.sampleLabel3.Text = "Direction is NOK"; + // // iPerlCommunicationForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.BackColor = System.Drawing.Color.DarkGray; this.ClientSize = new System.Drawing.Size(1161, 795); + this.Controls.Add(this.sampleLabel3); + this.Controls.Add(this.sampleLabel2); + this.Controls.Add(this.sampleLabel1); + this.Controls.Add(this.samplePictureBox3); + this.Controls.Add(this.samplePictureBox2); + this.Controls.Add(this.samplePictureBox1); this.Controls.Add(this.saveButton); this.Controls.Add(this.checkBoxImage48); this.Controls.Add(this.checkBoxImage47); @@ -2620,6 +2686,9 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication ((System.ComponentModel.ISupportInitialize)(this.checkBoxImage46)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.checkBoxImage47)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.checkBoxImage48)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.samplePictureBox1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.samplePictureBox2)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.samplePictureBox3)).EndInit(); this.ResumeLayout(false); this.PerformLayout(); @@ -2821,6 +2890,12 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication private CheckBoxImage checkBoxImage47; private CheckBoxImage checkBoxImage48; private System.Windows.Forms.Button saveButton; + private System.Windows.Forms.PictureBox samplePictureBox1; + private System.Windows.Forms.PictureBox samplePictureBox2; + private System.Windows.Forms.PictureBox samplePictureBox3; + private System.Windows.Forms.Label sampleLabel1; + private System.Windows.Forms.Label sampleLabel2; + private System.Windows.Forms.Label sampleLabel3; } } \ No newline at end of file diff --git a/TBF/BenchControl/TestMethods/iPerlCommunication/iPerlCommunicationForm.resx b/TBF/BenchControl/TestMethods/iPerlCommunication/iPerlCommunicationForm.resx index 03d2e91ae..5ee43624a 100644 --- a/TBF/BenchControl/TestMethods/iPerlCommunication/iPerlCommunicationForm.resx +++ b/TBF/BenchControl/TestMethods/iPerlCommunication/iPerlCommunicationForm.resx @@ -121,7 +121,7 @@ iVBORw0KGgoAAAANSUhEUgAAADAAAAAeCAYAAABqpJ3BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADr8AAA6/ATgFUyQAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH + YQUAAAAJcEhZcwAADr4AAA6+AepCscAAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH Nn/4nJycJM7JMSfEWNjGAVMMOAScABamGhxABRkJISFpVxISQkjbe2+zu1N2eu+97czO7Oze3O/JS0LT OVe/N++9mf3uV+73/X5FtbW1+DqEw2FEYlEFsVjsM0TjXBNxJFJJJNMpJJNciXQyhQwxlUgiN5VBNpNG NptFejqLVC6L+EwWsZkcIoUcEphFHAWkZguYnpvDHPhP/ivwv+kZYCoHZPKYS+WQjya/0j7B1xIQ4/1B @@ -194,7 +194,7 @@ iVBORw0KGgoAAAANSUhEUgAAADAAAAAeCAYAAABqpJ3BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADr8AAA6/ATgFUyQAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH + YQUAAAAJcEhZcwAADr4AAA6+AepCscAAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH Nn/4nJycJM7JMSfEWNjGAVMMOAScABamGhxABRkJISFpVxISQkjbe2+zu1N2eu+97czO7Oze3O/JS0LT OVe/N++9mf3uV+73/X5FtbW1+DqEw2FEYlEFsVjsM0TjXBNxJFJJJNMpJJNciXQyhQwxlUgiN5VBNpNG NptFejqLVC6L+EwWsZkcIoUcEphFHAWkZguYnpvDHPhP/ivwv+kZYCoHZPKYS+WQjya/0j7B1xIQ4/1B @@ -267,7 +267,7 @@ iVBORw0KGgoAAAANSUhEUgAAADAAAAAeCAYAAABqpJ3BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADr8AAA6/ATgFUyQAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH + YQUAAAAJcEhZcwAADr4AAA6+AepCscAAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH Nn/4nJycJM7JMSfEWNjGAVMMOAScABamGhxABRkJISFpVxISQkjbe2+zu1N2eu+97czO7Oze3O/JS0LT OVe/N++9mf3uV+73/X5FtbW1+DqEw2FEYlEFsVjsM0TjXBNxJFJJJNMpJJNciXQyhQwxlUgiN5VBNpNG NptFejqLVC6L+EwWsZkcIoUcEphFHAWkZguYnpvDHPhP/ivwv+kZYCoHZPKYS+WQjya/0j7B1xIQ4/1B @@ -340,7 +340,7 @@ iVBORw0KGgoAAAANSUhEUgAAADAAAAAeCAYAAABqpJ3BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADr8AAA6/ATgFUyQAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH + YQUAAAAJcEhZcwAADr4AAA6+AepCscAAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH Nn/4nJycJM7JMSfEWNjGAVMMOAScABamGhxABRkJISFpVxISQkjbe2+zu1N2eu+97czO7Oze3O/JS0LT OVe/N++9mf3uV+73/X5FtbW1+DqEw2FEYlEFsVjsM0TjXBNxJFJJJNMpJJNciXQyhQwxlUgiN5VBNpNG NptFejqLVC6L+EwWsZkcIoUcEphFHAWkZguYnpvDHPhP/ivwv+kZYCoHZPKYS+WQjya/0j7B1xIQ4/1B @@ -413,7 +413,7 @@ iVBORw0KGgoAAAANSUhEUgAAADAAAAAeCAYAAABqpJ3BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADr8AAA6/ATgFUyQAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH + YQUAAAAJcEhZcwAADr4AAA6+AepCscAAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH Nn/4nJycJM7JMSfEWNjGAVMMOAScABamGhxABRkJISFpVxISQkjbe2+zu1N2eu+97czO7Oze3O/JS0LT OVe/N++9mf3uV+73/X5FtbW1+DqEw2FEYlEFsVjsM0TjXBNxJFJJJNMpJJNciXQyhQwxlUgiN5VBNpNG NptFejqLVC6L+EwWsZkcIoUcEphFHAWkZguYnpvDHPhP/ivwv+kZYCoHZPKYS+WQjya/0j7B1xIQ4/1B @@ -486,7 +486,7 @@ iVBORw0KGgoAAAANSUhEUgAAADAAAAAeCAYAAABqpJ3BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADr8AAA6/ATgFUyQAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH + YQUAAAAJcEhZcwAADr4AAA6+AepCscAAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH Nn/4nJycJM7JMSfEWNjGAVMMOAScABamGhxABRkJISFpVxISQkjbe2+zu1N2eu+97czO7Oze3O/JS0LT OVe/N++9mf3uV+73/X5FtbW1+DqEw2FEYlEFsVjsM0TjXBNxJFJJJNMpJJNciXQyhQwxlUgiN5VBNpNG NptFejqLVC6L+EwWsZkcIoUcEphFHAWkZguYnpvDHPhP/ivwv+kZYCoHZPKYS+WQjya/0j7B1xIQ4/1B @@ -559,7 +559,7 @@ iVBORw0KGgoAAAANSUhEUgAAADAAAAAeCAYAAABqpJ3BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADr8AAA6/ATgFUyQAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH + YQUAAAAJcEhZcwAADr4AAA6+AepCscAAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH Nn/4nJycJM7JMSfEWNjGAVMMOAScABamGhxABRkJISFpVxISQkjbe2+zu1N2eu+97czO7Oze3O/JS0LT OVe/N++9mf3uV+73/X5FtbW1+DqEw2FEYlEFsVjsM0TjXBNxJFJJJNMpJJNciXQyhQwxlUgiN5VBNpNG NptFejqLVC6L+EwWsZkcIoUcEphFHAWkZguYnpvDHPhP/ivwv+kZYCoHZPKYS+WQjya/0j7B1xIQ4/1B @@ -632,7 +632,7 @@ iVBORw0KGgoAAAANSUhEUgAAADAAAAAeCAYAAABqpJ3BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADr8AAA6/ATgFUyQAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH + YQUAAAAJcEhZcwAADr4AAA6+AepCscAAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH Nn/4nJycJM7JMSfEWNjGAVMMOAScABamGhxABRkJISFpVxISQkjbe2+zu1N2eu+97czO7Oze3O/JS0LT OVe/N++9mf3uV+73/X5FtbW1+DqEw2FEYlEFsVjsM0TjXBNxJFJJJNMpJJNciXQyhQwxlUgiN5VBNpNG NptFejqLVC6L+EwWsZkcIoUcEphFHAWkZguYnpvDHPhP/ivwv+kZYCoHZPKYS+WQjya/0j7B1xIQ4/1B @@ -705,7 +705,7 @@ iVBORw0KGgoAAAANSUhEUgAAADAAAAAeCAYAAABqpJ3BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADr8AAA6/ATgFUyQAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH + YQUAAAAJcEhZcwAADr4AAA6+AepCscAAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH Nn/4nJycJM7JMSfEWNjGAVMMOAScABamGhxABRkJISFpVxISQkjbe2+zu1N2eu+97czO7Oze3O/JS0LT OVe/N++9mf3uV+73/X5FtbW1+DqEw2FEYlEFsVjsM0TjXBNxJFJJJNMpJJNciXQyhQwxlUgiN5VBNpNG NptFejqLVC6L+EwWsZkcIoUcEphFHAWkZguYnpvDHPhP/ivwv+kZYCoHZPKYS+WQjya/0j7B1xIQ4/1B @@ -778,7 +778,7 @@ iVBORw0KGgoAAAANSUhEUgAAADAAAAAeCAYAAABqpJ3BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADr8AAA6/ATgFUyQAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH + YQUAAAAJcEhZcwAADr4AAA6+AepCscAAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH Nn/4nJycJM7JMSfEWNjGAVMMOAScABamGhxABRkJISFpVxISQkjbe2+zu1N2eu+97czO7Oze3O/JS0LT OVe/N++9mf3uV+73/X5FtbW1+DqEw2FEYlEFsVjsM0TjXBNxJFJJJNMpJJNciXQyhQwxlUgiN5VBNpNG NptFejqLVC6L+EwWsZkcIoUcEphFHAWkZguYnpvDHPhP/ivwv+kZYCoHZPKYS+WQjya/0j7B1xIQ4/1B @@ -851,7 +851,7 @@ iVBORw0KGgoAAAANSUhEUgAAADAAAAAeCAYAAABqpJ3BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADr8AAA6/ATgFUyQAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH + YQUAAAAJcEhZcwAADr4AAA6+AepCscAAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH Nn/4nJycJM7JMSfEWNjGAVMMOAScABamGhxABRkJISFpVxISQkjbe2+zu1N2eu+97czO7Oze3O/JS0LT OVe/N++9mf3uV+73/X5FtbW1+DqEw2FEYlEFsVjsM0TjXBNxJFJJJNMpJJNciXQyhQwxlUgiN5VBNpNG NptFejqLVC6L+EwWsZkcIoUcEphFHAWkZguYnpvDHPhP/ivwv+kZYCoHZPKYS+WQjya/0j7B1xIQ4/1B @@ -924,7 +924,7 @@ iVBORw0KGgoAAAANSUhEUgAAADAAAAAeCAYAAABqpJ3BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADr8AAA6/ATgFUyQAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH + YQUAAAAJcEhZcwAADr4AAA6+AepCscAAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH Nn/4nJycJM7JMSfEWNjGAVMMOAScABamGhxABRkJISFpVxISQkjbe2+zu1N2eu+97czO7Oze3O/JS0LT OVe/N++9mf3uV+73/X5FtbW1+DqEw2FEYlEFsVjsM0TjXBNxJFJJJNMpJJNciXQyhQwxlUgiN5VBNpNG NptFejqLVC6L+EwWsZkcIoUcEphFHAWkZguYnpvDHPhP/ivwv+kZYCoHZPKYS+WQjya/0j7B1xIQ4/1B @@ -997,7 +997,7 @@ iVBORw0KGgoAAAANSUhEUgAAADAAAAAeCAYAAABqpJ3BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADr8AAA6/ATgFUyQAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH + YQUAAAAJcEhZcwAADr4AAA6+AepCscAAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH Nn/4nJycJM7JMSfEWNjGAVMMOAScABamGhxABRkJISFpVxISQkjbe2+zu1N2eu+97czO7Oze3O/JS0LT OVe/N++9mf3uV+73/X5FtbW1+DqEw2FEYlEFsVjsM0TjXBNxJFJJJNMpJJNciXQyhQwxlUgiN5VBNpNG NptFejqLVC6L+EwWsZkcIoUcEphFHAWkZguYnpvDHPhP/ivwv+kZYCoHZPKYS+WQjya/0j7B1xIQ4/1B @@ -1070,7 +1070,7 @@ iVBORw0KGgoAAAANSUhEUgAAADAAAAAeCAYAAABqpJ3BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADr8AAA6/ATgFUyQAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH + YQUAAAAJcEhZcwAADr4AAA6+AepCscAAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH Nn/4nJycJM7JMSfEWNjGAVMMOAScABamGhxABRkJISFpVxISQkjbe2+zu1N2eu+97czO7Oze3O/JS0LT OVe/N++9mf3uV+73/X5FtbW1+DqEw2FEYlEFsVjsM0TjXBNxJFJJJNMpJJNciXQyhQwxlUgiN5VBNpNG NptFejqLVC6L+EwWsZkcIoUcEphFHAWkZguYnpvDHPhP/ivwv+kZYCoHZPKYS+WQjya/0j7B1xIQ4/1B @@ -1143,7 +1143,7 @@ iVBORw0KGgoAAAANSUhEUgAAADAAAAAeCAYAAABqpJ3BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADr8AAA6/ATgFUyQAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH + YQUAAAAJcEhZcwAADr4AAA6+AepCscAAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH Nn/4nJycJM7JMSfEWNjGAVMMOAScABamGhxABRkJISFpVxISQkjbe2+zu1N2eu+97czO7Oze3O/JS0LT OVe/N++9mf3uV+73/X5FtbW1+DqEw2FEYlEFsVjsM0TjXBNxJFJJJNMpJJNciXQyhQwxlUgiN5VBNpNG NptFejqLVC6L+EwWsZkcIoUcEphFHAWkZguYnpvDHPhP/ivwv+kZYCoHZPKYS+WQjya/0j7B1xIQ4/1B @@ -1216,7 +1216,7 @@ iVBORw0KGgoAAAANSUhEUgAAADAAAAAeCAYAAABqpJ3BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADr8AAA6/ATgFUyQAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH + YQUAAAAJcEhZcwAADr4AAA6+AepCscAAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH Nn/4nJycJM7JMSfEWNjGAVMMOAScABamGhxABRkJISFpVxISQkjbe2+zu1N2eu+97czO7Oze3O/JS0LT OVe/N++9mf3uV+73/X5FtbW1+DqEw2FEYlEFsVjsM0TjXBNxJFJJJNMpJJNciXQyhQwxlUgiN5VBNpNG NptFejqLVC6L+EwWsZkcIoUcEphFHAWkZguYnpvDHPhP/ivwv+kZYCoHZPKYS+WQjya/0j7B1xIQ4/1B @@ -1289,7 +1289,7 @@ iVBORw0KGgoAAAANSUhEUgAAADAAAAAeCAYAAABqpJ3BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADr8AAA6/ATgFUyQAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH + YQUAAAAJcEhZcwAADr4AAA6+AepCscAAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH Nn/4nJycJM7JMSfEWNjGAVMMOAScABamGhxABRkJISFpVxISQkjbe2+zu1N2eu+97czO7Oze3O/JS0LT OVe/N++9mf3uV+73/X5FtbW1+DqEw2FEYlEFsVjsM0TjXBNxJFJJJNMpJJNciXQyhQwxlUgiN5VBNpNG NptFejqLVC6L+EwWsZkcIoUcEphFHAWkZguYnpvDHPhP/ivwv+kZYCoHZPKYS+WQjya/0j7B1xIQ4/1B @@ -1362,7 +1362,7 @@ iVBORw0KGgoAAAANSUhEUgAAADAAAAAeCAYAAABqpJ3BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADr8AAA6/ATgFUyQAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH + YQUAAAAJcEhZcwAADr4AAA6+AepCscAAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH Nn/4nJycJM7JMSfEWNjGAVMMOAScABamGhxABRkJISFpVxISQkjbe2+zu1N2eu+97czO7Oze3O/JS0LT OVe/N++9mf3uV+73/X5FtbW1+DqEw2FEYlEFsVjsM0TjXBNxJFJJJNMpJJNciXQyhQwxlUgiN5VBNpNG NptFejqLVC6L+EwWsZkcIoUcEphFHAWkZguYnpvDHPhP/ivwv+kZYCoHZPKYS+WQjya/0j7B1xIQ4/1B @@ -1435,7 +1435,7 @@ iVBORw0KGgoAAAANSUhEUgAAADAAAAAeCAYAAABqpJ3BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADr8AAA6/ATgFUyQAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH + YQUAAAAJcEhZcwAADr4AAA6+AepCscAAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH Nn/4nJycJM7JMSfEWNjGAVMMOAScABamGhxABRkJISFpVxISQkjbe2+zu1N2eu+97czO7Oze3O/JS0LT OVe/N++9mf3uV+73/X5FtbW1+DqEw2FEYlEFsVjsM0TjXBNxJFJJJNMpJJNciXQyhQwxlUgiN5VBNpNG NptFejqLVC6L+EwWsZkcIoUcEphFHAWkZguYnpvDHPhP/ivwv+kZYCoHZPKYS+WQjya/0j7B1xIQ4/1B @@ -1508,7 +1508,7 @@ iVBORw0KGgoAAAANSUhEUgAAADAAAAAeCAYAAABqpJ3BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADr8AAA6/ATgFUyQAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH + YQUAAAAJcEhZcwAADr4AAA6+AepCscAAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH Nn/4nJycJM7JMSfEWNjGAVMMOAScABamGhxABRkJISFpVxISQkjbe2+zu1N2eu+97czO7Oze3O/JS0LT OVe/N++9mf3uV+73/X5FtbW1+DqEw2FEYlEFsVjsM0TjXBNxJFJJJNMpJJNciXQyhQwxlUgiN5VBNpNG NptFejqLVC6L+EwWsZkcIoUcEphFHAWkZguYnpvDHPhP/ivwv+kZYCoHZPKYS+WQjya/0j7B1xIQ4/1B @@ -1581,7 +1581,7 @@ iVBORw0KGgoAAAANSUhEUgAAADAAAAAeCAYAAABqpJ3BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADr8AAA6/ATgFUyQAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH + YQUAAAAJcEhZcwAADr4AAA6+AepCscAAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH Nn/4nJycJM7JMSfEWNjGAVMMOAScABamGhxABRkJISFpVxISQkjbe2+zu1N2eu+97czO7Oze3O/JS0LT OVe/N++9mf3uV+73/X5FtbW1+DqEw2FEYlEFsVjsM0TjXBNxJFJJJNMpJJNciXQyhQwxlUgiN5VBNpNG NptFejqLVC6L+EwWsZkcIoUcEphFHAWkZguYnpvDHPhP/ivwv+kZYCoHZPKYS+WQjya/0j7B1xIQ4/1B @@ -1654,7 +1654,7 @@ iVBORw0KGgoAAAANSUhEUgAAADAAAAAeCAYAAABqpJ3BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADr8AAA6/ATgFUyQAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH + YQUAAAAJcEhZcwAADr4AAA6+AepCscAAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH Nn/4nJycJM7JMSfEWNjGAVMMOAScABamGhxABRkJISFpVxISQkjbe2+zu1N2eu+97czO7Oze3O/JS0LT OVe/N++9mf3uV+73/X5FtbW1+DqEw2FEYlEFsVjsM0TjXBNxJFJJJNMpJJNciXQyhQwxlUgiN5VBNpNG NptFejqLVC6L+EwWsZkcIoUcEphFHAWkZguYnpvDHPhP/ivwv+kZYCoHZPKYS+WQjya/0j7B1xIQ4/1B @@ -1727,7 +1727,7 @@ iVBORw0KGgoAAAANSUhEUgAAADAAAAAeCAYAAABqpJ3BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADr8AAA6/ATgFUyQAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH + YQUAAAAJcEhZcwAADr4AAA6+AepCscAAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH Nn/4nJycJM7JMSfEWNjGAVMMOAScABamGhxABRkJISFpVxISQkjbe2+zu1N2eu+97czO7Oze3O/JS0LT OVe/N++9mf3uV+73/X5FtbW1+DqEw2FEYlEFsVjsM0TjXBNxJFJJJNMpJJNciXQyhQwxlUgiN5VBNpNG NptFejqLVC6L+EwWsZkcIoUcEphFHAWkZguYnpvDHPhP/ivwv+kZYCoHZPKYS+WQjya/0j7B1xIQ4/1B @@ -1800,7 +1800,7 @@ iVBORw0KGgoAAAANSUhEUgAAADAAAAAeCAYAAABqpJ3BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADr8AAA6/ATgFUyQAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH + YQUAAAAJcEhZcwAADr4AAA6+AepCscAAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH Nn/4nJycJM7JMSfEWNjGAVMMOAScABamGhxABRkJISFpVxISQkjbe2+zu1N2eu+97czO7Oze3O/JS0LT OVe/N++9mf3uV+73/X5FtbW1+DqEw2FEYlEFsVjsM0TjXBNxJFJJJNMpJJNciXQyhQwxlUgiN5VBNpNG NptFejqLVC6L+EwWsZkcIoUcEphFHAWkZguYnpvDHPhP/ivwv+kZYCoHZPKYS+WQjya/0j7B1xIQ4/1B @@ -1873,7 +1873,7 @@ iVBORw0KGgoAAAANSUhEUgAAADAAAAAeCAYAAABqpJ3BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADr8AAA6/ATgFUyQAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH + YQUAAAAJcEhZcwAADr4AAA6+AepCscAAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH Nn/4nJycJM7JMSfEWNjGAVMMOAScABamGhxABRkJISFpVxISQkjbe2+zu1N2eu+97czO7Oze3O/JS0LT OVe/N++9mf3uV+73/X5FtbW1+DqEw2FEYlEFsVjsM0TjXBNxJFJJJNMpJJNciXQyhQwxlUgiN5VBNpNG NptFejqLVC6L+EwWsZkcIoUcEphFHAWkZguYnpvDHPhP/ivwv+kZYCoHZPKYS+WQjya/0j7B1xIQ4/1B @@ -1946,7 +1946,7 @@ iVBORw0KGgoAAAANSUhEUgAAADAAAAAeCAYAAABqpJ3BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADr8AAA6/ATgFUyQAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH + YQUAAAAJcEhZcwAADr4AAA6+AepCscAAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH Nn/4nJycJM7JMSfEWNjGAVMMOAScABamGhxABRkJISFpVxISQkjbe2+zu1N2eu+97czO7Oze3O/JS0LT OVe/N++9mf3uV+73/X5FtbW1+DqEw2FEYlEFsVjsM0TjXBNxJFJJJNMpJJNciXQyhQwxlUgiN5VBNpNG NptFejqLVC6L+EwWsZkcIoUcEphFHAWkZguYnpvDHPhP/ivwv+kZYCoHZPKYS+WQjya/0j7B1xIQ4/1B @@ -2019,7 +2019,7 @@ iVBORw0KGgoAAAANSUhEUgAAADAAAAAeCAYAAABqpJ3BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADr8AAA6/ATgFUyQAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH + YQUAAAAJcEhZcwAADr4AAA6+AepCscAAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH Nn/4nJycJM7JMSfEWNjGAVMMOAScABamGhxABRkJISFpVxISQkjbe2+zu1N2eu+97czO7Oze3O/JS0LT OVe/N++9mf3uV+73/X5FtbW1+DqEw2FEYlEFsVjsM0TjXBNxJFJJJNMpJJNciXQyhQwxlUgiN5VBNpNG NptFejqLVC6L+EwWsZkcIoUcEphFHAWkZguYnpvDHPhP/ivwv+kZYCoHZPKYS+WQjya/0j7B1xIQ4/1B @@ -2092,7 +2092,7 @@ iVBORw0KGgoAAAANSUhEUgAAADAAAAAeCAYAAABqpJ3BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADr8AAA6/ATgFUyQAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH + YQUAAAAJcEhZcwAADr4AAA6+AepCscAAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH Nn/4nJycJM7JMSfEWNjGAVMMOAScABamGhxABRkJISFpVxISQkjbe2+zu1N2eu+97czO7Oze3O/JS0LT OVe/N++9mf3uV+73/X5FtbW1+DqEw2FEYlEFsVjsM0TjXBNxJFJJJNMpJJNciXQyhQwxlUgiN5VBNpNG NptFejqLVC6L+EwWsZkcIoUcEphFHAWkZguYnpvDHPhP/ivwv+kZYCoHZPKYS+WQjya/0j7B1xIQ4/1B @@ -2165,7 +2165,7 @@ iVBORw0KGgoAAAANSUhEUgAAADAAAAAeCAYAAABqpJ3BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADr8AAA6/ATgFUyQAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH + YQUAAAAJcEhZcwAADr4AAA6+AepCscAAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH Nn/4nJycJM7JMSfEWNjGAVMMOAScABamGhxABRkJISFpVxISQkjbe2+zu1N2eu+97czO7Oze3O/JS0LT OVe/N++9mf3uV+73/X5FtbW1+DqEw2FEYlEFsVjsM0TjXBNxJFJJJNMpJJNciXQyhQwxlUgiN5VBNpNG NptFejqLVC6L+EwWsZkcIoUcEphFHAWkZguYnpvDHPhP/ivwv+kZYCoHZPKYS+WQjya/0j7B1xIQ4/1B @@ -2238,7 +2238,7 @@ iVBORw0KGgoAAAANSUhEUgAAADAAAAAeCAYAAABqpJ3BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADr8AAA6/ATgFUyQAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH + YQUAAAAJcEhZcwAADr4AAA6+AepCscAAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH Nn/4nJycJM7JMSfEWNjGAVMMOAScABamGhxABRkJISFpVxISQkjbe2+zu1N2eu+97czO7Oze3O/JS0LT OVe/N++9mf3uV+73/X5FtbW1+DqEw2FEYlEFsVjsM0TjXBNxJFJJJNMpJJNciXQyhQwxlUgiN5VBNpNG NptFejqLVC6L+EwWsZkcIoUcEphFHAWkZguYnpvDHPhP/ivwv+kZYCoHZPKYS+WQjya/0j7B1xIQ4/1B @@ -2311,7 +2311,7 @@ iVBORw0KGgoAAAANSUhEUgAAADAAAAAeCAYAAABqpJ3BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADr8AAA6/ATgFUyQAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH + YQUAAAAJcEhZcwAADr4AAA6+AepCscAAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH Nn/4nJycJM7JMSfEWNjGAVMMOAScABamGhxABRkJISFpVxISQkjbe2+zu1N2eu+97czO7Oze3O/JS0LT OVe/N++9mf3uV+73/X5FtbW1+DqEw2FEYlEFsVjsM0TjXBNxJFJJJNMpJJNciXQyhQwxlUgiN5VBNpNG NptFejqLVC6L+EwWsZkcIoUcEphFHAWkZguYnpvDHPhP/ivwv+kZYCoHZPKYS+WQjya/0j7B1xIQ4/1B @@ -2384,7 +2384,7 @@ iVBORw0KGgoAAAANSUhEUgAAADAAAAAeCAYAAABqpJ3BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADr8AAA6/ATgFUyQAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH + YQUAAAAJcEhZcwAADr4AAA6+AepCscAAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH Nn/4nJycJM7JMSfEWNjGAVMMOAScABamGhxABRkJISFpVxISQkjbe2+zu1N2eu+97czO7Oze3O/JS0LT OVe/N++9mf3uV+73/X5FtbW1+DqEw2FEYlEFsVjsM0TjXBNxJFJJJNMpJJNciXQyhQwxlUgiN5VBNpNG NptFejqLVC6L+EwWsZkcIoUcEphFHAWkZguYnpvDHPhP/ivwv+kZYCoHZPKYS+WQjya/0j7B1xIQ4/1B @@ -2457,7 +2457,7 @@ iVBORw0KGgoAAAANSUhEUgAAADAAAAAeCAYAAABqpJ3BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADr8AAA6/ATgFUyQAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH + YQUAAAAJcEhZcwAADr4AAA6+AepCscAAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH Nn/4nJycJM7JMSfEWNjGAVMMOAScABamGhxABRkJISFpVxISQkjbe2+zu1N2eu+97czO7Oze3O/JS0LT OVe/N++9mf3uV+73/X5FtbW1+DqEw2FEYlEFsVjsM0TjXBNxJFJJJNMpJJNciXQyhQwxlUgiN5VBNpNG NptFejqLVC6L+EwWsZkcIoUcEphFHAWkZguYnpvDHPhP/ivwv+kZYCoHZPKYS+WQjya/0j7B1xIQ4/1B @@ -2530,7 +2530,7 @@ iVBORw0KGgoAAAANSUhEUgAAADAAAAAeCAYAAABqpJ3BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADr8AAA6/ATgFUyQAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH + YQUAAAAJcEhZcwAADr4AAA6+AepCscAAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH Nn/4nJycJM7JMSfEWNjGAVMMOAScABamGhxABRkJISFpVxISQkjbe2+zu1N2eu+97czO7Oze3O/JS0LT OVe/N++9mf3uV+73/X5FtbW1+DqEw2FEYlEFsVjsM0TjXBNxJFJJJNMpJJNciXQyhQwxlUgiN5VBNpNG NptFejqLVC6L+EwWsZkcIoUcEphFHAWkZguYnpvDHPhP/ivwv+kZYCoHZPKYS+WQjya/0j7B1xIQ4/1B @@ -2603,7 +2603,7 @@ iVBORw0KGgoAAAANSUhEUgAAADAAAAAeCAYAAABqpJ3BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADr8AAA6/ATgFUyQAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH + YQUAAAAJcEhZcwAADr4AAA6+AepCscAAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH Nn/4nJycJM7JMSfEWNjGAVMMOAScABamGhxABRkJISFpVxISQkjbe2+zu1N2eu+97czO7Oze3O/JS0LT OVe/N++9mf3uV+73/X5FtbW1+DqEw2FEYlEFsVjsM0TjXBNxJFJJJNMpJJNciXQyhQwxlUgiN5VBNpNG NptFejqLVC6L+EwWsZkcIoUcEphFHAWkZguYnpvDHPhP/ivwv+kZYCoHZPKYS+WQjya/0j7B1xIQ4/1B @@ -2676,7 +2676,7 @@ iVBORw0KGgoAAAANSUhEUgAAADAAAAAeCAYAAABqpJ3BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADr8AAA6/ATgFUyQAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH + YQUAAAAJcEhZcwAADr4AAA6+AepCscAAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH Nn/4nJycJM7JMSfEWNjGAVMMOAScABamGhxABRkJISFpVxISQkjbe2+zu1N2eu+97czO7Oze3O/JS0LT OVe/N++9mf3uV+73/X5FtbW1+DqEw2FEYlEFsVjsM0TjXBNxJFJJJNMpJJNciXQyhQwxlUgiN5VBNpNG NptFejqLVC6L+EwWsZkcIoUcEphFHAWkZguYnpvDHPhP/ivwv+kZYCoHZPKYS+WQjya/0j7B1xIQ4/1B @@ -2749,7 +2749,7 @@ iVBORw0KGgoAAAANSUhEUgAAADAAAAAeCAYAAABqpJ3BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADr8AAA6/ATgFUyQAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH + YQUAAAAJcEhZcwAADr4AAA6+AepCscAAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH Nn/4nJycJM7JMSfEWNjGAVMMOAScABamGhxABRkJISFpVxISQkjbe2+zu1N2eu+97czO7Oze3O/JS0LT OVe/N++9mf3uV+73/X5FtbW1+DqEw2FEYlEFsVjsM0TjXBNxJFJJJNMpJJNciXQyhQwxlUgiN5VBNpNG NptFejqLVC6L+EwWsZkcIoUcEphFHAWkZguYnpvDHPhP/ivwv+kZYCoHZPKYS+WQjya/0j7B1xIQ4/1B @@ -2822,7 +2822,7 @@ iVBORw0KGgoAAAANSUhEUgAAADAAAAAeCAYAAABqpJ3BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADr8AAA6/ATgFUyQAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH + YQUAAAAJcEhZcwAADr4AAA6+AepCscAAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH Nn/4nJycJM7JMSfEWNjGAVMMOAScABamGhxABRkJISFpVxISQkjbe2+zu1N2eu+97czO7Oze3O/JS0LT OVe/N++9mf3uV+73/X5FtbW1+DqEw2FEYlEFsVjsM0TjXBNxJFJJJNMpJJNciXQyhQwxlUgiN5VBNpNG NptFejqLVC6L+EwWsZkcIoUcEphFHAWkZguYnpvDHPhP/ivwv+kZYCoHZPKYS+WQjya/0j7B1xIQ4/1B @@ -2895,7 +2895,7 @@ iVBORw0KGgoAAAANSUhEUgAAADAAAAAeCAYAAABqpJ3BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADr8AAA6/ATgFUyQAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH + YQUAAAAJcEhZcwAADr4AAA6+AepCscAAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH Nn/4nJycJM7JMSfEWNjGAVMMOAScABamGhxABRkJISFpVxISQkjbe2+zu1N2eu+97czO7Oze3O/JS0LT OVe/N++9mf3uV+73/X5FtbW1+DqEw2FEYlEFsVjsM0TjXBNxJFJJJNMpJJNciXQyhQwxlUgiN5VBNpNG NptFejqLVC6L+EwWsZkcIoUcEphFHAWkZguYnpvDHPhP/ivwv+kZYCoHZPKYS+WQjya/0j7B1xIQ4/1B @@ -2968,7 +2968,7 @@ iVBORw0KGgoAAAANSUhEUgAAADAAAAAeCAYAAABqpJ3BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADr8AAA6/ATgFUyQAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH + YQUAAAAJcEhZcwAADr4AAA6+AepCscAAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH Nn/4nJycJM7JMSfEWNjGAVMMOAScABamGhxABRkJISFpVxISQkjbe2+zu1N2eu+97czO7Oze3O/JS0LT OVe/N++9mf3uV+73/X5FtbW1+DqEw2FEYlEFsVjsM0TjXBNxJFJJJNMpJJNciXQyhQwxlUgiN5VBNpNG NptFejqLVC6L+EwWsZkcIoUcEphFHAWkZguYnpvDHPhP/ivwv+kZYCoHZPKYS+WQjya/0j7B1xIQ4/1B @@ -3041,7 +3041,7 @@ iVBORw0KGgoAAAANSUhEUgAAADAAAAAeCAYAAABqpJ3BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADr8AAA6/ATgFUyQAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH + YQUAAAAJcEhZcwAADr4AAA6+AepCscAAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH Nn/4nJycJM7JMSfEWNjGAVMMOAScABamGhxABRkJISFpVxISQkjbe2+zu1N2eu+97czO7Oze3O/JS0LT OVe/N++9mf3uV+73/X5FtbW1+DqEw2FEYlEFsVjsM0TjXBNxJFJJJNMpJJNciXQyhQwxlUgiN5VBNpNG NptFejqLVC6L+EwWsZkcIoUcEphFHAWkZguYnpvDHPhP/ivwv+kZYCoHZPKYS+WQjya/0j7B1xIQ4/1B @@ -3114,7 +3114,7 @@ iVBORw0KGgoAAAANSUhEUgAAADAAAAAeCAYAAABqpJ3BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADr8AAA6/ATgFUyQAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH + YQUAAAAJcEhZcwAADr4AAA6+AepCscAAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH Nn/4nJycJM7JMSfEWNjGAVMMOAScABamGhxABRkJISFpVxISQkjbe2+zu1N2eu+97czO7Oze3O/JS0LT OVe/N++9mf3uV+73/X5FtbW1+DqEw2FEYlEFsVjsM0TjXBNxJFJJJNMpJJNciXQyhQwxlUgiN5VBNpNG NptFejqLVC6L+EwWsZkcIoUcEphFHAWkZguYnpvDHPhP/ivwv+kZYCoHZPKYS+WQjya/0j7B1xIQ4/1B @@ -3187,7 +3187,7 @@ iVBORw0KGgoAAAANSUhEUgAAADAAAAAeCAYAAABqpJ3BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADr8AAA6/ATgFUyQAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH + YQUAAAAJcEhZcwAADr4AAA6+AepCscAAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH Nn/4nJycJM7JMSfEWNjGAVMMOAScABamGhxABRkJISFpVxISQkjbe2+zu1N2eu+97czO7Oze3O/JS0LT OVe/N++9mf3uV+73/X5FtbW1+DqEw2FEYlEFsVjsM0TjXBNxJFJJJNMpJJNciXQyhQwxlUgiN5VBNpNG NptFejqLVC6L+EwWsZkcIoUcEphFHAWkZguYnpvDHPhP/ivwv+kZYCoHZPKYS+WQjya/0j7B1xIQ4/1B @@ -3260,7 +3260,7 @@ iVBORw0KGgoAAAANSUhEUgAAADAAAAAeCAYAAABqpJ3BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADr8AAA6/ATgFUyQAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH + YQUAAAAJcEhZcwAADr4AAA6+AepCscAAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH Nn/4nJycJM7JMSfEWNjGAVMMOAScABamGhxABRkJISFpVxISQkjbe2+zu1N2eu+97czO7Oze3O/JS0LT OVe/N++9mf3uV+73/X5FtbW1+DqEw2FEYlEFsVjsM0TjXBNxJFJJJNMpJJNciXQyhQwxlUgiN5VBNpNG NptFejqLVC6L+EwWsZkcIoUcEphFHAWkZguYnpvDHPhP/ivwv+kZYCoHZPKYS+WQjya/0j7B1xIQ4/1B @@ -3333,7 +3333,7 @@ iVBORw0KGgoAAAANSUhEUgAAADAAAAAeCAYAAABqpJ3BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADr8AAA6/ATgFUyQAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH + YQUAAAAJcEhZcwAADr4AAA6+AepCscAAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH Nn/4nJycJM7JMSfEWNjGAVMMOAScABamGhxABRkJISFpVxISQkjbe2+zu1N2eu+97czO7Oze3O/JS0LT OVe/N++9mf3uV+73/X5FtbW1+DqEw2FEYlEFsVjsM0TjXBNxJFJJJNMpJJNciXQyhQwxlUgiN5VBNpNG NptFejqLVC6L+EwWsZkcIoUcEphFHAWkZguYnpvDHPhP/ivwv+kZYCoHZPKYS+WQjya/0j7B1xIQ4/1B @@ -3406,7 +3406,7 @@ iVBORw0KGgoAAAANSUhEUgAAADAAAAAeCAYAAABqpJ3BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADr8AAA6/ATgFUyQAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH + YQUAAAAJcEhZcwAADr4AAA6+AepCscAAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH Nn/4nJycJM7JMSfEWNjGAVMMOAScABamGhxABRkJISFpVxISQkjbe2+zu1N2eu+97czO7Oze3O/JS0LT OVe/N++9mf3uV+73/X5FtbW1+DqEw2FEYlEFsVjsM0TjXBNxJFJJJNMpJJNciXQyhQwxlUgiN5VBNpNG NptFejqLVC6L+EwWsZkcIoUcEphFHAWkZguYnpvDHPhP/ivwv+kZYCoHZPKYS+WQjya/0j7B1xIQ4/1B @@ -3479,7 +3479,7 @@ iVBORw0KGgoAAAANSUhEUgAAADAAAAAeCAYAAABqpJ3BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADr8AAA6/ATgFUyQAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH + YQUAAAAJcEhZcwAADr4AAA6+AepCscAAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH Nn/4nJycJM7JMSfEWNjGAVMMOAScABamGhxABRkJISFpVxISQkjbe2+zu1N2eu+97czO7Oze3O/JS0LT OVe/N++9mf3uV+73/X5FtbW1+DqEw2FEYlEFsVjsM0TjXBNxJFJJJNMpJJNciXQyhQwxlUgiN5VBNpNG NptFejqLVC6L+EwWsZkcIoUcEphFHAWkZguYnpvDHPhP/ivwv+kZYCoHZPKYS+WQjya/0j7B1xIQ4/1B @@ -3552,7 +3552,7 @@ iVBORw0KGgoAAAANSUhEUgAAADAAAAAeCAYAAABqpJ3BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADr8AAA6/ATgFUyQAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH + YQUAAAAJcEhZcwAADr4AAA6+AepCscAAAA+KSURBVFhHdVh3lFz1ed04DSODAHVtU9ldrcqqCySKgTjH Nn/4nJycJM7JMSfEWNjGAVMMOAScABamGhxABRkJISFpVxISQkjbe2+zu1N2eu+97czO7Oze3O/JS0LT OVe/N++9mf3uV+73/X5FtbW1+DqEw2FEYlEFsVjsM0TjXBNxJFJJJNMpJJNciXQyhQwxlUgiN5VBNpNG NptFejqLVC6L+EwWsZkcIoUcEphFHAWkZguYnpvDHPhP/ivwv+kZYCoHZPKYS+WQjya/0j7B1xIQ4/1B diff --git a/TBF/BenchControl/TestMethods/iPerlCommunication/iPerlCommunicationParams.cs b/TBF/BenchControl/TestMethods/iPerlCommunication/iPerlCommunicationParams.cs index e1fa7a922..dab268274 100644 --- a/TBF/BenchControl/TestMethods/iPerlCommunication/iPerlCommunicationParams.cs +++ b/TBF/BenchControl/TestMethods/iPerlCommunication/iPerlCommunicationParams.cs @@ -53,6 +53,7 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication retVal.Add(iPerlCommunicationForm.NormalizeCalibrationV4FactorsStr); retVal.Add(iPerlCommunicationForm.ReadQ2CorrectionStr); retVal.Add(iPerlCommunicationForm.ResetQ2CorrectionStr); + retVal.Add(iPerlCommunicationForm.InitOrReadQ2CorrectionStr); retVal.Add(iPerlCommunicationForm.WriteCalibrationFactorStr); retVal.Add(iPerlCommunicationForm.WriteCalibrationV4FactorsStr); retVal.Add(iPerlCommunicationForm.WriteQ2CorrectionStr); @@ -60,6 +61,8 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication retVal.Add(iPerlCommunicationForm.WriteQ2CorrectionGreeceStr); retVal.Add(iPerlCommunicationForm.WriteQ2CorrectionRLStr); retVal.Add(iPerlCommunicationForm.WriteQ2CorrectionLRStr); + retVal.Add(iPerlCommunicationForm.UpdateQ2CorrectionsStr); + retVal.Add(iPerlCommunicationForm.ConditnlUpdateQ2CorrectionsStr); retVal.Add("Q2 corrected from Q2adj"); retVal.Add("Q2 correction check Q2bc Q2ac"); retVal.Add(iPerlCommunicationForm.SetActiveModeStr); diff --git a/TBF/BenchControl/TestMethods/iPerlCommunication/iPerlEnums.cs b/TBF/BenchControl/TestMethods/iPerlCommunication/iPerlEnums.cs index 9a0f3835f..eb18dbcad 100644 --- a/TBF/BenchControl/TestMethods/iPerlCommunication/iPerlEnums.cs +++ b/TBF/BenchControl/TestMethods/iPerlCommunication/iPerlEnums.cs @@ -1,5 +1,5 @@ /// -/// Copyright (c) 2017-2018 Sensus Slovensko a.s. +/// Copyright (c) 2017-2019 Sensus Slovensko a.s. /// using System; using System.Collections.Generic; @@ -8,14 +8,16 @@ using System.Text; namespace TBF.BenchControl.TestMethods.iPerlCommunication { - public enum Q2CorrType - { + public enum Q2CorrType + { None, - Standard, - Dewa, - Greece, + Standard, + Dewa, + Greece, RL, LR, - Count - } + Update, + ConditionalUpdate, + Count, + } } diff --git a/TBF/BenchControl/TestMethods/iPerlCommunication/iPerlHead/FlowDirectionDetection.cs b/TBF/BenchControl/TestMethods/iPerlCommunication/iPerlHead/FlowDirectionDetection.cs index 551710a10..3642926b8 100644 --- a/TBF/BenchControl/TestMethods/iPerlCommunication/iPerlHead/FlowDirectionDetection.cs +++ b/TBF/BenchControl/TestMethods/iPerlCommunication/iPerlHead/FlowDirectionDetection.cs @@ -1,13 +1,16 @@ /// -/// Copyright (c) 2018 Sensus Slovensko a.s. +/// Copyright (c) 2018-2019 Sensus Slovensko a.s. /// using System; +using log4net; using Config.Entities; namespace TBF.BenchControl.TestMethods.iPerlCommunication.iPerlHead { public class FlowDirectionDetection { + private static readonly ILog log = LogManager.GetLogger(typeof(IperlHead)); + const int FIFO_SIZE = 64; /// 8 sec. @ 8Hz const double MAX_OPTO_DROPOUT = 4.5; /// sec. @@ -109,31 +112,37 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication.iPerlHead /// Verify whether the flow direction is correct /// /// OptoHeadState.OptoAndDirOK, OptoHeadState.OptoNok or OptoHeadState.DirNok - public OptoHeadState CheckFlowDirection(Counting counting) + public OptoHeadState CheckFlowDirection(Counting counting, string iPerlHeadName) { if (!AreFifoDataValid()) return OptoHeadState.OptoNok; - decimal numer = N * sumXY - sumX * sumY; - decimal denom = N * sumXX - sumX * sumX; - - if (denom == 0) return OptoHeadState.DirNok; - - /// Calculate the slope of the regressed line, determine min. and max. - double slope = (double)(numer / denom); - if (slope > maxSlope) maxSlope = slope; - if (slope < minSlope) minSlope = slope; - - if ((counting == Counting.Positive) && (maxSlope > -2 * minSlope)) + try { - return OptoHeadState.OptoAndDirOK; + decimal numer = N * sumXY - sumX * sumY; + decimal denom = N * sumXX - sumX * sumX; + + if (denom == 0) return OptoHeadState.DirNok; + + /// Calculate the slope of the regressed line, determine min. and max. + double slope = (double)(numer / denom); + if (slope > maxSlope) maxSlope = slope; + if (slope < minSlope) minSlope = slope; + + if ( counting == Counting.Arbitrary || + (counting == Counting.Positive && maxSlope > Math.Abs(2 * minSlope)) || + (counting == Counting.Negative && minSlope < -Math.Abs(2 * maxSlope))) + { + return OptoHeadState.OptoAndDirOK; + } + else + { + return OptoHeadState.DirNok; + } } - else if ((counting == Counting.Negative) && (minSlope < -2 * maxSlope)) + catch (Exception) { - return OptoHeadState.OptoAndDirOK; - } - else - { - return OptoHeadState.DirNok; + log.ErrorFormat("{0} : CheckFlowDirection() failed", iPerlHeadName); + return OptoHeadState.DirNok; /// ??? } } } diff --git a/TBF/BenchControl/TestMethods/iPerlCommunication/iPerlHead/IperlHead.cs b/TBF/BenchControl/TestMethods/iPerlCommunication/iPerlHead/IperlHead.cs index 7eae5a167..ed9e5cf20 100644 --- a/TBF/BenchControl/TestMethods/iPerlCommunication/iPerlHead/IperlHead.cs +++ b/TBF/BenchControl/TestMethods/iPerlCommunication/iPerlHead/IperlHead.cs @@ -39,9 +39,10 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication.iPerlHead public ushort FactorLimitLo { get { return (ushort)iperlHeadCfg.ProcParams.FactorLimitLo; } } public ushort FactorLimitHi { get { return (ushort)iperlHeadCfg.ProcParams.FactorLimitHi; } } public Counting InitFlowDir { get { return (iperlHeadCfg != null && iperlHeadCfg.ProcParams != null) ? iperlHeadCfg.ProcParams.Counting : Counting.Arbitrary; } } -#if ORACLE_DB - public int WMType_ID { get { return iperlHeadCfg.ProcParams.WMType_ID; } } /// Required by Oracle DB -#endif + public int WMType_ID { get { return iperlHeadCfg.ProcParams.WMType_ID; } } /// Required by Oracle DB + public int InitQ2CorrLR { get { return iperlHeadCfg.ProcParams.InitQ2CorrLR; } } /// Used by InitOrReadQ2Corrections activity + public int InitQ2CorrRL { get { return iperlHeadCfg.ProcParams.InitQ2CorrRL; } } /// Required by Oracle DB + /// Properties set by the Begin and the End form public string SerialNr @@ -231,35 +232,15 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication.iPerlHead /// /// Q2 correction factor calculated from the last test (Q2). - /// This factors should be used only for R800 meters. + /// This factor should be used only for R800 meters. /// - /// Test result from which to calculate the factor - /// The calculated Q2 correction factor - /// true = OK, false = failed - public bool CalculateQ2CorrectionFactor(Results.Entities.MeterTestRslt q2adjResult, Results.Entities.TestData q2adjTestData, out double q2CorrectionFactor) + /// A test result from which to calculate the factor + /// Nominal flow in m3/h + /// 0 or the current Q2 correction factor when updating the factor + /// Calculated Q2 correction factor + public double CalculateQ2CorrectionFactor(Results.Entities.MeterTestRslt q2adjResult, double nominalFlow, int currentFactor = 0) { - q2CorrectionFactor = 0; - - if (q2adjResult == null) return false; /// Q2 test result is missing ==> water meter failed - - double errLimitLo = q2adjTestData.ErrLimLo + q2adjTestData.Uncertainty; - double errLimitHi = q2adjTestData.ErrLimHi - q2adjTestData.Uncertainty; - if ((q2adjResult.Error < errLimitLo) || (q2adjResult.Error > errLimitHi)) - { - log.WarnFormat("Q2 correction: Pos={0}, PCB#={1}, ***Q2adjError={2}%***, CalTarget={3}%, ***corrFactor={4}***, [Lo={5}%, Hi={6}%]", - Name, - SerialNr, - q2adjResult.Error.ToString("F2"), - CalibTarget.ToString("F1"), - q2CorrectionFactor.ToString("F1"), - errLimitLo.ToString("F1"), - errLimitHi.ToString("F1")); - return false; /// Q2 error too large ==> water meter failed - } - - //double nominalTestFlowLph = 500.0 * (q2adjTestData.Qfrom + q2adjTestData.Qto); /// in lph => 500.0 * ... - double nominalTestFlowLph = 1000.0 * q2adjTestData.Qfrom; /// in lph => 1000.0 * ... - + double nominalTestFlowLph = Config.Units.ConvertTo(Config.Unit.lph, nominalFlow); double volumeRefShiftedToTarget = q2adjResult.VolumeRef * (1.0f + CalibTarget / 100.0f); double q2adjErrorShiftedToTarget = Config.Formulas.ErrorFromVolumes(q2adjResult.VolumeMeter, volumeRefShiftedToTarget); @@ -270,17 +251,16 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication.iPerlHead double F = D / (nominalTestFlowLph * 10.0); /// Error corrected with 8 Raw Units per minute [%] double G = F / B; /// Error corrected with 1 Raw Unit per minute [%] - q2CorrectionFactor = (-1) * (q2adjErrorShiftedToTarget / G) * (volumeRefShiftedToTarget / q2adjResult.VolumeMeter); + double q2CorrectionFactor = (double)currentFactor - (q2adjErrorShiftedToTarget / G) * (volumeRefShiftedToTarget / q2adjResult.VolumeMeter); - log.WarnFormat("Q2 correction: Pos={0}, PCB#={1}, Q2adjError={2}%, CalTarget={3}%, corrFactor={4}, [Lo={5}%, Hi={6}%]", - Name, - SerialNr, - q2adjResult.Error.ToString("F2"), - CalibTarget.ToString("F1"), - q2CorrectionFactor.ToString("F1"), - errLimitLo.ToString("F1"), - errLimitHi.ToString("F1")); - return true; + log.WarnFormat("CalculateQ2CorrectionFactor() : Pos={0}, PCB#={1}, Error={2}%, CalTarget={3}%, Q2CorrFactor={4}", + Name, + SerialNr, + q2adjResult.Error.ToString("F2"), + CalibTarget.ToString("F1"), + q2CorrectionFactor.ToString("F1")); + + return q2CorrectionFactor; } @@ -461,7 +441,7 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication.iPerlHead /// public OptoHeadState CheckFlowDirection() { - return (flowDirectionDetection != null) ? flowDirectionDetection.CheckFlowDirection(currentFlowDir) : OptoHeadState.DirNok; + return (flowDirectionDetection != null) ? flowDirectionDetection.CheckFlowDirection(currentFlowDir, Name) : OptoHeadState.DirNok; } /// public void ChangeFlowDirection() diff --git a/TBF/BenchControl/TestMethods/iPerlCommunication/iPerlHead/ProcParams.cs b/TBF/BenchControl/TestMethods/iPerlCommunication/iPerlHead/ProcParams.cs index eccdfe194..8f324fea9 100644 --- a/TBF/BenchControl/TestMethods/iPerlCommunication/iPerlHead/ProcParams.cs +++ b/TBF/BenchControl/TestMethods/iPerlCommunication/iPerlHead/ProcParams.cs @@ -1,5 +1,5 @@ /// -/// Copyright (c) 2015-2018 Sensus Slovensko a.s. +/// Copyright (c) 2015-2019 Sensus Slovensko a.s. /// using System; using System.IO; @@ -20,9 +20,9 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication.iPerlHead public int FactorLimitLo; /// Lower limit for the calibration factor public int FactorLimitHi; /// Upper limit for the calibration factor public Counting Counting; /// Initial iPerl counting (Artbitrary, Positive or Negative) -#if ORACLE_DB public int WMType_ID; /// Required for Oracle DB: ID_WZTyp in table VT_PRUEFPUNKT_SOLL_SD -#endif + public int InitQ2CorrLR; + public int InitQ2CorrRL; public override void InitializeAll() @@ -32,9 +32,9 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication.iPerlHead FactorLimitLo = 1000; FactorLimitHi = 8000; Counting = Counting.Arbitrary; -#if ORACLE_DB WMType_ID = 2; /// Value for iPerl DN15 -#endif + InitQ2CorrLR = 0; + InitQ2CorrRL = 0; } string[] paramNames = new string[] @@ -44,9 +44,9 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication.iPerlHead "Calib. factor Lo", "Calib. factor Hi", "Counting", -#if ORACLE_DB "WM type ID", -#endif + "Init. Q2 corr. LR", + "Init. Q2 corr. RL", }; public override string ParamName(int i) { return paramNames[i]; } public override int ParamsCount() { return paramNames.Length; } @@ -77,10 +77,10 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication.iPerlHead case 2: return FactorLimitLo.ToString(); case 3: return FactorLimitHi.ToString(); case 4: return Counting.ToString(); -#if ORACLE_DB case 5: return WMType_ID.ToString(); -#endif - default: return string.Empty; + case 6: return InitQ2CorrLR.ToString(); + case 7: return InitQ2CorrRL.ToString(); + default: return string.Empty; } } @@ -103,9 +103,9 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication.iPerlHead if (c.ToString().Equals(strValue)) { Counting = c; return CfgUpdateFlags.None; } } break; -#if ORACLE_DB case 5: WMType_ID = int.Parse(strValue); return CfgUpdateFlags.None; -#endif + case 6: InitQ2CorrLR = int.Parse(strValue); return CfgUpdateFlags.None; + case 7: InitQ2CorrRL = int.Parse(strValue); return CfgUpdateFlags.None; default: return CfgUpdateFlags.None; } @@ -134,11 +134,13 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication.iPerlHead case 4: for (Counting c = 0; c < Counting.Count; c++) if (c.ToString().Equals(strValue)) return true; break; -#if ORACLE_DB case 5: /// WMType_ID if (int.TryParse(strValue, out iDummy)) return true; break; -#endif + case 6: /// InitQ2CorrLR + case 7: /// InitQ2CorrRL + if (int.TryParse(strValue, out iDummy) || (iDummy < -127) || (iDummy > 127)) return true; + break; default: message = "Invalid index"; return false; @@ -155,10 +157,10 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication.iPerlHead prms.FactorLimitLo = this.FactorLimitLo; prms.FactorLimitHi = this.FactorLimitHi; prms.Counting = this.Counting; -#if ORACLE_DB prms.WMType_ID = this.WMType_ID; -#endif - } + prms.InitQ2CorrLR = this.InitQ2CorrLR; + prms.InitQ2CorrRL = this.InitQ2CorrRL; + } public IParamsProvider Clone() { diff --git a/TBF/LocalSettings.cs b/TBF/LocalSettings.cs index 098d215ad..f79a70538 100644 --- a/TBF/LocalSettings.cs +++ b/TBF/LocalSettings.cs @@ -65,7 +65,7 @@ namespace TBF public int MainWndTop; public int MainWndWidth; public int MainWndHeight; - public bool ManiWndMaximized; + public bool MainWndMaximized; /// Components public int ComponentsDlgLeft; diff --git a/TBF/MainWnd.cs b/TBF/MainWnd.cs index 57170dc30..1d0974a97 100644 --- a/TBF/MainWnd.cs +++ b/TBF/MainWnd.cs @@ -188,7 +188,7 @@ namespace TBF Localize(); TBF.LocalSettings ls = Program.LocalSettings; - WindowState = (ls.ManiWndMaximized ? FormWindowState.Maximized : FormWindowState.Normal); + WindowState = (ls.MainWndMaximized ? FormWindowState.Maximized : FormWindowState.Normal); //if (WindowState != FormWindowState.Normal) //{ // RestoreBounds = new Rectangle((ls.MainWndLeft != 0) ? ls.MainWndLeft : 75, @@ -648,7 +648,7 @@ namespace TBF ls.RightPaneHorizSplitterDistance = rightHorizSplitContainer.SplitterDistance; ls.TopPaneVerticalSplitterDistance = topVerticalSplitContainer.SplitterDistance; - ls.ManiWndMaximized = (WindowState == FormWindowState.Maximized); + ls.MainWndMaximized = (WindowState == FormWindowState.Maximized); if (WindowState == FormWindowState.Normal) { ls.MainWndLeft = Location.X; diff --git a/TBF/Properties/AssemblyInfo.cs b/TBF/Properties/AssemblyInfo.cs index bda08bae5..9d1878baa 100644 --- a/TBF/Properties/AssemblyInfo.cs +++ b/TBF/Properties/AssemblyInfo.cs @@ -29,5 +29,5 @@ using System.Runtime.InteropServices; // Build Number // Revision // -[assembly: AssemblyVersion("2.18.1176.0")] -[assembly: AssemblyFileVersion("2.18.1176.0")] +[assembly: AssemblyVersion("2.18.1182.0")] +[assembly: AssemblyFileVersion("2.18.1182.0")] diff --git a/TBF/Resources/Strings.Designer.cs b/TBF/Resources/Strings.Designer.cs index 127f94c3b..a61ff8a9a 100644 --- a/TBF/Resources/Strings.Designer.cs +++ b/TBF/Resources/Strings.Designer.cs @@ -1176,6 +1176,24 @@ namespace TBF.Resources { } } + /// + /// Looks up a localized string similar to Direction and pulses are OK. + /// + internal static string Direction_and_pulses_are_OK { + get { + return ResourceManager.GetString("Direction_and_pulses_are_OK", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Direction is NOK. + /// + internal static string Direction_is_NOK { + get { + return ResourceManager.GetString("Direction_is_NOK", resourceCulture); + } + } + /// /// Looks up a localized string similar to Diverter. /// @@ -5103,6 +5121,15 @@ namespace TBF.Resources { } } + /// + /// Looks up a localized string similar to There are no opto pulses. + /// + internal static string There_are_no_opto_pulses { + get { + return ResourceManager.GetString("There_are_no_opto_pulses", resourceCulture); + } + } + /// /// Looks up a localized string similar to T stop - mass msrmt. [s]. /// diff --git a/TBF/Resources/Strings.cs.resx b/TBF/Resources/Strings.cs.resx index b2686cd8a..9be14add0 100644 --- a/TBF/Resources/Strings.cs.resx +++ b/TBF/Resources/Strings.cs.resx @@ -1422,4 +1422,13 @@ Počet imp. etalonu + + Smer aj opto-impulzy sú OK + + + Zlý smer otočenia iPerlu + + + Chýbajú opto-impulzy + \ No newline at end of file diff --git a/TBF/Resources/Strings.resx b/TBF/Resources/Strings.resx index 05196f4ff..e3d91e547 100644 --- a/TBF/Resources/Strings.resx +++ b/TBF/Resources/Strings.resx @@ -1969,4 +1969,13 @@ Ref. pulses count + + Direction and pulses are OK + + + Direction is NOK + + + There are no opto pulses + \ No newline at end of file