Version 1.5.84. Reading registers, scales, temperature, pressure, ... during test done in one state in the sequence.

Many changes in TestMethods.iPerlCommunication and WaterMeters.iPerl.WaterMeter. iPerl measurement with opto-data works OK.
Logging in State changed, ...
This commit is contained in:
Milan Hanajik
2015-08-19 13:04:47 +02:00
parent fa6b99b980
commit 33963ec8cf
18 changed files with 635 additions and 249 deletions
@@ -252,45 +252,59 @@ namespace TBF.BenchControl.TestMethods.FlyingStartCollectionMethod
}
while (!e.Contains(Event.MeasurementStarted));
/// Reset iPerl volume measurement
foreach (var rr in sensPath.RegisterReaders)
{
if (rr is WaterMeters.iPerl.WaterMeter)
{
(rr as WaterMeters.iPerl.WaterMeter).Reset();
}
}
//foreach (var rr in sensPath.RegisterReaders)
//{
// if (rr is WaterMeters.iPerl.WaterMeter)
// {
// (rr as WaterMeters.iPerl.WaterMeter).Reset();
// }
//}
/// Measurement loop - preparation
readRegisters1 = new Operations.ReadMoreRegistersOp(sensPath.RegisterReaders, ref WMPulses, ref WMRefPulses);
readRegisters2 = new Operations.ReadMoreRegistersOp(sensPath.RegisterReaders, ref WMPulses, ref WMRefPulses);
queryEnd1 = cBrd.QueryMeasurementEndOp();
queryEnd2 = cBrd.QueryMeasurementEndOp();
readRegistersOp = new Operations.ReadMoreRegistersOp(sensPath.RegisterReaders, ref WMPulses, ref WMTimes, ref WMRefPulses);
queryEnd1 = cBrd.QueryMeasurementEndOp();
bool firstTime = true; /// To reset sums for averaging
ResetAveragedData();
int estimtdEndTime = StateMachine.Time + (int)tstRslt.TstTime;
/// Measurement loop - begin
while (true)
{
//--------------------------------
switch (ReadRegistersTempPressAmbient(measureOperations, true))
{
case Event.Error: { retVal = Event.Error; goto stopTest; }
case Event.UiCmdStop: { retVal = Event.UiCmdStop; goto stopTest; }
case Event.MeasurementCompleted: goto test_completed;
}
State.Create("Read water meters")
.AddOperation(checkUiOp)
.AddOperations(measureOperations)
.AddOperation(readRegistersOp)
.AddOperation(benchPath.TempIn.ReadTempOp(ref tempIn))
.AddOperation(benchPath.TempOut.ReadTempOp(ref tempOut))
.AddOperation(outPath.TempDiv.ReadTempOp(ref tempDiv))
.AddOperation(benchPath.PressIn.ReadPressureOp(ref pressIn))
.AddOperation(benchPath.PressOut.ReadPressureOp(ref pressOut))
.AddOperation(outPath.Balance.ReadMassOp(ref mass))
.AddOperation(StateMachine.ControlBoard.UpdateTankWeightOp())
.AddOperation((StateMachine.Ambient != null)
? StateMachine.Ambient.ReadAmbientOp(airTemperature, airPressure, airHumidity)
: null)
.AddOperation(queryEnd1)
.AddOperation(processDataLoggingOp)
.EnterState();
do
{
e = StateMachine.WaitRunDevsRunOps();
if (e.Contains(Event.Error)) goto stopTest;
if (e.Contains(Event.UiCmdStop)) goto stopTest;
if (e.Contains(Event.MeasurementCompleted)) goto test_completed;
//------------------------------------------------
int remainingTime = Math.Max(estimtdEndTime - StateMachine.Time, 0);
Bridge.OnActivity(this, string.Format("{0} ... {1} s", Strings.Test_in_progress, remainingTime));
Bridge.OnActivity(this, string.Format("{0} ... {1} s", Strings.Test_in_progress, remainingTime));
//------------------------------------------------
if (firstTime)
{
firstTime = false; /// Do the following only once
tstRslt.TempInStart = tempIn.Val;
tstRslt.TempInStart = tempIn.Val;
tstRslt.TempOutStart = tempOut.Val;
tstRslt.TempDivStart = tempDiv.Val;
tstRslt.PressInStart = pressIn.Val;
@@ -304,7 +318,7 @@ namespace TBF.BenchControl.TestMethods.FlyingStartCollectionMethod
tstRslt.PressOutEnd = pressOut.Val;
tstRslt.MassEndRaw = mass.Val;
AccumulateAveragedData();
AccumulateAveragedData();
refFreq.Val = cBrd.ReferenceFreq;
refFlow.Val = cBrd.ReferenceFlow;
@@ -312,18 +326,19 @@ namespace TBF.BenchControl.TestMethods.FlyingStartCollectionMethod
tstRslt.AmbientPressAve = airPressure.Val;
tstRslt.AmbientHumiAve = airHumidity.Val;
string logstr = string.Format("E={0} f={1} q={2}", cBrd.EtPulses(0), cBrd.ReferenceFreq,
cBrd.ReferenceFlow * outPath.FlowMeter.NominalFlow);
for (int i = 0; i < Program.WMsCount; i++)
{
logstr += string.Format(" M{0}=({1},{2})", i + 1, WMRefPulses[i], WMPulses[i]);
}
log.Debug(logstr);
string logstr = string.Format("E={0} f={1} q={2}", cBrd.EtPulses(0), cBrd.ReferenceFreq,
cBrd.ReferenceFlow * outPath.FlowMeter.NominalFlow);
for (int i = 0; i < Program.WMsCount; i++)
{
logstr += string.Format(" M{0}=({1},{2})", i + 1, WMRefPulses[i], WMPulses[i]);
}
log.Debug(logstr);
float progress = Formulas.TestProgress(cBrd.EtPulses(0), totalPulses, estFlowSetTime, test.TstTime);
Bridge.OnTestProgress(this, GetTestProgressData(test, tstRslt, true, cBrd, cBrd.TTime, progress));
}
}
while (true);
/// Measurement loop - end
test_completed:
@@ -334,7 +349,7 @@ namespace TBF.BenchControl.TestMethods.FlyingStartCollectionMethod
.AddOperation(outPath.TempDiv.ReadTempOp(ref tempDiv))
.AddOperation(benchPath.PressIn.ReadPressureOp(ref pressIn))
.AddOperation(benchPath.PressOut.ReadPressureOp(ref pressOut))
.AddOperation(readRegisters1)
.AddOperation(readRegistersOp)
.AddOperation((StateMachine.Ambient != null)
? StateMachine.Ambient.ReadAmbientOp(airTemperature, airPressure, airHumidity) : null)
.AddOperation(outPath.Balance.ReadMassOp(ref mass))
@@ -362,7 +377,7 @@ namespace TBF.BenchControl.TestMethods.FlyingStartCollectionMethod
.AddOperation(outPath.TempDiv.ReadTempOp(ref tempDiv))
.AddOperation(benchPath.PressIn.ReadPressureOp(ref pressIn))
.AddOperation(benchPath.PressOut.ReadPressureOp(ref pressOut))
.AddOperation(readRegisters1)
.AddOperation(readRegistersOp)
.AddOperation((StateMachine.Ambient != null)
? StateMachine.Ambient.ReadAmbientOp(airTemperature, airPressure, airHumidity) : null)
.AddOperation(outPath.Balance.ReadStableMassOp(ref endMass, 5))
@@ -436,9 +451,18 @@ namespace TBF.BenchControl.TestMethods.FlyingStartCollectionMethod
tstRslt.Meters[i].VolumeStart = 0; /// liter
tstRslt.Meters[i].VolumeEnd = 0; /// liter
tstRslt.Meters[i].PulsesPerLiter = (sensPath.RegisterReaders[i] == null ? 1.0f : sensPath.RegisterReaders[i].PulsesPerLtr);
if (sensPath.RegisterReaders[i].PulsesPerLtr <= float.Epsilon) tstRslt.Meters[i].VolumeMeter = 0;
else tstRslt.Meters[i].VolumeMeter = Convert.ToSingle(WMPulses[i]) / sensPath.RegisterReaders[i].PulsesPerLtr;
tstRslt.Meters[i].VolumeRef = tstRslt.ConstMaster * WMRefPulses[i]; /// liter
if (sensPath.RegisterReaders[i] is WaterMeters.iPerl.WaterMeter)
{
WaterMeters.iPerl.WaterMeter iPerl = (sensPath.RegisterReaders[i] as WaterMeters.iPerl.WaterMeter);
tstRslt.Meters[i].VolumeMeter = (float)(iPerl.VolumeLtrEnd - iPerl.VolumeLtrStart);
tstRslt.Meters[i].VolumeRef = tstRslt.VolumeCTV * (float)(iPerl.TimestampSecEnd - iPerl.TimestampSecStart) / tstRslt.Time;
}
else
{
if (sensPath.RegisterReaders[i].PulsesPerLtr <= float.Epsilon) tstRslt.Meters[i].VolumeMeter = 0;
else tstRslt.Meters[i].VolumeMeter = Convert.ToSingle(WMPulses[i]) / sensPath.RegisterReaders[i].PulsesPerLtr;
tstRslt.Meters[i].VolumeRef = tstRslt.ConstMaster * WMRefPulses[i]; /// liter
}
tstRslt.Meters[i].PulsesMeter = WMPulses[i];
tstRslt.Meters[i].PulsesMaster = WMRefPulses[i];
tstRslt.Meters[i].Time = cBrd.TTime;