From 05f72bc9f752e6b5f523ce11466a4816a121a38f Mon Sep 17 00:00:00 2001 From: Milan Hanajik Date: Mon, 4 May 2020 13:58:57 +0200 Subject: [PATCH] Conductivity is monitored. --- TBF/BenchControl/Events.cs | 1 + .../Modbus/WaterAnalyzer/Analyzer.cs | 32 +- .../WaterAnalyzer/ReadConductivityOp.cs | 16 +- .../Output/EventTriggers/Standard/Trigger.cs | 101 +++-- .../EventTriggers/Standard/TriggerCfg.cs | 400 ++++++++++-------- TBF/BenchControl/Sequences/ProcessData.cs | 5 + TBF/BenchControl/Sequences/SequenceBase.cs | 5 + .../iPerlCommunicationSeq.cs | 10 + TBF/BenchControl/Various/ErrorFlags/Errors.cs | 68 +-- .../Various/ErrorFlags/TestParams.cs | 155 ++++--- 10 files changed, 459 insertions(+), 334 deletions(-) diff --git a/TBF/BenchControl/Events.cs b/TBF/BenchControl/Events.cs index e05d4f63c..d7422cfbe 100644 --- a/TBF/BenchControl/Events.cs +++ b/TBF/BenchControl/Events.cs @@ -95,6 +95,7 @@ namespace TBF.BenchControl TempOutDone, TempDivDone, LevelDone, + ConductivityDone, VolumeDone, FlowMeasurementDone, FlowReached, diff --git a/TBF/BenchControl/Modbus/WaterAnalyzer/Analyzer.cs b/TBF/BenchControl/Modbus/WaterAnalyzer/Analyzer.cs index 609daf91b..5752ba7db 100644 --- a/TBF/BenchControl/Modbus/WaterAnalyzer/Analyzer.cs +++ b/TBF/BenchControl/Modbus/WaterAnalyzer/Analyzer.cs @@ -25,10 +25,10 @@ namespace TBF.BenchControl.Modbus.WaterAnalyzer /// /// Measured values when MsrmntState == MsrmntState.Valid /// - double conductivity; /// [???] - double temperature; /// [°C] + float conductivity; /// [uS/cm] electrical conductivity of water + double temperature; /// [°C] water temperature - public double Level { get { return conductivity; } } + public float Conductivity { get { return conductivity; } } /// Measurement time stamp when MsrmntState == MsrmntState.Valid int msrmntTimeStamp; @@ -57,7 +57,7 @@ namespace TBF.BenchControl.Modbus.WaterAnalyzer { if (myCfg.DebugLevel == DebugMode.Simulate) { - conductivity = 0.0; + conductivity = 0.0F; temperature = 0.0; msrmntTimeStamp = StateMachine.Time; @@ -71,10 +71,10 @@ namespace TBF.BenchControl.Modbus.WaterAnalyzer } - public double ReadLevel() { return conductivity; } /// Returns water level in mm - public double ReadTemperature() { return temperature; } /// Returns temperature in °C + public float ReadConductivity() { return conductivity; } /// Returns electrical conductivity of water in [uS/cm] + public double ReadTemperature() { return temperature; } /// Returns water temperature in [°C] - public ReadConductivityOp ReadLevelOp(ref DoubleBox level) { return new ReadConductivityOp(this, ref level); } + public ReadConductivityOp ReadConductivityOp(ref FloatBox conduct) { return new ReadConductivityOp(this, ref conduct); } public IOperation ReadTempOp(ref DoubleBox temperature) { return new ReadTempOp(this, ref temperature); } public IOperation ReadTempOp(ref DoubleBox temperature, Event eventDone) { return new ReadTempOp(this, ref temperature, eventDone); } @@ -98,14 +98,11 @@ namespace TBF.BenchControl.Modbus.WaterAnalyzer /// /// Telegram with values /// - byte[] conductBytes = new byte[] { telegram[4], telegram[3], telegram[6], telegram[5] }; - float _conductivity = System.BitConverter.ToSingle(conductBytes, 0); - string line = string.Format("conductivity = {0} uS/cm", _conductivity); - if (true) - { - conductivity = _conductivity; - } + byte[] conductBytes = new byte[] { telegram[4], telegram[3], telegram[6], telegram[5] }; + conductivity = System.BitConverter.ToSingle(conductBytes, 0); + UpdateProcessData(conductivity); + string line = string.Format("conductivity = {0} uS/cm", conductivity); log.Debug(line); Debug.WriteLine(line); } @@ -137,5 +134,10 @@ namespace TBF.BenchControl.Modbus.WaterAnalyzer public void RunDeviceAfter() { } public void StopDevice() { } public void StopDevice2() { } - } + + void UpdateProcessData(float conduct) + { + TBF.BenchControl.Sequences.ProcessData.Conductivity.Val = conduct; + } + } } diff --git a/TBF/BenchControl/Modbus/WaterAnalyzer/ReadConductivityOp.cs b/TBF/BenchControl/Modbus/WaterAnalyzer/ReadConductivityOp.cs index 6111c4b5d..384db3b6e 100644 --- a/TBF/BenchControl/Modbus/WaterAnalyzer/ReadConductivityOp.cs +++ b/TBF/BenchControl/Modbus/WaterAnalyzer/ReadConductivityOp.cs @@ -16,19 +16,19 @@ namespace TBF.BenchControl.Modbus.WaterAnalyzer readonly Analyzer analyzer; /// Measured value - DoubleBox conductivity; + FloatBox conductivity; /// [uS/cm] electrical conductivity of water /// /// Events: LevelDone or Error /// /// Water level meter reference - /// Reference to the measured level variable, value is in mm + /// Reference to the measured level variable, value is in mm /// Event to be returned by Run() when completed OK - public ReadConductivityOp(Analyzer analyzer, ref DoubleBox level) + public ReadConductivityOp(Analyzer analyzer, ref FloatBox conduct) { if (analyzer == null) throw new ArgumentNullException("analyzer"); this.analyzer = analyzer; - this.conductivity = level; + this.conductivity = conduct; log.Debug(this.ToString()); } @@ -37,17 +37,17 @@ namespace TBF.BenchControl.Modbus.WaterAnalyzer /// Start this operation public void Start() { - conductivity.Val = analyzer.ReadLevel(); + conductivity.Val = analyzer.ReadConductivity(); } /// Run this operation /// - /// Event.LevelDone + /// Event.ConductivityDone /// public Event Run() { - conductivity.Val = analyzer.ReadLevel(); - return Event.LevelDone; + conductivity.Val = analyzer.ReadConductivity(); + return Event.ConductivityDone; } /// Stop this operation diff --git a/TBF/BenchControl/Output/EventTriggers/Standard/Trigger.cs b/TBF/BenchControl/Output/EventTriggers/Standard/Trigger.cs index e187cfbb5..dfda07b4f 100644 --- a/TBF/BenchControl/Output/EventTriggers/Standard/Trigger.cs +++ b/TBF/BenchControl/Output/EventTriggers/Standard/Trigger.cs @@ -52,24 +52,29 @@ namespace TBF.BenchControl.Output.EventTriggers.Standard triggerCfg.EventSource = newCfg.EventSource; triggerCfg.FailedWMsPct = newCfg.FailedWMsPct; triggerCfg.Mid1Name = newCfg.Mid1Name; - triggerCfg.Mid1RelErr = newCfg.Mid1RelErr; + triggerCfg.Mid1ErrAfterCorr = newCfg.Mid1ErrAfterCorr; + triggerCfg.Mid1Err = newCfg.Mid1Err; triggerCfg.Mid2Name = newCfg.Mid2Name; - triggerCfg.Mid2RelErr = newCfg.Mid2RelErr; + triggerCfg.Mid2ErrAfterCorr = newCfg.Mid2ErrAfterCorr; + triggerCfg.Mid2Err = newCfg.Mid2Err; triggerCfg.Mid3Name = newCfg.Mid3Name; - triggerCfg.Mid3RelErr = newCfg.Mid3RelErr; + triggerCfg.Mid3ErrAfterCorr = newCfg.Mid3ErrAfterCorr; + triggerCfg.Mid3Err = newCfg.Mid3Err; triggerCfg.Mid4Name = newCfg.Mid4Name; - triggerCfg.Mid4RelErr = newCfg.Mid4RelErr; + triggerCfg.Mid4ErrAfterCorr = newCfg.Mid4ErrAfterCorr; + triggerCfg.Mid4Err = newCfg.Mid4Err; triggerCfg.Mid5Name = newCfg.Mid5Name; - triggerCfg.Mid5RelErr = newCfg.Mid5RelErr; - triggerCfg.E1 = newCfg.E1; - triggerCfg.E2 = newCfg.E2; - triggerCfg.E3 = newCfg.E3; - triggerCfg.E4 = newCfg.E4; - triggerCfg.E5 = newCfg.E5; - triggerCfg.E6 = newCfg.E6; - triggerCfg.E7 = newCfg.E7; - triggerCfg.E8 = newCfg.E8; - triggerCfg.E9 = newCfg.E9; + triggerCfg.Mid5ErrAfterCorr = newCfg.Mid5ErrAfterCorr; + triggerCfg.Mid5Err = newCfg.Mid5Err; + triggerCfg.E1 = newCfg.E1; + triggerCfg.E2 = newCfg.E2; + triggerCfg.E3 = newCfg.E3; + triggerCfg.E4 = newCfg.E4; + triggerCfg.E5 = newCfg.E5; + triggerCfg.E6 = newCfg.E6; + triggerCfg.E7 = newCfg.E7; + triggerCfg.E8 = newCfg.E8; + triggerCfg.E9 = newCfg.E9; triggerCfg.E10 = newCfg.E10; triggerCfg.E11 = newCfg.E11; triggerCfg.E12 = newCfg.E12; @@ -78,6 +83,7 @@ namespace TBF.BenchControl.Output.EventTriggers.Standard triggerCfg.E15 = newCfg.E15; triggerCfg.E16 = newCfg.E16; triggerCfg.E21 = newCfg.E21; + triggerCfg.E36 = newCfg.E36; #if TURA_IPERL || TURA_SPECIAL triggerCfg.E26 = newCfg.E26; triggerCfg.E27 = newCfg.E27; @@ -162,26 +168,48 @@ namespace TBF.BenchControl.Output.EventTriggers.Standard triggerCfg.Mid3Name, triggerCfg.Mid4Name, triggerCfg.Mid5Name }; - double[] maxMidRelErr = new double[] { triggerCfg.Mid1RelErr, - triggerCfg.Mid2RelErr, - triggerCfg.Mid3RelErr, - triggerCfg.Mid4RelErr, - triggerCfg.Mid5RelErr }; + + double[] maxMidErr = new double[] { triggerCfg.Mid1Err, + triggerCfg.Mid2Err, + triggerCfg.Mid3Err, + triggerCfg.Mid4Err, + triggerCfg.Mid5Err }; + + double[] maxMidErrAfterCorr = new double[] { triggerCfg.Mid1ErrAfterCorr, + triggerCfg.Mid2ErrAfterCorr, + triggerCfg.Mid3ErrAfterCorr, + triggerCfg.Mid4ErrAfterCorr, + triggerCfg.Mid5ErrAfterCorr }; for (int i = 0; i < midName.Length; i++) { if (!string.IsNullOrEmpty(midName[i])) { - /// MIDx enabled + /// This MID# enabled + foreach (var tr in batch.TestRslts) { - if (tr.RefFlowmeter() == midName[i] && tr.ErrorMaster >= maxMidRelErr[i]) + if (tr.RefFlowmeter() == midName[i]) { - TBF.UiBridge.Bridge.TriggerEvent(session, src, EventClass.EquipmentHW, Severity.Error, - string.Format("Príliš veľká relatívna chyba merača prietoku {0} oproti váhe", midName[i]), - string.Format("Číslo dávky: {0}\r\nPrietokomer: {1}\r\nRelatívna chyba: {2}%\r\nMax. dovolená chyba: {3}%", - batch.BatchNr, midName[i], Utils.DoubleToStr(tr.ErrorMaster, 3), maxMidRelErr[i]), - SubscriberGroup.Metrology | SubscriberGroup.Maintenance | SubscriberGroup.Production); - break; /// For each MID just one event is triggered + /// This test result was obtained using MID# + + double midErrAfterCorr = Config.Formulas.ErrorFromVolumes(tr.ConstMasterCorr, tr.ConstMaster); + if (midErrAfterCorr >= maxMidErrAfterCorr[i]) + { + TBF.UiBridge.Bridge.TriggerEvent(session, src, EventClass.EquipmentHW, Severity.Error, + string.Format("Príliš veľká chyba merača prietoku {0} po KOREKCII oproti váhe", midName[i]), + string.Format("Číslo dávky: {0}\r\nPrietokomer: {1}\r\nRelatívna chyba po korekcii: {2}%\r\nMax. dovolená chyba: {3}%", + batch.BatchNr, midName[i], Utils.DoubleToStr(midErrAfterCorr, 3), maxMidErrAfterCorr[i]), + SubscriberGroup.Metrology | SubscriberGroup.Maintenance | SubscriberGroup.Production); + } + + if (tr.ErrorMaster >= maxMidErr[i]) + { + TBF.UiBridge.Bridge.TriggerEvent(session, src, EventClass.EquipmentHW, Severity.Error, + string.Format("Príliš veľká chyba merača prietoku {0} oproti váhe", midName[i]), + string.Format("Číslo dávky: {0}\r\nPrietokomer: {1}\r\nRelatívna chyba: {2}%\r\nMax. dovolená chyba: {3}%", + batch.BatchNr, midName[i], Utils.DoubleToStr(tr.ErrorMaster, 3), maxMidErr[i]), + SubscriberGroup.Metrology | SubscriberGroup.Maintenance | SubscriberGroup.Production); + } } } } @@ -193,15 +221,15 @@ namespace TBF.BenchControl.Output.EventTriggers.Standard long eFlags = batch.ErrorFlags(); long iFlags = batch.InfoFlags(); /// - if (triggerCfg.E1) OnExTriggerEvent(session, eFlags, iFlags, 1); - if (triggerCfg.E2) OnExTriggerEvent(session, eFlags, iFlags, 2); - if (triggerCfg.E3) OnExTriggerEvent(session, eFlags, iFlags, 3); - if (triggerCfg.E4) OnExTriggerEvent(session, eFlags, iFlags, 4); - if (triggerCfg.E5) OnExTriggerEvent(session, eFlags, iFlags, 5); - if (triggerCfg.E6) OnExTriggerEvent(session, eFlags, iFlags, 6); - if (triggerCfg.E7) OnExTriggerEvent(session, eFlags, iFlags, 7); - if (triggerCfg.E8) OnExTriggerEvent(session, eFlags, iFlags, 8); - if (triggerCfg.E9) OnExTriggerEvent(session, eFlags, iFlags, 9); + if (triggerCfg.E1) OnExTriggerEvent(session, eFlags, iFlags, 1); + if (triggerCfg.E2) OnExTriggerEvent(session, eFlags, iFlags, 2); + if (triggerCfg.E3) OnExTriggerEvent(session, eFlags, iFlags, 3); + if (triggerCfg.E4) OnExTriggerEvent(session, eFlags, iFlags, 4); + if (triggerCfg.E5) OnExTriggerEvent(session, eFlags, iFlags, 5); + if (triggerCfg.E6) OnExTriggerEvent(session, eFlags, iFlags, 6); + if (triggerCfg.E7) OnExTriggerEvent(session, eFlags, iFlags, 7); + if (triggerCfg.E8) OnExTriggerEvent(session, eFlags, iFlags, 8); + if (triggerCfg.E9) OnExTriggerEvent(session, eFlags, iFlags, 9); if (triggerCfg.E10) OnExTriggerEvent(session, eFlags, iFlags, 10); if (triggerCfg.E11) OnExTriggerEvent(session, eFlags, iFlags, 11); if (triggerCfg.E12) OnExTriggerEvent(session, eFlags, iFlags, 12); @@ -210,6 +238,7 @@ namespace TBF.BenchControl.Output.EventTriggers.Standard if (triggerCfg.E15) OnExTriggerEvent(session, eFlags, iFlags, 15); if (triggerCfg.E16) OnExTriggerEvent(session, eFlags, iFlags, 16); if (triggerCfg.E21) OnExTriggerEvent(session, eFlags, iFlags, 21); + if (triggerCfg.E36) OnExTriggerEvent(session, eFlags, iFlags, 36); #if TURA_IPERL || TURA_SPECIAL if (triggerCfg.E26) OnExTriggerEvent(session, eFlags, iFlags, 26); if (triggerCfg.E27) OnExTriggerEvent(session, eFlags, iFlags, 27); diff --git a/TBF/BenchControl/Output/EventTriggers/Standard/TriggerCfg.cs b/TBF/BenchControl/Output/EventTriggers/Standard/TriggerCfg.cs index ab54d2bf1..aa836be68 100644 --- a/TBF/BenchControl/Output/EventTriggers/Standard/TriggerCfg.cs +++ b/TBF/BenchControl/Output/EventTriggers/Standard/TriggerCfg.cs @@ -24,17 +24,22 @@ namespace TBF.BenchControl.Output.EventTriggers.Standard /// Serialized parameters /// public string EventSource; - public int FailedWMsPct; /// 0 = off, 1..100% event is triggered when percentage reaches this level + public int FailedWMsPct; /// 0 = off, 1..100% event is triggered when percentage reaches this level public string Mid1Name; - public double Mid1RelErr; /// [%] Event is triggered when relative error of reference flowmeter against a scale reaches this level - public string Mid2Name; - public double Mid2RelErr; /// [%] Event is triggered when relative error of reference flowmeter against a scale reaches this level - public string Mid3Name; - public double Mid3RelErr; /// [%] Event is triggered when relative error of reference flowmeter against a scale reaches this level - public string Mid4Name; - public double Mid4RelErr; /// [%] Event is triggered when relative error of reference flowmeter against a scale reaches this level - public string Mid5Name; - public double Mid5RelErr; /// [%] Event is triggered when relative error of reference flowmeter against a scale reaches this level + public double Mid1ErrAfterCorr; /// [%] Event triggered when rel. error of MID1 against a scale after a correction reached this level + public double Mid1Err; /// [%] Event triggered when rel. error of MID1 against a scale reached this level + public string Mid2Name; + public double Mid2ErrAfterCorr; /// [%] Event triggered when rel. error of MID2 against a scale after a correction reached this level + public double Mid2Err; /// [%] Event triggered when rel. error of MID2 against a scale reached this level + public string Mid3Name; + public double Mid3ErrAfterCorr; /// [%] Event triggered when rel. error of MID3 against a scale after a correction reached this level + public double Mid3Err; /// [%] Event triggered when rel. error of MID3 against a scale reached this level + public string Mid4Name; + public double Mid4ErrAfterCorr; /// [%] Event triggered when rel. error of MID4 against a scale after a correction reached this level + public double Mid4Err; /// [%] Event triggered when rel. error of MID4 against a scale reached this level + public string Mid5Name; + public double Mid5ErrAfterCorr; /// [%] Event triggered when rel. error of MID5 against a scale after a correction reached this level + public double Mid5Err; /// [%] Event triggered when rel. error of MID5 against a scale reached this level public bool E1; public bool E2; public bool E3; @@ -52,13 +57,14 @@ namespace TBF.BenchControl.Output.EventTriggers.Standard public bool E15; public bool E16; public bool E21; + public bool E36; #if TURA_IPERL || TURA_SPECIAL public bool E26; public bool E27; public bool E28; #endif - /// Private parameterless constructor invoked by all other (public) constructors + /// Private parameterless constructor invoked by all other (public) constructors TriggerCfg() {} public TriggerCfg(string name, IComponentFactory factory) @@ -74,77 +80,89 @@ namespace TBF.BenchControl.Output.EventTriggers.Standard public void InitializeAll() { - EventSource = "Results"; /// 0 - FailedWMsPct = 20; /// 1 - Mid1Name = "I1"; /// 2 - Mid1RelErr = 0.5; /// 3 - Mid2Name = "I2"; /// 4 - Mid2RelErr = 0.5; /// 5 - Mid3Name = "I3"; /// 6 - Mid3RelErr = 0.5; /// 7 - Mid4Name = ""; /// 8 - Mid4RelErr = 0.5; /// 9 - Mid5Name = ""; /// 10 - Mid5RelErr = 0.5; /// 11 - E1 = false; /// 12 - E2 = false; /// 13 - E3 = false; /// 14 - E4 = false; /// 15 - E5 = false; /// 16 - E6 = false; /// 17 - E7 = false; /// 18 - E8 = false; /// 19 - E9 = false; /// 20 - E10 = false; /// 21 - E11 = false; /// 22 - E12 = false; /// 23 - E13 = false; /// 24 - E14 = false; /// 25 - E15 = false; /// 26 - E16 = false; /// 27 - E21 = false; /// 28 + EventSource = "Results"; /// 0 + FailedWMsPct = 20; /// 1 + Mid1Name = "I1"; /// 2 + Mid1ErrAfterCorr = 0.3; /// 3 + Mid1Err = 0.6; /// 4 + Mid2Name = "I2"; /// 5 + Mid2ErrAfterCorr = 0.3; /// 6 + Mid2Err = 0.6; /// 7 + Mid3Name = "I3"; /// 8 + Mid3ErrAfterCorr = 0.3; /// 9 + Mid3Err = 0.6; /// 10 + Mid4Name = ""; /// 11 + Mid4ErrAfterCorr = 0.3; /// 12 + Mid4Err = 0.6; /// 13 + Mid5Name = ""; /// 14 + Mid5ErrAfterCorr = 0.3; /// 15 + Mid5Err = 0.6; /// 16 + E1 = false; /// 17 + E2 = false; /// 18 + E3 = false; /// 19 + E4 = false; /// 20 + E5 = false; /// 21 + E6 = false; /// 22 + E7 = false; /// 23 + E8 = false; /// 24 + E9 = false; /// 25 + E10 = false; /// 26 + E11 = false; /// 27 + E12 = false; /// 28 + E13 = false; /// 29 + E14 = false; /// 30 + E15 = false; /// 31 + E16 = false; /// 32 + E21 = false; /// 33 + E36 = true; /// 34 #if TURA_IPERL || TURA_SPECIAL - E26 = false; /// 29 - E27 = false; /// 30 - E28 = false; /// 31 + E26 = false; /// 35 + E27 = false; /// 36 + E28 = false; /// 37 #endif } string[] paramNames = new string[] { - "Event source", /// 0 - "Percentage of failed meters", /// 1 - "MID 1 name", /// 2 - "MID 1 rel. error", /// 3 - "MID 2 name", /// 4 - "MID 2 rel. error", /// 5 - "MID 3 name", /// 6 - "MID 3 rel. error", /// 7 - "MID 4 name", /// 8 - "MID 4 rel. error", /// 9 - "MID 5 name", /// 10 - "MID 5 rel. error", /// 11 - "E1", /// 12 - "E2", /// 13 - "E3", /// 14 - "E4", /// 15 - "E5", /// 16 - "E6", /// 17 - "E7", /// 18 - "E8", /// 19 - "E9", /// 20 - "E10", /// 21 - "E11", /// 22 - "E12", /// 23 - "E13", /// 24 - "E14", /// 25 - "E15", /// 26 - "E16", /// 27 - "E21", /// 28 + "Event source", /// 0 + "Percentage of failed meters", /// 1 + "MID 1 name", /// 2 + "MID 1 rel.err.after corr.", /// 3 + "MID 1 rel.error", /// 4 + "MID 2 name", /// 5 + "MID 2 rel.err.after corr.", /// 6 + "MID 2 rel.error", /// 7 + "MID 3 name", /// 8 + "MID 3 rel.err.after corr.", /// 9 + "MID 3 rel.error", /// 10 + "MID 4 name", /// 11 + "MID 4 rel.err.after corr.", /// 12 + "MID 4 rel.error", /// 13 + "MID 5 name", /// 14 + "MID 5 rel.err.after corr.", /// 15 + "MID 5 rel.error", /// 16 + "E1", /// 17 + "E2", /// 18 + "E3", /// 19 + "E4", /// 20 + "E5", /// 21 + "E6", /// 22 + "E7", /// 23 + "E8", /// 24 + "E9", /// 25 + "E10", /// 26 + "E11", /// 27 + "E12", /// 28 + "E13", /// 29 + "E14", /// 30 + "E15", /// 31 + "E16", /// 32 + "E21", /// 33 + "E36", /// 34 #if TURA_IPERL || TURA_SPECIAL - "E26", /// 29 - "E27", /// 30 - "E28", /// 31 + "E26", /// 35 + "E27", /// 36 + "E28", /// 37 #endif }; public string ParamName(int i) { return paramNames[i]; } @@ -173,36 +191,42 @@ namespace TBF.BenchControl.Output.EventTriggers.Standard case 0: return EventSource; case 1: return FailedWMsPct.ToString(); case 2: return Mid1Name; - case 3: return Mid1RelErr.ToString(); - case 4: return Mid2Name; - case 5: return Mid2RelErr.ToString(); - case 6: return Mid3Name; - case 7: return Mid3RelErr.ToString(); - case 8: return Mid4Name; - case 9: return Mid4RelErr.ToString(); - case 10: return Mid5Name; - case 11: return Mid5RelErr.ToString(); - case 12: return E1 ? Strings.yes : Strings.no; - case 13: return E2 ? Strings.yes : Strings.no; - case 14: return E3 ? Strings.yes : Strings.no; - case 15: return E4 ? Strings.yes : Strings.no; - case 16: return E5 ? Strings.yes : Strings.no; - case 17: return E6 ? Strings.yes : Strings.no; - case 18: return E7 ? Strings.yes : Strings.no; - case 19: return E8 ? Strings.yes : Strings.no; - case 20: return E9 ? Strings.yes : Strings.no; - case 21: return E10 ? Strings.yes : Strings.no; - case 22: return E11 ? Strings.yes : Strings.no; - case 23: return E12 ? Strings.yes : Strings.no; - case 24: return E13 ? Strings.yes : Strings.no; - case 25: return E14 ? Strings.yes : Strings.no; - case 26: return E15 ? Strings.yes : Strings.no; - case 27: return E16 ? Strings.yes : Strings.no; - case 28: return E21 ? Strings.yes : Strings.no; + case 3: return Mid1ErrAfterCorr.ToString(); + case 4: return Mid1Err.ToString(); + case 5: return Mid2Name; + case 6: return Mid2ErrAfterCorr.ToString(); + case 7: return Mid2Err.ToString(); + case 8: return Mid3Name; + case 9: return Mid3ErrAfterCorr.ToString(); + case 10: return Mid3Err.ToString(); + case 11: return Mid4Name; + case 12: return Mid4ErrAfterCorr.ToString(); + case 13: return Mid4Err.ToString(); + case 14: return Mid5Name; + case 15: return Mid5ErrAfterCorr.ToString(); + case 16: return Mid5Err.ToString(); + case 17: return E1 ? Strings.yes : Strings.no; + case 18: return E2 ? Strings.yes : Strings.no; + case 19: return E3 ? Strings.yes : Strings.no; + case 20: return E4 ? Strings.yes : Strings.no; + case 21: return E5 ? Strings.yes : Strings.no; + case 22: return E6 ? Strings.yes : Strings.no; + case 23: return E7 ? Strings.yes : Strings.no; + case 24: return E8 ? Strings.yes : Strings.no; + case 25: return E9 ? Strings.yes : Strings.no; + case 26: return E10 ? Strings.yes : Strings.no; + case 27: return E11 ? Strings.yes : Strings.no; + case 28: return E12 ? Strings.yes : Strings.no; + case 29: return E13 ? Strings.yes : Strings.no; + case 30: return E14 ? Strings.yes : Strings.no; + case 31: return E15 ? Strings.yes : Strings.no; + case 32: return E16 ? Strings.yes : Strings.no; + case 33: return E21 ? Strings.yes : Strings.no; + case 34: return E36 ? Strings.yes : Strings.no; #if TURA_IPERL || TURA_SPECIAL - case 29: return E26 ? Strings.yes : Strings.no; - case 30: return E27 ? Strings.yes : Strings.no; - case 31: return E28 ? Strings.yes : Strings.no; + case 35: return E26 ? Strings.yes : Strings.no; + case 36: return E27 ? Strings.yes : Strings.no; + case 37: return E28 ? Strings.yes : Strings.no; #endif default: return string.Empty; } @@ -212,39 +236,45 @@ namespace TBF.BenchControl.Output.EventTriggers.Standard { switch (i) { - case 0: EventSource = strValue; return CfgUpdateFlags.AnyChange; - case 1: FailedWMsPct = int.Parse(strValue); return CfgUpdateFlags.AnyChange; - case 2: Mid1Name = strValue; return CfgUpdateFlags.AnyChange; - case 3: Mid1RelErr = Utils.ParseUDouble(strValue); return CfgUpdateFlags.AnyChange; - case 4: Mid2Name = strValue; return CfgUpdateFlags.AnyChange; - case 5: Mid2RelErr = Utils.ParseUDouble(strValue); return CfgUpdateFlags.AnyChange; - case 6: Mid3Name = strValue; return CfgUpdateFlags.AnyChange; - case 7: Mid3RelErr = Utils.ParseUDouble(strValue); return CfgUpdateFlags.AnyChange; - case 8: Mid4Name = strValue; return CfgUpdateFlags.AnyChange; - case 9: Mid4RelErr = Utils.ParseUDouble(strValue); return CfgUpdateFlags.AnyChange; - case 10: Mid5Name = strValue; return CfgUpdateFlags.AnyChange; - case 11: Mid5RelErr = Utils.ParseUDouble(strValue); return CfgUpdateFlags.AnyChange; - case 12: E1 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; - case 13: E2 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; - case 14: E3 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; - case 15: E4 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; - case 16: E5 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; - case 17: E6 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; - case 18: E7 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; - case 19: E8 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; - case 20: E9 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; - case 21: E10 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; - case 22: E11 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; - case 23: E12 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; - case 24: E12 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; - case 25: E14 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; - case 26: E15 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; - case 27: E16 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; - case 28: E21 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; + case 0: EventSource = strValue; return CfgUpdateFlags.AnyChange; + case 1: FailedWMsPct = int.Parse(strValue); return CfgUpdateFlags.AnyChange; + case 2: Mid1Name = strValue; return CfgUpdateFlags.AnyChange; + case 3: Mid1ErrAfterCorr = Utils.ParseUDouble(strValue); return CfgUpdateFlags.AnyChange; + case 4: Mid1Err = Utils.ParseUDouble(strValue); return CfgUpdateFlags.AnyChange; + case 5: Mid2Name = strValue; return CfgUpdateFlags.AnyChange; + case 6: Mid2ErrAfterCorr = Utils.ParseUDouble(strValue); return CfgUpdateFlags.AnyChange; + case 7: Mid2Err = Utils.ParseUDouble(strValue); return CfgUpdateFlags.AnyChange; + case 8: Mid3Name = strValue; return CfgUpdateFlags.AnyChange; + case 9: Mid3ErrAfterCorr = Utils.ParseUDouble(strValue); return CfgUpdateFlags.AnyChange; + case 10: Mid3Err = Utils.ParseUDouble(strValue); return CfgUpdateFlags.AnyChange; + case 11: Mid4Name = strValue; return CfgUpdateFlags.AnyChange; + case 12: Mid4ErrAfterCorr = Utils.ParseUDouble(strValue); return CfgUpdateFlags.AnyChange; + case 13: Mid4Err = Utils.ParseUDouble(strValue); return CfgUpdateFlags.AnyChange; + case 14: Mid5Name = strValue; return CfgUpdateFlags.AnyChange; + case 15: Mid5ErrAfterCorr = Utils.ParseUDouble(strValue); return CfgUpdateFlags.AnyChange; + case 16: Mid5Err = Utils.ParseUDouble(strValue); return CfgUpdateFlags.AnyChange; + case 17: E1 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; + case 18: E2 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; + case 19: E3 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; + case 20: E4 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; + case 21: E5 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; + case 22: E6 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; + case 23: E7 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; + case 24: E8 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; + case 25: E9 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; + case 26: E10 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; + case 27: E11 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; + case 28: E12 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; + case 29: E12 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; + case 30: E14 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; + case 31: E15 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; + case 32: E16 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; + case 33: E21 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; + case 34: E36 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; #if TURA_IPERL || TURA_SPECIAL - case 29: E26 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; - case 30: E27 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; - case 31: E28 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; + case 35: E26 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; + case 36: E27 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; + case 37: E28 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; #endif default: return CfgUpdateFlags.None; } @@ -267,28 +297,28 @@ namespace TBF.BenchControl.Output.EventTriggers.Standard { case 0: case 2: - case 4: - case 6: + case 5: case 8: - case 10: + case 11: + case 14: return true; case 1: if (int.TryParse(strValue, out percentage) && (0 <= percentage) && (percentage <= 100)) return true; message = "Percentage of failed meters is invalid, should be 1..100, 0 = off"; return false; case 3: - case 5: + case 4: + case 6: case 7: case 9: - case 11: + case 10: + case 12: + case 13: + case 15: + case 16: if (Utils.TryParseUDouble(strValue, out relError)) return true; message = "relative error of MID is invalid or less then 0"; return false; - case 12: - case 13: - case 14: - case 15: - case 16: case 17: case 18: case 19: @@ -301,10 +331,16 @@ namespace TBF.BenchControl.Output.EventTriggers.Standard case 26: case 27: case 28: -#if TURA_IPERL || TURA_SPECIAL case 29: case 30: case 31: + case 32: + case 33: + case 34: +#if TURA_IPERL || TURA_SPECIAL + case 35: + case 36: + case 37: #endif if (strValue == Strings.yes || strValue == Strings.no) return true; break; @@ -320,39 +356,45 @@ namespace TBF.BenchControl.Output.EventTriggers.Standard void CopyContentTo(TriggerCfg prms) { - prms.EventSource = this.EventSource; /// 0 - prms.FailedWMsPct = this.FailedWMsPct; /// 1 - prms.Mid1Name = this.Mid1Name; /// 2 - prms.Mid1RelErr = this.Mid1RelErr; /// 3 - prms.Mid2Name = this.Mid2Name; /// 4 - prms.Mid2RelErr = this.Mid2RelErr; /// 5 - prms.Mid3Name = this.Mid3Name; /// 6 - prms.Mid3RelErr = this.Mid3RelErr; /// 7 - prms.Mid4Name = this.Mid4Name; /// 8 - prms.Mid4RelErr = this.Mid4RelErr; /// 9 - prms.Mid5Name = this.Mid5Name; /// 10 - prms.Mid5RelErr = this.Mid5RelErr; /// 11 - prms.E1 = this.E1; /// 12 - prms.E2 = this.E2; /// 13 - prms.E3 = this.E3; /// 14 - prms.E4 = this.E4; /// 15 - prms.E5 = this.E5; /// 16 - prms.E6 = this.E6; /// 17 - prms.E7 = this.E7; /// 18 - prms.E8 = this.E8; /// 19 - prms.E9 = this.E9; /// 20 - prms.E10 = this.E10; /// 21 - prms.E11 = this.E11; /// 22 - prms.E12 = this.E12; /// 23 - prms.E13 = this.E13; /// 24 - prms.E14 = this.E14; /// 25 - prms.E15 = this.E15; /// 26 - prms.E16 = this.E16; /// 27 - prms.E21 = this.E21; /// 28 + prms.EventSource = this.EventSource; /// 0 + prms.FailedWMsPct = this.FailedWMsPct; /// 1 + prms.Mid1Name = this.Mid1Name; /// 2 + prms.Mid1ErrAfterCorr = this.Mid1ErrAfterCorr; /// 3 + prms.Mid1Err = this.Mid1Err; /// 4 + prms.Mid2Name = this.Mid2Name; /// 5 + prms.Mid2ErrAfterCorr = this.Mid2ErrAfterCorr; /// 6 + prms.Mid2Err = this.Mid2Err; /// 7 + prms.Mid3Name = this.Mid3Name; /// 8 + prms.Mid3ErrAfterCorr = this.Mid3ErrAfterCorr; /// 9 + prms.Mid3Err = this.Mid3Err; /// 10 + prms.Mid4Name = this.Mid4Name; /// 11 + prms.Mid4ErrAfterCorr = this.Mid4ErrAfterCorr; /// 12 + prms.Mid4Err = this.Mid4Err; /// 13 + prms.Mid5Name = this.Mid5Name; /// 14 + prms.Mid5ErrAfterCorr = this.Mid5ErrAfterCorr; /// 15 + prms.Mid5Err = this.Mid5Err; /// 16 + prms.E1 = this.E1; /// 17 + prms.E2 = this.E2; /// 18 + prms.E3 = this.E3; /// 19 + prms.E4 = this.E4; /// 20 + prms.E5 = this.E5; /// 21 + prms.E6 = this.E6; /// 22 + prms.E7 = this.E7; /// 23 + prms.E8 = this.E8; /// 24 + prms.E9 = this.E9; /// 25 + prms.E10 = this.E10; /// 26 + prms.E11 = this.E11; /// 27 + prms.E12 = this.E12; /// 28 + prms.E13 = this.E13; /// 29 + prms.E14 = this.E14; /// 30 + prms.E15 = this.E15; /// 31 + prms.E16 = this.E16; /// 32 + prms.E21 = this.E21; /// 33 + prms.E36 = this.E36; /// 34 #if TURA_IPERL || TURA_SPECIAL - prms.E26 = this.E26; /// 29 - prms.E27 = this.E27; /// 30 - prms.E28 = this.E28; /// 31 + prms.E26 = this.E26; /// 35 + prms.E27 = this.E27; /// 36 + prms.E28 = this.E28; /// 37 #endif } diff --git a/TBF/BenchControl/Sequences/ProcessData.cs b/TBF/BenchControl/Sequences/ProcessData.cs index fecff9295..8cb396496 100644 --- a/TBF/BenchControl/Sequences/ProcessData.cs +++ b/TBF/BenchControl/Sequences/ProcessData.cs @@ -181,6 +181,7 @@ namespace TBF.BenchControl.Sequences public static FloatBox PressUp = new FloatBox() { Name = "Pressure Up", Format = "F2" }; /// [bar] public static FloatBox PressDown = new FloatBox() { Name = "Pressure Dn", Format = "F2" }; /// [bar] public static FloatBox PressDelta = new FloatBox() { Name = "Pressure Delta", Format = "F2" }; /// [bar] + public static FloatBox Conductivity = new FloatBox() { Name = "Conductivity", Format = "F0" }; /// [uS/cm] public static double LtrPerRefPulse; /// to calculate the ref.volume public static int RefPulses; @@ -238,6 +239,7 @@ namespace TBF.BenchControl.Sequences public static Statistics PressUpStat = new Statistics(3, 4, true, new Plotter("Pressure up")); public static Statistics PressDownStat = new Statistics(3, 4, true, new Plotter("Pressure down")); public static Statistics PressDeltaStat = new Statistics(3, 4, true); + public static Statistics ConductStat = new Statistics(0, 4, true, new Plotter("Conductivity")); public static Statistics RefFlowStat = new Statistics(5, 7, true, new Plotter("Flow")); public static Statistics TempRefHiStat = new Statistics(); @@ -268,6 +270,7 @@ namespace TBF.BenchControl.Sequences PressUpStat.Start (batchNr, testName, repetition, skippedSamplesCount); PressDownStat.Start (batchNr, testName, repetition, skippedSamplesCount); PressDeltaStat.Start(batchNr, testName, repetition, skippedSamplesCount); + ConductStat.Start (batchNr, testName, repetition, skippedSamplesCount); RefFlowStat.Start (batchNr, testName, repetition, skippedSamplesCount); TempRefHiStat.Start (batchNr, testName, repetition); @@ -292,6 +295,7 @@ namespace TBF.BenchControl.Sequences PressUpStat.Update(PressUp); PressDownStat.Update(PressDown); PressDeltaStat.Update(PressDelta); + ConductStat.Update(Conductivity); RefFlowStat.Update(RefFlow); if (BatchRslts.Batch.HeatMeter) @@ -316,6 +320,7 @@ namespace TBF.BenchControl.Sequences PressUpStat.Stop(); PressDownStat.Stop(); PressDeltaStat.Stop(); + ConductStat.Stop(); RefFlowStat.Stop(); TempRefHiStat.Stop(); diff --git a/TBF/BenchControl/Sequences/SequenceBase.cs b/TBF/BenchControl/Sequences/SequenceBase.cs index 7089a8be6..bf64c089e 100644 --- a/TBF/BenchControl/Sequences/SequenceBase.cs +++ b/TBF/BenchControl/Sequences/SequenceBase.cs @@ -1145,6 +1145,11 @@ namespace TBF.BenchControl.Sequences tstRslt.PressDeltaEnd = (float)PressDeltaStat.Last; tstRslt.PressDeltaMin = (float)PressDeltaStat.Min; tstRslt.PressDeltaMax = (float)PressDeltaStat.Max; + tstRslt.ConductMean = (float)ConductStat.Average; + tstRslt.ConductStart = (float)ConductStat.First; + tstRslt.ConductEnd = (float)ConductStat.Last; + tstRslt.ConductMin = (float)ConductStat.Min; + tstRslt.ConductMax = (float)ConductStat.Max; tstRslt.TempUpMean = (float)TempUpStat.Average; tstRslt.TempUpStart = (float)TempUpStat.First; tstRslt.TempUpEnd = (float)TempUpStat.Last; diff --git a/TBF/BenchControl/TestMethods/iPerlCommunication/iPerlCommunicationSeq.cs b/TBF/BenchControl/TestMethods/iPerlCommunication/iPerlCommunicationSeq.cs index 944c5bb52..4885bea33 100644 --- a/TBF/BenchControl/TestMethods/iPerlCommunication/iPerlCommunicationSeq.cs +++ b/TBF/BenchControl/TestMethods/iPerlCommunication/iPerlCommunicationSeq.cs @@ -493,6 +493,11 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication tstRslt.PressDeltaEnd = oriTestRslt.PressDeltaEnd; tstRslt.PressDeltaMin = oriTestRslt.PressDeltaMin; tstRslt.PressDeltaMax = oriTestRslt.PressDeltaMax; + tstRslt.ConductMean = oriTestRslt.ConductMean; + tstRslt.ConductStart = oriTestRslt.ConductStart; + tstRslt.ConductEnd = oriTestRslt.ConductEnd; + tstRslt.ConductMin = oriTestRslt.ConductMin; + tstRslt.ConductMax = oriTestRslt.ConductMax; tstRslt.TempUpMean = oriTestRslt.TempUpMean; tstRslt.TempUpStart = oriTestRslt.TempUpStart; tstRslt.TempUpEnd = oriTestRslt.TempUpEnd; @@ -638,6 +643,11 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication tstRslt.PressDeltaEnd = testRsltQ2ac.PressDeltaEnd; tstRslt.PressDeltaMin = testRsltQ2ac.PressDeltaMin; tstRslt.PressDeltaMax = testRsltQ2ac.PressDeltaMax; + tstRslt.ConductMean = testRsltQ2ac.ConductMean; + tstRslt.ConductStart = testRsltQ2ac.ConductStart; + tstRslt.ConductEnd = testRsltQ2ac.ConductEnd; + tstRslt.ConductMin = testRsltQ2ac.ConductMin; + tstRslt.ConductMax = testRsltQ2ac.ConductMax; tstRslt.TempUpMean = testRsltQ2ac.TempUpMean; tstRslt.TempUpStart = testRsltQ2ac.TempUpStart; tstRslt.TempUpEnd = testRsltQ2ac.TempUpEnd; diff --git a/TBF/BenchControl/Various/ErrorFlags/Errors.cs b/TBF/BenchControl/Various/ErrorFlags/Errors.cs index d58d241a3..b31f6e71c 100644 --- a/TBF/BenchControl/Various/ErrorFlags/Errors.cs +++ b/TBF/BenchControl/Various/ErrorFlags/Errors.cs @@ -1,5 +1,5 @@ /// -/// Copyright (c) 2017-2019 Sensus Slovensko a.s. +/// Copyright (c) 2017-2020 Sensus Slovensko a.s. /// using System; using System.Collections.Generic; @@ -97,43 +97,49 @@ namespace TBF.BenchControl.Various.ErrorFlags bool E21 = ProcessData.RefFlowStat.Min < testRslt.Qfrom() || ProcessData.RefFlowStat.Max > testRslt.Qto(); + /// Electrical conductivity of water + bool E36 = ProcessData.ConductStat.Min < errorsCfg.TestParams.Conductivity_min + || ProcessData.ConductStat.Max > errorsCfg.TestParams.Conductivity_max; + long errorFlags = 0; sbyte on = (sbyte)ErrorFlagsMode.On; - if (E1 && (errorsCfg.TestParams.E1 == on)) errorFlags |= (int)ErrorFlagMask.E1; - if (E2 && (errorsCfg.TestParams.E2 == on)) errorFlags |= (int)ErrorFlagMask.E2; - if (E3 && (errorsCfg.TestParams.E3 == on)) errorFlags |= (int)ErrorFlagMask.E3; - if (E4 && (errorsCfg.TestParams.E4 == on)) errorFlags |= (int)ErrorFlagMask.E4; - if (E5 && (errorsCfg.TestParams.E5 == on)) errorFlags |= (int)ErrorFlagMask.E5; - if (E6 && (errorsCfg.TestParams.E6 == on)) errorFlags |= (int)ErrorFlagMask.E6; - if (E7 && (errorsCfg.TestParams.E7 == on)) errorFlags |= (int)ErrorFlagMask.E7; - if (E8 && (errorsCfg.TestParams.E8 == on)) errorFlags |= (int)ErrorFlagMask.E8; - if (E9 && (errorsCfg.TestParams.E9 == on)) errorFlags |= (int)ErrorFlagMask.E9; - if (E10 && (errorsCfg.TestParams.E10 == on)) errorFlags |= (int)ErrorFlagMask.E10; - if (E11 && (errorsCfg.TestParams.E11 == on)) errorFlags |= (int)ErrorFlagMask.E11; - if (E12 && (errorsCfg.TestParams.E12 == on)) errorFlags |= (int)ErrorFlagMask.E12; - if (E13 && (errorsCfg.TestParams.E13 == on)) errorFlags |= (int)ErrorFlagMask.E13; - if (E14 && (errorsCfg.TestParams.E14 == on)) errorFlags |= (int)ErrorFlagMask.E14; + if (E1 && (errorsCfg.TestParams.E1 == on)) errorFlags |= (long)ErrorFlagMask.E1; + if (E2 && (errorsCfg.TestParams.E2 == on)) errorFlags |= (long)ErrorFlagMask.E2; + if (E3 && (errorsCfg.TestParams.E3 == on)) errorFlags |= (long)ErrorFlagMask.E3; + if (E4 && (errorsCfg.TestParams.E4 == on)) errorFlags |= (long)ErrorFlagMask.E4; + if (E5 && (errorsCfg.TestParams.E5 == on)) errorFlags |= (long)ErrorFlagMask.E5; + if (E6 && (errorsCfg.TestParams.E6 == on)) errorFlags |= (long)ErrorFlagMask.E6; + if (E7 && (errorsCfg.TestParams.E7 == on)) errorFlags |= (long)ErrorFlagMask.E7; + if (E8 && (errorsCfg.TestParams.E8 == on)) errorFlags |= (long)ErrorFlagMask.E8; + if (E9 && (errorsCfg.TestParams.E9 == on)) errorFlags |= (long)ErrorFlagMask.E9; + if (E10 && (errorsCfg.TestParams.E10 == on)) errorFlags |= (long)ErrorFlagMask.E10; + if (E11 && (errorsCfg.TestParams.E11 == on)) errorFlags |= (long)ErrorFlagMask.E11; + if (E12 && (errorsCfg.TestParams.E12 == on)) errorFlags |= (long)ErrorFlagMask.E12; + if (E13 && (errorsCfg.TestParams.E13 == on)) errorFlags |= (long)ErrorFlagMask.E13; + if (E14 && (errorsCfg.TestParams.E14 == on)) errorFlags |= (long)ErrorFlagMask.E14; /// E15, E16, E17, E18, E19, E20 skipped - if (E21 && (errorsCfg.TestParams.E21 == on)) errorFlags |= (int)ErrorFlagMask.E21; + if (E21 && (errorsCfg.TestParams.E21 == on)) errorFlags |= (long)ErrorFlagMask.E21; + if (E36 && (errorsCfg.TestParams.E36 == on)) errorFlags |= (long)ErrorFlagMask.E36; long _infoFlags = 0; sbyte info = (sbyte)ErrorFlagsMode.Info; - if (E1 && (errorsCfg.TestParams.E1 == info)) _infoFlags |= (int)ErrorFlagMask.E1; - if (E2 && (errorsCfg.TestParams.E2 == info)) _infoFlags |= (int)ErrorFlagMask.E2; - if (E3 && (errorsCfg.TestParams.E3 == info)) _infoFlags |= (int)ErrorFlagMask.E3; - if (E4 && (errorsCfg.TestParams.E4 == info)) _infoFlags |= (int)ErrorFlagMask.E4; - if (E5 && (errorsCfg.TestParams.E5 == info)) _infoFlags |= (int)ErrorFlagMask.E5; - if (E6 && (errorsCfg.TestParams.E6 == info)) _infoFlags |= (int)ErrorFlagMask.E6; - if (E7 && (errorsCfg.TestParams.E7 == info)) _infoFlags |= (int)ErrorFlagMask.E7; - if (E8 && (errorsCfg.TestParams.E8 == info)) _infoFlags |= (int)ErrorFlagMask.E8; - if (E9 && (errorsCfg.TestParams.E9 == info)) _infoFlags |= (int)ErrorFlagMask.E9; - if (E10 && (errorsCfg.TestParams.E10 == info)) _infoFlags |= (int)ErrorFlagMask.E10; - if (E11 && (errorsCfg.TestParams.E11 == info)) _infoFlags |= (int)ErrorFlagMask.E11; - if (E12 && (errorsCfg.TestParams.E12 == info)) _infoFlags |= (int)ErrorFlagMask.E12; - if (E13 && (errorsCfg.TestParams.E13 == info)) _infoFlags |= (int)ErrorFlagMask.E13; - if (E14 && (errorsCfg.TestParams.E14 == info)) _infoFlags |= (int)ErrorFlagMask.E14; + if (E1 && (errorsCfg.TestParams.E1 == info)) _infoFlags |= (long)ErrorFlagMask.E1; + if (E2 && (errorsCfg.TestParams.E2 == info)) _infoFlags |= (long)ErrorFlagMask.E2; + if (E3 && (errorsCfg.TestParams.E3 == info)) _infoFlags |= (long)ErrorFlagMask.E3; + if (E4 && (errorsCfg.TestParams.E4 == info)) _infoFlags |= (long)ErrorFlagMask.E4; + if (E5 && (errorsCfg.TestParams.E5 == info)) _infoFlags |= (long)ErrorFlagMask.E5; + if (E6 && (errorsCfg.TestParams.E6 == info)) _infoFlags |= (long)ErrorFlagMask.E6; + if (E7 && (errorsCfg.TestParams.E7 == info)) _infoFlags |= (long)ErrorFlagMask.E7; + if (E8 && (errorsCfg.TestParams.E8 == info)) _infoFlags |= (long)ErrorFlagMask.E8; + if (E9 && (errorsCfg.TestParams.E9 == info)) _infoFlags |= (long)ErrorFlagMask.E9; + if (E10 && (errorsCfg.TestParams.E10 == info)) _infoFlags |= (long)ErrorFlagMask.E10; + if (E11 && (errorsCfg.TestParams.E11 == info)) _infoFlags |= (long)ErrorFlagMask.E11; + if (E12 && (errorsCfg.TestParams.E12 == info)) _infoFlags |= (long)ErrorFlagMask.E12; + if (E13 && (errorsCfg.TestParams.E13 == info)) _infoFlags |= (long)ErrorFlagMask.E13; + if (E14 && (errorsCfg.TestParams.E14 == info)) _infoFlags |= (long)ErrorFlagMask.E14; /// E15, E16, E17, E18, E19, E20 skipped - if (E21 && (errorsCfg.TestParams.E21 == info)) _infoFlags |= (int)ErrorFlagMask.E21; + if (E21 && (errorsCfg.TestParams.E21 == info)) _infoFlags |= (long)ErrorFlagMask.E21; + if (E36 && (errorsCfg.TestParams.E36 == info)) _infoFlags |= (long)ErrorFlagMask.E36; infoFlags = _infoFlags; return errorFlags; diff --git a/TBF/BenchControl/Various/ErrorFlags/TestParams.cs b/TBF/BenchControl/Various/ErrorFlags/TestParams.cs index 8f59afb23..142ad1b80 100644 --- a/TBF/BenchControl/Various/ErrorFlags/TestParams.cs +++ b/TBF/BenchControl/Various/ErrorFlags/TestParams.cs @@ -1,5 +1,5 @@ /// -/// Copyright (c) 2017-2019 Sensus Slovensko a.s. +/// Copyright (c) 2017-2020 Sensus Slovensko a.s. /// using System.IO; using System.Xml.Serialization; @@ -31,6 +31,7 @@ namespace TBF.BenchControl.Various.ErrorFlags public sbyte E15; /// public sbyte E16; /// public sbyte E21; /// + public sbyte E36; /// public double Delta_Q_pct; /// [%] max deviation from the mean flow public double Delta_T; /// [°C] max. T_up or T_down deviation from the mean temperature @@ -41,6 +42,8 @@ namespace TBF.BenchControl.Various.ErrorFlags public double AmbTemp_max; /// [°C] max. ambient temperature public double Pressure_min; /// [bar] min. water pressure public double Pressure_max; /// [bar] max. water pressure + public double Conductivity_min; /// [uS/cm] min. electrical conductivity of water + public double Conductivity_max; /// [uS/cm] max. electrical conductivity of water public double Coef_E9; /// Coefficient used in E9, default 0.025 public double Coef_E10; /// Coefficient used in E10, default 0.04 @@ -56,7 +59,7 @@ namespace TBF.BenchControl.Various.ErrorFlags public sbyte E28; /// Previous workflow step verification #endif - public override void InitializeAll() + public override void InitializeAll() { #if IPERL E1 = (sbyte)ErrorFlagsMode.Info; @@ -76,11 +79,7 @@ namespace TBF.BenchControl.Various.ErrorFlags E15 = (sbyte)ErrorFlagsMode.Off; E16 = (sbyte)ErrorFlagsMode.Off; E21 = (sbyte)ErrorFlagsMode.Info; - - E25 = (sbyte)ErrorFlagsMode.Info; /// MaxPruefindex verification - E26 = (sbyte)ErrorFlagsMode.Off; /// Q2 factors verification (saved from production == current) - E27 = (sbyte)ErrorFlagsMode.Off; /// Direction verification - E28 = (sbyte)ErrorFlagsMode.Info; /// Previous workflow step verification + E36 = (sbyte)ErrorFlagsMode.On; #else E1 = (sbyte)ErrorFlagsMode.Info; E2 = (sbyte)ErrorFlagsMode.Info; @@ -99,23 +98,32 @@ namespace TBF.BenchControl.Various.ErrorFlags E15 = (sbyte)ErrorFlagsMode.Info; E16 = (sbyte)ErrorFlagsMode.Info; E21 = (sbyte)ErrorFlagsMode.Info; + E36 = (sbyte)ErrorFlagsMode.Off; #endif - Delta_Q_pct = 5.0; /// [%] - Delta_T = 10.0; /// [°C] - Delta_Tup_Tdn = 10.0; /// [°C] - TestTime_min = 0; /// [s] - TestTime_max = 99999; /// [s] - AmbTemp_min = 5.0; /// [°C] - AmbTemp_max = 95.0; /// [°C] - Pressure_min = 0; /// [bar] - Pressure_max = 16.0; /// [bar] + Delta_Q_pct = 5.0; /// [%] + Delta_T = 10.0; /// [°C] + Delta_Tup_Tdn = 10.0; /// [°C] + TestTime_min = 0; /// [s] + TestTime_max = 99999; /// [s] + AmbTemp_min = 5.0; /// [°C] + AmbTemp_max = 95.0; /// [°C] + Pressure_min = 0; /// [bar] + Pressure_max = 16.0; /// [bar] + Conductivity_min = 600.0; /// [uS/cm] + Conductivity_max = 1200.0; /// [uS/cm] Coef_E9 = 0.025; Coef_E10 = 0.04; Coef_E11 = 0.1; Coef_E12 = 1.0; - Offset_E9 = 0; /// [s] - Offset_E12 = 0; /// [s] + Offset_E9 = 0; /// [s] + Offset_E12 = 0; /// [s] +#if IPERL + E25 = (sbyte)ErrorFlagsMode.Info; /// MaxPruefindex verification + E26 = (sbyte)ErrorFlagsMode.Off; /// Q2 factors verification (saved from production == current) + E27 = (sbyte)ErrorFlagsMode.Off; /// Direction verification + E28 = (sbyte)ErrorFlagsMode.Info; /// Previous workflow step verification +#endif } string[] paramNames = new string[] @@ -137,6 +145,7 @@ namespace TBF.BenchControl.Various.ErrorFlags "E15", "E16", "E21", + "E36", "Delta Q [%]", "Delta T [°C]", @@ -147,6 +156,8 @@ namespace TBF.BenchControl.Various.ErrorFlags string.Format("max. {0} [°C]", Strings.Air_temperature), string.Format("min. {0} [bar]", Strings.Pressure), string.Format("max. {0} [bar]", Strings.Pressure), + "min. conductivity [uS/cm]", + "max. conductivity [uS/cm]", "Coef.E9", "Coef.E10", @@ -185,29 +196,32 @@ namespace TBF.BenchControl.Various.ErrorFlags case 14: return ((ErrorFlagsMode)E15).ToDescription(); case 15: return ((ErrorFlagsMode)E16).ToDescription(); case 16: return ((ErrorFlagsMode)E21).ToDescription(); + case 17: return ((ErrorFlagsMode)E36).ToDescription(); - case 17: return Delta_Q_pct.ToString(); - case 18: return Delta_T.ToString(); - case 19: return Delta_Tup_Tdn.ToString(); - case 20: return TestTime_min.ToString(); - case 21: return TestTime_max.ToString(); - case 22: return AmbTemp_min.ToString(); - case 23: return AmbTemp_max.ToString(); - case 24: return Pressure_min.ToString(); - case 25: return Pressure_max.ToString(); - case 26: return Coef_E9.ToString(); - case 27: return Coef_E10.ToString(); - case 28: return Coef_E11.ToString(); - case 29: return Coef_E12.ToString(); - case 30: return Offset_E9.ToString(); - case 31: return Offset_E12.ToString(); + case 18: return Delta_Q_pct.ToString(); + case 19: return Delta_T.ToString(); + case 20: return Delta_Tup_Tdn.ToString(); + case 21: return TestTime_min.ToString(); + case 22: return TestTime_max.ToString(); + case 23: return AmbTemp_min.ToString(); + case 24: return AmbTemp_max.ToString(); + case 25: return Pressure_min.ToString(); + case 26: return Pressure_max.ToString(); + case 27: return Conductivity_min.ToString(); + case 28: return Conductivity_max.ToString(); + case 29: return Coef_E9.ToString(); + case 30: return Coef_E10.ToString(); + case 31: return Coef_E11.ToString(); + case 32: return Coef_E12.ToString(); + case 33: return Offset_E9.ToString(); + case 34: return Offset_E12.ToString(); #if IPERL - case 32: return ((ErrorFlagsMode)E25).ToDescription(); - case 33: return ((ErrorFlagsMode)E26).ToDescription(); - case 34: return ((ErrorFlagsMode)E27).ToDescription(); - case 35: return ((ErrorFlagsMode)E28).ToDescription(); + case 35: return ((ErrorFlagsMode)E25).ToDescription(); + case 36: return ((ErrorFlagsMode)E26).ToDescription(); + case 37: return ((ErrorFlagsMode)E27).ToDescription(); + case 38: return ((ErrorFlagsMode)E28).ToDescription(); #endif - default: return string.Empty; + default: return string.Empty; } } @@ -233,29 +247,32 @@ namespace TBF.BenchControl.Various.ErrorFlags case 14: for (ErrorFlagsMode m = 0; m < ErrorFlagsMode.Count; m++) if (m.ToDescription() == sVal) { E15 = (sbyte)m; break; }; break; case 15: for (ErrorFlagsMode m = 0; m < ErrorFlagsMode.Count; m++) if (m.ToDescription() == sVal) { E16 = (sbyte)m; break; }; break; case 16: for (ErrorFlagsMode m = 0; m < ErrorFlagsMode.Count; m++) if (m.ToDescription() == sVal) { E21 = (sbyte)m; break; }; break; + case 17: for (ErrorFlagsMode m = 0; m < ErrorFlagsMode.Count; m++) if (m.ToDescription() == sVal) { E36 = (sbyte)m; break; }; break; - case 17: Delta_Q_pct = Utils.ParseUDouble(sVal); return CfgUpdateFlags.None; - case 18: Delta_T = Utils.ParseUDouble(sVal); return CfgUpdateFlags.None; - case 19: Delta_Tup_Tdn = Utils.ParseUDouble(sVal); return CfgUpdateFlags.None; - case 20: TestTime_min = Utils.ParseUDouble(sVal); return CfgUpdateFlags.None; - case 21: TestTime_max = Utils.ParseUDouble(sVal); return CfgUpdateFlags.None; - case 22: AmbTemp_min = Utils.ParseUDouble(sVal); return CfgUpdateFlags.None; - case 23: AmbTemp_max = Utils.ParseUDouble(sVal); return CfgUpdateFlags.None; - case 24: Pressure_min = Utils.ParseUDouble(sVal); return CfgUpdateFlags.None; - case 25: Pressure_max = Utils.ParseUDouble(sVal); return CfgUpdateFlags.None; - case 26: Coef_E9 = Utils.ParseUDouble(sVal); return CfgUpdateFlags.None; - case 27: Coef_E10 = Utils.ParseUDouble(sVal); return CfgUpdateFlags.None; - case 28: Coef_E11 = Utils.ParseUDouble(sVal); return CfgUpdateFlags.None; - case 29: Coef_E12 = Utils.ParseUDouble(sVal); return CfgUpdateFlags.None; - case 30: Offset_E9 = Utils.ParseUDouble(sVal); return CfgUpdateFlags.None; - case 31: Offset_E12 = Utils.ParseUDouble(sVal); return CfgUpdateFlags.None; + case 18: Delta_Q_pct = Utils.ParseUDouble(sVal); return CfgUpdateFlags.None; + case 19: Delta_T = Utils.ParseUDouble(sVal); return CfgUpdateFlags.None; + case 20: Delta_Tup_Tdn = Utils.ParseUDouble(sVal); return CfgUpdateFlags.None; + case 21: TestTime_min = Utils.ParseUDouble(sVal); return CfgUpdateFlags.None; + case 22: TestTime_max = Utils.ParseUDouble(sVal); return CfgUpdateFlags.None; + case 23: AmbTemp_min = Utils.ParseUDouble(sVal); return CfgUpdateFlags.None; + case 24: AmbTemp_max = Utils.ParseUDouble(sVal); return CfgUpdateFlags.None; + case 25: Pressure_min = Utils.ParseUDouble(sVal); return CfgUpdateFlags.None; + case 26: Pressure_max = Utils.ParseUDouble(sVal); return CfgUpdateFlags.None; + case 27: Conductivity_min = Utils.ParseUDouble(sVal); return CfgUpdateFlags.None; + case 28: Conductivity_max = Utils.ParseUDouble(sVal); return CfgUpdateFlags.None; + case 29: Coef_E9 = Utils.ParseUDouble(sVal); return CfgUpdateFlags.None; + case 30: Coef_E10 = Utils.ParseUDouble(sVal); return CfgUpdateFlags.None; + case 31: Coef_E11 = Utils.ParseUDouble(sVal); return CfgUpdateFlags.None; + case 32: Coef_E12 = Utils.ParseUDouble(sVal); return CfgUpdateFlags.None; + case 33: Offset_E9 = Utils.ParseUDouble(sVal); return CfgUpdateFlags.None; + case 34: Offset_E12 = Utils.ParseUDouble(sVal); return CfgUpdateFlags.None; #if IPERL - case 32: for (ErrorFlagsMode m = 0; m < ErrorFlagsMode.Count; m++) if (m.ToDescription() == sVal) { E25 = (sbyte)m; break; }; break; - case 33: for (ErrorFlagsMode m = 0; m < ErrorFlagsMode.Count; m++) if (m.ToDescription() == sVal) { E26 = (sbyte)m; break; }; break; - case 34: for (ErrorFlagsMode m = 0; m < ErrorFlagsMode.Count; m++) if (m.ToDescription() == sVal) { E27 = (sbyte)m; break; }; break; - case 35: for (ErrorFlagsMode m = 0; m < ErrorFlagsMode.Count; m++) if (m.ToDescription() == sVal) { E28 = (sbyte)m; break; }; break; + case 35: for (ErrorFlagsMode m = 0; m < ErrorFlagsMode.Count; m++) if (m.ToDescription() == sVal) { E25 = (sbyte)m; break; }; break; + case 36: for (ErrorFlagsMode m = 0; m < ErrorFlagsMode.Count; m++) if (m.ToDescription() == sVal) { E26 = (sbyte)m; break; }; break; + case 37: for (ErrorFlagsMode m = 0; m < ErrorFlagsMode.Count; m++) if (m.ToDescription() == sVal) { E27 = (sbyte)m; break; }; break; + case 38: for (ErrorFlagsMode m = 0; m < ErrorFlagsMode.Count; m++) if (m.ToDescription() == sVal) { E28 = (sbyte)m; break; }; break; #endif - } + } return CfgUpdateFlags.None; } @@ -285,17 +302,19 @@ namespace TBF.BenchControl.Various.ErrorFlags case 14: case 15: case 16: - case 32: - case 33: - case 34: + case 17: +#if IPERL case 35: - for (ErrorFlagsMode m = 0; m < ErrorFlagsMode.Count; m++) + case 36: + case 37: + case 38: +#endif + for (ErrorFlagsMode m = 0; m < ErrorFlagsMode.Count; m++) { if (m.ToDescription() == strValue) return true; } break; - case 17: case 18: case 19: case 20: @@ -304,12 +323,15 @@ namespace TBF.BenchControl.Various.ErrorFlags case 23: case 24: case 25: - case 26: + case 26: case 27: case 28: case 29: case 30: case 31: + case 32: + case 33: + case 34: if (Utils.TryParseUDouble(strValue, out dummy)) return true; break; @@ -341,6 +363,7 @@ namespace TBF.BenchControl.Various.ErrorFlags prms.E15 = this.E15; prms.E16 = this.E16; prms.E21 = this.E21; + prms.E36 = this.E36; prms.Delta_Q_pct = this.Delta_Q_pct; prms.Delta_T = this.Delta_T; @@ -351,7 +374,9 @@ namespace TBF.BenchControl.Various.ErrorFlags prms.AmbTemp_max = this.AmbTemp_max; prms.Pressure_min = this.Pressure_min; prms.Pressure_max = this.Pressure_max; - prms.Coef_E9 = this.Coef_E9; + prms.Conductivity_min = this.Conductivity_min; + prms.Conductivity_max = this.Conductivity_max; + prms.Coef_E9 = this.Coef_E9; prms.Coef_E10 = this.Coef_E10; prms.Coef_E11 = this.Coef_E11; prms.Coef_E12 = this.Coef_E12;