diff --git a/TBF/BenchControl/Elde/SetValvesOp.cs b/TBF/BenchControl/Elde/SetValvesOp.cs index 9f1608e2a..949a5f1f5 100644 --- a/TBF/BenchControl/Elde/SetValvesOp.cs +++ b/TBF/BenchControl/Elde/SetValvesOp.cs @@ -1,5 +1,5 @@ /// -/// Copyright (c) 2013-2017 Sensus Metering Systems +/// Copyright (c) 2013-2018 Sensus Slovensko a.s. /// using System; using System.Collections.Generic; @@ -76,44 +76,44 @@ namespace TBF.BenchControl.Elde /// A list of opening master valves /// A list of closing master valves /// - IList CollectSwitchPoints(IList valvesOpen, IList valvesClose) + IList AddSwitchPoints(IList swPoints, IList valvesOpen, IList valvesClose, int time) { - IList result = new List(); - result.Add(new SwitchPoint(0, valvesOpen, valvesClose)); + int ix0 = swPoints.Count; + swPoints.Add(new SwitchPoint(time, valvesOpen, valvesClose)); - foreach (var valve in StateMachine.CoupledValves) - { - if ((!valve.InvertCouple && valvesOpen.Contains(valve.CoupledTo)) || - (valve.InvertCouple && valvesClose.Contains(valve.CoupledTo))) - { - /// The coupled valve 'valve' is opening - int time = valve.LagOpening; - if (time == 0) - { - result[0].VOpen.Add(valve); - } - else - { - result.Add(new SwitchPoint(time, ValveBase.MakeList(valve), null)); - } - } - else if ((!valve.InvertCouple && valvesClose.Contains(valve.CoupledTo)) || - (valve.InvertCouple && valvesOpen.Contains(valve.CoupledTo))) - { - /// The coupled valve 'valve' is closing - int time = valve.LagClosing; - if (time == 0) - { - result[0].VClose.Add(valve); - } - else - { - result.Add(new SwitchPoint(time, null, ValveBase.MakeList(valve))); - } - } - } - return result; - } + foreach (var valve in StateMachine.CoupledValves) + { + if ((!valve.InvertCouple && valvesOpen.Contains(valve.CoupledTo)) || + (valve.InvertCouple && valvesClose.Contains(valve.CoupledTo))) + { + /// The coupled valve 'valve' is opening + int lag = time + valve.LagOpening; + if (lag == time) + { + swPoints[ix0].VOpen.Add(valve); + } + else + { + swPoints.Add(new SwitchPoint(lag, ValveBase.MakeList(valve), null)); + } + } + else if ((!valve.InvertCouple && valvesClose.Contains(valve.CoupledTo)) || + (valve.InvertCouple && valvesOpen.Contains(valve.CoupledTo))) + { + /// The coupled valve 'valve' is closing + int lag = time + valve.LagClosing; + if (lag == time) + { + swPoints[ix0].VClose.Add(valve); + } + else + { + swPoints.Add(new SwitchPoint(lag, null, ValveBase.MakeList(valve))); + } + } + } + return swPoints; + } IList SortAndMergeSwitchPoints(IList unsorted) @@ -188,7 +188,8 @@ namespace TBF.BenchControl.Elde if (valvesOpen == null) valvesOpen = new List(); if (valvesClose == null) valvesClose = new List(); - switchPointsRaw = CollectSwitchPoints(valvesOpen, valvesClose); + switchPointsRaw = new List(); + AddSwitchPoints(switchPointsRaw, valvesOpen, valvesClose, 0); switchPoints = SortAndMergeSwitchPoints(switchPointsRaw); int timeShift = -switchPoints[0].TimeSec; MakeMasks(switchPoints, timeShift); @@ -207,6 +208,62 @@ namespace TBF.BenchControl.Elde { } + /// + /// OPEN or CLOSE start/stop valve and associated valves and/or pumps. + /// Events: ValvesSet + /// + /// Control board device + /// true: close start valve, false: open start valve + /// OutputPath specifying the start valve and associated valves/pumps + /// Only Elde.Valve valves are used, other valves on the lists are ignored + public SetValvesOp(ControlBoardDev controlBoard, bool close, OutputPath outPath) + { + if (controlBoard == null) throw new ArgumentNullException("ctrlBoard"); + this.controlBoard = controlBoard; + + IList none = new List(); /// An empty list of valves + switchPointsRaw = new List(); + + if (close) + { + if (outPath.InvertSV1) AddSwitchPoints(switchPointsRaw, ValveBase.MakeList(outPath.StartValve1), none, 0); + else AddSwitchPoints(switchPointsRaw, none, ValveBase.MakeList(outPath.StartValve1), 0); + + if (outPath.StartValve2 != null) + { + if (outPath.InvertSV2) AddSwitchPoints(switchPointsRaw, ValveBase.MakeList(outPath.StartValve2), none, outPath.LagSV2); + else AddSwitchPoints(switchPointsRaw, none, ValveBase.MakeList(outPath.StartValve2), outPath.LagSV2); + } + + if (outPath.StartValve3 != null) + { + if (outPath.InvertSV3) AddSwitchPoints(switchPointsRaw, ValveBase.MakeList(outPath.StartValve3), none, outPath.LagSV3); + else AddSwitchPoints(switchPointsRaw, none, ValveBase.MakeList(outPath.StartValve3), outPath.LagSV3); + } + } + else + { + if (outPath.InvertSV1) AddSwitchPoints(switchPointsRaw, none, ValveBase.MakeList(outPath.StartValve1), 0); + else AddSwitchPoints(switchPointsRaw, ValveBase.MakeList(outPath.StartValve1), none, 0); + + if (outPath.StartValve2 != null) + { + if (outPath.InvertSV2) AddSwitchPoints(switchPointsRaw, none, ValveBase.MakeList(outPath.StartValve2), -outPath.LagSV2); + else AddSwitchPoints(switchPointsRaw, ValveBase.MakeList(outPath.StartValve2), none, -outPath.LagSV2); + } + + if (outPath.StartValve3 != null) + { + if (outPath.InvertSV3) AddSwitchPoints(switchPointsRaw, none, ValveBase.MakeList(outPath.StartValve3), -outPath.LagSV3); + else AddSwitchPoints(switchPointsRaw, ValveBase.MakeList(outPath.StartValve3), none, -outPath.LagSV3); + } + } + + switchPoints = SortAndMergeSwitchPoints(switchPointsRaw); + int timeShift = -switchPoints[0].TimeSec; + MakeMasks(switchPoints, timeShift); + } + /// Start this operation public void Start() { diff --git a/TBF/BenchControl/OutputPath.cs b/TBF/BenchControl/OutputPath.cs index 1678a75dc..0ec30f6b7 100644 --- a/TBF/BenchControl/OutputPath.cs +++ b/TBF/BenchControl/OutputPath.cs @@ -12,13 +12,20 @@ namespace TBF.BenchControl public string Name; public float Qfrom; public float Qto; - public IRegulValve RegulValve; public IFlowMeter FlowMeter; + public IRegulValve RegulValve; public float PidCoef; - public IValve StartValve; public IDiverter Diverter; public ITempMeter TempDiv; public IScale Scale; + public IValve StartValve1; + public bool InvertSV1; + public IValve StartValve2; + public bool InvertSV2; + public int LagSV2; + public IValve StartValve3; + public bool InvertSV3; + public int LagSV3; public IList ValvesOpen; public IList ValvesClose; @@ -37,14 +44,25 @@ namespace TBF.BenchControl { Qfrom = entity.Qfrom; Qto = entity.Qto; - RegulValve = (IRegulValve)TbfComponents.FindComponent(entity.RegulValve, components); - FlowMeter = (IFlowMeter)TbfComponents.FindComponent(entity.FlowMeter, components); + FlowMeter = (IFlowMeter)TbfComponents.FindComponent(entity.FlowMeter, components); + RegulValve = (IRegulValve)TbfComponents.FindComponent(entity.RegulValve, components); PidCoef = entity.PidCoef; - StartValve = (IValve)TbfComponents.FindComponent(entity.StartValve, components); Diverter = (IDiverter)TbfComponents.FindComponent(entity.Diverter, components); TempDiv = (ITempMeter)TbfComponents.FindComponent(entity.TempDiv, components); Scale = (IScale)TbfComponents.FindComponent(entity.Scale, components); + string[] svs = entity.StartValve != null ? entity.StartValve.Split(new char[] { '~' }) : new string[0]; + int iTmp; + /// + StartValve1 = (IValve)TbfComponents.FindComponent(((svs.Length > 0) ? svs[0] : string.Empty), components); + InvertSV1 = (svs.Length > 1) ? svs[1].Equals("i") : false; + StartValve2 = (IValve)TbfComponents.FindComponent(((svs.Length > 2) ? svs[2] : string.Empty), components); + InvertSV2 = (svs.Length > 3) ? svs[3].Equals("i") : false; + LagSV2 = (svs.Length > 4 && int.TryParse(svs[4], out iTmp)) ? iTmp : 0; + StartValve3 = (IValve)TbfComponents.FindComponent(((svs.Length > 5) ? svs[5] : string.Empty), components); + InvertSV3 = (svs.Length > 6) ? svs[6].Equals("i") : false; + LagSV3 = (svs.Length > 7 && int.TryParse(svs[7], out iTmp)) ? iTmp : 0; + string[] vOpen = entity.ValvesOpen.Split(new char[] { ';' }); ValvesOpen = new List(); foreach (var vName in vOpen) ValvesOpen.Add((IValve)TbfComponents.FindComponent(vName, components)); diff --git a/TBF/BenchControl/TestMethods/FixedStart/FixedStartSeq.cs b/TBF/BenchControl/TestMethods/FixedStart/FixedStartSeq.cs index 19ee1d062..19cc4e8f7 100644 --- a/TBF/BenchControl/TestMethods/FixedStart/FixedStartSeq.cs +++ b/TBF/BenchControl/TestMethods/FixedStart/FixedStartSeq.cs @@ -244,15 +244,26 @@ namespace TBF.BenchControl.TestMethods.FixedStart (inPath.Pump as GenericDevices.IPumpFM).TurnOn(test.PumpPower); } /// - IList valvesOpen = new List(); - valvesOpen.Add(inPath.Pump); - valvesOpen.Add(outPath.StartValve); - /// - State.Create(string.Format("{0}({1}) : Turning pump on", test.Method, test.Name)) + State.Create(string.Format("{0}({1}) : Pump on", test.Method, test.Name)) .AddOperation(checkUiOp) - .AddOperation(StateMachine.ControlBoard.SetValvesOp(valvesOpen, null)) + .AddOperation(StateMachine.ControlBoard.SetValvesOp(inPath.Pump, null)) .AddOperation(heatMetersPromptOp) - .EnterState(); + .EnterState(); + do + { + e = StateMachine.WaitRunDevsRunOps(); + Bridge.OnProcessData(this, new ProcessDataEventArgs(test, repetitionNr, Config.Entities.Progress.FlowSetting)); + Bridge.OnTestProgress(this, new TestProgressEventArgs(test, repetitionNr, Config.Entities.Progress.FlowSetting)); + + if (TestAndLogUiCmdStop(test, e)) { retVal = Event.UiCmdStop; goto stopTest; } + } + while (e.Contains(Event.ValvesBusy)); + /// + State.Create(string.Format("{0}({1}) : Start valve open", test.Method, test.Name)) + .AddOperation(checkUiOp) + .AddOperation(new TBF.BenchControl.Elde.SetValvesOp(cBrd, false, outPath)) + .AddOperation(heatMetersPromptOp) + .EnterState(); do { e = StateMachine.WaitRunDevsRunOps(); @@ -373,8 +384,8 @@ namespace TBF.BenchControl.TestMethods.FixedStart //----------------------------------------------------------------- State.Create(string.Format("{0}({1}) : Closing the start/stop valve before the fixed start test", test.Method, test.Name)) .AddOperation(checkUiOp) - .AddOperation(StateMachine.ControlBoard.SetValvesOp(null, outPath.StartValve)) - .AddOperation(heatMetersPath == null ? null : heatMetersPath.TMeterRefWarm1.ReadTempOp(ref TempRefHi1)) + .AddOperation(new TBF.BenchControl.Elde.SetValvesOp(cBrd, true, outPath)) + .AddOperation(heatMetersPath == null ? null : heatMetersPath.TMeterRefWarm1.ReadTempOp(ref TempRefHi1)) .AddOperation(heatMetersPath == null ? null : heatMetersPath.TMeterRefWarm2.ReadTempOp(ref TempRefHi2)) .AddOperation(heatMetersPath == null ? null : heatMetersPath.TMeterRefCold1.ReadTempOp(ref TempRefLo1)) .AddOperation(heatMetersPath == null ? null : heatMetersPath.TMeterRefCold2.ReadTempOp(ref TempRefLo2)) @@ -573,7 +584,7 @@ namespace TBF.BenchControl.TestMethods.FixedStart .AddOperation(heatMetersPath == null ? null : heatMetersPath.TMeterRefWarm2.ReadTempOp(ref TempRefHi2)) .AddOperation(heatMetersPath == null ? null : heatMetersPath.TMeterRefCold1.ReadTempOp(ref TempRefLo1)) .AddOperation(heatMetersPath == null ? null : heatMetersPath.TMeterRefCold2.ReadTempOp(ref TempRefLo2)) - .AddOperation(StateMachine.ControlBoard.SetValvesOp(outPath.StartValve, null)) + .AddOperation(new TBF.BenchControl.Elde.SetValvesOp(cBrd, false, outPath)) .AddOperation(StateMachine.ControlBoard.UpdateTankWeightOp()) .EnterState(); do @@ -685,7 +696,7 @@ namespace TBF.BenchControl.TestMethods.FixedStart .AddOperation(heatMetersPath == null ? null : heatMetersPath.TMeterRefWarm2.ReadTempOp(ref TempRefHi2)) .AddOperation(heatMetersPath == null ? null : heatMetersPath.TMeterRefCold1.ReadTempOp(ref TempRefLo1)) .AddOperation(heatMetersPath == null ? null : heatMetersPath.TMeterRefCold2.ReadTempOp(ref TempRefLo2)) - .AddOperation(StateMachine.ControlBoard.SetValvesOp(null, outPath.StartValve)) + .AddOperation(new TBF.BenchControl.Elde.SetValvesOp(cBrd, true, outPath)) .AddOperation(StateMachine.ControlBoard.UpdateTankWeightOp()) .EnterState(); do diff --git a/TBF/BenchControl/TestMethods/FixedStartAdvanced/FixedStartAdvancedSeq.cs b/TBF/BenchControl/TestMethods/FixedStartAdvanced/FixedStartAdvancedSeq.cs index 0c57adf4e..1095a00f6 100644 --- a/TBF/BenchControl/TestMethods/FixedStartAdvanced/FixedStartAdvancedSeq.cs +++ b/TBF/BenchControl/TestMethods/FixedStartAdvanced/FixedStartAdvancedSeq.cs @@ -181,8 +181,8 @@ namespace TBF.BenchControl.TestMethods.FixedStartAdvanced //------------------------------------------------ State.Create("FixedStartAdvanced : Closing the start/stop valve before the fixed start test") .AddOperation(checkUiOp) - .AddOperation(StateMachine.ControlBoard.SetValvesOp(null, outPath.StartValve)) - .AddOperation(StateMachine.ControlBoard.UpdateTankWeightOp()) + .AddOperation(new TBF.BenchControl.Elde.SetValvesOp(cBrd, true, outPath)) + .AddOperation(StateMachine.ControlBoard.UpdateTankWeightOp()) .EnterState(); do { @@ -309,8 +309,8 @@ namespace TBF.BenchControl.TestMethods.FixedStartAdvanced State.Create("FixedStartAdvanced : Opening the start/stop valve at the beginning of the fixed start test") .AddOperation(checkUiOp) - .AddOperation(StateMachine.ControlBoard.SetValvesOp(outPath.StartValve, null)) - .AddOperation(StateMachine.ControlBoard.UpdateTankWeightOp()) + .AddOperation(new TBF.BenchControl.Elde.SetValvesOp(cBrd, false, outPath)) + .AddOperation(StateMachine.ControlBoard.UpdateTankWeightOp()) .EnterState(); do { @@ -372,8 +372,8 @@ namespace TBF.BenchControl.TestMethods.FixedStartAdvanced State.Create("FixedStartAdvanced : Closing the start/stop valve at the end of the fixed start test") .AddOperation(checkUiOp) - .AddOperation(StateMachine.ControlBoard.SetValvesOp(null, outPath.StartValve)) - .AddOperation(StateMachine.ControlBoard.UpdateTankWeightOp()) + .AddOperation(new TBF.BenchControl.Elde.SetValvesOp(cBrd, true, outPath)) + .AddOperation(StateMachine.ControlBoard.UpdateTankWeightOp()) .EnterState(); do { diff --git a/TBF/BenchControl/TestMethods/FixedStartDeferredEvaluation/FixedStartDeferredEvaluationSeq.cs b/TBF/BenchControl/TestMethods/FixedStartDeferredEvaluation/FixedStartDeferredEvaluationSeq.cs index f593007f8..7d5820e08 100644 --- a/TBF/BenchControl/TestMethods/FixedStartDeferredEvaluation/FixedStartDeferredEvaluationSeq.cs +++ b/TBF/BenchControl/TestMethods/FixedStartDeferredEvaluation/FixedStartDeferredEvaluationSeq.cs @@ -251,15 +251,26 @@ namespace TBF.BenchControl.TestMethods.FixedStartDeferredEvaluation (inPath.Pump as GenericDevices.IPumpFM).TurnOn(test.PumpPower); } /// - IList valvesOpen = new List(); - valvesOpen.Add(inPath.Pump); - valvesOpen.Add(outPath.StartValve); + State.Create(string.Format("{0}({1}) : Pump on", test.Method, test.Name)) + .AddOperation(checkUiOp) + .AddOperation(StateMachine.ControlBoard.SetValvesOp(inPath.Pump, null)) + .AddOperation(heatMetersPromptOp) + .EnterState(); + do + { + e = StateMachine.WaitRunDevsRunOps(); + Bridge.OnProcessData(this, new ProcessDataEventArgs(test, repetitionNr, Config.Entities.Progress.FlowSetting)); + Bridge.OnTestProgress(this, new TestProgressEventArgs(test, repetitionNr, Config.Entities.Progress.FlowSetting)); + + if (TestAndLogUiCmdStop(test, e)) { retVal = Event.UiCmdStop; goto stopTest; } + } + while (e.Contains(Event.ValvesBusy)); /// - State.Create(string.Format("{0}({1}) : Turning pump on", test.Method, test.Name)) + State.Create(string.Format("{0}({1}) : Start valve open", test.Method, test.Name)) .AddOperation(checkUiOp) - .AddOperation(StateMachine.ControlBoard.SetValvesOp(valvesOpen, null)) + .AddOperation(new TBF.BenchControl.Elde.SetValvesOp(cBrd, false, outPath)) .AddOperation(heatMetersPromptOp) - .EnterState(); + .EnterState(); do { e = StateMachine.WaitRunDevsRunOps(); @@ -380,8 +391,8 @@ namespace TBF.BenchControl.TestMethods.FixedStartDeferredEvaluation //----------------------------------------------------------------- State.Create(string.Format("{0}({1}) : Closing the start/stop valve before the fixed start test", test.Method, test.Name)) .AddOperation(checkUiOp) - .AddOperation(StateMachine.ControlBoard.SetValvesOp(null, outPath.StartValve)) - .AddOperation(heatMetersPath == null ? null : heatMetersPath.TMeterRefWarm1.ReadTempOp(ref TempRefHi1)) + .AddOperation(new TBF.BenchControl.Elde.SetValvesOp(cBrd, true, outPath)) + .AddOperation(heatMetersPath == null ? null : heatMetersPath.TMeterRefWarm1.ReadTempOp(ref TempRefHi1)) .AddOperation(heatMetersPath == null ? null : heatMetersPath.TMeterRefWarm2.ReadTempOp(ref TempRefHi2)) .AddOperation(heatMetersPath == null ? null : heatMetersPath.TMeterRefCold1.ReadTempOp(ref TempRefLo1)) .AddOperation(heatMetersPath == null ? null : heatMetersPath.TMeterRefCold2.ReadTempOp(ref TempRefLo2)) @@ -610,7 +621,7 @@ namespace TBF.BenchControl.TestMethods.FixedStartDeferredEvaluation .AddOperation(heatMetersPath == null ? null : heatMetersPath.TMeterRefWarm2.ReadTempOp(ref TempRefHi2)) .AddOperation(heatMetersPath == null ? null : heatMetersPath.TMeterRefCold1.ReadTempOp(ref TempRefLo1)) .AddOperation(heatMetersPath == null ? null : heatMetersPath.TMeterRefCold2.ReadTempOp(ref TempRefLo2)) - .AddOperation(StateMachine.ControlBoard.SetValvesOp(outPath.StartValve, null)) + .AddOperation(new TBF.BenchControl.Elde.SetValvesOp(cBrd, false, outPath)) .AddOperation(StateMachine.ControlBoard.UpdateTankWeightOp()) .EnterState(); do @@ -722,7 +733,7 @@ namespace TBF.BenchControl.TestMethods.FixedStartDeferredEvaluation .AddOperation(heatMetersPath == null ? null : heatMetersPath.TMeterRefWarm2.ReadTempOp(ref TempRefHi2)) .AddOperation(heatMetersPath == null ? null : heatMetersPath.TMeterRefCold1.ReadTempOp(ref TempRefLo1)) .AddOperation(heatMetersPath == null ? null : heatMetersPath.TMeterRefCold2.ReadTempOp(ref TempRefLo2)) - .AddOperation(StateMachine.ControlBoard.SetValvesOp(null, outPath.StartValve)) + .AddOperation(new TBF.BenchControl.Elde.SetValvesOp(cBrd, true, outPath)) .AddOperation(StateMachine.ControlBoard.UpdateTankWeightOp()) .EnterState(); do diff --git a/TBF/BenchControl/TestMethods/FixedStartMassCollection/FixedStartMassCollectionSeq.cs b/TBF/BenchControl/TestMethods/FixedStartMassCollection/FixedStartMassCollectionSeq.cs index 5f22d67be..94eca76a5 100644 --- a/TBF/BenchControl/TestMethods/FixedStartMassCollection/FixedStartMassCollectionSeq.cs +++ b/TBF/BenchControl/TestMethods/FixedStartMassCollection/FixedStartMassCollectionSeq.cs @@ -233,13 +233,9 @@ namespace TBF.BenchControl.TestMethods.FixedStartMassCollection (inPath.Pump as GenericDevices.IPumpFM).TurnOn(test.PumpPower); } /// - IList valvesOpen = new List(); - valvesOpen.Add(inPath.Pump); - valvesOpen.Add(outPath.StartValve); - /// - State.Create(string.Format("{0}({1}) : Turning pump on", test.Method, test.Name)) + State.Create(string.Format("{0}({1}) : Pump on", test.Method, test.Name)) .AddOperation(checkUiOp) - .AddOperation(StateMachine.ControlBoard.SetValvesOp(valvesOpen, null)) + .AddOperation(StateMachine.ControlBoard.SetValvesOp(inPath.Pump, null)) .AddOperation(heatMetersPromptOp) .EnterState(); do @@ -251,6 +247,21 @@ namespace TBF.BenchControl.TestMethods.FixedStartMassCollection if (TestAndLogUiCmdStop(test, e)) { retVal = Event.UiCmdStop; goto stopTest; } } while (e.Contains(Event.ValvesBusy)); + /// + State.Create(string.Format("{0}({1}) : Start valve open", test.Method, test.Name)) + .AddOperation(checkUiOp) + .AddOperation(new TBF.BenchControl.Elde.SetValvesOp(cBrd, false, outPath)) + .AddOperation(heatMetersPromptOp) + .EnterState(); + do + { + e = StateMachine.WaitRunDevsRunOps(); + Bridge.OnProcessData(this, new ProcessDataEventArgs(test, repetitionNr, Config.Entities.Progress.FlowSetting)); + Bridge.OnTestProgress(this, new TestProgressEventArgs(test, repetitionNr, Config.Entities.Progress.FlowSetting)); + + if (TestAndLogUiCmdStop(test, e)) { retVal = Event.UiCmdStop; goto stopTest; } + } + while (e.Contains(Event.ValvesBusy)); //-------------------------------- @@ -362,7 +373,7 @@ namespace TBF.BenchControl.TestMethods.FixedStartMassCollection //----------------------------------------------------------------- State.Create(string.Format("{0}({1}) : Closing the start/stop valve before the fixed start test", test.Method, test.Name)) .AddOperation(checkUiOp) - .AddOperation(StateMachine.ControlBoard.SetValvesOp(null, outPath.StartValve)) + .AddOperation(new TBF.BenchControl.Elde.SetValvesOp(cBrd, true, outPath)) .AddOperation(heatMetersPath == null ? null : heatMetersPath.TMeterRefWarm1.ReadTempOp(ref TempRefHi1)) .AddOperation(heatMetersPath == null ? null : heatMetersPath.TMeterRefWarm2.ReadTempOp(ref TempRefHi2)) .AddOperation(heatMetersPath == null ? null : heatMetersPath.TMeterRefCold1.ReadTempOp(ref TempRefLo1)) @@ -600,7 +611,7 @@ namespace TBF.BenchControl.TestMethods.FixedStartMassCollection .AddOperation(heatMetersPath == null ? null : heatMetersPath.TMeterRefWarm2.ReadTempOp(ref TempRefHi2)) .AddOperation(heatMetersPath == null ? null : heatMetersPath.TMeterRefCold1.ReadTempOp(ref TempRefLo1)) .AddOperation(heatMetersPath == null ? null : heatMetersPath.TMeterRefCold2.ReadTempOp(ref TempRefLo2)) - .AddOperation(StateMachine.ControlBoard.SetValvesOp(outPath.StartValve, null)) + .AddOperation(new TBF.BenchControl.Elde.SetValvesOp(cBrd, false, outPath)) .AddOperation(StateMachine.ControlBoard.UpdateTankWeightOp()) .EnterState(); do @@ -712,7 +723,7 @@ namespace TBF.BenchControl.TestMethods.FixedStartMassCollection .AddOperation(heatMetersPath == null ? null : heatMetersPath.TMeterRefWarm2.ReadTempOp(ref TempRefHi2)) .AddOperation(heatMetersPath == null ? null : heatMetersPath.TMeterRefCold1.ReadTempOp(ref TempRefLo1)) .AddOperation(heatMetersPath == null ? null : heatMetersPath.TMeterRefCold2.ReadTempOp(ref TempRefLo2)) - .AddOperation(StateMachine.ControlBoard.SetValvesOp(null, outPath.StartValve)) + .AddOperation(new TBF.BenchControl.Elde.SetValvesOp(cBrd, true, outPath)) .AddOperation(StateMachine.ControlBoard.UpdateTankWeightOp()) .EnterState(); do diff --git a/TBF/BenchControl/TestMethods/LeakTest/LeakTestSeq.cs b/TBF/BenchControl/TestMethods/LeakTest/LeakTestSeq.cs index 93fa08b10..8d51ad771 100644 --- a/TBF/BenchControl/TestMethods/LeakTest/LeakTestSeq.cs +++ b/TBF/BenchControl/TestMethods/LeakTest/LeakTestSeq.cs @@ -168,8 +168,8 @@ namespace TBF.BenchControl.TestMethods.LeakTest //------------------------------------------------ State.Create(string.Format("{0}({1}) : Closing the valve", test.Method, test.Name)) .AddOperation(checkUiOp) - .AddOperation(cBrd.SetValvesOp(null, outPath.StartValve)) - .AddOperation(benchPath.TempMtrUp.ReadTempOp(ref TempUp)) + .AddOperation(new TBF.BenchControl.Elde.SetValvesOp(cBrd, true, outPath)) + .AddOperation(benchPath.TempMtrUp.ReadTempOp(ref TempUp)) .AddOperation(benchPath.TempMtrDown.ReadTempOp(ref TempDown)) .AddOperation(benchPath.PressMtrUp.ReadPressureOp(ref PressUp)) .AddOperation(benchPath.PressMtrDown.ReadPressureOp(ref PressDown)) diff --git a/TBF/Properties/AssemblyInfo.cs b/TBF/Properties/AssemblyInfo.cs index 99cb3a3e0..3c0b5ada2 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.884.0")] -[assembly: AssemblyFileVersion("2.18.884.0")] +[assembly: AssemblyVersion("2.18.887.0")] +[assembly: AssemblyFileVersion("2.18.887.0")] diff --git a/TBF/UiControls/PathsOutputCtrl.cs b/TBF/UiControls/PathsOutputCtrl.cs index 20ba60270..b0b0347a3 100644 --- a/TBF/UiControls/PathsOutputCtrl.cs +++ b/TBF/UiControls/PathsOutputCtrl.cs @@ -25,14 +25,21 @@ namespace TBF.UiControls Name, Qfrom, Qto, - RegulValve, - RefFlowmtr, + RefFlowmtr, + RegulValve, PidCoef, - StartValve, Div, Tdiv, Scale, - FixedColumnsCount, + StartValve1, + InvertSV1, + StartValve2, + InvertSV2, + LagSV2, + StartValve3, + InvertSV3, + LagSV3, + FixedColumnsCount, } readonly int fixedColumnsCount = (int)Column.FixedColumnsCount; @@ -67,13 +74,20 @@ namespace TBF.UiControls Columns.Add(Strings.Name, (ls.OutputColumnCount > 0) ? ls.OutputColumnWidths[0] : 60 * parent.Dpi / PathsDlg.Dpi100pct); Columns.Add(Strings.Q_from_m3h, (ls.OutputColumnCount > 1) ? ls.OutputColumnWidths[1] : 50 * parent.Dpi / PathsDlg.Dpi100pct); Columns.Add(Strings.Q_to_m3h, (ls.OutputColumnCount > 2) ? ls.OutputColumnWidths[2] : 50 * parent.Dpi / PathsDlg.Dpi100pct); - Columns.Add(Strings.Reg_valve, (ls.OutputColumnCount > 3) ? ls.OutputColumnWidths[3] : 80 * parent.Dpi / PathsDlg.Dpi100pct); - Columns.Add(Strings.Flowmeter, (ls.OutputColumnCount > 4) ? ls.OutputColumnWidths[4] : 85 * parent.Dpi / PathsDlg.Dpi100pct); + Columns.Add(Strings.Flowmeter, (ls.OutputColumnCount > 3) ? ls.OutputColumnWidths[3] : 85 * parent.Dpi / PathsDlg.Dpi100pct); + Columns.Add(Strings.Reg_valve, (ls.OutputColumnCount > 4) ? ls.OutputColumnWidths[4] : 80 * parent.Dpi / PathsDlg.Dpi100pct); Columns.Add(Strings.PID, (ls.OutputColumnCount > 5) ? ls.OutputColumnWidths[5] : 50 * parent.Dpi / PathsDlg.Dpi100pct); - Columns.Add(Strings.StartValve, (ls.OutputColumnCount > 6) ? ls.OutputColumnWidths[6] : 80 * parent.Dpi / PathsDlg.Dpi100pct); - Columns.Add(Strings.Diverter, (ls.OutputColumnCount > 7) ? ls.OutputColumnWidths[7] : 60 * parent.Dpi / PathsDlg.Dpi100pct); - Columns.Add(Strings.T_div, (ls.OutputColumnCount > 8) ? ls.OutputColumnWidths[8] : 70 * parent.Dpi / PathsDlg.Dpi100pct); - Columns.Add(Strings.Balance, (ls.OutputColumnCount > 9) ? ls.OutputColumnWidths[9] : 50 * parent.Dpi / PathsDlg.Dpi100pct); + Columns.Add(Strings.Diverter, (ls.OutputColumnCount > 6) ? ls.OutputColumnWidths[6] : 60 * parent.Dpi / PathsDlg.Dpi100pct); + Columns.Add(Strings.T_div, (ls.OutputColumnCount > 7) ? ls.OutputColumnWidths[7] : 70 * parent.Dpi / PathsDlg.Dpi100pct); + Columns.Add(Strings.Balance, (ls.OutputColumnCount > 8) ? ls.OutputColumnWidths[8] : 50 * parent.Dpi / PathsDlg.Dpi100pct); + Columns.Add(string.Format("{0} 1", Strings.StartValve), (ls.OutputColumnCount > 9) ? ls.OutputColumnWidths[9] : 80 * parent.Dpi / PathsDlg.Dpi100pct); + Columns.Add(string.Format("Inv. SV1"), (ls.OutputColumnCount > 10) ? ls.OutputColumnWidths[10] : 80 * parent.Dpi / PathsDlg.Dpi100pct); + Columns.Add(string.Format("{0} 2", Strings.StartValve), (ls.OutputColumnCount > 11) ? ls.OutputColumnWidths[11] : 80 * parent.Dpi / PathsDlg.Dpi100pct); + Columns.Add(string.Format("Inv.SV2"), (ls.OutputColumnCount > 12) ? ls.OutputColumnWidths[12] : 80 * parent.Dpi / PathsDlg.Dpi100pct); + Columns.Add(string.Format("Lag SV2"), (ls.OutputColumnCount > 13) ? ls.OutputColumnWidths[13] : 80 * parent.Dpi / PathsDlg.Dpi100pct); + Columns.Add(string.Format("{0} 3", Strings.StartValve), (ls.OutputColumnCount > 14) ? ls.OutputColumnWidths[14] : 80 * parent.Dpi / PathsDlg.Dpi100pct); + Columns.Add(string.Format("Inv.SV3"), (ls.OutputColumnCount > 15) ? ls.OutputColumnWidths[15] : 80 * parent.Dpi / PathsDlg.Dpi100pct); + Columns.Add(string.Format("Lag SV3"), (ls.OutputColumnCount > 16) ? ls.OutputColumnWidths[16] : 80 * parent.Dpi / PathsDlg.Dpi100pct); int clmn = (int)Column.FixedColumnsCount; foreach (var vlv in parent.Valves) { @@ -85,44 +99,68 @@ namespace TBF.UiControls } /// Prepare fixed columns combo boxes - ComboBox regulValveComboBox = new ComboBox(); - ComboBox flowMeterComboBox = new ComboBox(); - ComboBox startValveComboBox = new ComboBox(); + ComboBox flowMeterComboBox = new ComboBox(); + ComboBox regulValveComboBox = new ComboBox(); ComboBox diverterComboBox = new ComboBox(); ComboBox tempMeterDivComboBox = new ComboBox(); ComboBox scaleComboBox = new ComboBox(); - regulValveComboBox.Items.Add("---"); + ComboBox startValve1ComboBox = new ComboBox(); + ComboBox invertSV1ComboBox = new ComboBox(); + ComboBox startValve2ComboBox = new ComboBox(); + ComboBox invertSV2ComboBox = new ComboBox(); + TextBox lagSV2TextBox = new TextBox(); + ComboBox startValve3ComboBox = new ComboBox(); + ComboBox invertSV3ComboBox = new ComboBox(); + TextBox lagSV3TextBox = new TextBox(); flowMeterComboBox.Items.Add("---"); - startValveComboBox.Items.Add("---"); + regulValveComboBox.Items.Add("---"); diverterComboBox.Items.Add("---"); tempMeterDivComboBox.Items.Add("---"); scaleComboBox.Items.Add("---"); + startValve1ComboBox.Items.Add("---"); + invertSV1ComboBox.Items.Add(Strings.no); + invertSV1ComboBox.Items.Add(Strings.yes); + startValve2ComboBox.Items.Add("---"); + invertSV2ComboBox.Items.Add(Strings.no); + invertSV2ComboBox.Items.Add(Strings.yes); + startValve3ComboBox.Items.Add("---"); + invertSV3ComboBox.Items.Add(Strings.no); + invertSV3ComboBox.Items.Add(Strings.yes); foreach (var cmpnt in parent.TbfComponents) { - if (cmpnt is IRegulValve) regulValveComboBox.Items.Add(cmpnt.Cfg.Name); - if (cmpnt is IFlowMeter) flowMeterComboBox.Items.Add(cmpnt.Cfg.Name); + if (cmpnt is IFlowMeter) flowMeterComboBox.Items.Add(cmpnt.Cfg.Name); + if (cmpnt is IRegulValve) regulValveComboBox.Items.Add(cmpnt.Cfg.Name); if (cmpnt is IDiverter) diverterComboBox.Items.Add(cmpnt.Cfg.Name); - if (cmpnt is IScale) scaleComboBox.Items.Add(cmpnt.Cfg.Name); - if (cmpnt is ITempMeter) tempMeterDivComboBox.Items.Add(cmpnt.Cfg.Name); + if (cmpnt is ITempMeter) tempMeterDivComboBox.Items.Add(cmpnt.Cfg.Name); + if (cmpnt is IScale) scaleComboBox.Items.Add(cmpnt.Cfg.Name); if (cmpnt is IValve && (cmpnt as IValve).CoupledTo == null) { - startValveComboBox.Items.Add(cmpnt.Cfg.Name); + startValve1ComboBox.Items.Add(cmpnt.Cfg.Name); + startValve2ComboBox.Items.Add(cmpnt.Cfg.Name); + startValve3ComboBox.Items.Add(cmpnt.Cfg.Name); } } editors = new Control[fixedColumnsCount + 64]; /// - editors[(int)Column.Name] = new TextBox(); /// Name - editors[(int)Column.Qfrom] = new TextBox(); /// Q_from - editors[(int)Column.Qto] = new TextBox(); /// Q_to - editors[(int)Column.RegulValve] = regulValveComboBox; - editors[(int)Column.RefFlowmtr] = flowMeterComboBox; - editors[(int)Column.PidCoef] = new TextBox(); /// PID - editors[(int)Column.StartValve] = startValveComboBox; - editors[(int)Column.Div] = diverterComboBox; - editors[(int)Column.Tdiv] = tempMeterDivComboBox; - editors[(int)Column.Scale] = scaleComboBox; - /// Prepare valve combo-boxes (max. 64 valves) + editors[(int)Column.Name] = new TextBox(); /// Name + editors[(int)Column.Qfrom] = new TextBox(); /// Q_from + editors[(int)Column.Qto] = new TextBox(); /// Q_to + editors[(int)Column.RefFlowmtr] = flowMeterComboBox; + editors[(int)Column.RegulValve] = regulValveComboBox; + editors[(int)Column.PidCoef] = new TextBox(); /// PID + editors[(int)Column.Div] = diverterComboBox; + editors[(int)Column.Tdiv] = tempMeterDivComboBox; + editors[(int)Column.Scale] = scaleComboBox; + editors[(int)Column.StartValve1] = startValve1ComboBox; + editors[(int)Column.InvertSV1] = invertSV1ComboBox; + editors[(int)Column.StartValve2] = startValve2ComboBox; + editors[(int)Column.InvertSV2] = invertSV2ComboBox; + editors[(int)Column.LagSV2] = lagSV2TextBox; + editors[(int)Column.StartValve3] = startValve3ComboBox; + editors[(int)Column.InvertSV3] = invertSV3ComboBox; + editors[(int)Column.LagSV3] = lagSV3TextBox; + /// Prepare valve combo-boxes (max. 64 valves) for (int i = 0; i < 64; i++) { ComboBox cb = new ComboBox(); @@ -197,14 +235,23 @@ namespace TBF.UiControls lvi.SubItems.Add(path.Qfrom.ToString()); lvi.SubItems.Add(path.Qto.ToString()); - lvi.SubItems.Add((path.RegulValve != null) ? path.RegulValve.Cfg.Name : "---"); - lvi.SubItems.Add((path.FlowMeter != null) ? path.FlowMeter.Cfg.Name : "---"); + lvi.SubItems.Add((path.FlowMeter != null) ? path.FlowMeter.Cfg.Name : "---"); + lvi.SubItems.Add((path.RegulValve != null) ? path.RegulValve.Cfg.Name : "---"); lvi.SubItems.Add(path.PidCoef.ToString("F1")); - lvi.SubItems.Add((path.StartValve != null) ? path.StartValve.Cfg.Name : "---"); lvi.SubItems.Add((path.Diverter != null) ? path.Diverter.Cfg.Name : "---"); lvi.SubItems.Add((path.TempDiv != null) ? path.TempDiv.Cfg.Name : "---"); lvi.SubItems.Add((path.Scale != null) ? path.Scale.Cfg.Name : "---"); + + lvi.SubItems.Add((path.StartValve1 != null) ? path.StartValve1.Cfg.Name : "---"); + lvi.SubItems.Add(path.InvertSV1 ? Strings.yes : Strings.no); + lvi.SubItems.Add((path.StartValve2 != null) ? path.StartValve2.Cfg.Name : "---"); + lvi.SubItems.Add(path.InvertSV2 ? Strings.yes : Strings.no); + lvi.SubItems.Add(path.LagSV2.ToString()); + lvi.SubItems.Add((path.StartValve3 != null) ? path.StartValve3.Cfg.Name : "---"); + lvi.SubItems.Add(path.InvertSV3 ? Strings.yes : Strings.no); + lvi.SubItems.Add(path.LagSV3.ToString()); + foreach (var valve in parent.Valves) { if (valve.Category == ValveCategory.All || valve.Category == ValveCategory.Output) @@ -246,17 +293,29 @@ namespace TBF.UiControls allOk &= Utils.TryParseUFloat(lvi.SubItems[(int)Column.Qto].Text, out Qto); entity.Qto = Qto; - entity.RegulValve = lvi.SubItems[(int)Column.RegulValve].Text.Equals("---") ? null : lvi.SubItems[(int)Column.RegulValve].Text; - entity.FlowMeter = lvi.SubItems[(int)Column.RefFlowmtr].Text.Equals("---") ? null : lvi.SubItems[(int)Column.RefFlowmtr].Text; + entity.FlowMeter = lvi.SubItems[(int)Column.RefFlowmtr].Text.Equals("---") ? null : lvi.SubItems[(int)Column.RefFlowmtr].Text; + entity.RegulValve = lvi.SubItems[(int)Column.RegulValve].Text.Equals("---") ? null : lvi.SubItems[(int)Column.RegulValve].Text; float pid; allOk &= Utils.TryParseSFloat(lvi.SubItems[(int)Column.PidCoef].Text, out pid); entity.PidCoef = pid; - entity.StartValve = lvi.SubItems[(int)Column.StartValve].Text.Equals("---") ? null : lvi.SubItems[(int)Column.StartValve].Text; - entity.Diverter = lvi.SubItems[(int)Column.Div].Text.Equals("---") ? null : lvi.SubItems[(int)Column.Div].Text; - entity.TempDiv = lvi.SubItems[(int)Column.Tdiv].Text.Equals("---") ? null : lvi.SubItems[(int)Column.Tdiv].Text; - entity.Scale = lvi.SubItems[(int)Column.Scale].Text.Equals("---") ? null : lvi.SubItems[(int)Column.Scale].Text; + entity.Diverter = lvi.SubItems[(int)Column.Div].Text.Equals("---") ? null : lvi.SubItems[(int)Column.Div].Text; + entity.TempDiv = lvi.SubItems[(int)Column.Tdiv].Text.Equals("---") ? null : lvi.SubItems[(int)Column.Tdiv].Text; + entity.Scale = lvi.SubItems[(int)Column.Scale].Text.Equals("---") ? null : lvi.SubItems[(int)Column.Scale].Text; + + string sv1 = lvi.SubItems[(int)Column.StartValve1].Text.Equals("---") ? string.Empty : lvi.SubItems[(int)Column.StartValve1].Text; + bool invertSV1 = lvi.SubItems[(int)Column.InvertSV1].Text.Equals(Strings.yes); + string sv2 = lvi.SubItems[(int)Column.StartValve2].Text.Equals("---") ? string.Empty : lvi.SubItems[(int)Column.StartValve2].Text; + bool invertSV2 = lvi.SubItems[(int)Column.InvertSV2].Text.Equals(Strings.yes); + int lagSV2 = 0; + int.TryParse(lvi.SubItems[(int)Column.LagSV2].Text, out lagSV2); + string sv3 = lvi.SubItems[(int)Column.StartValve3].Text.Equals("---") ? string.Empty : lvi.SubItems[(int)Column.StartValve3].Text; + bool invertSV3 = lvi.SubItems[(int)Column.InvertSV3].Text.Equals(Strings.yes); + int lagSV3 = 0; + int.TryParse(lvi.SubItems[(int)Column.LagSV3].Text, out lagSV3); + /// + entity.StartValve = string.Format("{0}~{1}~{2}~{3}~{4}~{5}~{6}~{7}", sv1, (invertSV1 ? "i" : "n"), sv2, (invertSV2 ? "i" : "n"), lagSV2, sv3, (invertSV3 ? "i" : "n"), lagSV3); string valvesOpen = string.Empty; string valvesClose = string.Empty; diff --git a/packages/ControlBoard/JuznaAfrika50/ControlComponent3U.dll b/packages/ControlBoard/JuznaAfrika50/ControlComponent3U.dll index 0813a564e..ab193dfe0 100644 Binary files a/packages/ControlBoard/JuznaAfrika50/ControlComponent3U.dll and b/packages/ControlBoard/JuznaAfrika50/ControlComponent3U.dll differ