PMaxTest and LeakTest improvements:

- result items P_xy_start and P_xy_end added
- DurationLeak test parameter for LeakTest method
- correct default parameters for Danfoss.VLT2800.Pump (FC protocol)
- bug fixes
This commit is contained in:
Milan Hanajik
2015-02-20 13:07:21 +01:00
parent 286bd13eb8
commit 08e53c090e
13 changed files with 395 additions and 217 deletions
@@ -110,6 +110,7 @@ namespace TBF.BenchControl.Danfoss.VLT2800
bitPosition = pumpCfg.BitPosition; bitPosition = pumpCfg.BitPosition;
Mask = (((ulong)1) << bitPosition); Mask = (((ulong)1) << bitPosition);
Mask |= (((ulong)1) << (bitPosition + 1));
log.Debug(this.ToString()); log.Debug(this.ToString());
} }
@@ -15,9 +15,9 @@ namespace TBF.BenchControl.Danfoss.VLT2800
/// Serialized parameters /// Serialized parameters
/// ///
public int Delay; // Delay of the pump function in [s] (affects the duration of transition sequence steps) public int Delay; // Delay of the pump function in [s] (affects the duration of transition sequence steps)
public PumpProtocol Protocol; // Modbus or FC public PumpProtocol Protocol; // Modbus or FC with Siemens address
public int BitPosition; public int BitPosition;
public int BusAddress; // Modbus or FC address in range 1..247 (Modbus) or 1..31 (FC) public int BusAddress; // Modbus or FC address in range 1..247 (Modbus) or 1..31 (FC with Siemens address)
public int ComPortNr; public int ComPortNr;
public int BaudRate; public int BaudRate;
public Parity Parity; public Parity Parity;
@@ -28,14 +28,16 @@ namespace TBF.BenchControl.Danfoss.VLT2800
PumpCfg() PumpCfg()
{ {
Name = "Pump-Danfoss"; Name = "Pump-Danfoss";
Delay = 1;
Protocol = PumpProtocol.Modbus;
BusAddress = 1;
ParentName = string.Empty; ParentName = string.Empty;
ComPortNr = 5; Delay = 1;
ComPortNr = 3;
/// Default protocol settings (the same as Danfoss VLT2800 factory settings)
Protocol = PumpProtocol.FC;
BusAddress = 1;
BaudRate = 9600; BaudRate = 9600;
DataBits = 8; DataBits = 8;
Parity = System.IO.Ports.Parity.None; Parity = System.IO.Ports.Parity.Even; /// 'Parity.None' is the default value for Protocol = PumpProtocol.Modbus
StopBits = System.IO.Ports.StopBits.One; StopBits = System.IO.Ports.StopBits.One;
} }
+2 -2
View File
@@ -46,8 +46,8 @@
public enum PumpProtocol public enum PumpProtocol
{ {
Modbus, Modbus, /// Modbus protocol, default serial settings are 9600Bd, 8bits, NoP, 1stop
FC, FC, /// FC protocol with Siemens address (1..31), default serial settings are 9600Bd, 8bits, PE, 1stop
} }
/// <summary> /// <summary>
@@ -740,7 +740,7 @@ namespace TBF.BenchControl.Sequences
sb.Append(";"); sb.Append("0"); sb.Append(";"); sb.Append("0");
sb.Append(";"); sb.Append("2"); sb.Append(";"); sb.Append("2");
sb.Append(";"); sb.Append(" "); sb.Append(";"); sb.Append(" ");
sb.Append(";"); sb.Append(outPath.Balance.Cfg.Name); sb.Append(";"); if (outPath.Balance != null) sb.Append(outPath.Balance.Name);
sb.Append(";"); sb.Append(tstRslt.AmbientTempAve); sb.Append(";"); sb.Append(tstRslt.AmbientTempAve);
sb.Append(";"); sb.Append(tstRslt.AmbientPressAve); sb.Append(";"); sb.Append(tstRslt.AmbientPressAve);
sb.Append(";"); sb.Append(tstRslt.AmbientHumiAve); sb.Append(";"); sb.Append(tstRslt.AmbientHumiAve);
@@ -780,8 +780,10 @@ namespace TBF.BenchControl.Sequences
sb.Append(";"); sb.Append(tstRslt.Time); /// t sb.Append(";"); sb.Append(tstRslt.Time); /// t
sb.Append(";"); sb.Append(tstRslt.ErrorMaster); /// Eelm . . . chyba etalonu voci komercne pravej hodnote sb.Append(";"); sb.Append(tstRslt.ErrorMaster); /// Eelm . . . chyba etalonu voci komercne pravej hodnote
sb.Append(";"); sb.Append(" "); /// Emass . . . chyba druheho etalonu voci komercne pravej hodnote (teraz vynechavame) sb.Append(";"); sb.Append(" "); /// Emass . . . chyba druheho etalonu voci komercne pravej hodnote (teraz vynechavame)
sb.Append(";"); sb.Append(1.0f / outPath.FlowMeter.LtrPerPulse); sb.Append(";"); if (outPath.FlowMeter != null && outPath.FlowMeter.LtrPerPulse != 0)
/// Const.MID . konstanta eatlonu {
sb.Append(1.0f / outPath.FlowMeter.LtrPerPulse);/// Const.MID . konstanta eatlonu
}
sb.Append(";"); sb.Append(" "); /// Const.MA . . konstanta druheho etalonu sb.Append(";"); sb.Append(" "); /// Const.MA . . konstanta druheho etalonu
sb.Append(";"); sb.Append(tstRslt.TimeDivStart0); /// Time Div Start celkovy cas v [ms] sb.Append(";"); sb.Append(tstRslt.TimeDivStart0); /// Time Div Start celkovy cas v [ms]
sb.Append(";"); sb.Append(tstRslt.TimeDivStart1); /// Time Div Start1 sb.Append(";"); sb.Append(tstRslt.TimeDivStart1); /// Time Div Start1
@@ -9,15 +9,17 @@ namespace TBF.BenchControl.TestMethods.LeakTest
{ {
public class LeakTestParams : TestParamsBase, IParamsProvider, ITestParams public class LeakTestParams : TestParamsBase, IParamsProvider, ITestParams
{ {
public float PressureLo; /// Presure range low limit in bar public float PressureLo; /// Presure range low limit in kPa
public float PressureHi; /// Presure range high limit in bar public float PressureHi; /// Presure range high limit in kPa
public int Duration; /// Duration of the test in [s] public int DurationPMax; /// Duration of PMax test in [s]
public int DurationLeak; /// Duration of Leak test in [s]
public override void InitializeAll() public override void InitializeAll()
{ {
PressureLo = 1.0f; PressureLo = 500.0f; /// kPa
PressureHi = 2.0f; PressureHi = 600.0f; /// kPa
Duration = 10; DurationPMax = 10;
DurationLeak = 60;
} }
@@ -25,7 +27,8 @@ namespace TBF.BenchControl.TestMethods.LeakTest
{ {
Strings.PressureLo_bar, Strings.PressureLo_bar,
Strings.PressureHi_bar, Strings.PressureHi_bar,
Strings.Duration_s, Strings.Duration_PMax_s,
Strings.Duration_Leak_s,
}; };
public override string ParamName(int i) { return paramNames[i]; } public override string ParamName(int i) { return paramNames[i]; }
public override int ParamsCount() { return paramNames.Length; } public override int ParamsCount() { return paramNames.Length; }
@@ -34,9 +37,10 @@ namespace TBF.BenchControl.TestMethods.LeakTest
{ {
switch (i) switch (i)
{ {
case 0: return PressureLo.ToString(); case 0: return (PressureLo / 100.0f).ToString(); /// Saved in kPa, UI in bar
case 1: return PressureHi.ToString(); case 1: return (PressureHi / 100.0f).ToString(); /// Saved in kPa, UI in bar
case 2: return Duration.ToString(); case 2: return DurationPMax.ToString();
case 3: return DurationLeak.ToString();
default: return string.Empty; default: return string.Empty;
} }
} }
@@ -45,9 +49,10 @@ namespace TBF.BenchControl.TestMethods.LeakTest
{ {
switch (i) switch (i)
{ {
case 0: PressureLo = Utils.ParseUFloat(strValue); return; case 0: PressureLo = 100.0f * Utils.ParseUFloat(strValue); return; /// Saved in kPa, UI in bar
case 1: PressureHi = Utils.ParseSFloat(strValue); return; case 1: PressureHi = 100.0f * Utils.ParseSFloat(strValue); return; /// Saved in kPa, UI in bar
case 2: Duration = int.Parse(strValue); return; case 2: DurationPMax = int.Parse(strValue); return;
case 3: DurationLeak = int.Parse(strValue); return;
default: return; default: return;
} }
} }
@@ -65,6 +70,7 @@ namespace TBF.BenchControl.TestMethods.LeakTest
if (Utils.TryParseUFloat(strValue, out dummy)) return true; if (Utils.TryParseUFloat(strValue, out dummy)) return true;
break; break;
case 2: case 2:
case 3:
if (int.TryParse(strValue, out iDummy)) return true; if (int.TryParse(strValue, out iDummy)) return true;
break; break;
default: default:
@@ -90,7 +96,8 @@ namespace TBF.BenchControl.TestMethods.LeakTest
PressureLo = tmp.PressureLo; PressureLo = tmp.PressureLo;
PressureHi = tmp.PressureHi; PressureHi = tmp.PressureHi;
Duration = tmp.Duration; DurationPMax = tmp.DurationPMax;
DurationLeak = tmp.DurationLeak;
} }
catch catch
{ {
@@ -31,21 +31,10 @@ namespace TBF.BenchControl.TestMethods.LeakTest
Event retVal = Event.Done; Event retVal = Event.Done;
checkUiOp = new Operations.CheckUIOp(true); /// Runs in more then one state checkUiOp = new Operations.CheckUIOp(true); /// Runs in more then one state
ltrPerRefPulse = outPath.FlowMeter.LtrPerPulse; /// [ltr/pulse], nominal flow in [m3/h]
/// Notes:
/// float timeHr = volumeLtr / (1000.0f * targetFlow);
/// float timeSec = 3600.0f * timeHr;
/// int refPulses = (int)(timeSec * (2000.0f * targetFlow / pOut.FlowMeter.NominalFlow));
int totalPulses = (int)(test.Volume / ltrPerRefPulse + 0.5f);
processDataLoggingOp = new TBF.BenchControl.Operations.ProcessDataLoggingOp(processDataLogger, this); processDataLoggingOp = new TBF.BenchControl.Operations.ProcessDataLoggingOp(processDataLogger, this);
int repetitionNr = 1; /// First test: repetitionNr=1
//====================================
// Transition or SetRoute - Start // Transition or SetRoute - Start
//====================================
switch (Transition(transitionStart, TransitionContext.TestStart)) switch (Transition(transitionStart, TransitionContext.TestStart))
{ {
case Event.Error: { retVal = Event.Error; goto stopTest; } case Event.Error: { retVal = Event.Error; goto stopTest; }
@@ -53,15 +42,12 @@ namespace TBF.BenchControl.TestMethods.LeakTest
} }
/// Start the test, initialize test results /// Start the test, initialize test results
Bridge.OnTestSelected(this, new TestSelectedEventArgs(test, repetitionNr, inPath, benchPath, outPath, sensPath, totalPulses)); Bridge.OnTestSelected(this, new TestSelectedEventArgs(test, 1, inPath, benchPath, outPath, sensPath, 0));
Entities.TestResult tstRslt = new Entities.TestResult(test, repetitionNr, Entities.MetersKind.Single); Entities.TestResult tstRslt = new Entities.TestResult(test, 1, Entities.MetersKind.Single);
//------------------------------------------------ //------------------------------------------------
Bridge.OnActivity(this, Strings.Starting_the_pump); Bridge.OnActivity(this, Strings.Starting_the_pump);
//------------------------------------------------ //------------------------------------------------
int flowSetTime0 = StateMachine.Time;
float estFlowSetTime = 10.0f;
if (inPath.Pump is GenericDevices.IPumpFM) (inPath.Pump as GenericDevices.IPumpFM).TurnOn(test.PumpPower); if (inPath.Pump is GenericDevices.IPumpFM) (inPath.Pump as GenericDevices.IPumpFM).TurnOn(test.PumpPower);
State.Create("LeakTest : Starting the pump") State.Create("LeakTest : Starting the pump")
@@ -69,7 +55,6 @@ namespace TBF.BenchControl.TestMethods.LeakTest
.AddOperation(cBrd.SetValvesOp(inPath.Pump, null)) .AddOperation(cBrd.SetValvesOp(inPath.Pump, null))
.AddOperation(benchPath.TempIn.ReadTempOp(ref tempIn)) .AddOperation(benchPath.TempIn.ReadTempOp(ref tempIn))
.AddOperation(benchPath.TempOut.ReadTempOp(ref tempOut)) .AddOperation(benchPath.TempOut.ReadTempOp(ref tempOut))
.AddOperation(outPath.TempDiv.ReadTempOp(ref tempDiv))
.AddOperation(benchPath.PressIn.ReadPressureOp(ref pressIn)) .AddOperation(benchPath.PressIn.ReadPressureOp(ref pressIn))
.AddOperation(benchPath.PressOut.ReadPressureOp(ref pressOut)) .AddOperation(benchPath.PressOut.ReadPressureOp(ref pressOut))
.EnterState(); .EnterState();
@@ -84,10 +69,10 @@ namespace TBF.BenchControl.TestMethods.LeakTest
Bridge.OnActivity(this, Strings.Setting_the_water_pressure); Bridge.OnActivity(this, Strings.Setting_the_water_pressure);
//------------------------------------------------ //------------------------------------------------
const float pumpPowerStep = 3.0f;
float pumpPower = test.PumpPower; float pumpPower = test.PumpPower;
int startTime = StateMachine.Time; int startTime = StateMachine.Time;
do
while (true)
{ {
if (inPath.Pump is GenericDevices.IPumpFM) (inPath.Pump as GenericDevices.IPumpFM).TurnOn(pumpPower); if (inPath.Pump is GenericDevices.IPumpFM) (inPath.Pump as GenericDevices.IPumpFM).TurnOn(pumpPower);
@@ -95,7 +80,6 @@ namespace TBF.BenchControl.TestMethods.LeakTest
.AddOperation(checkUiOp) .AddOperation(checkUiOp)
.AddOperation(benchPath.TempIn.ReadTempOp(ref tempIn)) .AddOperation(benchPath.TempIn.ReadTempOp(ref tempIn))
.AddOperation(benchPath.TempOut.ReadTempOp(ref tempOut)) .AddOperation(benchPath.TempOut.ReadTempOp(ref tempOut))
.AddOperation(outPath.TempDiv.ReadTempOp(ref tempDiv))
.AddOperation(benchPath.PressIn.ReadPressureOp(ref pressIn)) .AddOperation(benchPath.PressIn.ReadPressureOp(ref pressIn))
.AddOperation(benchPath.PressOut.ReadPressureOp(ref pressOut)) .AddOperation(benchPath.PressOut.ReadPressureOp(ref pressOut))
.AddOperation(new Operations.TimerOp(5)) .AddOperation(new Operations.TimerOp(5))
@@ -109,25 +93,123 @@ namespace TBF.BenchControl.TestMethods.LeakTest
} }
while (e.Contains(Event.TimerBusy)); while (e.Contains(Event.TimerBusy));
UiBridge.Bridge.OnLog(this, string.Format("time = {0}, pump_power = {1}%, pressure_up = {2}, pressure_down = {3}\r\n", UiBridge.Bridge.OnLog(this, string.Format("time = {0}, pump_power = {1}%, pressure_up = {2}kPa, pressure_down = {3}kPa\r\n",
StateMachine.Time - startTime, StateMachine.Time - startTime,
pumpPower.ToString("F0"), pumpPower.ToString("F0"),
pressIn.Val.ToString("F3"), pressIn.Val.ToString("F1"),
pressIn.Val.ToString("F3"))); pressIn.Val.ToString("F1")));
if (pumpPower == 100.0f) break; /// Already at the max.pump power float step = (pumpPower < 40.0f) ? 5.0f : ((pumpPower < 60.0f) ? 3.0f : ((pumpPower < 80.0f) ? 2.0f : 1.0f));
pumpPower += pumpPowerStep; if (pressOut.Val < testParams.PressureLo)
if (pumpPower >= 100.0f) pumpPower = 100.0f; /// Max. 100% {
if (pumpPower == 100.0f) break; /// Already at max. pump power -> Quit loop
pumpPower = Math.Min(pumpPower + step, 100.0f); /// Limit max. power to 100%
}
else if (pressOut.Val > testParams.PressureHi)
{
if (pumpPower == 0) break; /// Already at min. pump power -> Quit loop
pumpPower = Math.Max(pumpPower - step, 0); /// Limit min. power to 0%
}
else
{
break; /// Pressure is in the range -> Quit loop
}
} }
while (testParams.PressureLo <= pressOut.Val && pressOut.Val <= testParams.PressureHi);
pressure_set: pressure_set:
int time = StateMachine.Time; startTime = StateMachine.Time;
int estimtdEndTime = startTime + testParams.DurationPMax;
//------------------------------------------------
Bridge.OnActivity(this, Strings.Test_in_progress);
//------------------------------------------------
State.Create("LeakTest : Maximum water pressure set")
.AddOperation(checkUiOp)
.AddOperation(benchPath.TempIn.ReadTempOp(ref tempIn))
.AddOperation(benchPath.TempOut.ReadTempOp(ref tempOut))
.AddOperation(benchPath.PressIn.ReadPressureOp(ref pressIn))
.AddOperation(benchPath.PressOut.ReadPressureOp(ref pressOut))
.AddOperation(new Operations.TimerOp(testParams.DurationPMax))
.EnterState();
do
{
e = StateMachine.WaitRunDevsRunOps();
tstRslt.TempInStart = tempIn.Val;
tstRslt.TempOutStart = tempOut.Val;
tstRslt.PressInStart = pressIn.Val;
tstRslt.PressOutStart = pressOut.Val;
if (e.Contains(Event.Error)) { retVal = Event.Error; goto stopTest; }
if (e.Contains(Event.UiCmdStop)) { retVal = Event.UiCmdStop; goto stopTest; }
int remainingTime = Math.Max(estimtdEndTime - StateMachine.Time, 0);
Bridge.OnActivity(this, string.Format("{0} ... {1} s", Strings.Test_in_progress, remainingTime));
}
while (e.Contains(Event.TimerBusy));
closing_valve:
//------------------------------------------------
Bridge.OnActivity(this, Strings.Closing_valve_Pump_off);
//------------------------------------------------
State.Create("LeakTest : Closing the valve")
.AddOperation(checkUiOp)
.AddOperation(cBrd.SetValvesOp(null, outPath.StartValve))
.AddOperation(benchPath.TempIn.ReadTempOp(ref tempIn))
.AddOperation(benchPath.TempOut.ReadTempOp(ref tempOut))
.AddOperation(benchPath.PressIn.ReadPressureOp(ref pressIn))
.AddOperation(benchPath.PressOut.ReadPressureOp(ref pressOut))
.EnterState();
do
{
e = StateMachine.WaitRunDevsRunOps();
tstRslt.TempInStart = tempIn.Val;
tstRslt.TempOutStart = tempOut.Val;
tstRslt.PressInStart = pressIn.Val;
tstRslt.PressOutStart = pressOut.Val;
if (e.Contains(Event.Error)) { retVal = Event.Error; goto stopTest; }
if (e.Contains(Event.UiCmdStop)) { retVal = Event.UiCmdStop; goto stopTest; }
}
while (e.Contains(Event.ValvesBusy));
valve_closed:
if (inPath.Pump is GenericDevices.IPumpFM) (inPath.Pump as GenericDevices.IPumpFM).TurnOff();
State.Create("LeakTest : Closing the valve")
.AddOperation(checkUiOp)
.AddOperation(cBrd.SetValvesOp(null, inPath.Pump))
.AddOperation(benchPath.TempIn.ReadTempOp(ref tempIn))
.AddOperation(benchPath.TempOut.ReadTempOp(ref tempOut))
.AddOperation(benchPath.PressIn.ReadPressureOp(ref pressIn))
.AddOperation(benchPath.PressOut.ReadPressureOp(ref pressOut))
.EnterState();
do
{
e = StateMachine.WaitRunDevsRunOps();
tstRslt.TempInStart = tempIn.Val;
tstRslt.TempOutStart = tempOut.Val;
tstRslt.PressInStart = pressIn.Val;
tstRslt.PressOutStart = pressOut.Val;
if (e.Contains(Event.Error)) { retVal = Event.Error; goto stopTest; }
if (e.Contains(Event.UiCmdStop)) { retVal = Event.UiCmdStop; goto stopTest; }
}
while (e.Contains(Event.ValvesBusy));
pump_is_off:
tstRslt.TimeStart = DateTime.Now; tstRslt.TimeStart = DateTime.Now;
startTime = StateMachine.Time;
estimtdEndTime = startTime + testParams.DurationLeak;
ResetAveragedData(); ResetAveragedData();
bool firstTime = true;
//------------------------------------------------ //------------------------------------------------
Bridge.OnActivity(this, Strings.Test_in_progress); Bridge.OnActivity(this, Strings.Test_in_progress);
@@ -136,10 +218,9 @@ namespace TBF.BenchControl.TestMethods.LeakTest
.AddOperation(checkUiOp) .AddOperation(checkUiOp)
.AddOperation(benchPath.TempIn.ReadTempOp(ref tempIn)) .AddOperation(benchPath.TempIn.ReadTempOp(ref tempIn))
.AddOperation(benchPath.TempOut.ReadTempOp(ref tempOut)) .AddOperation(benchPath.TempOut.ReadTempOp(ref tempOut))
.AddOperation(outPath.TempDiv.ReadTempOp(ref tempDiv))
.AddOperation(benchPath.PressIn.ReadPressureOp(ref pressIn)) .AddOperation(benchPath.PressIn.ReadPressureOp(ref pressIn))
.AddOperation(benchPath.PressOut.ReadPressureOp(ref pressOut)) .AddOperation(benchPath.PressOut.ReadPressureOp(ref pressOut))
.AddOperation(new Operations.TimerOp(testParams.Duration)) .AddOperation(new Operations.TimerOp(testParams.DurationLeak))
.EnterState(); .EnterState();
do do
{ {
@@ -147,19 +228,11 @@ namespace TBF.BenchControl.TestMethods.LeakTest
if (e.Contains(Event.Error)) { retVal = Event.Error; goto stopTest; } if (e.Contains(Event.Error)) { retVal = Event.Error; goto stopTest; }
if (e.Contains(Event.UiCmdStop)) { retVal = Event.UiCmdStop; goto stopTest; } if (e.Contains(Event.UiCmdStop)) { retVal = Event.UiCmdStop; goto stopTest; }
if (firstTime) int remainingTime = Math.Max(estimtdEndTime - StateMachine.Time, 0);
{ Bridge.OnActivity(this, string.Format("{0} ... {1} s", Strings.Test_in_progress, remainingTime));
firstTime = false; /// Do the following only once
tstRslt.TempInStart = tempIn.Val;
tstRslt.TempOutStart = tempOut.Val;
tstRslt.TempDivStart = tempDiv.Val;
tstRslt.PressInStart = pressIn.Val;
tstRslt.PressOutStart = pressOut.Val;
}
tstRslt.TempInEnd = tempIn.Val; tstRslt.TempInEnd = tempIn.Val;
tstRslt.TempOutEnd = tempOut.Val; tstRslt.TempOutEnd = tempOut.Val;
tstRslt.TempDivEnd = tempDiv.Val;
tstRslt.PressInEnd = pressIn.Val; tstRslt.PressInEnd = pressIn.Val;
tstRslt.PressOutEnd = pressOut.Val; tstRslt.PressOutEnd = pressOut.Val;
tstRslt.MassEndRaw = mass.Val; tstRslt.MassEndRaw = mass.Val;
@@ -195,8 +268,8 @@ namespace TBF.BenchControl.TestMethods.LeakTest
tstRslt.MassDiff = 0; tstRslt.MassDiff = 0;
tstRslt.DensityIn = Formulas.WaterDensityFromTemp(tstRslt.TempInAvrg); /// [kg/m3] tstRslt.DensityIn = Formulas.WaterDensityFromTemp(tstRslt.TempInAvrg); /// [kg/m3]
tstRslt.DensityOut = Formulas.WaterDensityFromTemp(tstRslt.TempOutAvrg);/// [kg/m3] tstRslt.DensityOut = Formulas.WaterDensityFromTemp(tstRslt.TempOutAvrg);/// [kg/m3]
tstRslt.DensityDiv = Formulas.WaterDensityFromTemp(tstRslt.TempDivAvrg); /// [kg/m3] tstRslt.DensityDiv = 0; /// [kg/m3]
tstRslt.Time = testParams.Duration; /// [s] measurement time tstRslt.Time = testParams.DurationPMax; /// [s] measurement time
tstRslt.FlowMass = 0; /// [kg/h] tstRslt.FlowMass = 0; /// [kg/h]
tstRslt.FlowVolume = 0; /// [l/h] tstRslt.FlowVolume = 0; /// [l/h]
tstRslt.PulsesMaster = 0; /// Pulses of the master flow meter (test total) tstRslt.PulsesMaster = 0; /// Pulses of the master flow meter (test total)
@@ -228,7 +301,7 @@ namespace TBF.BenchControl.TestMethods.LeakTest
tstRslt.Meters[i].VolumeRef = 0; tstRslt.Meters[i].VolumeRef = 0;
tstRslt.Meters[i].PulsesMeter = 0; tstRslt.Meters[i].PulsesMeter = 0;
tstRslt.Meters[i].PulsesMaster = 0; tstRslt.Meters[i].PulsesMaster = 0;
tstRslt.Meters[i].Time = testParams.Duration; tstRslt.Meters[i].Time = testParams.DurationPMax;
tstRslt.Meters[i].VolumeErrorPct = 0; tstRslt.Meters[i].VolumeErrorPct = 0;
tstRslt.Meters[i].Passed = true; tstRslt.Meters[i].Passed = true;
} }
@@ -245,10 +318,9 @@ namespace TBF.BenchControl.TestMethods.LeakTest
stopTest: stopTest:
///----------------------/// ///
/// Quit this sequence /// /// Quit this sequence
///----------------------/// ///
State.Create("LeakTest : Stopping diverter, gate, etc.") State.Create("LeakTest : Stopping diverter, gate, etc.")
.AddOperation(checkUiOp) .AddOperation(checkUiOp)
.AddOperation(cBrd.StopPreviousOp()) .AddOperation(cBrd.StopPreviousOp())
@@ -9,15 +9,15 @@ namespace TBF.BenchControl.TestMethods.PMaxTest
{ {
public class PMaxTestParams : TestParamsBase, IParamsProvider, ITestParams public class PMaxTestParams : TestParamsBase, IParamsProvider, ITestParams
{ {
public float PressureLo; /// Presure range low limit in bar public float PressureLo; /// Presure range low limit in kPa
public float PressureHi; /// Presure range high limit in bar public float PressureHi; /// Presure range high limit in kPa
public int Duration; /// Duration of the test in [s] public int DurationPMax; /// Duration of the test in [s]
public override void InitializeAll() public override void InitializeAll()
{ {
PressureLo = 1.0f; PressureLo = 500.0f; /// kPa
PressureHi = 2.0f; PressureHi = 600.0f; /// kPa
Duration = 10; DurationPMax = 60;
} }
@@ -34,9 +34,9 @@ namespace TBF.BenchControl.TestMethods.PMaxTest
{ {
switch (i) switch (i)
{ {
case 0: return PressureLo.ToString(); case 0: return (PressureLo / 100.0f).ToString(); /// Saved in kPa, UI in bar
case 1: return PressureHi.ToString(); case 1: return (PressureHi / 100.0f).ToString(); /// Saved in kPa, UI in bar
case 2: return Duration.ToString(); case 2: return DurationPMax.ToString();
default: return string.Empty; default: return string.Empty;
} }
} }
@@ -45,9 +45,9 @@ namespace TBF.BenchControl.TestMethods.PMaxTest
{ {
switch (i) switch (i)
{ {
case 0: PressureLo = Utils.ParseUFloat(strValue); return; case 0: PressureLo = 100.0f * Utils.ParseUFloat(strValue); return; /// Saved in kPa, UI in bar
case 1: PressureHi = Utils.ParseSFloat(strValue); return; case 1: PressureHi = 100.0f * Utils.ParseSFloat(strValue); return; /// Saved in kPa, UI in bar
case 2: Duration = int.Parse(strValue); return; case 2: DurationPMax = int.Parse(strValue); return;
default: return; default: return;
} }
} }
@@ -90,7 +90,7 @@ namespace TBF.BenchControl.TestMethods.PMaxTest
PressureLo = tmp.PressureLo; PressureLo = tmp.PressureLo;
PressureHi = tmp.PressureHi; PressureHi = tmp.PressureHi;
Duration = tmp.Duration; DurationPMax = tmp.DurationPMax;
} }
catch catch
{ {
@@ -31,21 +31,10 @@ namespace TBF.BenchControl.TestMethods.PMaxTest
Event retVal = Event.Done; Event retVal = Event.Done;
checkUiOp = new Operations.CheckUIOp(true); /// Runs in more then one state checkUiOp = new Operations.CheckUIOp(true); /// Runs in more then one state
ltrPerRefPulse = outPath.FlowMeter.LtrPerPulse; /// [ltr/pulse], nominal flow in [m3/h]
/// Notes:
/// float timeHr = volumeLtr / (1000.0f * targetFlow);
/// float timeSec = 3600.0f * timeHr;
/// int refPulses = (int)(timeSec * (2000.0f * targetFlow / pOut.FlowMeter.NominalFlow));
int totalPulses = (int)(test.Volume / ltrPerRefPulse + 0.5f);
processDataLoggingOp = new TBF.BenchControl.Operations.ProcessDataLoggingOp(processDataLogger, this); processDataLoggingOp = new TBF.BenchControl.Operations.ProcessDataLoggingOp(processDataLogger, this);
int repetitionNr = 1; /// First test: repetitionNr=1
//====================================
// Transition or SetRoute - Start // Transition or SetRoute - Start
//====================================
switch (Transition(transitionStart, TransitionContext.TestStart)) switch (Transition(transitionStart, TransitionContext.TestStart))
{ {
case Event.Error: { retVal = Event.Error; goto stopTest; } case Event.Error: { retVal = Event.Error; goto stopTest; }
@@ -53,15 +42,12 @@ namespace TBF.BenchControl.TestMethods.PMaxTest
} }
/// Start the test, initialize test results /// Start the test, initialize test results
Bridge.OnTestSelected(this, new TestSelectedEventArgs(test, repetitionNr, inPath, benchPath, outPath, sensPath, totalPulses)); Bridge.OnTestSelected(this, new TestSelectedEventArgs(test, 1, inPath, benchPath, outPath, sensPath, 0));
Entities.TestResult tstRslt = new Entities.TestResult(test, repetitionNr, Entities.MetersKind.Single); Entities.TestResult tstRslt = new Entities.TestResult(test, 1, Entities.MetersKind.Single);
//------------------------------------------------ //------------------------------------------------
Bridge.OnActivity(this, Strings.Starting_the_pump); Bridge.OnActivity(this, Strings.Starting_the_pump);
//------------------------------------------------ //------------------------------------------------
int flowSetTime0 = StateMachine.Time;
float estFlowSetTime = 10.0f;
if (inPath.Pump is GenericDevices.IPumpFM) (inPath.Pump as GenericDevices.IPumpFM).TurnOn(test.PumpPower); if (inPath.Pump is GenericDevices.IPumpFM) (inPath.Pump as GenericDevices.IPumpFM).TurnOn(test.PumpPower);
State.Create("PMaxTest : Starting the pump") State.Create("PMaxTest : Starting the pump")
@@ -69,7 +55,6 @@ namespace TBF.BenchControl.TestMethods.PMaxTest
.AddOperation(cBrd.SetValvesOp(inPath.Pump, null)) .AddOperation(cBrd.SetValvesOp(inPath.Pump, null))
.AddOperation(benchPath.TempIn.ReadTempOp(ref tempIn)) .AddOperation(benchPath.TempIn.ReadTempOp(ref tempIn))
.AddOperation(benchPath.TempOut.ReadTempOp(ref tempOut)) .AddOperation(benchPath.TempOut.ReadTempOp(ref tempOut))
.AddOperation(outPath.TempDiv.ReadTempOp(ref tempDiv))
.AddOperation(benchPath.PressIn.ReadPressureOp(ref pressIn)) .AddOperation(benchPath.PressIn.ReadPressureOp(ref pressIn))
.AddOperation(benchPath.PressOut.ReadPressureOp(ref pressOut)) .AddOperation(benchPath.PressOut.ReadPressureOp(ref pressOut))
.EnterState(); .EnterState();
@@ -84,10 +69,10 @@ namespace TBF.BenchControl.TestMethods.PMaxTest
Bridge.OnActivity(this, Strings.Setting_the_water_pressure); Bridge.OnActivity(this, Strings.Setting_the_water_pressure);
//------------------------------------------------ //------------------------------------------------
const float pumpPowerStep = 3.0f;
float pumpPower = test.PumpPower; float pumpPower = test.PumpPower;
int startTime = StateMachine.Time; int startTime = StateMachine.Time;
do
while (true)
{ {
if (inPath.Pump is GenericDevices.IPumpFM) (inPath.Pump as GenericDevices.IPumpFM).TurnOn(pumpPower); if (inPath.Pump is GenericDevices.IPumpFM) (inPath.Pump as GenericDevices.IPumpFM).TurnOn(pumpPower);
@@ -95,7 +80,6 @@ namespace TBF.BenchControl.TestMethods.PMaxTest
.AddOperation(checkUiOp) .AddOperation(checkUiOp)
.AddOperation(benchPath.TempIn.ReadTempOp(ref tempIn)) .AddOperation(benchPath.TempIn.ReadTempOp(ref tempIn))
.AddOperation(benchPath.TempOut.ReadTempOp(ref tempOut)) .AddOperation(benchPath.TempOut.ReadTempOp(ref tempOut))
.AddOperation(outPath.TempDiv.ReadTempOp(ref tempDiv))
.AddOperation(benchPath.PressIn.ReadPressureOp(ref pressIn)) .AddOperation(benchPath.PressIn.ReadPressureOp(ref pressIn))
.AddOperation(benchPath.PressOut.ReadPressureOp(ref pressOut)) .AddOperation(benchPath.PressOut.ReadPressureOp(ref pressOut))
.AddOperation(new Operations.TimerOp(5)) .AddOperation(new Operations.TimerOp(5))
@@ -109,25 +93,41 @@ namespace TBF.BenchControl.TestMethods.PMaxTest
} }
while (e.Contains(Event.TimerBusy)); while (e.Contains(Event.TimerBusy));
UiBridge.Bridge.OnLog(this, string.Format("time = {0}, pump_power = {1}%, pressure_up = {2}, pressure_down = {3}\r\n", UiBridge.Bridge.OnLog(this, string.Format("time = {0}, pump_power = {1}%, pressure_up = {2}kPa, pressure_down = {3}kPa\r\n",
StateMachine.Time - startTime, StateMachine.Time - startTime,
pumpPower.ToString("F0"), pumpPower.ToString("F0"),
pressIn.Val.ToString("F3"), pressIn.Val.ToString("F1"),
pressIn.Val.ToString("F3"))); pressIn.Val.ToString("F1")));
if (pumpPower == 100.0f) break; /// Already at the max.pump power tstRslt.TempInStart = tempIn.Val;
tstRslt.TempOutStart = tempOut.Val;
tstRslt.PressInStart = pressIn.Val;
tstRslt.PressOutStart = pressOut.Val;
pumpPower += pumpPowerStep; float step = (pumpPower < 40.0f) ? 5.0f : ((pumpPower < 60.0f) ? 3.0f : ((pumpPower < 80.0f) ? 2.0f : 1.0f));
if (pumpPower >= 100.0f) pumpPower = 100.0f; /// Max. 100%
if (pressOut.Val < testParams.PressureLo)
{
if (pumpPower == 100.0f) break; /// Already at max. pump power -> Quit loop
pumpPower = Math.Min(pumpPower + step, 100.0f); /// Limit max. power to 100%
}
else if (pressOut.Val > testParams.PressureHi)
{
if (pumpPower == 0) break; /// Already at min. pump power -> Quit loop
pumpPower = Math.Max(pumpPower - step, 0); /// Limit min. power to 0%
}
else
{
break; /// Pressure is in the range -> Quit loop
}
} }
while (testParams.PressureLo <= pressOut.Val && pressOut.Val <= testParams.PressureHi);
pressure_set: pressure_set:
int time = StateMachine.Time;
tstRslt.TimeStart = DateTime.Now; tstRslt.TimeStart = DateTime.Now;
startTime = StateMachine.Time;
int endTime = startTime + testParams.DurationPMax;
ResetAveragedData(); ResetAveragedData();
bool firstTime = true;
//------------------------------------------------ //------------------------------------------------
Bridge.OnActivity(this, Strings.Test_in_progress); Bridge.OnActivity(this, Strings.Test_in_progress);
@@ -136,10 +136,9 @@ namespace TBF.BenchControl.TestMethods.PMaxTest
.AddOperation(checkUiOp) .AddOperation(checkUiOp)
.AddOperation(benchPath.TempIn.ReadTempOp(ref tempIn)) .AddOperation(benchPath.TempIn.ReadTempOp(ref tempIn))
.AddOperation(benchPath.TempOut.ReadTempOp(ref tempOut)) .AddOperation(benchPath.TempOut.ReadTempOp(ref tempOut))
.AddOperation(outPath.TempDiv.ReadTempOp(ref tempDiv))
.AddOperation(benchPath.PressIn.ReadPressureOp(ref pressIn)) .AddOperation(benchPath.PressIn.ReadPressureOp(ref pressIn))
.AddOperation(benchPath.PressOut.ReadPressureOp(ref pressOut)) .AddOperation(benchPath.PressOut.ReadPressureOp(ref pressOut))
.AddOperation(new Operations.TimerOp(testParams.Duration)) .AddOperation(new Operations.TimerOp(testParams.DurationPMax))
.EnterState(); .EnterState();
do do
{ {
@@ -147,19 +146,11 @@ namespace TBF.BenchControl.TestMethods.PMaxTest
if (e.Contains(Event.Error)) { retVal = Event.Error; goto stopTest; } if (e.Contains(Event.Error)) { retVal = Event.Error; goto stopTest; }
if (e.Contains(Event.UiCmdStop)) { retVal = Event.UiCmdStop; goto stopTest; } if (e.Contains(Event.UiCmdStop)) { retVal = Event.UiCmdStop; goto stopTest; }
if (firstTime) int remainingTime = Math.Max(endTime - StateMachine.Time, 0);
{ Bridge.OnActivity(this, string.Format("{0} ... {1} s", Strings.Test_in_progress, remainingTime));
firstTime = false; /// Do the following only once
tstRslt.TempInStart = tempIn.Val;
tstRslt.TempOutStart = tempOut.Val;
tstRslt.TempDivStart = tempDiv.Val;
tstRslt.PressInStart = pressIn.Val;
tstRslt.PressOutStart = pressOut.Val;
}
tstRslt.TempInEnd = tempIn.Val; tstRslt.TempInEnd = tempIn.Val;
tstRslt.TempOutEnd = tempOut.Val; tstRslt.TempOutEnd = tempOut.Val;
tstRslt.TempDivEnd = tempDiv.Val;
tstRslt.PressInEnd = pressIn.Val; tstRslt.PressInEnd = pressIn.Val;
tstRslt.PressOutEnd = pressOut.Val; tstRslt.PressOutEnd = pressOut.Val;
tstRslt.MassEndRaw = mass.Val; tstRslt.MassEndRaw = mass.Val;
@@ -195,8 +186,8 @@ namespace TBF.BenchControl.TestMethods.PMaxTest
tstRslt.MassDiff = 0; tstRslt.MassDiff = 0;
tstRslt.DensityIn = Formulas.WaterDensityFromTemp(tstRslt.TempInAvrg); /// [kg/m3] tstRslt.DensityIn = Formulas.WaterDensityFromTemp(tstRslt.TempInAvrg); /// [kg/m3]
tstRslt.DensityOut = Formulas.WaterDensityFromTemp(tstRslt.TempOutAvrg); /// [kg/m3] tstRslt.DensityOut = Formulas.WaterDensityFromTemp(tstRslt.TempOutAvrg); /// [kg/m3]
tstRslt.DensityDiv = Formulas.WaterDensityFromTemp(tstRslt.TempDivAvrg); /// [kg/m3] tstRslt.DensityDiv = 0; /// [kg/m3]
tstRslt.Time = testParams.Duration; /// [s] measurement time tstRslt.Time = testParams.DurationPMax; /// [s] measurement time
tstRslt.FlowMass = 0; /// [kg/h] tstRslt.FlowMass = 0; /// [kg/h]
tstRslt.FlowVolume = 0; /// [l/h] tstRslt.FlowVolume = 0; /// [l/h]
tstRslt.PulsesMaster = 0; /// Pulses of the master flow meter (test total) tstRslt.PulsesMaster = 0; /// Pulses of the master flow meter (test total)
@@ -228,7 +219,7 @@ namespace TBF.BenchControl.TestMethods.PMaxTest
tstRslt.Meters[i].VolumeRef = 0; tstRslt.Meters[i].VolumeRef = 0;
tstRslt.Meters[i].PulsesMeter = 0; tstRslt.Meters[i].PulsesMeter = 0;
tstRslt.Meters[i].PulsesMaster = 0; tstRslt.Meters[i].PulsesMaster = 0;
tstRslt.Meters[i].Time = testParams.Duration; tstRslt.Meters[i].Time = testParams.DurationPMax;
tstRslt.Meters[i].VolumeErrorPct= 0; tstRslt.Meters[i].VolumeErrorPct= 0;
tstRslt.Meters[i].Passed = true; tstRslt.Meters[i].Passed = true;
} }
@@ -245,10 +236,9 @@ namespace TBF.BenchControl.TestMethods.PMaxTest
stopTest: stopTest:
///----------------------/// ///
/// Quit this sequence /// /// Quit this sequence
///----------------------/// ///
State.Create("PMaxTest : Stopping diverter, gate, etc.") State.Create("PMaxTest : Stopping diverter, gate, etc.")
.AddOperation(checkUiOp) .AddOperation(checkUiOp)
.AddOperation(cBrd.StopPreviousOp()) .AddOperation(cBrd.StopPreviousOp())
+10 -2
View File
@@ -106,10 +106,18 @@ namespace TBF.Forms
(x, y, z) => z.TestResult.TempOutAvrg.ToString("F2"))); (x, y, z) => z.TestResult.TempOutAvrg.ToString("F2")));
AllItems.Add(new ResultItemSpec("T div", Strings.T_div, x => x.TestResult.TempDivAvrg.ToString("F2"), AllItems.Add(new ResultItemSpec("T div", Strings.T_div, x => x.TestResult.TempDivAvrg.ToString("F2"),
(x, y, z) => z.TestResult.TempDivAvrg.ToString("F2"))); (x, y, z) => z.TestResult.TempDivAvrg.ToString("F2")));
AllItems.Add(new ResultItemSpec("P in", Strings.P_in, x => x.TestResult.PressInAvrg.ToString("F3"), AllItems.Add(new ResultItemSpec("P up", Strings.P_in, x => x.TestResult.PressInAvrg.ToString("F3"),
(x, y, z) => z.TestResult.PressInAvrg.ToString("F3"))); (x, y, z) => z.TestResult.PressInAvrg.ToString("F3")));
AllItems.Add(new ResultItemSpec("P out", Strings.P_out, x => x.TestResult.PressOutAvrg.ToString("F3"), AllItems.Add(new ResultItemSpec("P up start", Strings.P_in_start, x => x.TestResult.PressInStart.ToString("F3"),
(x, y, z) => z.TestResult.PressInStart.ToString("F3")));
AllItems.Add(new ResultItemSpec("P up end", Strings.P_in_end, x => x.TestResult.PressInEnd.ToString("F3"),
(x, y, z) => z.TestResult.PressInEnd.ToString("F3")));
AllItems.Add(new ResultItemSpec("P down", Strings.P_out, x => x.TestResult.PressOutAvrg.ToString("F3"),
(x, y, z) => z.TestResult.PressOutAvrg.ToString("F3"))); (x, y, z) => z.TestResult.PressOutAvrg.ToString("F3")));
AllItems.Add(new ResultItemSpec("P down start", Strings.P_out_start, x => x.TestResult.PressOutStart.ToString("F3"),
(x, y, z) => z.TestResult.PressOutStart.ToString("F3")));
AllItems.Add(new ResultItemSpec("P down end", Strings.P_out_end, x => x.TestResult.PressOutEnd.ToString("F3"),
(x, y, z) => z.TestResult.PressOutEnd.ToString("F3")));
AllItems.Add(new ResultItemSpec("Reference error", "Err.ref. [%]", x => x.TestResult.ErrorMaster.ToString("F3"), AllItems.Add(new ResultItemSpec("Reference error", "Err.ref. [%]", x => x.TestResult.ErrorMaster.ToString("F3"),
(x, y, z) => z.TestResult.ErrorMaster.ToString("F3"))); (x, y, z) => z.TestResult.ErrorMaster.ToString("F3")));
AllItems.Add(new ResultItemSpec("Ambient temperature", "T amb", x => x.TestResult.AmbientTempAve.ToString("F1"), AllItems.Add(new ResultItemSpec("Ambient temperature", "T amb", x => x.TestResult.AmbientTempAve.ToString("F1"),
+65 -2
View File
@@ -321,6 +321,15 @@ namespace TBF.Resources {
} }
} }
/// <summary>
/// Looks up a localized string similar to Closing input valve, switching the pump off.
/// </summary>
internal static string Closing_valve_Pump_off {
get {
return ResourceManager.GetString("Closing_valve_Pump_off", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to Combined meters. /// Looks up a localized string similar to Combined meters.
/// </summary> /// </summary>
@@ -573,6 +582,24 @@ namespace TBF.Resources {
} }
} }
/// <summary>
/// Looks up a localized string similar to Leak duration [s].
/// </summary>
internal static string Duration_Leak_s {
get {
return ResourceManager.GetString("Duration_Leak_s", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to PMax duration [s].
/// </summary>
internal static string Duration_PMax_s {
get {
return ResourceManager.GetString("Duration_PMax_s", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to Duration [s]. /// Looks up a localized string similar to Duration [s].
/// </summary> /// </summary>
@@ -1267,7 +1294,7 @@ namespace TBF.Resources {
} }
/// <summary> /// <summary>
/// Looks up a localized string similar to P in. /// Looks up a localized string similar to P up.
/// </summary> /// </summary>
internal static string P_in { internal static string P_in {
get { get {
@@ -1276,7 +1303,25 @@ namespace TBF.Resources {
} }
/// <summary> /// <summary>
/// Looks up a localized string similar to P out. /// Looks up a localized string similar to P up end.
/// </summary>
internal static string P_in_end {
get {
return ResourceManager.GetString("P_in_end", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to P up start.
/// </summary>
internal static string P_in_start {
get {
return ResourceManager.GetString("P_in_start", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to P down.
/// </summary> /// </summary>
internal static string P_out { internal static string P_out {
get { get {
@@ -1284,6 +1329,24 @@ namespace TBF.Resources {
} }
} }
/// <summary>
/// Looks up a localized string similar to P down end.
/// </summary>
internal static string P_out_end {
get {
return ResourceManager.GetString("P_out_end", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to P down start.
/// </summary>
internal static string P_out_start {
get {
return ResourceManager.GetString("P_out_start", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to Parameters. /// Looks up a localized string similar to Parameters.
/// </summary> /// </summary>
@@ -939,4 +939,16 @@
<data name="WMState" xml:space="preserve"> <data name="WMState" xml:space="preserve">
<value>WZ_Stand</value> <value>WZ_Stand</value>
</data> </data>
<data name="P_in_end" xml:space="preserve">
<value>P ein. ende</value>
</data>
<data name="P_in_start" xml:space="preserve">
<value>P ein. start</value>
</data>
<data name="P_out_end" xml:space="preserve">
<value>P aus. ende</value>
</data>
<data name="P_out_start" xml:space="preserve">
<value>P aus. start</value>
</data>
</root> </root>
+23 -2
View File
@@ -181,10 +181,10 @@
<value>Pump</value> <value>Pump</value>
</data> </data>
<data name="P_in" xml:space="preserve"> <data name="P_in" xml:space="preserve">
<value>P in</value> <value>P up</value>
</data> </data>
<data name="P_out" xml:space="preserve"> <data name="P_out" xml:space="preserve">
<value>P out</value> <value>P down</value>
</data> </data>
<data name="Q_from_m3h" xml:space="preserve"> <data name="Q_from_m3h" xml:space="preserve">
<value>Q from [m3/h]</value> <value>Q from [m3/h]</value>
@@ -973,4 +973,25 @@
<data name="Pressure_selection" xml:space="preserve"> <data name="Pressure_selection" xml:space="preserve">
<value>Pressure Selection</value> <value>Pressure Selection</value>
</data> </data>
<data name="Duration_Leak_s" xml:space="preserve">
<value>Leak duration [s]</value>
</data>
<data name="Duration_PMax_s" xml:space="preserve">
<value>PMax duration [s]</value>
</data>
<data name="P_in_end" xml:space="preserve">
<value>P up end</value>
</data>
<data name="P_in_start" xml:space="preserve">
<value>P up start</value>
</data>
<data name="P_out_end" xml:space="preserve">
<value>P down end</value>
</data>
<data name="P_out_start" xml:space="preserve">
<value>P down start</value>
</data>
<data name="Closing_valve_Pump_off" xml:space="preserve">
<value>Closing input valve, switching the pump off</value>
</data>
</root> </root>
@@ -306,14 +306,14 @@ namespace TBF.Screens
estmtdTimeLabel.Text = args.Test.TstTime.ToString("F1"); estmtdTimeLabel.Text = args.Test.TstTime.ToString("F1");
/// Names of virtual bench components /// Names of virtual bench components
prInCmpntLabel.Text = args.BenchPath.PressIn.Cfg.Name; if (args.BenchPath.PressIn != null) prInCmpntLabel.Text = args.BenchPath.PressIn.Name;
prOutCmpntLabel.Text = args.BenchPath.PressOut.Cfg.Name; if (args.BenchPath.PressOut != null) prOutCmpntLabel.Text = args.BenchPath.PressOut.Name;
tInCmpntLabel.Text = args.BenchPath.TempIn.Cfg.Name; if (args.BenchPath.TempIn != null) tInCmpntLabel.Text = args.BenchPath.TempIn.Name;
tOutCmpntLabel.Text = args.BenchPath.TempOut.Cfg.Name; if (args.BenchPath.TempOut != null) tOutCmpntLabel.Text = args.BenchPath.TempOut.Name;
tDivCmpntLabel.Text = args.OutputPath.TempDiv.Cfg.Name; if (args.OutputPath.TempDiv != null) tDivCmpntLabel.Text = args.OutputPath.TempDiv.Name;
refFlowCmpntLabel.Text = args.OutputPath.FlowMeter.Cfg.Name; if (args.OutputPath.FlowMeter != null) refFlowCmpntLabel.Text = args.OutputPath.FlowMeter.Name;
regValveCmpntLabel.Text = args.OutputPath.RegulValve.Cfg.Name; if (args.OutputPath.RegulValve != null) regValveCmpntLabel.Text = args.OutputPath.RegulValve.Name;
scaleCmpntLabel.Text = args.OutputPath.Balance.Cfg.Name; if (args.OutputPath.Balance != null) scaleCmpntLabel.Text = args.OutputPath.Balance.Name;
sensor1Label.Text = (args.MetersPath.RegisterReaders[0] == null) ? "" : args.MetersPath.RegisterReaders[0].Cfg.Name; sensor1Label.Text = (args.MetersPath.RegisterReaders[0] == null) ? "" : args.MetersPath.RegisterReaders[0].Cfg.Name;
if (Program.WMsCount >= 2) if (Program.WMsCount >= 2)