diff --git a/TBF/Rig/ControlBoard/IAdvancedControlBoard.cs b/TBF/Rig/ControlBoard/IAdvancedControlBoard.cs index 6cd191a6a..facae2243 100644 --- a/TBF/Rig/ControlBoard/IAdvancedControlBoard.cs +++ b/TBF/Rig/ControlBoard/IAdvancedControlBoard.cs @@ -28,7 +28,7 @@ namespace TBF.Rig.ControlBoard /// Plotter for diverter end /// Operation running a test IOperation FlyingStartStopTestOp(Test test, double qFrom, double qTo, int pulsesCount, - bool withDiverter, bool isProlonged, int massPulsesCount, + bool withDiverter, bool isDelayedStart, bool isProlonged, int massPulsesCount, bool readDivTransition, Statistics divStartPlotter, Statistics divStopPlotter); } } diff --git a/TBF/Rig/ControlBoard/Uni/Action.cs b/TBF/Rig/ControlBoard/Uni/Action.cs index bd05b92b4..549fef046 100644 --- a/TBF/Rig/ControlBoard/Uni/Action.cs +++ b/TBF/Rig/ControlBoard/Uni/Action.cs @@ -41,6 +41,7 @@ namespace TBF.Rig.ControlBoard.Uni public Command StartStop { get; set; } /// MeasureFlow, SetFlow, StartTest, StopTest and SwitchDiverter public bool IsSyncMethod { get; set; } /// StartTest argument public bool IsDivUsed { get; set; } /// StartTest argument + public bool IsDelayedStart { get; set; } /// StartTest argument public bool IsStartStop { get; set; } /// StartTest argument public bool IsProlonged { get; set; } /// StartTest argument public bool ToTank { get; set; } /// SwitchDiverter argument @@ -70,6 +71,7 @@ namespace TBF.Rig.ControlBoard.Uni Route = 0; IsSyncMethod = false; IsDivUsed = false; + IsDelayedStart = false; IsStartStop = false; IsProlonged = false; MassPulsesCount = 0; @@ -131,6 +133,7 @@ namespace TBF.Rig.ControlBoard.Uni FlowMId = flowMeterId, IsSyncMethod = false, IsDivUsed = false, + IsDelayedStart = false, IsStartStop = false, IsProlonged = false, TotalPulsesCount = 0x7FFFFF, @@ -143,6 +146,7 @@ namespace TBF.Rig.ControlBoard.Uni FlowMId = action.FlowMId; IsSyncMethod = false; IsDivUsed = false; + IsDelayedStart = false; IsStartStop = false; IsProlonged = false; TotalPulsesCount = action.TotalPulsesCount; @@ -202,8 +206,8 @@ namespace TBF.Rig.ControlBoard.Uni ///---------------------------------------------------------------------------------------------- public static Action StartTest(bool isFromUI, int flowMId, int divId, int divThreshold, - bool isSyncMethod, bool isDivUsed, bool isStartStop, bool isProlonged, - int totalPulsesCount, int massPulsesCount = 0) + bool isSyncMethod, bool isDivUsed, bool isDelayedStart, bool isStartStop, + bool isProlonged, int totalPulsesCount, int massPulsesCount = 0) { return new Action { @@ -215,6 +219,7 @@ namespace TBF.Rig.ControlBoard.Uni DivThreshold = divThreshold, IsSyncMethod = isSyncMethod, IsDivUsed = isDivUsed, + IsDelayedStart = isDelayedStart, IsStartStop = isStartStop, IsProlonged = isProlonged, TotalPulsesCount = totalPulsesCount, @@ -229,6 +234,7 @@ namespace TBF.Rig.ControlBoard.Uni DivThreshold = action.DivThreshold; IsSyncMethod = action.IsSyncMethod; IsDivUsed = action.IsDivUsed; + IsDelayedStart = action.IsDelayedStart; IsStartStop = action.IsStartStop; IsProlonged = action.IsProlonged; TotalPulsesCount = action.TotalPulsesCount; @@ -576,7 +582,7 @@ namespace TBF.Rig.ControlBoard.Uni } } - log.InfoFormat("Combined action: {0} Rt={1} Et={2} RV={3} Div#={4} Cmd={5} Sync={6} wDiv={7} S/S={8} Prolng={9} ToTank={10} Puls={11} MPls={12} RVMode={13} P1={14} P2={15} Ao1={19}", + log.InfoFormat("Combined action: {0} Rt={1} Et={2} RV={3} Div#={4} Cmd={5} Sync={6} wDiv={7} delStrt={8} S/S={9} Prolng={10} ToTank={11} Puls={12} MPls={13} RVMode={14} P1={15} P2={16} Ao1={20}", ((int)combinedAction.ActionId).ToString("X3"), combinedAction.Route.ToString("X32"), combinedAction.FlowMId, @@ -585,6 +591,7 @@ namespace TBF.Rig.ControlBoard.Uni combinedAction.StartStop, combinedAction.IsSyncMethod, combinedAction.IsDivUsed, + combinedAction.IsDelayedStart, combinedAction.IsStartStop, combinedAction.IsProlonged, combinedAction.ToTank, @@ -617,7 +624,7 @@ namespace TBF.Rig.ControlBoard.Uni args = string.Format("RV={0} P1={1} P2={2} pid={3}", RegVId, RVMovePar1, RVMovePar2, PID); break; case ActionID.StartTest: - args = string.Format("Et={0} Puls={1} MPls={2} Sync={3} Div={4} S/S={5} Prolonged={6}", FlowMId, TotalPulsesCount, MassPulsesCount, IsSyncMethod, IsDivUsed, IsStartStop, IsProlonged); + args = string.Format("Et={0} Puls={1} MPls={2} Sync={3} Div={4} DelStrt={5} S/S={6} Prolonged={7}", FlowMId, TotalPulsesCount, MassPulsesCount, IsSyncMethod, IsDivUsed, IsDelayedStart, IsStartStop, IsProlonged); break; case ActionID.RegVlvIncrMove: args = string.Format("RV={0} Time={1}ms", RegVId, (RegVMode & RegValveMode.NegPulseWidth) != 0 ? -50 * RVMovePar1 : 50 * RVMovePar1); diff --git a/TBF/Rig/ControlBoard/Uni/FlyingStartStopTestOp.cs b/TBF/Rig/ControlBoard/Uni/FlyingStartStopTestOp.cs index af97fc83b..0b6487c15 100644 --- a/TBF/Rig/ControlBoard/Uni/FlyingStartStopTestOp.cs +++ b/TBF/Rig/ControlBoard/Uni/FlyingStartStopTestOp.cs @@ -1,5 +1,5 @@ /// -/// Copyright (c) 2021 Sensus Slovensko a.s. +/// Copyright (c) 2021-2023 Sensus Slovensko a.s. /// using System; using log4net; @@ -18,6 +18,7 @@ namespace TBF.Rig.ControlBoard.Uni readonly double qTo; readonly int pulsesCount; /// Number of reference pulses for a complete test readonly bool withDiverter; + readonly bool isDelayedStart; readonly bool isProlonged; readonly int massPulsesCount; /// Number of reference pulses for mass collection readonly bool readDivTransition; @@ -48,8 +49,8 @@ namespace TBF.Rig.ControlBoard.Uni /// true = Prolonged test with diverter /// Test part 1 duration - number of reference flow meter pulses< /// true = Read diverter transition - public FlyingStartStopTestOp(UniCB cb, OutputPath devices, double qFrom, double qTo, int pulsesCount, bool withDiverter, - bool isProlonged, int massPulsesCount, + public FlyingStartStopTestOp(UniCB cb, OutputPath devices, double qFrom, double qTo, int pulsesCount, + bool withDiverter, bool isDelayedStart, bool isProlonged, int massPulsesCount, bool readDivTransition, Statistics divStartPlotter, Statistics divStopPlotter) { this.uniCB = cb; @@ -57,6 +58,7 @@ namespace TBF.Rig.ControlBoard.Uni this.qTo = qTo; this.pulsesCount = pulsesCount; this.withDiverter = withDiverter; + this.isDelayedStart = isDelayedStart; this.isProlonged = withDiverter && isProlonged; this.massPulsesCount = massPulsesCount; this.readDivTransition = withDiverter && readDivTransition; @@ -99,7 +101,7 @@ namespace TBF.Rig.ControlBoard.Uni if (withDiverter) { uniCB.DivResolution = diverter.Resolution; } uniCB.SetActivity((diverter != null) ? Activity.FlyingStartStopTestWithDiverter : Activity.FlyingStartStopTest); uniCB.StartTest(false, flowMeter.Idx1, (diverter != null) ? diverter.DiverterNr : 0, (diverter != null) ? diverter.StartThreshold : 0, - true, withDiverter, false, isProlonged, pulsesCount, massPulsesCount); + true, withDiverter, isDelayedStart, false, isProlonged, pulsesCount, massPulsesCount); opState = OpState.StartingTest; } diff --git a/TBF/Rig/ControlBoard/Uni/OutputMessage.cs b/TBF/Rig/ControlBoard/Uni/OutputMessage.cs index 142974daa..2d1aeee75 100644 --- a/TBF/Rig/ControlBoard/Uni/OutputMessage.cs +++ b/TBF/Rig/ControlBoard/Uni/OutputMessage.cs @@ -47,7 +47,7 @@ namespace TBF.Rig.ControlBoard.Uni /// Command message[4] = GetCommand(action); message[5] = action.IsStart() ? GetStartParams(action) : action.IsStop() ? GetStopParams(action) : (byte)0; - message[6] = (byte)(((arguments.DivId <= 0) ? 0 : (arguments.DivId - 1)) + ((arguments.FlowMId > 7) ? arguments.FlowMId : 0)); + message[6] = (byte)(((arguments.DivId <= 0) ? 0 : (arguments.DivId - 1)) + ((arguments.FlowMId > 7) ? arguments.FlowMId : 0) + (action.IsDelayedStart ? 128 : 0)); int totalPulsesCount = (arguments.TotalPulsesCount < 0) ? 0 : arguments.TotalPulsesCount; message[7] = (byte)(totalPulsesCount & 0xFF); diff --git a/TBF/Rig/ControlBoard/Uni/StandingStartStopTestOp.cs b/TBF/Rig/ControlBoard/Uni/StandingStartStopTestOp.cs index ccd131beb..aac89e6e3 100644 --- a/TBF/Rig/ControlBoard/Uni/StandingStartStopTestOp.cs +++ b/TBF/Rig/ControlBoard/Uni/StandingStartStopTestOp.cs @@ -77,7 +77,7 @@ namespace TBF.Rig.ControlBoard.Uni if (withDiverter) { uniCB.DivResolution = diverter.Resolution; } uniCB.SetActivity(Activity.StandingStartStopTest); uniCB.StartTest(false, flowMeter.Idx1, (withDiverter ? diverter.DiverterNr : 0), 0, - false, withDiverter, true, false, pulsesCount); + false, withDiverter, false, true, false, pulsesCount); opState = OpState.StartingTest; } diff --git a/TBF/Rig/ControlBoard/Uni/UniCB.cs b/TBF/Rig/ControlBoard/Uni/UniCB.cs index 9cfa31106..a6ccd9ee9 100644 --- a/TBF/Rig/ControlBoard/Uni/UniCB.cs +++ b/TBF/Rig/ControlBoard/Uni/UniCB.cs @@ -708,11 +708,11 @@ namespace TBF.Rig.ControlBoard.Uni /// /// Operation running a test public IOperation FlyingStartStopTestOp(Test test, double qFrom, double qTo, int pulsesCount, bool withDiverter = false, - bool isProlonged = false, int massPulsesCount = 0, bool readDivTransition = false, - TBF.Rig.Sequences.Statistics plotterStart = null, TBF.Rig.Sequences.Statistics plotterEnd = null) + bool isDelayedStart = false, bool isProlonged = false, int massPulsesCount = 0, + bool readDivTransition = false, Statistics plotterStart = null, Statistics plotterEnd = null) { - return new FlyingStartStopTestOp(this, devices, qFrom, qTo, pulsesCount, withDiverter, isProlonged, massPulsesCount, - readDivTransition, plotterStart, plotterEnd); + return new FlyingStartStopTestOp(this, devices, qFrom, qTo, pulsesCount, withDiverter, + isDelayedStart, isProlonged, massPulsesCount, readDivTransition, plotterStart, plotterEnd); } /// @@ -804,13 +804,13 @@ namespace TBF.Rig.ControlBoard.Uni } public void StartTest(bool isFromUI, int flowMId, int divId, int divThreshold, - bool isSyncMethod, bool isDivUsed, bool isStartStop, bool isProlonged, + bool isSyncMethod, bool isDivUsed, bool isDelayedStart, bool isStartStop, bool isProlonged, int totalPulsesCount, int massPulsesCount = -1) { if (IsUIBlocked && isFromUI) return; actionQueue.Enqueue(Action.StartTest(isFromUI, flowMId, divId, divThreshold, - isSyncMethod, isDivUsed, isStartStop, isProlonged, + isSyncMethod, isDivUsed, isDelayedStart, isStartStop, isProlonged, totalPulsesCount, massPulsesCount)); log.InfoFormat("Enqueue( StartTest(fm={0}, div={1}, Sync={2}, withDiv={3}, s/s={4}, prolonged={5} pulsesCount={6} massPulsesCount={7}) )", flowMId, divId, isSyncMethod, isDivUsed, isStartStop, isProlonged, totalPulsesCount, massPulsesCount); @@ -900,7 +900,7 @@ namespace TBF.Rig.ControlBoard.Uni if (toTank) { - actionQueue.Enqueue(Action.StartTest(isFromUI, 0, divNr1, 127, true, true, false, false, int.MaxValue, 0)); + actionQueue.Enqueue(Action.StartTest(isFromUI, 0, divNr1, 127, true, true, false, false, false, int.MaxValue, 0)); } else { diff --git a/TBF/Rig/TestMethods/CombinedWithDetection/CombinedWithDetectionSeq.cs b/TBF/Rig/TestMethods/CombinedWithDetection/CombinedWithDetectionSeq.cs index f4d9c3f20..c79a1ff39 100644 --- a/TBF/Rig/TestMethods/CombinedWithDetection/CombinedWithDetectionSeq.cs +++ b/TBF/Rig/TestMethods/CombinedWithDetection/CombinedWithDetectionSeq.cs @@ -66,7 +66,7 @@ namespace TBF.Rig.TestMethods.CombinedWithDetection } public IList Execute(Config.Entities.Test test, int repetitionNr, bool isLastRepetition, - CombinedWithDetTestParams testParams, + bool isDelayedStart, CombinedWithDetTestParams testParams, Common.DebugMode debugLevel) { if (debugLevel == Common.DebugMode.Simulate) @@ -511,7 +511,7 @@ namespace TBF.Rig.TestMethods.CombinedWithDetection .AddOperation(checkUiOp) .AddOperations(readTempPressOps) .AddOperations(measureOperations) - .AddOperation(cBrd.FlyingStartStopTestOp(test, qfrom_detected, qto_detected, totalPulses, true, false, 0, true, DiverterStart, DiverterEnd)) + .AddOperation(cBrd.FlyingStartStopTestOp(test, qfrom_detected, qto_detected, totalPulses, true, isDelayedStart, false, 0, true, DiverterStart, DiverterEnd)) .AddOperation(processDataLoggingOp) .EnterState(); do { diff --git a/TBF/Rig/TestMethods/CombinedWithDetection/TestMethod.cs b/TBF/Rig/TestMethods/CombinedWithDetection/TestMethod.cs index 4f03f7ff7..d53e312b8 100644 --- a/TBF/Rig/TestMethods/CombinedWithDetection/TestMethod.cs +++ b/TBF/Rig/TestMethods/CombinedWithDetection/TestMethod.cs @@ -38,7 +38,7 @@ namespace TBF.Rig.TestMethods.CombinedWithDetection public IList Execute(Test test, int repetNr, bool isLastRepetition) { - return (new CombinedWithDetectionSeq()).Execute(test, repetNr, isLastRepetition, testMethodCfg.TestParams, DebugLevel); + return (new CombinedWithDetectionSeq()).Execute(test, repetNr, isLastRepetition, false, testMethodCfg.TestParams, DebugLevel); } } } diff --git a/TBF/Rig/TestMethods/DiverterTest/DiverterTestSeq.cs b/TBF/Rig/TestMethods/DiverterTest/DiverterTestSeq.cs index 66d4d136a..730f950a2 100644 --- a/TBF/Rig/TestMethods/DiverterTest/DiverterTestSeq.cs +++ b/TBF/Rig/TestMethods/DiverterTest/DiverterTestSeq.cs @@ -466,7 +466,7 @@ namespace TBF.Rig.TestMethods.DiverterTest .AddOperation(checkUiOp) .AddOperations(readTempPressOps) .AddOperations(cameraMeasurementOps) - .AddOperation(cBrd.FlyingStartStopTestOp(test, test.Qfrom, test.Qto, pulsesNow, true, false, 0, true, DiverterStart, DiverterEnd)) + .AddOperation(cBrd.FlyingStartStopTestOp(test, test.Qfrom, test.Qto, pulsesNow, true, false, false, 0, true, DiverterStart, DiverterEnd)) .AddOperation(processDataLoggingOp) .EnterState(); do { diff --git a/TBF/Rig/TestMethods/FlyingStartFirstRepetWithMassColl/FlyingStartFirstRepetWithMassCollSeq.cs b/TBF/Rig/TestMethods/FlyingStartFirstRepetWithMassColl/FlyingStartFirstRepetWithMassCollSeq.cs index 0e7dad1cc..12c96d60e 100644 --- a/TBF/Rig/TestMethods/FlyingStartFirstRepetWithMassColl/FlyingStartFirstRepetWithMassCollSeq.cs +++ b/TBF/Rig/TestMethods/FlyingStartFirstRepetWithMassColl/FlyingStartFirstRepetWithMassCollSeq.cs @@ -526,7 +526,7 @@ namespace TBF.Rig.TestMethods.FlyingStartFirstRepetWithMassColl .AddOperations(cameraMeasurementOps); if (repetitionNr == 1) { - state.AddOperation(cBrd.FlyingStartStopTestOp(test, test.Qfrom, test.Qto, totalPulses, true, false, 0, true, DiverterStart, DiverterEnd)); + state.AddOperation(cBrd.FlyingStartStopTestOp(test, test.Qfrom, test.Qto, totalPulses, true, false, false, 0, true, DiverterStart, DiverterEnd)); } else { diff --git a/TBF/Rig/TestMethods/FlyingStartMassCollComparative/FlyingStartMassCollComparativeSeq.cs b/TBF/Rig/TestMethods/FlyingStartMassCollComparative/FlyingStartMassCollComparativeSeq.cs index d1b4ee5f3..f2e5567f4 100644 --- a/TBF/Rig/TestMethods/FlyingStartMassCollComparative/FlyingStartMassCollComparativeSeq.cs +++ b/TBF/Rig/TestMethods/FlyingStartMassCollComparative/FlyingStartMassCollComparativeSeq.cs @@ -622,7 +622,7 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollComparative .AddOperation(checkUiOp) .AddOperations(readTempPressOps) .AddOperations(cameraMeasurementOps) - .AddOperation(cBrd.FlyingStartStopTestOp(test, test.Qfrom, test.Qto, totalPulses, true, false, 0, true, DiverterStart, DiverterEnd)) + .AddOperation(cBrd.FlyingStartStopTestOp(test, test.Qfrom, test.Qto, totalPulses, true, false, false, 0, true, DiverterStart, DiverterEnd)) .AddOperation(processDataLoggingOp) .EnterState(); do { diff --git a/TBF/Rig/TestMethods/FlyingStartMassCollProlonged/FlyingStartMassCollProlongedSeq.cs b/TBF/Rig/TestMethods/FlyingStartMassCollProlonged/FlyingStartMassCollProlongedSeq.cs index ccd1c1854..1d0827aa7 100644 --- a/TBF/Rig/TestMethods/FlyingStartMassCollProlonged/FlyingStartMassCollProlongedSeq.cs +++ b/TBF/Rig/TestMethods/FlyingStartMassCollProlonged/FlyingStartMassCollProlongedSeq.cs @@ -519,7 +519,7 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollProlonged DiverterStart.Start(BatchRslts.Batch.BatchNr, test.Name, repetitionNr); DiverterEnd.Start(BatchRslts.Batch.BatchNr, test.Name, repetitionNr); - var prolongedTest = cBrd.FlyingStartStopTestOp(test, test.Qfrom, test.Qto, targetTotalPulses, true, true, targetMassPulses, true, DiverterStart, DiverterEnd); + var prolongedTest = cBrd.FlyingStartStopTestOp(test, test.Qfrom, test.Qto, targetTotalPulses, true, false, true, targetMassPulses, true, DiverterStart, DiverterEnd); /// /// Measurement loop - 1st part diff --git a/TBF/Rig/TestMethods/FlyingStartMassCollection/Compound/CombinedTestParams.cs b/TBF/Rig/TestMethods/FlyingStartMassCollection/Compound/CombinedTestParams.cs index a2cd1eb70..161adcb03 100644 --- a/TBF/Rig/TestMethods/FlyingStartMassCollection/Compound/CombinedTestParams.cs +++ b/TBF/Rig/TestMethods/FlyingStartMassCollection/Compound/CombinedTestParams.cs @@ -1,9 +1,8 @@ /// -/// Copyright (c) 2013-2016 Sensus Metering Systems +/// Copyright (c) 2013-2023 Sensus Slovensko a.s. /// using System; using System.IO; -using System.Text; using System.Xml.Serialization; using Common; using Config.Entities; @@ -17,17 +16,20 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection.Compound public static XmlSerializer Serializer = XmlSerializer.FromTypes(new[] { typeof(CombinedTestParams) })[0]; public override XmlSerializer GetSerializer() { return Serializer; } - public bool SupressTrills; /// Main meter readings are ignored during test (suitable for small flows) + public bool DelayedStart; /// true = Test start (=gating pulses from meters) is delayed by 2 s + public bool SupressTrills; /// true = Main meter readings are ignored during test (suitable for small flows) public override void InitializeAll() { - SupressTrills = false; + DelayedStart = false; + SupressTrills = false; } string[] paramNames = new string[] { - Strings.SupressWMTrills, + "Delayed start", + Strings.SupressWMTrills, }; public override string ParamName(int i) { return paramNames[i]; } public override int ParamsCount() { return paramNames.Length; } @@ -36,28 +38,31 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection.Compound { switch (i) { - case 0: return (SupressTrills ? Strings.yes : Strings.no); + case 0: return DelayedStart ? Strings.yes : Strings.no; + case 1: return SupressTrills ? Strings.yes : Strings.no; default: return string.Empty; } } - public CfgUpdateFlags UpdateParam(int i, string strValue) + public CfgUpdateFlags UpdateParam(int i, string str) { switch (i) { - case 0: SupressTrills = strValue.Equals(Strings.yes); return CfgUpdateFlags.None; + case 0: DelayedStart = str.Equals(Strings.yes); return CfgUpdateFlags.None; + case 1: SupressTrills = str.Equals(Strings.yes); return CfgUpdateFlags.None; default: return CfgUpdateFlags.None; } } - public bool ValidateParam(int i, string strValue, out string message) + public bool ValidateParam(int i, string str, out string message) { message = string.Empty; switch (i) { case 0: - if (strValue.Equals(Strings.yes) || strValue.Equals(Strings.no)) return true; + case 1: + if (str.Equals(Strings.yes) || str.Equals(Strings.no)) return true; break; default: message = "Invalid index"; @@ -70,7 +75,8 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection.Compound void CopyContentTo(CombinedTestParams prms) { - prms.SupressTrills = this.SupressTrills; + prms.DelayedStart = DelayedStart; + prms.SupressTrills = SupressTrills; } public IParamsProvider Clone() diff --git a/TBF/Rig/TestMethods/FlyingStartMassCollection/Compound/Component.cs b/TBF/Rig/TestMethods/FlyingStartMassCollection/Compound/Component.cs index e23656e9f..e0d8417cd 100644 --- a/TBF/Rig/TestMethods/FlyingStartMassCollection/Compound/Component.cs +++ b/TBF/Rig/TestMethods/FlyingStartMassCollection/Compound/Component.cs @@ -1,5 +1,5 @@ /// -/// Copyright (c) 2013-2016 Sensus Metering Systems +/// Copyright (c) 2013-2023 Sensus Slovensko a.s. /// using System; using System.Collections.Generic; @@ -38,7 +38,8 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection.Compound public IList Execute(Test test, int repetNr, bool isLastRepetition) { - return (new FlyingStartMassCollectionSeq()).Execute(test, repetNr, isLastRepetition, testMethodCfg.TestParams, null, DebugLevel); + return new FlyingStartMassCollectionSeq().Execute(test, repetNr, isLastRepetition, + testMethodCfg.TestParams.DelayedStart, testMethodCfg.TestParams, null, DebugLevel); } } } diff --git a/TBF/Rig/TestMethods/FlyingStartMassCollection/FlyingStartMassCollectionSeq.cs b/TBF/Rig/TestMethods/FlyingStartMassCollection/FlyingStartMassCollectionSeq.cs index 2f4564815..cb860c8ba 100644 --- a/TBF/Rig/TestMethods/FlyingStartMassCollection/FlyingStartMassCollectionSeq.cs +++ b/TBF/Rig/TestMethods/FlyingStartMassCollection/FlyingStartMassCollectionSeq.cs @@ -82,10 +82,9 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection /// Event.OpArgumentError . Target flow is out of range /// Event.Error . . . . . . Unspecified error /// - public IList Execute(Config.Entities.Test test, int repetitionNr, bool isLastRepetition, - Compound.CombinedTestParams compoundTestParams, - HeatMeters.TestParams heatMetersTestParams, - Common.DebugMode debugLevel) + public IList Execute(Test test, int repetitionNr, bool isLastRepetition, + bool isDelayedStart, Compound.CombinedTestParams compoundTestParams, + HeatMeters.TestParams heatMetersTestParams, DebugMode debugLevel) { if (debugLevel == Common.DebugMode.Simulate) { @@ -530,7 +529,7 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection .AddOperations(readTempPressOps) .AddOperations(readDatastreamOps) .AddOperations(cameraMeasurementOps) - .AddOperation(cBrd.FlyingStartStopTestOp(test, test.Qfrom, test.Qto, totalPulses, true, false, 0, true, DiverterStart, DiverterEnd)) + .AddOperation(cBrd.FlyingStartStopTestOp(test, test.Qfrom, test.Qto, totalPulses, true, isDelayedStart, false, 0, true, DiverterStart, DiverterEnd)) .AddOperation(processDataLoggingOp) .EnterState(); do { diff --git a/TBF/Rig/TestMethods/FlyingStartMassCollection/HeatMeters/Component.cs b/TBF/Rig/TestMethods/FlyingStartMassCollection/HeatMeters/Component.cs index a2af0c42b..058dfd7b9 100644 --- a/TBF/Rig/TestMethods/FlyingStartMassCollection/HeatMeters/Component.cs +++ b/TBF/Rig/TestMethods/FlyingStartMassCollection/HeatMeters/Component.cs @@ -1,5 +1,5 @@ /// -/// Copyright (c) 2013-2016 Sensus Metering Systems +/// Copyright (c) 2013-2023 Sensus Slovensko a.s. /// using System; using System.Collections.Generic; @@ -37,7 +37,8 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection.HeatMeters public IList Execute(Test test, int repetNr, bool isLastRepetition) { - return (new FlyingStartMassCollectionSeq()).Execute(test, repetNr, isLastRepetition, null, testMethodCfg.TestParams, DebugLevel); + return new FlyingStartMassCollectionSeq().Execute(test, repetNr, isLastRepetition, + testMethodCfg.TestParams.DelayedStart, null, testMethodCfg.TestParams, DebugLevel); } } } diff --git a/TBF/Rig/TestMethods/FlyingStartMassCollection/HeatMeters/TestParams.cs b/TBF/Rig/TestMethods/FlyingStartMassCollection/HeatMeters/TestParams.cs index 06a36932c..d8c7a6e0b 100644 --- a/TBF/Rig/TestMethods/FlyingStartMassCollection/HeatMeters/TestParams.cs +++ b/TBF/Rig/TestMethods/FlyingStartMassCollection/HeatMeters/TestParams.cs @@ -1,9 +1,8 @@ /// -/// Copyright (c) 2013-2016 Sensus Metering Systems +/// Copyright (c) 2013-2023 Sensus Slovensko a.s. /// using System; using System.IO; -using System.Text; using System.Xml.Serialization; using Common; using Config.Entities; @@ -30,14 +29,16 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection.HeatMeters public float ChangeInTimeWarm; public float ChangeInTimeCold; public string Prompt; + public bool DelayedStart; /// true = Test start (=gating pulses from meters) is delayed by 2 s - public override void InitializeAll() + public override void InitializeAll() { FlowMeasuredAtHiTempPipe = false; - } - + DelayedStart = false; + } - string[] paramNames = new string[] + + string[] paramNames = new string[] { Strings.Err_limit_neg_pct_chdr, Strings.Err_limit_pos_pct_chdr, @@ -52,7 +53,8 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection.HeatMeters "Change in time T warm", "Change in time T cold", Strings.Prompt, - }; + "Delayed start", + }; public override string ParamName(int i) { return paramNames[i]; } public override int ParamsCount() { return paramNames.Length; } @@ -73,32 +75,34 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection.HeatMeters case 10: return ChangeInTimeWarm.ToString(); case 11: return ChangeInTimeCold.ToString(); case 12: return Prompt; - default: return string.Empty; + case 13: return DelayedStart ? Strings.yes : Strings.no; + default: return string.Empty; } } - public CfgUpdateFlags UpdateParam(int i, string strValue) + public CfgUpdateFlags UpdateParam(int i, string str) { switch (i) { - case 0: ErrorLimitLo = Utils.ParseSFloat(strValue); return CfgUpdateFlags.None; - case 1: ErrorLimitHi = Utils.ParseSFloat(strValue); return CfgUpdateFlags.None; - case 2: EvaluateVolume = strValue.Equals(Strings.yes); return CfgUpdateFlags.None; - case 3: TempWarmLo = Utils.ParseSFloat(strValue); return CfgUpdateFlags.None; - case 4: TempWarmHi = Utils.ParseSFloat(strValue); return CfgUpdateFlags.None; - case 5: TempColdLo = Utils.ParseSFloat(strValue); return CfgUpdateFlags.None; - case 6: TempColdHi = Utils.ParseSFloat(strValue); return CfgUpdateFlags.None; - case 7: FlowMeasuredAtHiTempPipe = strValue.Equals(Strings.yes); return CfgUpdateFlags.None; - case 8: DeltaTempWarm = Utils.ParseUFloat(strValue); return CfgUpdateFlags.None; - case 9: DeltaTempCold = Utils.ParseUFloat(strValue); return CfgUpdateFlags.None; - case 10: ChangeInTimeWarm = Utils.ParseUFloat(strValue); return CfgUpdateFlags.None; - case 11: ChangeInTimeCold = Utils.ParseUFloat(strValue); return CfgUpdateFlags.None; - case 12: Prompt = strValue; return CfgUpdateFlags.None; + case 0: ErrorLimitLo = Utils.ParseSFloat(str); return CfgUpdateFlags.None; + case 1: ErrorLimitHi = Utils.ParseSFloat(str); return CfgUpdateFlags.None; + case 2: EvaluateVolume = str.Equals(Strings.yes); return CfgUpdateFlags.None; + case 3: TempWarmLo = Utils.ParseSFloat(str); return CfgUpdateFlags.None; + case 4: TempWarmHi = Utils.ParseSFloat(str); return CfgUpdateFlags.None; + case 5: TempColdLo = Utils.ParseSFloat(str); return CfgUpdateFlags.None; + case 6: TempColdHi = Utils.ParseSFloat(str); return CfgUpdateFlags.None; + case 7: FlowMeasuredAtHiTempPipe = str.Equals(Strings.yes); return CfgUpdateFlags.None; + case 8: DeltaTempWarm = Utils.ParseUFloat(str); return CfgUpdateFlags.None; + case 9: DeltaTempCold = Utils.ParseUFloat(str); return CfgUpdateFlags.None; + case 10: ChangeInTimeWarm = Utils.ParseUFloat(str); return CfgUpdateFlags.None; + case 11: ChangeInTimeCold = Utils.ParseUFloat(str); return CfgUpdateFlags.None; + case 12: Prompt = str; return CfgUpdateFlags.None; + case 13: DelayedStart = str.Equals(Strings.yes); return CfgUpdateFlags.None; default: return CfgUpdateFlags.None; } } - public bool ValidateParam(int i, string strValue, out string message) + public bool ValidateParam(int i, string str, out string message) { message = string.Empty; float dummy; @@ -111,17 +115,18 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection.HeatMeters case 4: case 5: case 6: - if (Utils.TryParseSFloat(strValue, out dummy)) return true; + if (Utils.TryParseSFloat(str, out dummy)) return true; break; case 2: case 7: - if (strValue.Equals(Strings.yes) || strValue.Equals(Strings.no)) return true; + case 13: + if (str.Equals(Strings.yes) || str.Equals(Strings.no)) return true; break; case 8: case 9: case 10: case 11: - if (Utils.TryParseUFloat(strValue, out dummy)) return true; + if (Utils.TryParseUFloat(str, out dummy)) return true; break; case 12: return true; @@ -149,9 +154,10 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection.HeatMeters prms.ChangeInTimeWarm = ChangeInTimeWarm; prms.ChangeInTimeCold = ChangeInTimeCold; prms.Prompt = Prompt; - } + prms.DelayedStart = DelayedStart; + } - public IParamsProvider Clone() + public IParamsProvider Clone() { TestParams pars = new TestParams(); CopyContentTo(pars); diff --git a/TBF/Rig/TestMethods/FlyingStartMassCollection/Single/Component.cs b/TBF/Rig/TestMethods/FlyingStartMassCollection/Single/Component.cs index cf7fc80bc..16216d4dd 100644 --- a/TBF/Rig/TestMethods/FlyingStartMassCollection/Single/Component.cs +++ b/TBF/Rig/TestMethods/FlyingStartMassCollection/Single/Component.cs @@ -1,5 +1,5 @@ /// -/// Copyright (c) 2013-2021 Sensus Slovensko a.s. +/// Copyright (c) 2013-2023 Sensus Slovensko a.s. /// using System; using System.Collections.Generic; @@ -23,11 +23,15 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection.Single return FlyingStartMassCollectionSeq.CheckDeviceCaps(test, devices, out message); } + + readonly TestMethodCfg testMethodCfg; + public Component() { } /// public Component(Generic.IComponentCfg cfg) : base(cfg) { + testMethodCfg = cfg as TestMethodCfg; log.Warn(this.ToString()); } /// @@ -37,7 +41,8 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection.Single { if (DebugLevel == DebugMode.Normal) { - return (new FlyingStartMassCollectionSeq()).Execute(test, repetNr, isLastRepetition, null, null, DebugLevel); + return new FlyingStartMassCollectionSeq().Execute(test, repetNr, isLastRepetition, + testMethodCfg.TestParams.DelayedStart, null, null, DebugLevel); } else { diff --git a/TBF/Rig/TestMethods/FlyingStartMassCollection/Single/Factory.cs b/TBF/Rig/TestMethods/FlyingStartMassCollection/Single/Factory.cs index d9f8bfe89..edc539156 100644 --- a/TBF/Rig/TestMethods/FlyingStartMassCollection/Single/Factory.cs +++ b/TBF/Rig/TestMethods/FlyingStartMassCollection/Single/Factory.cs @@ -1,22 +1,21 @@ /// -/// Copyright (c) 2016 Sensus Metering Systems +/// Copyright (c) 2016-2023 Sensus Slovensko a.s. /// using System.Collections.Generic; using TBF.Rig.Generic; -using TBF.Rig.Configs.NameOnly; namespace TBF.Rig.TestMethods.FlyingStartMassCollection.Single { public class Factory : IComponentFactory { - public string ClassName { get { return this.GetType().Namespace.Substring(8); } } + public string ClassName { get { return GetType().Namespace.Substring(8); } } public override string ToString() { return ClassName; } public IComponent DummyComponent() { return new Component(); } public IComponent GetComponent(IComponentCfg cfg, IList components) { return new Component(cfg); } - public IComponentCfg DefaultConfig() { return new TestMethodCfg(this.GetType().Namespace.Substring(20).Replace(".Single", ""), this); } + public IComponentCfg DefaultConfig() { return new TestMethodCfg(GetType().Namespace.Substring(20).Replace(".Single", ""), this); } public IComponentCfg CmpntCfgFromCmpntEntity(Config.Entities.Component component) { diff --git a/TBF/Rig/TestMethods/FlyingStartMassCollection/Single/TestMethodCfg.cs b/TBF/Rig/TestMethods/FlyingStartMassCollection/Single/TestMethodCfg.cs new file mode 100644 index 000000000..0d2afccd2 --- /dev/null +++ b/TBF/Rig/TestMethods/FlyingStartMassCollection/Single/TestMethodCfg.cs @@ -0,0 +1,50 @@ +/// +/// Copyright (c) 2023 Sensus Slovensko a.s. +/// +using System; +using System.Collections.Generic; +using System.IO; +using System.Xml.Serialization; +using Common; +using Config.Entities; +using TBF.Rig.Generic; + +namespace TBF.Rig.TestMethods.FlyingStartMassCollection.Single +{ + public class TestMethodCfg : ComponentCfgBase, Generic.IComponentCfg + { + public static XmlSerializer Serializer = XmlSerializer.FromTypes(new[] { typeof(TestMethodCfg) })[0]; + public override XmlSerializer GetSerializer() { return Serializer; } + + public IComponentCfgCtrl GetControl(IList cmpntEntities) { return new TestMethodCfgCtrl(); } + + /// Test parameters + [XmlIgnore] + public TestParams TestParams; + public override IParamsProvider GetRuntimeTestParamsProvider() { return TestParams; } + public override IParamsProvider CreateTestParamsProvider() { return new TestParams(true); } + public override IParamsProvider GetUITestParamsProvider(Test test) + { + return (test.Method == Name) ? base.GetUITestParamsProvider(test) : null; + } + + /// Private parameterless constructor invoked by all other (public) constructors + TestMethodCfg() + { + TestParams = new TestParams(true); + } + + public TestMethodCfg(string name, IComponentFactory factory) + : this() + { + Name = name; + Factory = factory; + ParentName = string.Empty; + } + + public string ToString(int i) + { + return string.Format("Name={0}", Name); + } + } +} diff --git a/TBF/Rig/TestMethods/FlyingStartMassCollection/Single/TestMethodCfgCtrl.cs b/TBF/Rig/TestMethods/FlyingStartMassCollection/Single/TestMethodCfgCtrl.cs new file mode 100644 index 000000000..bb0fc4010 --- /dev/null +++ b/TBF/Rig/TestMethods/FlyingStartMassCollection/Single/TestMethodCfgCtrl.cs @@ -0,0 +1,70 @@ +/// +/// Copyright (c) 2023 Sensus Slovensko a.s. +/// +using System; +using System.Windows.Forms; +using Common; +using Config.Entities; +using TBF.Rig.Generic; + +namespace TBF.Rig.TestMethods.FlyingStartMassCollection.Single +{ + public partial class TestMethodCfgCtrl : UserControl, IComponentCfgCtrl + { + public bool ShowMore { get { return false; } } + + TestMethodCfg config; + public IComponentCfg Config + { + get { return config as IComponentCfg; } + set + { + config = value as TestMethodCfg; + Redraw(); + } + } + + public TestMethodCfgCtrl() + { + InitializeComponent(); + } + + private void EntryFormCfgCtrl_Load(object sender, EventArgs e) + { + Redraw(); + } + + public void Closing() + { + } + + void Redraw() + { + if (config == null) return; /// Control was not loaded, settings were not changed + classNameLabel.Text = config.Factory.ClassName; + nameTextBox.Text = config.Name; + } + + public void Unlock() + { + nameTextBox.Enabled = true; + } + + public CfgUpdateFlags VerifyCfg(ref string message) + { + CfgUpdateFlags flags = CfgUpdateFlags.None; + return flags; + } + + public CfgUpdateFlags UpdateCfg() + { + CfgUpdateFlags flags = CfgUpdateFlags.RestartRqrd; + + if (config == null) return CfgUpdateFlags.Error; /// Control was not loaded, settings were not changed + + config.Name = nameTextBox.Text; + + return flags; + } + } +} diff --git a/TBF/Rig/TestMethods/FlyingStartMassCollection/Single/TestMethodCfgCtrl.designer.cs b/TBF/Rig/TestMethods/FlyingStartMassCollection/Single/TestMethodCfgCtrl.designer.cs new file mode 100644 index 000000000..7e69463cc --- /dev/null +++ b/TBF/Rig/TestMethods/FlyingStartMassCollection/Single/TestMethodCfgCtrl.designer.cs @@ -0,0 +1,86 @@ +/// +/// Copyright (c) 2023 Sensus Slovensko a.s. +/// +namespace TBF.Rig.TestMethods.FlyingStartMassCollection.Single +{ + partial class TestMethodCfgCtrl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.nameTextBox = new System.Windows.Forms.TextBox(); + this.nameLabel = new System.Windows.Forms.Label(); + this.classNameLabel = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // nameTextBox + // + this.nameTextBox.Enabled = false; + this.nameTextBox.Location = new System.Drawing.Point(137, 57); + this.nameTextBox.Name = "nameTextBox"; + this.nameTextBox.Size = new System.Drawing.Size(130, 20); + this.nameTextBox.TabIndex = 5; + // + // nameLabel + // + this.nameLabel.AutoSize = true; + this.nameLabel.Location = new System.Drawing.Point(27, 60); + this.nameLabel.Name = "nameLabel"; + this.nameLabel.Size = new System.Drawing.Size(35, 13); + this.nameLabel.TabIndex = 4; + this.nameLabel.Text = "Name"; + // + // classNameLabel + // + this.classNameLabel.AutoSize = true; + this.classNameLabel.Location = new System.Drawing.Point(134, 33); + this.classNameLabel.Name = "classNameLabel"; + this.classNameLabel.Size = new System.Drawing.Size(83, 13); + this.classNameLabel.TabIndex = 3; + this.classNameLabel.Text = "ComonentName"; + // + // BasicPrinterCfgCtrl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.nameTextBox); + this.Controls.Add(this.nameLabel); + this.Controls.Add(this.classNameLabel); + this.Name = "BasicPrinterCfgCtrl"; + this.Size = new System.Drawing.Size(300, 200); + this.Load += new System.EventHandler(this.EntryFormCfgCtrl_Load); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TextBox nameTextBox; + private System.Windows.Forms.Label nameLabel; + private System.Windows.Forms.Label classNameLabel; + } +} diff --git a/TBF/Rig/TestMethods/FlyingStartMassCollection/Single/TestMethodCfgCtrl.resx b/TBF/Rig/TestMethods/FlyingStartMassCollection/Single/TestMethodCfgCtrl.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/TBF/Rig/TestMethods/FlyingStartMassCollection/Single/TestMethodCfgCtrl.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/TBF/Rig/TestMethods/FlyingStartMassCollection/Single/TestParams.cs b/TBF/Rig/TestMethods/FlyingStartMassCollection/Single/TestParams.cs new file mode 100644 index 000000000..92e165c96 --- /dev/null +++ b/TBF/Rig/TestMethods/FlyingStartMassCollection/Single/TestParams.cs @@ -0,0 +1,119 @@ +/// +/// Copyright (c) 2023 Sensus Slovensko a.s. +/// +using System; +using System.IO; +using System.Xml.Serialization; +using Common; +using Config.Entities; +using TBF.Rig.Generic; +using TBF.Resources; + +namespace TBF.Rig.TestMethods.FlyingStartMassCollection.Single +{ + public class TestParams : TestParamsBase, IParamsProvider, ITestParams + { + public static XmlSerializer Serializer = XmlSerializer.FromTypes(new[] { typeof(TestParams) })[0]; + public override XmlSerializer GetSerializer() { return Serializer; } + + public bool DelayedStart; /// true = Test start (=gating pulses from meters) is delayed by 2 s + + public override void InitializeAll() + { + DelayedStart = false; + } + + + string[] paramNames = new string[] + { + "Delayed start", + }; + public override string ParamName(int i) { return paramNames[i]; } + public override int ParamsCount() { return paramNames.Length; } + + public override string ToString(int i) + { + switch (i) + { + case 0: return DelayedStart ? Strings.yes : Strings.no; + default: return string.Empty; + } + } + + public CfgUpdateFlags UpdateParam(int i, string str) + { + switch (i) + { + case 0: DelayedStart = str.Equals(Strings.yes); return CfgUpdateFlags.None; + default: return CfgUpdateFlags.None; + } + } + + public bool ValidateParam(int i, string str, out string message) + { + message = string.Empty; + + switch (i) + { + case 0: + if (str.Equals(Strings.yes) || str.Equals(Strings.no)) return true; + break; + default: + message = "Invalid index"; + return false; + } + + message = ParamName(i) + " is invalid"; + return false; + } + + void CopyContentTo(TestParams prms) + { + prms.DelayedStart = DelayedStart; + } + + public IParamsProvider Clone() + { + TestParams pars = new TestParams(); + CopyContentTo(pars); + return pars; + } + + public override void UpdateFromDbEntity(ComponentTest dbEntity) + { + if (dbEntity == null) return; + try + { + TestParams tmp = Serializer.Deserialize(new StringReader(dbEntity.Parameters)) as TestParams; + + testParamsEntity = dbEntity; + componentName = dbEntity.CmpntName; + test = dbEntity.Test; + + if (tmp != null) tmp.CopyContentTo(this); + } + catch + { + } + } + + /// + /// Parameterless constructor initializes the parameters + /// + public TestParams() + { + } + + public TestParams(bool initialize) + { + if (initialize) InitializeAll(); + } + + public TestParams(ComponentTest testParamsEntity, string componentName, Test test) + { + this.testParamsEntity = testParamsEntity; + this.componentName = componentName; + this.test = test; + } + } +} diff --git a/TBF/Rig/TestMethods/FlyingStartTankCollection/FlyingStartTankCollectionSeq.cs b/TBF/Rig/TestMethods/FlyingStartTankCollection/FlyingStartTankCollectionSeq.cs index 8fb0cb3b0..c9a64b16c 100644 --- a/TBF/Rig/TestMethods/FlyingStartTankCollection/FlyingStartTankCollectionSeq.cs +++ b/TBF/Rig/TestMethods/FlyingStartTankCollection/FlyingStartTankCollectionSeq.cs @@ -371,7 +371,7 @@ namespace TBF.Rig.TestMethods.FlyingStartTankCollection .AddOperation(checkUiOp) .AddOperations(readTempPressOps) .AddOperations(cameraMeasurementOps) - .AddOperation(cBrd.FlyingStartStopTestOp(test, test.Qfrom, test.Qto, totalPulses, true, false, 0, true, DiverterStart, DiverterEnd)) + .AddOperation(cBrd.FlyingStartStopTestOp(test, test.Qfrom, test.Qto, totalPulses, true, false, false, 0, true, DiverterStart, DiverterEnd)) .AddOperation(processDataLoggingOp) .EnterState(); do { diff --git a/TBF/TBF.csproj b/TBF/TBF.csproj index f1dbc8e80..c3bbe6b04 100644 --- a/TBF/TBF.csproj +++ b/TBF/TBF.csproj @@ -1220,6 +1220,14 @@ + + + UserControl + + + TestMethodCfgCtrl.cs + + Component @@ -2867,6 +2875,9 @@ TestMethodCfgCtrl.cs + + TestMethodCfgCtrl.cs + TestMethodCfgCtrl.cs