Heat meters evaluation added to FlyingStartMassCollectionSeq and FlyingStartSeq, ver. 2.10.345

This commit is contained in:
Milan Hanajik
2016-08-24 18:30:00 +02:00
parent 49c6ebf9c7
commit c842c50361
6 changed files with 294 additions and 204 deletions
@@ -66,6 +66,23 @@ namespace TBF.BenchControl.TestMethods.FlyingStart
TestProgressEventArgs.SetEstimatedTimes(new int[] { 1, 1, 1, 30, Convert.ToInt32(test.TstTime) + 15, 0, 0 });
Bridge.OnTestProgress(this, new TestProgressEventArgs(test, repetitionNr, Config.Entities.Progress.JustStarted));
///
/// Display prompt to emerge temperature meters to appropriate baths for heat meters test
///
if (heatMetersTestParams != null && !string.IsNullOrEmpty(heatMetersTestParams.Prompt))
{
State.Create("FixedStartMassCollection : Show heat meters prompt (exchange temperature meters)")
.AddOperation(checkUiOp)
.AddOperation(new Operations.MessageBoxOp(heatMetersTestParams.Prompt))
.EnterState();
do
{
e = StateMachine.WaitRunDevsRunOps();
if (TestAndLogUiCmdStop(test, e)) { retVal = Event.UiCmdStop; goto stopTest; }
}
while (!e.Contains(Event.OK));
}
//------------------------------------------------
Bridge.OnActivity(this, Strings.Setting_the_flow);
//------------------------------------------------
@@ -116,56 +133,55 @@ namespace TBF.BenchControl.TestMethods.FlyingStart
int flowSetTime = StateMachine.Time - flowSetTime0;
float currentFlow = RefFlow.Val;
if (heatMetersTestParams != null && heatMetersPath != null)
{
//---------------------------------------------------
Bridge.OnActivity(this, Strings.Setting_temperature);
//---------------------------------------------------
if (heatMetersTestParams != null && heatMetersPath != null)
{
//---------------------------------------------------
Bridge.OnActivity(this, Strings.Setting_temperature);
//---------------------------------------------------
int lastTimeSec = StateMachine.Time;
float Tw_last = 0;
float Tc_last = 0;
int lastTimeSec = StateMachine.Time;
float Tw_last = 0;
float Tc_last = 0;
FloatBox Tw1 = new FloatBox();
FloatBox Tw2 = new FloatBox();
FloatBox Tc1 = new FloatBox();
FloatBox Tc2 = new FloatBox();
State.Create("FixedStartMassCollection : Check temperature stabilized.")
.AddOperation(checkUiOp)
.AddOperation(heatMetersPath.TMeterRefWarm1.ReadTempOp(ref TempRefWarm1))
.AddOperation(heatMetersPath.TMeterRefWarm2.ReadTempOp(ref TempRefWarm2))
.AddOperation(heatMetersPath.TMeterRefCold1.ReadTempOp(ref TempRefCold1))
.AddOperation(heatMetersPath.TMeterRefCold2.ReadTempOp(ref TempRefCold2))
.EnterState();
do
{
e = StateMachine.WaitRunDevsRunOps();
if (TestAndLogUiCmdStop(test, e)) { retVal = Event.UiCmdStop; goto stopTest; }
if (e.Contains(Event.Next)) goto temperature_set;
State.Create("FixedStartMassCollection : Check temperature stabilized.")
.AddOperation(checkUiOp)
.AddOperation(heatMetersPath.TMeterRefWarm1.ReadTempOp(ref Tw1))
.AddOperation(heatMetersPath.TMeterRefWarm2.ReadTempOp(ref Tw2))
.AddOperation(heatMetersPath.TMeterRefCold1.ReadTempOp(ref Tc1))
.AddOperation(heatMetersPath.TMeterRefCold2.ReadTempOp(ref Tc2))
.EnterState();
do
{
if (TestAndLogUiCmdStop(test, e)) { retVal = Event.UiCmdStop; goto stopTest; }
if (e.Contains(Event.Next)) goto temperature_set;
if (TempRefWarm1.Val != 0 && TempRefWarm2.Val != 0 && TempRefCold1.Val != 0 && TempRefCold2.Val != 0)
{
if (StateMachine.Time - lastTimeSec > 10 || StateMachine.Time - lastTimeSec < 0)
{
float Tw = (TempRefWarm1.Val + TempRefWarm2.Val) / 2.0f;
float Tc = (TempRefCold1.Val + TempRefCold2.Val) / 2.0f;
if (heatMetersTestParams.TempWarmLo <= Tw && Tw <= heatMetersTestParams.TempWarmHi &&
heatMetersTestParams.TempColdLo <= Tc && Tc <= heatMetersTestParams.TempColdHi &&
Math.Abs(Tw - Tw_last) <= heatMetersTestParams.ChangeInTimeWarm &&
Math.Abs(Tc - Tc_last) <= heatMetersTestParams.ChangeInTimeCold &&
Math.Abs(TempRefWarm1.Val - TempRefWarm2.Val) <= heatMetersTestParams.DeltaTempWarm &&
Math.Abs(TempRefCold1.Val - TempRefCold2.Val) <= heatMetersTestParams.DeltaTempCold)
{
goto temperature_set;
}
if (StateMachine.Time - lastTimeSec > 10 || StateMachine.Time - lastTimeSec < 0)
{
float Tw = (Tw1.Val + Tw2.Val) / 2.0f;
float Tc = (Tc1.Val + Tc2.Val) / 2.0f;
if (heatMetersTestParams.TempWarmLo <= Tw && Tw <= heatMetersTestParams.TempWarmHi &&
heatMetersTestParams.TempColdLo <= Tc && Tc <= heatMetersTestParams.TempColdHi &&
Math.Abs(Tw - Tw_last) <= heatMetersTestParams.ChangeInTimeWarm &&
Math.Abs(Tc - Tc_last) <= heatMetersTestParams.ChangeInTimeCold &&
Math.Abs(Tw1.Val - Tw2.Val) <= heatMetersTestParams.DeltaTempWarm &&
Math.Abs(Tc1.Val - Tc2.Val) <= heatMetersTestParams.DeltaTempCold)
{
goto temperature_set;
}
lastTimeSec = StateMachine.Time;
Tw_last = Tw;
Tc_last = Tc;
}
}
}
while (true);
}
lastTimeSec = StateMachine.Time;
Tw_last = Tw;
Tc_last = Tc;
}
}
while (true);
}
temperature_set:
temperature_set:
/// Extract cameras from the current sensors path, add operations to the detection state
IList<IOperation> measureOperations = new List<IOperation>();
@@ -251,8 +267,28 @@ namespace TBF.BenchControl.TestMethods.FlyingStart
RefFreq.Val = cBrd.ReferenceFreq;
RefFlow.Val = cBrd.ReferenceFlow;
UpdateAllStatistics();
if (heatMetersTestParams != null)
{
if (lastEnergyUpdateTime == 0)
{
lastEnergyUpdateTime = StateMachine.Time;
}
else
{
//double deltaTime = (double)(StateMachine.Time - lastEnergyUpdateTime);
float T_in = (TempRefWarm1.Val + TempRefWarm2.Val) / 2; /// [°C]
float T_out = (TempRefCold1.Val + TempRefCold2.Val) / 2; /// [°C]
double deltaVolume = LtrPerRefPulse * RefPulsesDelta; /// [l]
double deltaEnergy = 0.001 * deltaVolume * (T_in - T_out) * Formulas.HeatCoefficientWater(16, T_in, T_out, heatMetersTestParams.FlowMeasuredAtHiTempPipe); /// [J] = [m3] * [K] * [J/(m3 K)]
Energy.Update(deltaEnergy);
VolumeForEnergy.Update(deltaVolume);
lastEnergyUpdateTime = StateMachine.Time;
}
}
Bridge.OnProcessData(this, new ProcessDataEventArgs(test, repetitionNr, Config.Entities.Progress.Test));
Bridge.OnTestProgress(this, new TestProgressEventArgs(test, repetitionNr, Config.Entities.Progress.Test));
}
@@ -351,10 +387,44 @@ namespace TBF.BenchControl.TestMethods.FlyingStart
}
else if (heatMetersTestParams != null)
{
///
/// Heat meters
///
}
///
/// Heat meters
///
tstRslt.RefEnergy = Energy.Sum * tstRslt.VolumeCTV / VolumeForEnergy.Sum; /// [J]=[J]*[l]/[l]
for (int i = 0; i < BatchRslts.WMPositionsCount; i++)
{
if (test.Part != 0 && test.Part != Utils.PartNr(i + 1, BatchRslts.Batch.Compound)) continue;
Results.Entities.MeterTestRslt meterRslt = BatchRslts.GetMeterTestRslt(testName, i, Config.Entities.CompoundMeterId.Single);
GenericDevices.IRegisterReader regReader = sensPath.RegisterReaders[i];
if (meterRslt != null && regReader != null)
{
meterRslt.PulsesPerLiter = regReader.PulsesPerLtr;
meterRslt.PulsesMeter = Convert.ToDouble(regReader.WMPulses);
meterRslt.PulsesMaster = Convert.ToDouble(regReader.WMRefPulses);
meterRslt.TestTime = tstRslt.TestTime; /// TODO: Malo by sa citat z dosky
meterRslt.VolumeStart = 0; /// liter
meterRslt.VolumeEnd = 0; /// liter
meterRslt.VolumeMeter = meterRslt.PulsesMeter * regReader.LtrsPerPulse; /// liter
meterRslt.VolumeRef = meterRslt.PulsesMaster * tstRslt.ConstMaster; /// liter
/// TODO: Rewrite the following 2 lines
meterRslt.EnergyStart = 0.0;
meterRslt.EnergyEnd = 1.0;
meterRslt.Energy = meterRslt.EnergyEnd - meterRslt.EnergyStart;
meterRslt.RefEnergy = tstRslt.RefEnergy;
meterRslt.Error = Formulas.ErrorFromVolumes(meterRslt.Energy, meterRslt.RefEnergy);
meterRslt.Passed = (meterRslt.Error >= test.ErrLimLo + test.Uncertainty)
&& (meterRslt.Error <= test.ErrLimHi - test.Uncertainty);
meterRslt.TestDone = true;
}
}
}
else
{
///
@@ -22,7 +22,7 @@ namespace TBF.BenchControl.TestMethods.FlyingStart.HeatMeters
public float DeltaTempCold;
public float ChangeInTimeWarm;
public float ChangeInTimeCold;
public string HeatMetersPath;
public string Prompt;
public override void InitializeAll()
{
@@ -41,7 +41,7 @@ namespace TBF.BenchControl.TestMethods.FlyingStart.HeatMeters
"Delta T cold",
"Change in time T warm",
"Change in time T cold",
"Heat meters path",
Strings.Prompt,
};
public override string ParamName(int i) { return paramNames[i]; }
public override int ParamsCount() { return paramNames.Length; }
@@ -59,7 +59,7 @@ namespace TBF.BenchControl.TestMethods.FlyingStart.HeatMeters
case 6: return DeltaTempCold.ToString();
case 7: return ChangeInTimeWarm.ToString();
case 8: return ChangeInTimeCold.ToString();
case 9: return HeatMetersPath;
case 9: return Prompt;
default: return string.Empty;
}
}
@@ -77,7 +77,7 @@ namespace TBF.BenchControl.TestMethods.FlyingStart.HeatMeters
case 6: DeltaTempCold = Utils.ParseUFloat(strValue); return;
case 7: ChangeInTimeWarm = Utils.ParseUFloat(strValue); return;
case 8: ChangeInTimeCold = Utils.ParseUFloat(strValue); return;
case 9: HeatMetersPath = strValue; return;
case 9: Prompt = strValue; return;
default: return;
}
}
@@ -126,7 +126,7 @@ namespace TBF.BenchControl.TestMethods.FlyingStart.HeatMeters
prms.DeltaTempCold = DeltaTempCold;
prms.ChangeInTimeWarm = ChangeInTimeWarm;
prms.ChangeInTimeCold = ChangeInTimeCold;
prms.HeatMetersPath = HeatMetersPath;
prms.Prompt = Prompt;
}
public IParamsProvider Clone()