tbf/end

162 KiB
Raw Permalink Blame History

diff --git a/TBF/Rig/TestMethods/FlyingStartMassCollection/FlyingStartMassCollectionSeq.cs b/TBF/Rig/TestMethods/FlyingStartMassCollection/FlyingStartMassCollectionSeq.cs
index c1206bd20..261e8efad 100644
--- a/TBF/Rig/TestMethods/FlyingStartMassCollection/FlyingStartMassCollectionSeq.cs
+++ b/TBF/Rig/TestMethods/FlyingStartMassCollection/FlyingStartMassCollectionSeq.cs
@@ -1,26 +1,28 @@
-///
+using Common;
+using Config.Entities;
+using log4net;
+///
/// Copyright (c) 2013-2021 Sensus Slovensko a.s.
///
using System;
using System.Collections.Generic;
+using System.IO;
using System.Text;
-using log4net;
-using Common;
-using Config.Entities;
-using TBF.Rig;
+using System.Xml.Serialization;
using TBF.Boxes;
using TBF.Resources;
-using TBF.UiBridge;
+using TBF.Rig;
using TBF.Rig.GenericDevices;
using TBF.Rig.RegisterReaders.PoseidonReader;
using TBF.Rig.RegisterReaders.PoseidonReader.implementations;
using TBF.Rig.Uni.SharedDialogs.SmartMetersCommunication.common;
+using TBF.UiBridge;
 
namespace TBF.Rig.TestMethods.FlyingStartMassCollection
{
- public class FlyingStartMassCollectionSeq : Sequences.SequenceBase
+ public class FlyingStartMassCollectionSeq : Sequences.SequenceBase
{
- private static readonly ILog log = LogManager.GetLogger(typeof(FlyingStartMassCollectionSeq));
+ private static readonly ILog log = LogManager.GetLogger(typeof(FlyingStartMassCollectionSeq));
 
/// <summary>
/// Check capabilities of devces in the output path required for this test method
@@ -44,11 +46,11 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection
}
 
if (test.Volume > devices.Scale.Capacity * Constants.TankFullFactor)
- {
+ {
/// Scale capacity is not sufficient
message = string.Format("{0}: {1}", test.Name, Strings.Test_volume_exceeds_the_scale_capacity);
return false;
- }
+ }
 
if (!(devices.Diverter is IDiverter))
{
@@ -75,28 +77,28 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection
return true;
}
 
- /// <summary>
- /// Flying start mass collection method sequence
- /// </summary>
- /// <param name="test">Test entity</param>
- /// <returns>
- /// Event.Done . . . . . . . OK
- /// Event.UiCmdStop . . . . Stopped by the user using the on-screen button STOP
- /// Event.OpArgumentError . Target flow is out of range
- /// Event.Error . . . . . . Unspecified error
- /// </returns>
- public IList<Event> Execute(Test test, int repetitionNr, bool isLastRepetition,
+ /// <summary>
+ /// Flying start mass collection method sequence
+ /// </summary>
+ /// <param name="test">Test entity</param>
+ /// <returns>
+ /// Event.Done . . . . . . . OK
+ /// Event.UiCmdStop . . . . Stopped by the user using the on-screen button STOP
+ /// Event.OpArgumentError . Target flow is out of range
+ /// Event.Error . . . . . . Unspecified error
+ /// </returns>
+ public IList<Event> Execute(Test test, int repetitionNr, bool isLastRepetition,
bool isDelayedStart, Compound.CombinedTestParams compoundTestParams,
HeatMeters.TestParams heatMetersTestParams, DebugMode debugLevel)
- {
- if (debugLevel == Common.DebugMode.Simulate)
- {
- return Simulate1(test, repetitionNr, isLastRepetition, compoundTestParams, heatMetersTestParams);
- }
- else if (debugLevel == Common.DebugMode.Inherit)
- {
- return Simulate2(test, repetitionNr, isLastRepetition, compoundTestParams, heatMetersTestParams);
- }
+ {
+ if (debugLevel == Common.DebugMode.Simulate)
+ {
+ return Simulate1(test, repetitionNr, isLastRepetition, compoundTestParams, heatMetersTestParams);
+ }
+ else if (debugLevel == Common.DebugMode.Inherit)
+ {
+ return Simulate2(test, repetitionNr, isLastRepetition, compoundTestParams, heatMetersTestParams);
+ }
 
ControlBoard.Uni.UniCB cBrd = StateMachine.ControlBoardMain as ControlBoard.Uni.UniCB;
IScale scale = cBrd.Devices.Scale as IScale;
@@ -131,30 +133,31 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection
cBrd.SetFiltersPidShortPulses(filters, outPath.PidCoef, test.ShortPulses);
 
IList<IOperation> readTempPressOps = new List<IOperation>();
- if(benchPath.TempMtrUp != null) readTempPressOps.Add(benchPath.TempMtrUp.ReadTempOp(ref TempUp));
- if(benchPath.TempMtrDown != null) readTempPressOps.Add(benchPath.TempMtrDown.ReadTempOp(ref TempDown));
- if(outPath.TempMtrDiv != null) readTempPressOps.Add(outPath.TempMtrDiv.ReadTempOp(ref TempDiv));
- if(benchPath.PressMtrUp != null) readTempPressOps.Add(benchPath.PressMtrUp.ReadPressureOp(ref PressUp));
- if(benchPath.PressMtrDown != null) readTempPressOps.Add(benchPath.PressMtrDown.ReadPressureOp(ref PressDown));
- if(benchPath.PressMtrDelta != null) readTempPressOps.Add(benchPath.PressMtrDelta.ReadPressureOp(ref PressDelta));
- if(benchPath.ElectricMtrUp != null) readTempPressOps.Add(benchPath.ElectricMtrUp.ReadPressureOp(ref ElectricUp));
- if(benchPath.ElectricMtrDown != null) readTempPressOps.Add(benchPath.ElectricMtrDown.ReadPressureOp(ref ElectricDown));
- if(benchPath.ElectricMtrDelta != null) readTempPressOps.Add(benchPath.ElectricMtrDelta.ReadPressureOp(ref ElectricDelta));
- if(heatMetersPath != null) readTempPressOps.Add(heatMetersPath.TMeterRefWarm1.ReadTempOp(ref TempRefHi1));
- if(heatMetersPath != null) readTempPressOps.Add(heatMetersPath.TMeterRefWarm2.ReadTempOp(ref TempRefHi2));
- if(heatMetersPath != null) readTempPressOps.Add(heatMetersPath.TMeterRefCold1.ReadTempOp(ref TempRefLo1));
- if(heatMetersPath != null) readTempPressOps.Add(heatMetersPath.TMeterRefCold2.ReadTempOp(ref TempRefLo2));
+ if (benchPath.TempMtrUp != null) readTempPressOps.Add(benchPath.TempMtrUp.ReadTempOp(ref TempUp));
+ if (benchPath.TempMtrDown != null) readTempPressOps.Add(benchPath.TempMtrDown.ReadTempOp(ref TempDown));
+ if (outPath.TempMtrDiv != null) readTempPressOps.Add(outPath.TempMtrDiv.ReadTempOp(ref TempDiv));
+ if (benchPath.PressMtrUp != null) readTempPressOps.Add(benchPath.PressMtrUp.ReadPressureOp(ref PressUp));
+ if (benchPath.PressMtrDown != null) readTempPressOps.Add(benchPath.PressMtrDown.ReadPressureOp(ref PressDown));
+ if (benchPath.PressMtrDelta != null) readTempPressOps.Add(benchPath.PressMtrDelta.ReadPressureOp(ref PressDelta));
+ if (benchPath.ElectricMtrUp != null) readTempPressOps.Add(benchPath.ElectricMtrUp.ReadPressureOp(ref ElectricUp));
+ if (benchPath.ElectricMtrDown != null) readTempPressOps.Add(benchPath.ElectricMtrDown.ReadPressureOp(ref ElectricDown));
+ if (benchPath.ElectricMtrDelta != null) readTempPressOps.Add(benchPath.ElectricMtrDelta.ReadPressureOp(ref ElectricDelta));
+ if (heatMetersPath != null) readTempPressOps.Add(heatMetersPath.TMeterRefWarm1.ReadTempOp(ref TempRefHi1));
+ if (heatMetersPath != null) readTempPressOps.Add(heatMetersPath.TMeterRefWarm2.ReadTempOp(ref TempRefHi2));
+ if (heatMetersPath != null) readTempPressOps.Add(heatMetersPath.TMeterRefCold1.ReadTempOp(ref TempRefLo1));
+ if (heatMetersPath != null) readTempPressOps.Add(heatMetersPath.TMeterRefCold2.ReadTempOp(ref TempRefLo2));
 
int totalPulses = Convert.ToInt32(test.Volume / outPath.FlowMeter.LtrPerPulse);
 
///============================================================================================
-
+
/// Read pressure and temperature once before calling Bridge.OnTestSelected(...)
State.Create(string.Format("{0}({1}) : Measuring process data", test.Method, test.Name))
.AddOperation(checkUiOp)
.AddOperations(readTempPressOps)
.EnterState();
- do {
+ do
+ {
e = StateMachine.WaitRunDevsRunOps();
if (e.Contains(Event.Error)) { retVal = Event.Error; goto stopTest; }
if (TestAndLogUiCmdStop(test, e)) { retVal = Event.UiCmdStop; goto stopTest; }
@@ -163,8 +166,8 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection
 
/// Start the test, initialize test results
Bridge.OnTestSelected(this, new TestSelectedEventArgs(test, repetitionNr, inPath, benchPath, outPath, sensPath, heatMetersPath));
- string testName = Results.Utils.GetTestName(test.Name, test.Repeats, repetitionNr);
- TestStartTime = DateTime.Now;
+ string testName = Results.Utils.GetTestName(test.Name, test.Repeats, repetitionNr);
+ TestStartTime = DateTime.Now;
 
//------------------------------------------------
Bridge.OnActivity(this, Strings.Checking_tank_capacity);
@@ -189,35 +192,36 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection
.AddOperation(cBrd.SetValvesOp(scale.DrainValve, null))
.AddOperations(readTempPressOps)
.EnterState();
- do {
+ do
+ {
e = StateMachine.WaitRunDevsRunOps();
- if (e.Contains(Event.Error)) { retVal = Event.Error; goto stopTest; }
- if (TestAndLogUiCmdStop(test, e)) { retVal = Event.UiCmdStop; goto stopTest; }
+ if (e.Contains(Event.Error)) { retVal = Event.Error; goto stopTest; }
+ if (TestAndLogUiCmdStop(test, e)) { retVal = Event.UiCmdStop; goto stopTest; }
}
while (e.Contains(Event.ValvesBusy));
#endif
}
 
 
- ///
- /// Optionally display prompt to emerge temperature meters to appropriate baths for heat meters test
- ///
- IOperation heatMetersPromptOp = null;
- if (heatMetersTestParams != null && !string.IsNullOrEmpty(heatMetersTestParams.Prompt))
- {
- /// Make sure the CycleBeginForm is closed
- if (UIFlowControl.Stop == WaitBeginFormClosed()) goto stopTest;
+ ///
+ /// Optionally display prompt to emerge temperature meters to appropriate baths for heat meters test
+ ///
+ IOperation heatMetersPromptOp = null;
+ if (heatMetersTestParams != null && !string.IsNullOrEmpty(heatMetersTestParams.Prompt))
+ {
+ /// Make sure the CycleBeginForm is closed
+ if (UIFlowControl.Stop == WaitBeginFormClosed()) goto stopTest;
 
- heatMetersPromptOp = new Operations.MessageBoxOp(heatMetersTestParams.Prompt);
- }
+ heatMetersPromptOp = new Operations.MessageBoxOp(heatMetersTestParams.Prompt);
+ }
 
 
//------------------------------------------------
Bridge.OnActivity(this, Strings.Starting_the_pump);
//------------------------------------------------
 
- Bridge.OnTestProgress(this, new TestProgressEventArgs(test, repetitionNr, Progress.FlowSetting));
- int flowSetTime0 = StateMachine.Time;
+ Bridge.OnTestProgress(this, new TestProgressEventArgs(test, repetitionNr, Progress.FlowSetting));
+ int flowSetTime0 = StateMachine.Time;
 
 
if (inPath.Pump is GenericDevices.IPumpFM)
@@ -227,12 +231,13 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection
///
State.Create(string.Format("{0}({1}) : Starting pump {2}", test.Method, test.Name, (inPath.Pump != null) ? inPath.Pump.Name : "?"))
.AddOperation(checkUiOp)
-// .AddOperation(new Operations.SetAllRegulValvesOp(inPath.RegulValves, inPath.RegulValvesPct, 60))
+ // .AddOperation(new Operations.SetAllRegulValvesOp(inPath.RegulValves, inPath.RegulValvesPct, 60))
.AddOperations(readTempPressOps)
.AddOperation(heatMetersPromptOp)
.AddOperation(inPath.Pump != null ? cBrd.SetValvesOp(inPath.Pump, null) : null)
.EnterState();
- do {
+ do
+ {
e = StateMachine.WaitRunDevsRunOps();
Bridge.OnTestProgress(this, new TestProgressEventArgs(test, repetitionNr, Progress.FlowSetting));
 
@@ -249,8 +254,9 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection
.AddOperation(new Operations.TimerOp(test.TimePump2StartV))
.AddOperations(readTempPressOps)
.AddOperation(heatMetersPromptOp)
- .EnterState();
- do {
+ .EnterState();
+ do
+ {
e = StateMachine.WaitRunDevsRunOps();
Bridge.OnTestProgress(this, new TestProgressEventArgs(test, repetitionNr, Progress.FlowSetting));
 
@@ -267,11 +273,12 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection
.AddOperation(cBrd.SetValvesOp(benchPath.StopBFValve, null))
.AddOperations(readTempPressOps)
.AddOperation(heatMetersPromptOp)
- .EnterState();
- do {
+ .EnterState();
+ do
+ {
e = StateMachine.WaitRunDevsRunOps();
- if (TestAndLogUiCmdStop(test, e)) { retVal = Event.UiCmdStop; goto stopTest; }
- if (e.Contains(Event.Error)) { retVal = Event.Error; goto stopTest; }
+ if (TestAndLogUiCmdStop(test, e)) { retVal = Event.UiCmdStop; goto stopTest; }
+ if (e.Contains(Event.Error)) { retVal = Event.Error; goto stopTest; }
}
while (!e.Contains(Event.ValvesSet));
}
@@ -284,8 +291,9 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection
.AddOperation(new Operations.TimerOp(test.TimeBeforeFlow))
.AddOperations(readTempPressOps)
.AddOperation(heatMetersPromptOp)
- .EnterState();
- do {
+ .EnterState();
+ do
+ {
e = StateMachine.WaitRunDevsRunOps();
Bridge.OnTestProgress(this, new TestProgressEventArgs(test, repetitionNr, Progress.FlowSetting));
 
@@ -302,13 +310,14 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection
.AddOperation(cBrd.SetFlowOp(test.QfromM3ph(), test.QtoM3ph(), RefFlow, FlowSettingTimeoutSec))
.AddOperations(readTempPressOps)
.AddOperation(heatMetersPromptOp)
- .EnterState();
- do {
+ .EnterState();
+ do
+ {
e = StateMachine.WaitRunDevsRunOps();
Bridge.OnTestProgress(this, new TestProgressEventArgs(test, repetitionNr, Progress.FlowSetting));
 
- if (e.Contains(Event.OpArgumentError)) { retVal = Event.OpArgumentError; goto stopTest; }
- if (TestAndLogUiCmdStop(test, e)) { retVal = Event.UiCmdStop; goto stopTest; }
+ if (e.Contains(Event.OpArgumentError)) { retVal = Event.OpArgumentError; goto stopTest; }
+ if (TestAndLogUiCmdStop(test, e)) { retVal = Event.UiCmdStop; goto stopTest; }
if (e.Contains(Event.RegulValveTimeOut))
{
Bridge.OnError(this, Strings.Flow_adjustment_failed);
@@ -334,12 +343,13 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection
double Tw_last = 0;
double Tc_last = 0;
 
- State.Create(string.Format("{0}({1}) : Check temperature stabilized.", test.Method, test.Name))
+ State.Create(string.Format("{0}({1}) : Check temperature stabilized.", test.Method, test.Name))
.AddOperation(checkUiOp)
.AddOperations(readTempPressOps)
.AddOperation(heatMetersPromptOp)
- .EnterState();
- do {
+ .EnterState();
+ do
+ {
e = StateMachine.WaitRunDevsRunOps();
if (TestAndLogUiCmdStop(test, e)) { retVal = Event.UiCmdStop; goto stopTest; }
if (e.Contains(Event.Next)) goto temperature_set;
@@ -368,63 +378,64 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection
}
while (true);
}
- else if (!string.IsNullOrEmpty(test.TempControl) && benchPath.TempMtrUp != null && benchPath.TempMtrDown != null)
- {
- //---------------------------------------------------
- Bridge.OnActivity(this, Strings.Setting_temperature);
- //---------------------------------------------------
-
- State.Create(string.Format("{0}({1}) : Wait until the water temperature is within limits", test.Method, test.Name))
- .AddOperation(checkUiOp)
+ else if (!string.IsNullOrEmpty(test.TempControl) && benchPath.TempMtrUp != null && benchPath.TempMtrDown != null)
+ {
+ //---------------------------------------------------
+ Bridge.OnActivity(this, Strings.Setting_temperature);
+ //---------------------------------------------------
+
+ State.Create(string.Format("{0}({1}) : Wait until the water temperature is within limits", test.Method, test.Name))
+ .AddOperation(checkUiOp)
.AddOperations(readTempPressOps)
.EnterState();
- do {
- e = StateMachine.WaitRunDevsRunOps();
- if (TestAndLogUiCmdStop(test, e)) { retVal = Event.UiCmdStop; goto stopTest; }
- if (e.Contains(Event.Next)) goto temperature_set;
+ do
+ {
+ e = StateMachine.WaitRunDevsRunOps();
+ if (TestAndLogUiCmdStop(test, e)) { retVal = Event.UiCmdStop; goto stopTest; }
+ if (e.Contains(Event.Next)) goto temperature_set;
 
if ((test.TempLimLo <= TempUp.Val) && (TempUp.Val <= test.TempLimHi) &&
(test.TempLimLo <= TempDown.Val) && (TempDown.Val <= test.TempLimHi))
{
- goto temperature_set;
- }
- }
- while (true);
- }
+ goto temperature_set;
+ }
+ }
+ while (true);
+ }
 
temperature_set:
 
///
- /// Prepare cameras, ROI-s and measurementOperations
- ///
+ /// Prepare cameras, ROI-s and measurementOperations
+ ///
 
- /// Find successfully detected ROI-s
- IList<GenericDevices.IRegReaderLiveCamera> rois = new List<GenericDevices.IRegReaderLiveCamera>();
- foreach (var rr in sensPath.RegisterReaders)
- {
+ /// Find successfully detected ROI-s
+ IList<GenericDevices.IRegReaderLiveCamera> rois = new List<GenericDevices.IRegReaderLiveCamera>();
+ foreach (var rr in sensPath.RegisterReaders)
+ {
GenericDevices.IRegReaderLiveCamera cameraRoI = rr as GenericDevices.IRegReaderLiveCamera;
if ((cameraRoI != null) && cameraRoI.Detected)
{
rois.Add(cameraRoI);
}
- }
+ }
 
- /// Find cameras
- IList<GenericDevices.ICamera> cameras = new List<GenericDevices.ICamera>();
+ /// Find cameras
+ IList<GenericDevices.ICamera> cameras = new List<GenericDevices.ICamera>();
foreach (var roi in rois)
{
- if (roi.Camera != null && !cameras.Contains(roi.Camera))
- {
- cameras.Add(roi.Camera);
- roi.Camera.ClearRoiParams();
- }
+ if (roi.Camera != null && !cameras.Contains(roi.Camera))
+ {
+ cameras.Add(roi.Camera);
+ roi.Camera.ClearRoiParams();
+ }
}
 
- /// Register ROI-parameters to cameras
- foreach (var roi in rois) roi.RegisterRoiToCamera();
+ /// Register ROI-parameters to cameras
+ foreach (var roi in rois) roi.RegisterRoiToCamera();
 
- /// Prepare measurementOperations
- IList<IOperation> cameraMeasurementOps = new List<IOperation>();
+ /// Prepare measurementOperations
+ IList<IOperation> cameraMeasurementOps = new List<IOperation>();
foreach (var camera in cameras)
{
cameraMeasurementOps.Add(camera.MeasurementOp());
@@ -446,60 +457,62 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection
}
 
 
- if (drainTheTank)
- {
- //------------------------------------------------
- Bridge.OnActivity(this, Strings.Closing_the_tank);
- //------------------------------------------------
+ if (drainTheTank)
+ {
+ //------------------------------------------------
+ Bridge.OnActivity(this, Strings.Closing_the_tank);
+ //------------------------------------------------
 
- ///
- /// Make sure tank draining completed
- ///
+ ///
+ /// Make sure tank draining completed
+ ///
switch (DrainTheTank(scale, readTempPressOps))
- {
- case Event.Error: { retVal = Event.Error; goto stopTest; }
- case Event.UiCmdStop: { retVal = Event.UiCmdStop; goto stopTest; }
- }
+ {
+ case Event.Error: { retVal = Event.Error; goto stopTest; }
+ case Event.UiCmdStop: { retVal = Event.UiCmdStop; goto stopTest; }
+ }
 
- drainTheTank = false;
- }
- else
- {
- /// Close the drain valve anyway
- State.Create(string.Format("{0}({1}) : Close the drain valve", test.Method, test.Name))
- .AddOperation(checkUiOp)
+ drainTheTank = false;
+ }
+ else
+ {
+ /// Close the drain valve anyway
+ State.Create(string.Format("{0}({1}) : Close the drain valve", test.Method, test.Name))
+ .AddOperation(checkUiOp)
.AddOperations(readTempPressOps)
.AddOperation(cBrd.SetValvesOp(null, scale.DrainValve))
.EnterState();
- do {
- e = StateMachine.WaitRunDevsRunOps();
- if (e.Contains(Event.Error)) { retVal = Event.Error; goto stopTest; }
- if (TestAndLogUiCmdStop(test, e)) { retVal = Event.UiCmdStop; goto stopTest; }
- }
- while (e.Contains(Event.ValvesBusy));
- }
+ do
+ {
+ e = StateMachine.WaitRunDevsRunOps();
+ if (e.Contains(Event.Error)) { retVal = Event.Error; goto stopTest; }
+ if (TestAndLogUiCmdStop(test, e)) { retVal = Event.UiCmdStop; goto stopTest; }
+ }
+ while (e.Contains(Event.ValvesBusy));
+ }
 
 
- //----------------------------------------------------
- Bridge.OnActivity(this, Strings.Measuring_the_weight);
- //----------------------------------------------------
+ //----------------------------------------------------
+ Bridge.OnActivity(this, Strings.Measuring_the_weight);
+ //----------------------------------------------------
 
LogProcessDataTestInfo(processDataLogger, test.Procedure.Name, test.Name);
 
- if (heatMetersPath == null) LogProcessDataHeader(processDataLogger, "Start mass");
- else LogProcessDataHeaderHeatMeters(processDataLogger, "Start mass");
-
- State.Create(string.Format("{0}({1}) : Measuring the start mass", test.Method, test.Name))
- .AddOperation(checkUiOp)
+ if (heatMetersPath == null) LogProcessDataHeader(processDataLogger, "Start mass");
+ else LogProcessDataHeaderHeatMeters(processDataLogger, "Start mass");
+
+ State.Create(string.Format("{0}({1}) : Measuring the start mass", test.Method, test.Name))
+ .AddOperation(checkUiOp)
.AddOperations(readTempPressOps)
.AddOperations(cameraMeasurementOps)
.AddOperation(scale.ReadStableMassOp(ref StartMass, test.TimeFlow2Mass, test.MassMethod, test.MassRepeats, test.MassSpread))
.AddOperation(processDataLoggingOp)
.EnterState();
- do {
- e = StateMachine.WaitRunDevsRunOps();
- if (e.Contains(Event.Error)) { retVal = Event.Error; goto stopTest; }
- if (TestAndLogUiCmdStop(test,e)) { retVal = Event.UiCmdStop; goto stopTest; }
+ do
+ {
+ e = StateMachine.WaitRunDevsRunOps();
+ if (e.Contains(Event.Error)) { retVal = Event.Error; goto stopTest; }
+ if (TestAndLogUiCmdStop(test, e)) { retVal = Event.UiCmdStop; goto stopTest; }
if (e.Contains(Event.ScaleTimeout))
{
Bridge.OnError(this, Strings.Mass_measurement_timeout);
@@ -513,9 +526,9 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection
log.WarnFormat("Start mass = {0}kg", StartMass);
 
 
- if (heatMetersPath == null)
+ if (heatMetersPath == null)
LogProcessDataHeader(processDataLogger, "Measurement");
- else
+ else
LogProcessDataHeaderHeatMeters(processDataLogger, "Measurement");
 
//------------------------------------------------
@@ -531,18 +544,19 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection
 
/// Measurement loop
State.Create(string.Format("{0}({1}) : FlyingStartStopTestWithDivOp is running", test.Method, test.Name))
- .AddOperation(checkUiOp)
+ .AddOperation(checkUiOp)
.AddOperations(readTempPressOps)
.AddOperations(readDatastreamOps)
.AddOperations(cameraMeasurementOps)
.AddOperation(cBrd.FlyingStartStopTestOp(test, test.QfromM3ph(), test.QtoM3ph(), totalPulses, true, isDelayedStart, false, 0, true, DiverterStart, DiverterEnd))
.AddOperation(processDataLoggingOp)
.EnterState();
- do {
+ do
+ {
e = StateMachine.WaitRunDevsRunOps();
if (e.Contains(Event.OpArgumentError)) { retVal = Event.OpArgumentError; goto stopTest; }
- if (e.Contains(Event.Error)) { retVal = Event.Error; goto stopTest; }
- if (TestAndLogUiCmdStop(test, e)) { retVal = Event.UiCmdStop; goto stopTest; }
+ if (e.Contains(Event.Error)) { retVal = Event.Error; goto stopTest; }
+ if (TestAndLogUiCmdStop(test, e)) { retVal = Event.UiCmdStop; goto stopTest; }
 
/// Show remaining time
if ((remainingTime = Math.Max(estimtdEndTime - StateMachine.Time, 0)) > 60)
@@ -602,32 +616,34 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection
.AddOperations(readTempPressOps)
.AddOperation(cBrd.SetValvesOp(StateMachine.DefaultValvesOpen, StateMachine.DefaultValvesClose))
.EnterState();
- do {
+ do
+ {
e = StateMachine.WaitRunDevsRunOps();
- if (e.Contains(Event.Error)) { retVal = Event.Error; goto stopTest; }
- if (TestAndLogUiCmdStop(e)) { retVal = Event.UiCmdStop; goto stopTest; }
+ if (e.Contains(Event.Error)) { retVal = Event.Error; goto stopTest; }
+ if (TestAndLogUiCmdStop(e)) { retVal = Event.UiCmdStop; goto stopTest; }
}
while (!e.Contains(Event.ValvesSet));
}
 
- //------------------------------------------------
- Bridge.OnActivity(this, Strings.Measuring_the_weight);
- //------------------------------------------------
+ //------------------------------------------------
+ Bridge.OnActivity(this, Strings.Measuring_the_weight);
+ //------------------------------------------------
 
- if (heatMetersPath == null) LogProcessDataHeader(processDataLogger, "End mass");
- else LogProcessDataHeaderHeatMeters(processDataLogger, "End mass");
+ if (heatMetersPath == null) LogProcessDataHeader(processDataLogger, "End mass");
+ else LogProcessDataHeaderHeatMeters(processDataLogger, "End mass");
 
State.Create(string.Format("{0}({1}) : Measuring the end mass", test.Method, test.Name))
- .AddOperation(checkUiOp)
+ .AddOperation(checkUiOp)
.AddOperations(readTempPressOps)
.AddOperation(scale.ReadStableMassOp(ref EndMass, test.TimeStop2Mass, test.MassMethod, test.MassRepeats, test.MassSpread))
.AddOperation(new Operations.TimerOp(StableMassMsrmntTimeoutSec))
.AddOperation(processDataLoggingOp)
.EnterState();
- do {
- e = StateMachine.WaitRunDevsRunOps();
- if (e.Contains(Event.Error)) { retVal = Event.Error; goto stopTest; }
- if (TestAndLogUiCmdStop(test,e)) { retVal = Event.UiCmdStop; goto stopTest; }
+ do
+ {
+ e = StateMachine.WaitRunDevsRunOps();
+ if (e.Contains(Event.Error)) { retVal = Event.Error; goto stopTest; }
+ if (TestAndLogUiCmdStop(test, e)) { retVal = Event.UiCmdStop; goto stopTest; }
if (e.Contains(Event.ScaleTimeout))
{
Bridge.OnError(this, Strings.Mass_measurement_timeout);
@@ -639,7 +655,7 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection
///
tMass2 = StateMachine.Time;
log.WarnFormat("End mass = {0}kg", EndMass);
- TestEndTime = DateTime.Now;
+ TestEndTime = DateTime.Now;
 
if (test.DoDrainingAfter)
{
@@ -648,47 +664,48 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection
.AddOperation(cBrd.SetValvesOp(scale.DrainValve, null))
.AddOperations(readTempPressOps)
.EnterState();
- do {
+ do
+ {
e = StateMachine.WaitRunDevsRunOps();
if (e.Contains(Event.Error)) { retVal = Event.Error; goto stopTest; }
}
while (e.Contains(Event.ValvesBusy));
}
 
- //------------------------------------------------
- Bridge.OnActivity(this, Strings.Test_completed);
- //------------------------------------------------
+ //------------------------------------------------
+ Bridge.OnActivity(this, Strings.Test_completed);
+ //------------------------------------------------
 
- /// Make sure the CycleBeginForm is closed so that water meter data (s/n) can be copied into results
- if (heatMetersPromptOp == null)
- {
- if (UIFlowControl.Stop == WaitBeginFormClosed()) goto stopTest;
- }
+ /// Make sure the CycleBeginForm is closed so that water meter data (s/n) can be copied into results
+ if (heatMetersPromptOp == null)
+ {
+ if (UIFlowControl.Stop == WaitBeginFormClosed()) goto stopTest;
+ }
 
- ///
- /// Populate TestResult data entity with data
- ///
- Results.Entities.TestRslt tstRslt = BatchRslts.GetTestRslt(testName, test.Part);
+ ///
+ /// Populate TestResult data entity with data
+ ///
+ Results.Entities.TestRslt tstRslt = BatchRslts.GetTestRslt(testName, test.Part);
 
bool stopCycle = false;
if (tstRslt != null)
{
Results.Utils.GetCounterStates(tstRslt, Program.LocalSettings.Counters);
 
- /// Raw data
+ /// Raw data
UpdateTempPressDensAmb(tstRslt);
- tstRslt.MethodClass = TbfComponents.FindComponent(test.Method).ClassName;
- tstRslt.StartTime = TestStartTime;
- tstRslt.EndTime = TestEndTime;
- tstRslt.FlowSetTime = flowSetTime;
- tstRslt.TestTime = cBrd.TestTime; /// [s] measurement time
- tstRslt.PulsesMaster = Convert.ToDouble(cBrd.RefPulses); /// Pulses of the master flow meter (test total)
- tstRslt.MassStartRaw = StartMass.Val;
- tstRslt.MassEndRaw = EndMass.Val;
+ tstRslt.MethodClass = TbfComponents.FindComponent(test.Method).ClassName;
+ tstRslt.StartTime = TestStartTime;
+ tstRslt.EndTime = TestEndTime;
+ tstRslt.FlowSetTime = flowSetTime;
+ tstRslt.TestTime = cBrd.TestTime; /// [s] measurement time
+ tstRslt.PulsesMaster = Convert.ToDouble(cBrd.RefPulses); /// Pulses of the master flow meter (test total)
+ tstRslt.MassStartRaw = StartMass.Val;
+ tstRslt.MassEndRaw = EndMass.Val;
tstRslt.TimeBtwnMassMsrmnts = tMass2 - tMass1;
tstRslt.ConstMasterRaw = outPath.FlowMeter.LtrPerPulse;
- tstRslt.VolumeMaster = tstRslt.ConstMasterRaw * tstRslt.PulsesMaster; /// [l] volume from the master flow meter
- double flowMID = 3.6 * tstRslt.VolumeMaster / tstRslt.TestTime; /// [m3/h] flow before correction from the master flow meter
+ tstRslt.VolumeMaster = tstRslt.ConstMasterRaw * tstRslt.PulsesMaster; /// [l] volume from the master flow meter
+ double flowMID = 3.6 * tstRslt.VolumeMaster / tstRslt.TestTime; /// [m3/h] flow before correction from the master flow meter
 
/// Corrected data
tstRslt.MassStart = MeasurementCorrection.CorrectedValue(tstRslt.MassStartRaw, scale.Corrections);
@@ -698,23 +715,37 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection
tstRslt.ConstMasterCorr = outPath.FlowMeter.LtrPerPulseCorrected(flowMID, tstRslt.TempDownMean);
 
/// Main result calculation
- tstRslt.VolumeCTV = 1000 * tstRslt.Batch.Buoyancy * mass / tstRslt.DensityLine;
+ tstRslt.VolumeCTV = 1000 * tstRslt.Batch.Buoyancy * mass / tstRslt.DensityLine;
if ((outPath.Diverter != null) && (tstRslt.TestTime > float.Epsilon))
{
tstRslt.TestTimeCorrection = outPath.Diverter.TestTimeCorrection(flowMID);
tstRslt.VolumeCTV *= tstRslt.TestTime + tstRslt.TestTimeCorrection;
tstRslt.VolumeCTV /= tstRslt.TestTime;
}
- tstRslt.Flow = 3.6 * tstRslt.VolumeCTV / tstRslt.TestTime; /// Flow from VolumeCTV and time
+ tstRslt.Flow = 3.6 * tstRslt.VolumeCTV / tstRslt.TestTime; /// Flow from VolumeCTV and time
tstRslt.ErrorMaster = Formulas.ErrorFromVolumes(tstRslt.VolumeMaster, tstRslt.VolumeCTV);
tstRslt.ConstMaster = (tstRslt.PulsesMaster != 0) ? (tstRslt.VolumeCTV / tstRslt.PulsesMaster) : tstRslt.ConstMasterCorr;
- /// Master pulses per liter from the measured mass
+ /// Master pulses per liter from the measured mass
+
+ /// Main result calculation for mass
+ tstRslt.MassCTV = tstRslt.Batch.Buoyancy * mass;
+ if ((outPath.Diverter != null) && (tstRslt.TestTime > float.Epsilon))
+ {
+ tstRslt.TestTimeCorrection = outPath.Diverter.TestTimeCorrection(flowMID);
+ tstRslt.MassCTV *= tstRslt.TestTime + tstRslt.TestTimeCorrection;
+ tstRslt.MassCTV /= tstRslt.TestTime;
+ }
+ tstRslt.MassFlow = 3.6 * tstRslt.MassCTV / tstRslt.TestTime; /// Flow from MassCTV and time
+ tstRslt.MassErrorMaster = Formulas.ErrorFromVolumes(tstRslt.VolumeMaster, tstRslt.MassCTV);
+ tstRslt.MassConstMaster = (tstRslt.PulsesMaster != 0) ? (tstRslt.MassCTV / tstRslt.PulsesMaster) : tstRslt.ConstMasterCorr;
+
+
/// Flow statistics correction
- tstRslt.FlowMean = Convert.ToSingle(tstRslt.ConstMaster * RefFlowStat.Average / tstRslt.ConstMasterRaw);
+ tstRslt.FlowMean = Convert.ToSingle(tstRslt.ConstMaster * RefFlowStat.Average / tstRslt.ConstMasterRaw);
tstRslt.FlowStart = Convert.ToSingle(tstRslt.ConstMaster * RefFlowStat.First / tstRslt.ConstMasterRaw);
- tstRslt.FlowEnd = Convert.ToSingle(tstRslt.ConstMaster * RefFlowStat.Last / tstRslt.ConstMasterRaw);
- tstRslt.FlowMin = Convert.ToSingle(tstRslt.ConstMaster * RefFlowStat.Min / tstRslt.ConstMasterRaw);
- tstRslt.FlowMax = Convert.ToSingle(tstRslt.ConstMaster * RefFlowStat.Max / tstRslt.ConstMasterRaw);
+ tstRslt.FlowEnd = Convert.ToSingle(tstRslt.ConstMaster * RefFlowStat.Last / tstRslt.ConstMasterRaw);
+ tstRslt.FlowMin = Convert.ToSingle(tstRslt.ConstMaster * RefFlowStat.Min / tstRslt.ConstMasterRaw);
+ tstRslt.FlowMax = Convert.ToSingle(tstRslt.ConstMaster * RefFlowStat.Max / tstRslt.ConstMasterRaw);
 
tstRslt.DiverterStart = outPath.Diverter.SwitchTimeStart.Val;
tstRslt.DivStart10 = 0;
@@ -734,114 +765,114 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection
: 0;
tstRslt.InfoFlags = infoFlags;
 
- if (compoundTestParams != null)
- {
- ///
- /// Compound meters
- ///
- for (int i = 0; i < BatchRslts.WMPositionsCount; i++)
- {
- if (!test.IsPartCompatible(Utils.PartNr(i + 1, BatchRslts.Batch.Compound))) continue;
+ if (compoundTestParams != null)
+ {
+ ///
+ /// Compound meters
+ ///
+ for (int i = 0; i < BatchRslts.WMPositionsCount; i++)
+ {
+ if (!test.IsPartCompatible(Utils.PartNr(i + 1, BatchRslts.Batch.Compound))) continue;
 
- var mainMeterRslt = BatchRslts.GetMeterTestRslt(testName, i, CompoundMeterId.CompoundMain);
- var auxMeterRslt = BatchRslts.GetMeterTestRslt(testName, i, CompoundMeterId.CompoundAux);
+ var mainMeterRslt = BatchRslts.GetMeterTestRslt(testName, i, CompoundMeterId.CompoundMain);
+ var auxMeterRslt = BatchRslts.GetMeterTestRslt(testName, i, CompoundMeterId.CompoundAux);
 
- for (int isAux = 0; isAux <= 1; isAux++) /// 0=main, 1=aux
+ for (int isAux = 0; isAux <= 1; isAux++) /// 0=main, 1=aux
{
- IRegReader regReader = sensPath.RegisterReaders[2 * i + isAux];
- var oneMTR = (isAux == 0) ? mainMeterRslt : auxMeterRslt;
+ IRegReader regReader = sensPath.RegisterReaders[2 * i + isAux];
+ var oneMTR = (isAux == 0) ? mainMeterRslt : auxMeterRslt;
 
- if (oneMTR != null && regReader != null)
- {
+ if (oneMTR != null && regReader != null)
+ {
oneMTR.RegReaderType = (int)regReader.RegisterReaderType;
if (regReader is PoseidonReader poseidon) //is Poseidon reader family
{
- oneMTR.PulsesPerLiter = 0;
-
- /// Optionally supress pulses from the large water meter
- oneMTR.PulsesMeter = 0;
- oneMTR.PulsesMaster = 0;
- oneMTR.TestTime = cBrd.TestTime;
- oneMTR.VolumeStart = 0;
- oneMTR.VolumeEnd = 0;
- oneMTR.VolumeRef = tstRslt.VolumeCTV;
-
- if (oneMTR.PulsesMaster != 0)
- {
- oneMTR.PulsesMeter *= (tstRslt.PulsesMaster / oneMTR.PulsesMaster);
- oneMTR.PulsesMaster = tstRslt.PulsesMaster;
- }
-
- oneMTR.VolumeMeter = poseidon.WMVolume;
-
- oneMTR.Error =
- Formulas.ErrorFromVolumes(oneMTR.VolumeMeter,
- tstRslt.VolumeCTV); /// Main/Aux meter error is not usedfor evaluation
+ oneMTR.PulsesPerLiter = 0;
+
+ /// Optionally supress pulses from the large water meter
+ oneMTR.PulsesMeter = 0;
+ oneMTR.PulsesMaster = 0;
+ oneMTR.TestTime = cBrd.TestTime;
+ oneMTR.VolumeStart = 0;
+ oneMTR.VolumeEnd = 0;
+ oneMTR.VolumeRef = tstRslt.VolumeCTV;
+
+ if (oneMTR.PulsesMaster != 0)
+ {
+ oneMTR.PulsesMeter *= (tstRslt.PulsesMaster / oneMTR.PulsesMaster);
+ oneMTR.PulsesMaster = tstRslt.PulsesMaster;
+ }
+
+ oneMTR.VolumeMeter = poseidon.WMVolume;
+
+ oneMTR.Error =
+ Formulas.ErrorFromVolumes(oneMTR.VolumeMeter,
+ tstRslt.VolumeCTV); /// Main/Aux meter error is not usedfor evaluation
}
else
{
- oneMTR.PulsesPerLiter = regReader.PulsesPerLtr;
-
- /// Optionally supress pulses from the large water meter
- oneMTR.PulsesMeter = (isAux == 0 && compoundTestParams.SupressTrills)
- ? 0
- : Convert.ToDouble(regReader.WMPulses);
- oneMTR.PulsesMaster = Convert.ToDouble(regReader.WMRefPulses);
- oneMTR.TestTime = cBrd.TestTime;
- oneMTR.VolumeStart = 0;
- oneMTR.VolumeEnd = 0;
- oneMTR.VolumeRef = tstRslt.VolumeCTV;
-
- if (oneMTR.PulsesMaster != 0)
- {
- oneMTR.PulsesMeter *= (tstRslt.PulsesMaster / oneMTR.PulsesMaster);
- oneMTR.PulsesMaster = tstRslt.PulsesMaster;
- }
-
- oneMTR.VolumeMeter = oneMTR.PulsesMeter * regReader.LtrsPerPulse; /// liter
-
- oneMTR.Error =
- Formulas.ErrorFromVolumes(oneMTR.VolumeMeter,
- tstRslt.VolumeCTV); /// Main/Aux meter error is not usedfor evaluation
+ oneMTR.PulsesPerLiter = regReader.PulsesPerLtr;
+
+ /// Optionally supress pulses from the large water meter
+ oneMTR.PulsesMeter = (isAux == 0 && compoundTestParams.SupressTrills)
+ ? 0
+ : Convert.ToDouble(regReader.WMPulses);
+ oneMTR.PulsesMaster = Convert.ToDouble(regReader.WMRefPulses);
+ oneMTR.TestTime = cBrd.TestTime;
+ oneMTR.VolumeStart = 0;
+ oneMTR.VolumeEnd = 0;
+ oneMTR.VolumeRef = tstRslt.VolumeCTV;
+
+ if (oneMTR.PulsesMaster != 0)
+ {
+ oneMTR.PulsesMeter *= (tstRslt.PulsesMaster / oneMTR.PulsesMaster);
+ oneMTR.PulsesMaster = tstRslt.PulsesMaster;
+ }
+
+ oneMTR.VolumeMeter = oneMTR.PulsesMeter * regReader.LtrsPerPulse; /// liter
+
+ oneMTR.Error =
+ Formulas.ErrorFromVolumes(oneMTR.VolumeMeter,
+ tstRslt.VolumeCTV); /// Main/Aux meter error is not usedfor evaluation
}
- }
- }
+ }
+ }
 
- var compoundMTR = BatchRslts.GetMeterTestRslt(testName, i, CompoundMeterId.Compound);
+ var compoundMTR = BatchRslts.GetMeterTestRslt(testName, i, CompoundMeterId.Compound);
 
- if (compoundMTR != null && mainMeterRslt != null && auxMeterRslt != null)
- {
- compoundMTR.VolumeRef = tstRslt.VolumeCTV;
- compoundMTR.VolumeMeter = mainMeterRslt.VolumeMeter + auxMeterRslt.VolumeMeter;
- compoundMTR.PulsesMaster = tstRslt.PulsesMaster;
- compoundMTR.TestTime = tstRslt.TestTime;
- compoundMTR.Error = Formulas.ErrorFromVolumes(compoundMTR.VolumeMeter, compoundMTR.VolumeRef);
- compoundMTR.Passed = (compoundMTR.Error >= test.GetErrLimLo(tstRslt.VolumeCTV, tstRslt.TestTime) + test.Uncertainty)
- && (compoundMTR.Error <= test.GetErrLimHi(tstRslt.VolumeCTV, tstRslt.TestTime) - test.Uncertainty)
+ if (compoundMTR != null && mainMeterRslt != null && auxMeterRslt != null)
+ {
+ compoundMTR.VolumeRef = tstRslt.VolumeCTV;
+ compoundMTR.VolumeMeter = mainMeterRslt.VolumeMeter + auxMeterRslt.VolumeMeter;
+ compoundMTR.PulsesMaster = tstRslt.PulsesMaster;
+ compoundMTR.TestTime = tstRslt.TestTime;
+ compoundMTR.Error = Formulas.ErrorFromVolumes(compoundMTR.VolumeMeter, compoundMTR.VolumeRef);
+ compoundMTR.Passed = (compoundMTR.Error >= test.GetErrLimLo(tstRslt.VolumeCTV, tstRslt.TestTime) + test.Uncertainty)
+ && (compoundMTR.Error <= test.GetErrLimHi(tstRslt.VolumeCTV, tstRslt.TestTime) - test.Uncertainty)
&& (tstRslt.ErrorFlags == 0);
- mainMeterRslt.Passed = auxMeterRslt.Passed = compoundMTR.Passed;
- mainMeterRslt.TestDone = auxMeterRslt.TestDone = compoundMTR.TestDone = true;
+ mainMeterRslt.Passed = auxMeterRslt.Passed = compoundMTR.Passed;
+ mainMeterRslt.TestDone = auxMeterRslt.TestDone = compoundMTR.TestDone = true;
tstRslt.TestDone = true;
- }
- }
- }
- else if (heatMetersTestParams != null)
- {
+ }
+ }
+ }
+ else if (heatMetersTestParams != null)
+ {
///
/// Heat meters
///
tstRslt.RefEnergy = Energy.Sum * tstRslt.VolumeCTV / VolumeForEnergy.Sum; /// [J] = [J] * [l] / [l]
 
- tstRslt.Custom1 = (float)TempRefHiStat.Average;
- tstRslt.Custom2 = (float)TempRefHiStat.First;
- tstRslt.Custom3 = (float)TempRefHiStat.Last;
- tstRslt.Custom4 = (float)TempRefHiStat.Min;
- tstRslt.Custom5 = (float)TempRefHiStat.Max;
- tstRslt.Custom6 = (float)TempRefLoStat.Average;
- tstRslt.Custom7 = (float)TempRefLoStat.First;
- tstRslt.Custom8 = (float)TempRefLoStat.Last;
- tstRslt.Custom9 = (float)TempRefLoStat.Min;
- tstRslt.Custom10 = (float)TempRefLoStat.Max;
+ tstRslt.Custom1 = (float)TempRefHiStat.Average;
+ tstRslt.Custom2 = (float)TempRefHiStat.First;
+ tstRslt.Custom3 = (float)TempRefHiStat.Last;
+ tstRslt.Custom4 = (float)TempRefHiStat.Min;
+ tstRslt.Custom5 = (float)TempRefHiStat.Max;
+ tstRslt.Custom6 = (float)TempRefLoStat.Average;
+ tstRslt.Custom7 = (float)TempRefLoStat.First;
+ tstRslt.Custom8 = (float)TempRefLoStat.Last;
+ tstRslt.Custom9 = (float)TempRefLoStat.Min;
+ tstRslt.Custom10 = (float)TempRefLoStat.Max;
 
for (int i = 0; i < BatchRslts.WMPositionsCount; i++)
{
@@ -868,10 +899,10 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection
volumeRslt.TestTime = cBrd.TestTimeWM(i + 1); /// [s]
 
volumeRslt.Error = Formulas.ErrorFromVolumes(volumeRslt.VolumeMeter, volumeRslt.VolumeRef);
- volumeRslt.Passed = !heatMetersTestParams.EvaluateVolume ||
- ((volumeRslt.Error >= test.GetErrLimLo(tstRslt.VolumeCTV, tstRslt.TestTime) + test.Uncertainty) &&
- (volumeRslt.Error <= test.GetErrLimHi(tstRslt.VolumeCTV, tstRslt.TestTime) - test.Uncertainty) &&
- (tstRslt.ErrorFlags == 0));
+ volumeRslt.Passed = !heatMetersTestParams.EvaluateVolume ||
+ ((volumeRslt.Error >= test.GetErrLimLo(tstRslt.VolumeCTV, tstRslt.TestTime) + test.Uncertainty) &&
+ (volumeRslt.Error <= test.GetErrLimHi(tstRslt.VolumeCTV, tstRslt.TestTime) - test.Uncertainty) &&
+ (tstRslt.ErrorFlags == 0));
volumeRslt.TestDone = true;
tstRslt.TestDone = true;
}
@@ -883,103 +914,131 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection
energyRslt.PulsesMaster = Convert.ToDouble(energyRegReader.WMRefPulses);
energyRslt.VolumeStart = 0;
energyRslt.VolumeEnd = 0;
- energyRslt.VolumeRef = tstRslt.RefEnergy * (energyRslt.PulsesMaster / tstRslt.PulsesMaster); /// [J]
+ energyRslt.VolumeRef = tstRslt.RefEnergy * (energyRslt.PulsesMaster / tstRslt.PulsesMaster); /// [J]
energyRslt.VolumeMeter = energyRslt.PulsesMeter * Common.Units.ConvertFrom(Common.Unit.kWh, energyRegReader.LtrsPerPulse); /// [J]
energyRslt.TestTime = cBrd.TestTimeWM(i + 1); /// [s]
 
energyRslt.Error = Formulas.ErrorFromVolumes(energyRslt.VolumeMeter, energyRslt.VolumeRef);
- energyRslt.Passed = (energyRslt.Error >= heatMetersTestParams.ErrorLimitLo)
- && (energyRslt.Error <= heatMetersTestParams.ErrorLimitHi)
+ energyRslt.Passed = (energyRslt.Error >= heatMetersTestParams.ErrorLimitLo)
+ && (energyRslt.Error <= heatMetersTestParams.ErrorLimitHi)
&& (tstRslt.ErrorFlags == 0);
energyRslt.TestDone = true;
tstRslt.TestDone = true;
}
}
}
- else
- {
- ///
- /// Single meters
- ///
- for (int i = 0; i < BatchRslts.WMPositionsCount; i++)
- {
- if (!test.IsPartCompatible(Utils.PartNr(i + 1, BatchRslts.Batch.Compound))) continue;
-
- /// MetersKind.Single meters
- Results.Entities.MeterTestRslt meterRslt = BatchRslts.GetMeterTestRslt(testName, i, Common.CompoundMeterId.Single);
- GenericDevices.IRegReader regReader = sensPath.RegisterReaders[i];
+ else
+ {
+ ///
+ /// Single meters
+ ///
+ for (int i = 0; i < BatchRslts.WMPositionsCount; i++)
+ {
+ if (!test.IsPartCompatible(Utils.PartNr(i + 1, BatchRslts.Batch.Compound))) continue;
+
+ /// MetersKind.Single meters
+ Results.Entities.MeterTestRslt meterRslt = BatchRslts.GetMeterTestRslt(testName, i, Common.CompoundMeterId.Single);
+ GenericDevices.IRegReader regReader = sensPath.RegisterReaders[i];
GenericDevices.IRegReaderDatastream dstrReader = regReader as GenericDevices.IRegReaderDatastream;
TestMethods.iPerlCommunication.iPerlHead.IperlHead iPerl = regReader as TestMethods.iPerlCommunication.iPerlHead.IperlHead;
GenericDevices.IRegReaderLiveCamera cameraRoi = regReader as GenericDevices.IRegReaderLiveCamera;
 
- if (meterRslt != null && regReader != null)
- {
+ if (meterRslt != null && regReader != null)
+ {
meterRslt.RegReaderType = (int)regReader.RegisterReaderType;
- meterRslt.PulsesPerLiter = regReader.PulsesPerLtr;
- meterRslt.PulsesMeter = Convert.ToDouble(regReader.WMPulses);
+ ComponentProcedure procParamsEntity = test.Procedure.GetProcedureParamsEntity(regReader.Name);
+
+ try
+ {
+ if (regReader.RegisterReaderType == RegisterReaderType.Pulses)
+ {
+ XmlSerializer Serializer = XmlSerializer.FromTypes(new[] { typeof(RRProcParams) })[0];
+ RRProcParams tmp = Serializer.Deserialize(new StringReader(procParamsEntity.Parameters.ToString())) as RRProcParams;
+ regReader.PulsesPerLtr = tmp.PulsesPerLtr;
+ regReader.QuantityUnits = tmp.Units;
+ }
+ else
+ {
+ //MessageBox.Show("Cannot create or initialize a printer", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
+ }
+ }
+ catch (Exception ex)
+ {
+ /*log.DebugFormat(
+ "Error during Procedure parameters deserialization. CmpntName='{0}', Procedure='{1}', Parameters='{2}', Exception: {3}",
+ dbEntity?.CmpntName,
+ dbEntity?.Procedure,
+ dbEntity?.Parameters,
+ ex
+ );*/
+ }
+
+ meterRslt.PulsesPerLiter = regReader.PulsesPerLtr;//...MF 11.12.2025 toto chybalo, v .csv bol stlpec naplneny nulami
+ meterRslt.QuantityUnits = regReader.QuantityUnits;
+ meterRslt.PulsesMeter = Convert.ToDouble(regReader.WMPulses);
 
if (dstrReader != null)
- {
-
- if (dstrReader is SmartReader poseidon) //is Poseidon reader family
- {
- log.Info("Poseidon reader detected - Results");
- meterRslt.TimestampStart = poseidon.TimestampSecStart;
- meterRslt.TimestampEnd = !poseidon.NoSamples
- ? poseidon.TimestampSecEnd
- : (poseidon.TimestampSecStart + tstRslt.TestTime);
- meterRslt.TestTime = meterRslt.TimestampEnd - meterRslt.TimestampStart;
- meterRslt.VolumeStart = poseidon.VolumeLtrStart; /// liter
+ {
+
+ if (dstrReader is SmartReader poseidon) //is Poseidon reader family
+ {
+ log.Info("Poseidon reader detected - Results");
+ meterRslt.TimestampStart = poseidon.TimestampSecStart;
+ meterRslt.TimestampEnd = !poseidon.NoSamples
+ ? poseidon.TimestampSecEnd
+ : (poseidon.TimestampSecStart + tstRslt.TestTime);
+ meterRslt.TestTime = meterRslt.TimestampEnd - meterRslt.TimestampStart;
+ meterRslt.VolumeStart = poseidon.VolumeLtrStart; /// liter
meterRslt.VolumeEnd = poseidon.VolumeLtrStart + poseidon.WMVolume; //dstrReader.VolumeLtrEnd; /// liter
- meterRslt.VolumeMeter = poseidon.WMVolume;
-
- if (!(meterRslt.TestTime == 0 || tstRslt.TestTime == 0))
- {
- meterRslt.VolumeRef = tstRslt.VolumeCTV * meterRslt.TestTime / tstRslt.TestTime;
- meterRslt.PulsesMaster =
- tstRslt.PulsesMaster * meterRslt.TestTime / tstRslt.TestTime;
- }
- else
- {
- meterRslt.VolumeRef = tstRslt.VolumeCTV;
- meterRslt.PulsesMaster = tstRslt.PulsesMaster;
- }
-
- log.Info($"meterRslt.TimestampStart = {meterRslt.TimestampStart} \n" +
- $"meterRslt.TimestampEnd = {meterRslt.TimestampEnd }\n" +
- $"meterRslt.TestTime = {meterRslt.TestTime}\n" +
- $"meterRslt.VolumeStart = {meterRslt.VolumeStart}\n" +
- $"meterRslt.VolumeEnd = {meterRslt.VolumeEnd}\n" +
- $"meterRslt.VolumeMeter = {meterRslt.VolumeMeter}\n" +
- $"meterRslt.VolumeRef = {meterRslt.VolumeRef}\n" +
- $"meterRslt.PulsesMaster = {meterRslt.PulsesMaster}\n");
-
-
- }
- else
- {
- meterRslt.TimestampStart = dstrReader.TimestampSecStart;
- meterRslt.TimestampEnd = !dstrReader.NoSamples
- ? dstrReader.TimestampSecEnd
- : (dstrReader.TimestampSecStart + tstRslt.TestTime);
- meterRslt.TestTime = meterRslt.TimestampEnd - meterRslt.TimestampStart;
- meterRslt.VolumeStart = dstrReader.VolumeLtrStart; /// liter
+ meterRslt.VolumeMeter = poseidon.WMVolume;
+
+ if (!(meterRslt.TestTime == 0 || tstRslt.TestTime == 0))
+ {
+ meterRslt.VolumeRef = tstRslt.VolumeCTV * meterRslt.TestTime / tstRslt.TestTime;
+ meterRslt.PulsesMaster =
+ tstRslt.PulsesMaster * meterRslt.TestTime / tstRslt.TestTime;
+ }
+ else
+ {
+ meterRslt.VolumeRef = tstRslt.VolumeCTV;
+ meterRslt.PulsesMaster = tstRslt.PulsesMaster;
+ }
+
+ log.Info($"meterRslt.TimestampStart = {meterRslt.TimestampStart} \n" +
+ $"meterRslt.TimestampEnd = {meterRslt.TimestampEnd}\n" +
+ $"meterRslt.TestTime = {meterRslt.TestTime}\n" +
+ $"meterRslt.VolumeStart = {meterRslt.VolumeStart}\n" +
+ $"meterRslt.VolumeEnd = {meterRslt.VolumeEnd}\n" +
+ $"meterRslt.VolumeMeter = {meterRslt.VolumeMeter}\n" +
+ $"meterRslt.VolumeRef = {meterRslt.VolumeRef}\n" +
+ $"meterRslt.PulsesMaster = {meterRslt.PulsesMaster}\n");
+
+
+ }
+ else
+ {
+ meterRslt.TimestampStart = dstrReader.TimestampSecStart;
+ meterRslt.TimestampEnd = !dstrReader.NoSamples
+ ? dstrReader.TimestampSecEnd
+ : (dstrReader.TimestampSecStart + tstRslt.TestTime);
+ meterRslt.TestTime = meterRslt.TimestampEnd - meterRslt.TimestampStart;
+ meterRslt.VolumeStart = dstrReader.VolumeLtrStart; /// liter
meterRslt.VolumeEnd = dstrReader.VolumeLtrEnd; /// liter
meterRslt.VolumeMeter =
- Math.Abs(dstrReader.VolumeLtrEnd - dstrReader.VolumeLtrStart);
- meterRslt.VolumeRef = tstRslt.VolumeCTV * meterRslt.TestTime / tstRslt.TestTime;
- meterRslt.PulsesMaster =
- tstRslt.PulsesMaster * meterRslt.TestTime / tstRslt.TestTime;
- }
+ Math.Abs(dstrReader.VolumeLtrEnd - dstrReader.VolumeLtrStart);
+ meterRslt.VolumeRef = tstRslt.VolumeCTV * meterRslt.TestTime / tstRslt.TestTime;
+ meterRslt.PulsesMaster =
+ tstRslt.PulsesMaster * meterRslt.TestTime / tstRslt.TestTime;
+ }
 
- if (iPerl != null)
+ if (iPerl != null)
{
if (iPerl.ResultCode != 0 && (meterRslt.WaterMeter.ResultCode & (int)Results.Entities.ResultCode.OptoErrorCodeMask) == 0)
{
meterRslt.WaterMeter.ResultCode |= iPerl.ResultCode;
}
#if IPERL
- meterRslt.WaterMeter.CalibFactor = iPerl.CalibFactor;
+ meterRslt.WaterMeter.CalibFactor = iPerl.CalibFactor;
meterRslt.ExtraDataPath = iPerl.ExtraDataPath;
if (TestMethods.iPerlCommunication.iPerlHead.IperlHead.FeatureVectorSize >= 1) meterRslt.X1 = iPerl.X[0];
if (TestMethods.iPerlCommunication.iPerlHead.IperlHead.FeatureVectorSize >= 2) meterRslt.X2 = iPerl.X[1];
@@ -1005,18 +1064,18 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection
meterRslt.VolumeMeter,
meterRslt.VolumeRef);
}
- else if (cameraRoi != null)
- {
- meterRslt.TimestampStart = cameraRoi.TimestampStart; /// [s]
- meterRslt.TimestampEnd = cameraRoi.TimestampEnd; /// [s]
- meterRslt.VolumeStart = cameraRoi.VolumeStart; /// [l]
- meterRslt.VolumeEnd = cameraRoi.VolumeEnd; /// [l]
- meterRslt.VolumeMeter = cameraRoi.VolumeEnd - cameraRoi.VolumeStart; /// [l]
+ else if (cameraRoi != null)
+ {
+ meterRslt.TimestampStart = cameraRoi.TimestampStart; /// [s]
+ meterRslt.TimestampEnd = cameraRoi.TimestampEnd; /// [s]
+ meterRslt.VolumeStart = cameraRoi.VolumeStart; /// [l]
+ meterRslt.VolumeEnd = cameraRoi.VolumeEnd; /// [l]
+ meterRslt.VolumeMeter = cameraRoi.VolumeEnd - cameraRoi.VolumeStart; /// [l]
 
if (meterRslt.VolumeMeter != 0)
{
/// Normal measurement with camera
- meterRslt.TestTime = cameraRoi.TimestampEnd - cameraRoi.TimestampStart; /// [s]
+ meterRslt.TestTime = cameraRoi.TimestampEnd - cameraRoi.TimestampStart; /// [s]
meterRslt.VolumeRef = tstRslt.VolumeCTV * meterRslt.TestTime / tstRslt.TestTime;
meterRslt.PulsesMaster = tstRslt.PulsesMaster * meterRslt.TestTime / tstRslt.TestTime;
}
@@ -1038,11 +1097,11 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection
meterRslt.VolumeMeter,
meterRslt.VolumeRef);
}
- else
- {
+ else
+ {
meterRslt.PulsesMaster = Convert.ToDouble(regReader.WMRefPulses);
meterRslt.VolumeStart = 0;
- meterRslt.VolumeEnd = 0;
+ meterRslt.VolumeEnd = 0;
meterRslt.VolumeMeter = meterRslt.PulsesMeter * regReader.LtrsPerPulse; /// [l]
 
if (regReader.WMPulses >= 1)
@@ -1050,43 +1109,67 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection
/// Normal measurement
meterRslt.TestTime = cBrd.TestTimeWM(regReader.Position);
meterRslt.VolumeRef = meterRslt.PulsesMaster * tstRslt.ConstMaster; /// [l]
+ meterRslt.MassRef = meterRslt.PulsesMaster * tstRslt.MassConstMaster; /// [kg]
}
else
{
/// None or one pulse from the water meter
meterRslt.TestTime = tstRslt.TestTime;
meterRslt.VolumeRef = tstRslt.VolumeCTV; /// [l]
+ meterRslt.MassRef = tstRslt.MassCTV;
}
 
- log.DebugFormat("Pulses: Pref4meter={0} Vmeter={1} Vref4meter={2} Ttime4meter={3} Ttime={4}",
+ log.DebugFormat("Pulses: Pref4meter={0} Vmeter={1} Vref4meter={2} Mmeter={3} Mref4meter={4} Ttime4meter={5} Ttime={6}",
meterRslt.PulsesMaster,
meterRslt.VolumeMeter,
meterRslt.VolumeRef,
+ meterRslt.MassMeter,
+ meterRslt.MassRef,
meterRslt.TestTime,
tstRslt.TestTime);
}
 
- meterRslt.Error = Formulas.ErrorFromVolumes(meterRslt.VolumeMeter, meterRslt.VolumeRef);
- meterRslt.Passed = (meterRslt.Error >= test.GetErrLimLo(tstRslt.VolumeCTV, tstRslt.TestTime) + test.Uncertainty)
- && (meterRslt.Error <= test.GetErrLimHi(tstRslt.VolumeCTV, tstRslt.TestTime) - test.Uncertainty)
- && (tstRslt.ErrorFlags == 0);
+ double Error = 0;
+ if (meterRslt.GetQuantityFromUnits() == "Mass")
+ Error = Formulas.ErrorFromVolumes(meterRslt.MassMeter, meterRslt.MassRef);
+ else
+ Error = Formulas.ErrorFromVolumes(meterRslt.VolumeMeter, meterRslt.VolumeRef);
+
+ meterRslt.Error = Error;
+
+ var ErrLimLo_Volume = test.GetErrLimLo(tstRslt.VolumeCTV, tstRslt.TestTime);
+ var ErrLimHi_Volume = test.GetErrLimHi(tstRslt.VolumeCTV, tstRslt.TestTime);
+ var ErrLimLo_Mass = test.GetErrLimLo(tstRslt.MassCTV, tstRslt.TestTime);
+ var ErrLimHi_Mass = test.GetErrLimHi(tstRslt.MassCTV, tstRslt.TestTime);
+
+ bool Passed;
+ if (meterRslt.GetQuantityFromUnits() == "Mass")
+ Passed = (meterRslt.Error >= ErrLimLo_Volume + test.Uncertainty) &&
+ (meterRslt.Error <= ErrLimHi_Volume - test.Uncertainty) &&
+ (tstRslt.ErrorFlags == 0);
+ else
+ Passed = (meterRslt.Error >= ErrLimLo_Mass + test.Uncertainty) &&
+ (meterRslt.Error <= ErrLimHi_Mass - test.Uncertainty) &&
+ (tstRslt.ErrorFlags == 0);
+
+ meterRslt.Passed = Passed;
meterRslt.TestDone = true;
tstRslt.TestDone = true;
#if ORACLE_DB
meterRslt.ErrorBC = meterRslt.Error;
#endif
}
- }
- }
-
- tstRslt.Components = Results.Entities.Components.UpdateList(BatchRslts.ComponentsList,
- new Results.Entities.Components((BenchInfo != null) ? BenchInfo.TestBenchId : 1,
- (BenchInfo != null) ? BenchInfo.TestBenchName : "testbench",
- inPath.Pump != null ? inPath.Pump.Name : string.Empty,
- outPath.FlowMeter != null ? outPath.FlowMeter.Name : string.Empty,
- cBrd.Devices.Scale.Name,
- outPath.RegValve != null ? outPath.RegValve.Name : string.Empty,
- outPath.Diverter != null ? outPath.Diverter.Name : string.Empty));
+ }
+ }
+
+ tstRslt.Components = Results.Entities.Components.UpdateList(BatchRslts.ComponentsList,
+ new Results.Entities.Components((BenchInfo != null) ? BenchInfo.TestBenchId : 1,
+ (BenchInfo != null) ? BenchInfo.TestBenchName : "testbench",
+ inPath.Pump != null ? inPath.Pump.Name : string.Empty,
+ outPath.FlowMeter != null ? outPath.FlowMeter.Name : string.Empty,
+ cBrd.Devices.Scale.Name,
+ outPath.RegValve != null ? outPath.RegValve.Name : string.Empty,
+ outPath.Diverter != null ? outPath.Diverter.Name : string.Empty));
 
/// Update water meter error flags
if (ErrorFlagsComp != null)
@@ -1105,24 +1188,24 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection
}
}
 
- /// Update results
- Bridge.OnTestCompleted(this, new TestCompletedEventArgs(testName, tstRslt));
- }
+ /// Update results
+ Bridge.OnTestCompleted(this, new TestCompletedEventArgs(testName, tstRslt));
+ }
 
- Bridge.OnTestProgress(this, new TestProgressEventArgs(test, repetitionNr, Progress.TransitionAfter));
+ Bridge.OnTestProgress(this, new TestProgressEventArgs(test, repetitionNr, Progress.TransitionAfter));
 
- /// Append the results to the CSV-file
- allResults.Info(TestResult2CsvLine(testName, test.Part));
+ /// Append the results to the CSV-file
+ allResults.Info(TestResult2CsvLine(testName, test.Part));
 
if (stopCycle) retVal = Event.ErrorFlagsStop;
 
- stopTest:
+ stopTest:
 
- StopRecordingStatistics(); /// Make sure graph files are closed
+ StopRecordingStatistics(); /// Make sure graph files are closed
 
- ///
- /// Quit this sequence
- ///
+ ///
+ /// Quit this sequence
+ ///
if (isLastRepetition || retVal == Event.UiCmdStop
|| retVal == Event.OpArgumentError
|| retVal == Event.RecoverableError
@@ -1133,18 +1216,18 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection
cBrd.StopAll(false);
}
 
- return new List<Event> { retVal };
- }
+ return new List<Event> { retVal };
+ }
 
 
- IList<Event> Simulate1(Config.Entities.Test test, int repetitionNr, bool isLastRepetition,
- Compound.CombinedTestParams compoundTestParams,
- HeatMeters.TestParams heatMetersTestParams)
- {
- ///
- /// Test method simulation
- ///
- Bridge.OnTestProgress(this, new TestProgressEventArgs(test, repetitionNr, Progress.FlowSetting));
+ IList<Event> Simulate1(Config.Entities.Test test, int repetitionNr, bool isLastRepetition,
+ Compound.CombinedTestParams compoundTestParams,
+ HeatMeters.TestParams heatMetersTestParams)
+ {
+ ///
+ /// Test method simulation
+ ///
+ Bridge.OnTestProgress(this, new TestProgressEventArgs(test, repetitionNr, Progress.FlowSetting));
 
foreach (var rr in sensPath.RegisterReaders)
{
@@ -1157,12 +1240,12 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection
StateMachine.WaitRunDevsRunOps();
StateMachine.WaitRunDevsRunOps();
 
-
- if (compoundTestParams != null)
- {
+
+ if (compoundTestParams != null)
+ {
if (test.Name.ToLower().Contains("nok")) MakeSimulatedCompound(test, 1, test.Part, 4.7f, 0.9f);
else MakeSimulatedCompound(test, repetitionNr, test.Part, 0.7f, 1.0f);
- }
+ }
else if (heatMetersTestParams != null)
{
MakeSimulatedHeatMeters(test, repetitionNr, test.Part, 1.5f, 1000000, heatMetersTestParams.ErrorLimitLo, heatMetersTestParams.ErrorLimitHi, heatMetersTestParams.EvaluateVolume);
@@ -1170,91 +1253,91 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection
else
{
float errorPctBase = -1.0f;
- if (test.Name.ToLower().Contains("q3")) errorPctBase = -0.5f;
+ if (test.Name.ToLower().Contains("q3")) errorPctBase = -0.5f;
else if (test.Name.ToLower().Contains("q2")) errorPctBase = 0.5f;
else if (test.Name.ToLower().Contains("q1")) errorPctBase = -5.1f;
 
MakeSimulated(test, repetitionNr, test.Part, errorPctBase + repetitionNr * 0.1f);
}
 
- Bridge.OnTestProgress(this, new TestProgressEventArgs(test, repetitionNr, Progress.Completed));
- Bridge.OnTestCompleted(this, new TestCompletedEventArgs(test.Name, BatchRslts.GetTestRslt(Results.Utils.GetTestName(test.Name, 1, 1), 0)));
- allResults.Info(TestResult2CsvLine(test.Name, 0)); /// Append the results to the CSV-file
+ Bridge.OnTestProgress(this, new TestProgressEventArgs(test, repetitionNr, Progress.Completed));
+ Bridge.OnTestCompleted(this, new TestCompletedEventArgs(test.Name, BatchRslts.GetTestRslt(Results.Utils.GetTestName(test.Name, 1, 1), 0)));
+ allResults.Info(TestResult2CsvLine(test.Name, 0)); /// Append the results to the CSV-file
 
- //-------------------------------------------------------------------
- Bridge.OnActivity(this, string.Format("{0} Simulation", test.Name));
- //-------------------------------------------------------------------
+ //-------------------------------------------------------------------
+ Bridge.OnActivity(this, string.Format("{0} Simulation", test.Name));
+ //-------------------------------------------------------------------
 
- State.Create(string.Format("{0}({1}) : Simulation", test.Method, test.Name))
- .AddOperation(checkUiOp)
- .EnterState();
- IList<Event> e = StateMachine.WaitRunDevsRunOps();
+ State.Create(string.Format("{0}({1}) : Simulation", test.Method, test.Name))
+ .AddOperation(checkUiOp)
+ .EnterState();
+ IList<Event> e = StateMachine.WaitRunDevsRunOps();
 
return new List<Event> { TestAndLogUiCmdStop(test, e) ? Event.UiCmdStop : Event.Done };
- }
+ }
 
 
- IList<Event> Simulate2(Config.Entities.Test test, int repetitionNr, bool isLastRepetition,
- Compound.CombinedTestParams compoundTestParams,
- HeatMeters.TestParams heatMetersTestParams)
- {
- IList<Event> e;
- Event retVal = Event.Done;
+ IList<Event> Simulate2(Config.Entities.Test test, int repetitionNr, bool isLastRepetition,
+ Compound.CombinedTestParams compoundTestParams,
+ HeatMeters.TestParams heatMetersTestParams)
+ {
+ IList<Event> e;
+ Event retVal = Event.Done;
 
- ///
- /// Test method with flow chart simulation
- ///
- Bridge.OnTestProgress(this, new TestProgressEventArgs(test, repetitionNr, Progress.FlowSetting));
+ ///
+ /// Test method with flow chart simulation
+ ///
+ Bridge.OnTestProgress(this, new TestProgressEventArgs(test, repetitionNr, Progress.FlowSetting));
 
 
- /// Simulate flow
+ /// Simulate flow
StartNewStatistics(null, BatchRslts.Batch.BatchNr, test, repetitionNr, 0);
 
- IntBox remainingTime = new IntBox((int)test.TestTime);
- State.Create(string.Format("{0}({1}) : Simulation", test.Method, test.Name))
- .AddOperation(checkUiOp)
- .AddOperation(new Operations.TimerOp((int)test.TestTime, remainingTime))
- .EnterState();
- do
- {
- e = StateMachine.WaitRunDevsRunOps();
- if (TestAndLogUiCmdStop(test, e)) { retVal = Event.UiCmdStop; break; }
-
- Bridge.OnTestProgress(this, new TestProgressEventArgs(test, repetitionNr, Progress.Test));
-
- if (remainingTime.Val > 60)
- {
- Bridge.OnActivity(this, string.Format("{0} ... {1} {2} {3} {4}", Strings.Test_in_progress, remainingTime.Val / 60, "min", remainingTime.Val % 60, Strings.sec));
- }
- else
- {
- Bridge.OnActivity(this, string.Format("{0} ... {1} s", Strings.Test_in_progress, remainingTime.Val));
- }
- //------------------------------------------------
-
- RefFlow.Val = (1.0 + 0.2 * Math.Sin(2 * Math.PI * (float)remainingTime.Val / test.TestTime)) * (test.QfromM3ph() + test.QtoM3ph()) / 2.0;
+ IntBox remainingTime = new IntBox((int)test.TestTime);
+ State.Create(string.Format("{0}({1}) : Simulation", test.Method, test.Name))
+ .AddOperation(checkUiOp)
+ .AddOperation(new Operations.TimerOp((int)test.TestTime, remainingTime))
+ .EnterState();
+ do
+ {
+ e = StateMachine.WaitRunDevsRunOps();
+ if (TestAndLogUiCmdStop(test, e)) { retVal = Event.UiCmdStop; break; }
+
+ Bridge.OnTestProgress(this, new TestProgressEventArgs(test, repetitionNr, Progress.Test));
+
+ if (remainingTime.Val > 60)
+ {
+ Bridge.OnActivity(this, string.Format("{0} ... {1} {2} {3} {4}", Strings.Test_in_progress, remainingTime.Val / 60, "min", remainingTime.Val % 60, Strings.sec));
+ }
+ else
+ {
+ Bridge.OnActivity(this, string.Format("{0} ... {1} s", Strings.Test_in_progress, remainingTime.Val));
+ }
+ //------------------------------------------------
+
+ RefFlow.Val = (1.0 + 0.2 * Math.Sin(2 * Math.PI * (float)remainingTime.Val / test.TestTime)) * (test.QfromM3ph() + test.QtoM3ph()) / 2.0;
PressUp.Val = 2.7f;
PressDown.Val = 2.2f;
 
- UpdateAllStatistics();
- }
- while (!e.Contains(Event.TimerExpired));
+ UpdateAllStatistics();
+ }
+ while (!e.Contains(Event.TimerExpired));
 
- StopRecordingStatistics();
+ StopRecordingStatistics();
 
- if (retVal != Event.UiCmdStop)
- {
- float errorPctBase = -1.0f;
+ if (retVal != Event.UiCmdStop)
+ {
+ float errorPctBase = -1.0f;
 
- if (test.Name.ToLower().Contains("q3")) errorPctBase = -0.5f;
- else if (test.Name.ToLower().Contains("q2")) errorPctBase = 0.5f;
- else if (test.Name.ToLower().Contains("q1")) errorPctBase = -5.1f;
+ if (test.Name.ToLower().Contains("q3")) errorPctBase = -0.5f;
+ else if (test.Name.ToLower().Contains("q2")) errorPctBase = 0.5f;
+ else if (test.Name.ToLower().Contains("q1")) errorPctBase = -5.1f;
 
- MakeSimulated(test, repetitionNr, test.Part, errorPctBase + repetitionNr * 0.1f);
+ MakeSimulated(test, repetitionNr, test.Part, errorPctBase + repetitionNr * 0.1f);
 
- Bridge.OnTestProgress(this, new TestProgressEventArgs(test, repetitionNr, Progress.Completed));
- Bridge.OnTestCompleted(this, new TestCompletedEventArgs(test.Name, BatchRslts.GetTestRslt(Results.Utils.GetTestName(test.Name, 1, 1), 0)));
- allResults.Info(TestResult2CsvLine(test.Name, 0)); /// Append the results to the CSV-file
+ Bridge.OnTestProgress(this, new TestProgressEventArgs(test, repetitionNr, Progress.Completed));
+ Bridge.OnTestCompleted(this, new TestCompletedEventArgs(test.Name, BatchRslts.GetTestRslt(Results.Utils.GetTestName(test.Name, 1, 1), 0)));
+ allResults.Info(TestResult2CsvLine(test.Name, 0)); /// Append the results to the CSV-file
}
 
return new List<Event> { retVal }; /// default 'retVal' value is Event.Done
diff --git a/TBF/Rig/TestMethods/StandingStartMassCollection/StandingStartMassCollectionSeq.cs b/TBF/Rig/TestMethods/StandingStartMassCollection/StandingStartMassCollectionSeq.cs
--- a/TBF/Rig/TestMethods/StandingStartMassCollection/StandingStartMassCollectionSeq.cs
+++ b/TBF/Rig/TestMethods/StandingStartMassCollection/StandingStartMassCollectionSeq.cs
@@ -1,13 +1,14 @@
-///
+using Common;
+using Config.Entities;
+using log4net;
+///
/// Copyright (c) 2013-2021 Sensus Slovensko a.s.
///
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading;
-using log4net;
-using Common;
-using Config.Entities;
+using System.Xml.Serialization;
using TBF.Boxes;
using TBF.Resources;
using TBF.Rig.GenericDevices;
@@ -74,21 +75,21 @@ namespace TBF.Rig.TestMethods.StandingStartMassCollection
return true;
}
 
- /// <summary>
- /// Fixed start mass collection method sequence
- /// </summary>
- /// <param name="test">Test entity</param>
- /// <returns>
- /// Event.Done . . . . . . . OK
- /// Event.MakeSecondPass . . OK, 2nd pass (=evaluation) required
- /// Event.UiCmdStop . . . . Stopped by the user using the on-screen button STOP
- /// Event.OpArgumentError . Target flow is out of range
- /// Event.Error . . . . . . Unspecified error
- /// </returns>
- public IList<Event> Execute(Config.Entities.Test test, int repetitionNr, bool isLastRepetition,
+ /// <summary>
+ /// Fixed start mass collection method sequence
+ /// </summary>
+ /// <param name="test">Test entity</param>
+ /// <returns>
+ /// Event.Done . . . . . . . OK
+ /// Event.MakeSecondPass . . OK, 2nd pass (=evaluation) required
+ /// Event.UiCmdStop . . . . Stopped by the user using the on-screen button STOP
+ /// Event.OpArgumentError . Target flow is out of range
+ /// Event.Error . . . . . . Unspecified error
+ /// </returns>
+ public IList<Event> Execute(Config.Entities.Test test, int repetitionNr, bool isLastRepetition,
bool compound,
- HeatMeters.TestParams heatMetersTestParams,
- Common.DebugMode debugLevel)
+ HeatMeters.TestParams heatMetersTestParams,
+ Common.DebugMode debugLevel)
{
ControlBoard.IControlBoard cBrd = StateMachine.ControlBoardMain;
IScale scale = cBrd.Devices.Scale as IScale;
@@ -101,7 +102,7 @@ namespace TBF.Rig.TestMethods.StandingStartMassCollection
}
 
IList<Event> e; /// Events from currently running operations
- int waterMetersCount = Math.Min(BenchInfo.WaterMetersCount, sensPath.RegisterReaders.Length);
+ int waterMetersCount = Math.Min(BenchInfo.WaterMetersCount, sensPath.RegisterReaders.Length);
DateTimeBox timeStampStart = new DateTimeBox();
DateTimeBox timeStampEnd = new DateTimeBox();
FloatBox startSwitchTime = new FloatBox();
@@ -154,7 +155,8 @@ namespace TBF.Rig.TestMethods.StandingStartMassCollection
.AddOperation(checkUiOp)
.AddOperations(readTempPressOps)
.EnterState();
- do {
+ do
+ {
e = StateMachine.WaitRunDevsRunOps();
if (e.Contains(Event.Error)) { retVal = Event.Error; goto stopTest; }
if (TestAndLogUiCmdStop(test, e)) { retVal = Event.UiCmdStop; goto stopTest; }
@@ -172,53 +174,54 @@ namespace TBF.Rig.TestMethods.StandingStartMassCollection
IOperation heatMetersPromptOp = null;
if (heatMetersTestParams != null && !string.IsNullOrEmpty(heatMetersTestParams.Prompt))
{
- /// Make sure the CycleBeginForm is closed
- if (UIFlowControl.Stop == WaitBeginFormClosed()) goto stopTest;
+ /// Make sure the CycleBeginForm is closed
+ if (UIFlowControl.Stop == WaitBeginFormClosed()) goto stopTest;
 
- heatMetersPromptOp = new Operations.MessageBoxOp(heatMetersTestParams.Prompt);
+ heatMetersPromptOp = new Operations.MessageBoxOp(heatMetersTestParams.Prompt);
}
 
 
if (test.DoDraining || (scale.Mass + test.Volume >= scale.Capacity * Constants.TankFullFactor))
- {
+ {
///
/// There is not enough room in the tank OR unconditional draining ... drain the water tank
///
IList<IOperation> ops = new List<IOperation>(readTempPressOps);
ops.Add(heatMetersPromptOp);
- switch (DrainTheTank(scale, ops))
- {
- case Event.Error: { retVal = Event.Error; goto stopTest; }
- case Event.UiCmdStop: { retVal = Event.UiCmdStop; goto stopTest; }
- }
- }
- ///
- /// Make sure the drain valve is closed
- ///
- State.Create(string.Format("{0}({1}) : Make sure the drain valve is closed", test.Method, test.Name))
- .AddOperation(checkUiOp)
+ switch (DrainTheTank(scale, ops))
+ {
+ case Event.Error: { retVal = Event.Error; goto stopTest; }
+ case Event.UiCmdStop: { retVal = Event.UiCmdStop; goto stopTest; }
+ }
+ }
+ ///
+ /// Make sure the drain valve is closed
+ ///
+ State.Create(string.Format("{0}({1}) : Make sure the drain valve is closed", test.Method, test.Name))
+ .AddOperation(checkUiOp)
.AddOperations(readTempPressOps)
- .AddOperation(heatMetersPromptOp)
- .AddOperation(cBrd.SetValvesOp(null, scale.DrainValve))
- .EnterState();
- do {
- e = StateMachine.WaitRunDevsRunOps();
- Bridge.OnTestProgress(this, new TestProgressEventArgs(test, repetitionNr, Progress.JustStarted));
+ .AddOperation(heatMetersPromptOp)
+ .AddOperation(cBrd.SetValvesOp(null, scale.DrainValve))
+ .EnterState();
+ do
+ {
+ e = StateMachine.WaitRunDevsRunOps();
+ Bridge.OnTestProgress(this, new TestProgressEventArgs(test, repetitionNr, Progress.JustStarted));
 
- if (e.Contains(Event.Error)) { retVal = Event.Error; goto stopTest; }
- if (TestAndLogUiCmdStop(test, e)) { retVal = Event.UiCmdStop; goto stopTest; }
- }
- while (!e.Contains(Event.ValvesSet));
+ if (e.Contains(Event.Error)) { retVal = Event.Error; goto stopTest; }
+ if (TestAndLogUiCmdStop(test, e)) { retVal = Event.UiCmdStop; goto stopTest; }
+ }
+ while (!e.Contains(Event.ValvesSet));
 
 
//------------------------------------------------
Bridge.OnActivity(this, Strings.Starting_the_pump);
//------------------------------------------------
 
- Bridge.OnTestProgress(this, new TestProgressEventArgs(test, repetitionNr, Progress.FlowSetting));
- int flowSetTime0 = StateMachine.Time;
+ Bridge.OnTestProgress(this, new TestProgressEventArgs(test, repetitionNr, Progress.FlowSetting));
+ int flowSetTime0 = StateMachine.Time;
 
- 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(string.Format("{0}({1}) : Starting the pump", test.Method, test.Name))
.AddOperation(checkUiOp)
@@ -227,14 +230,15 @@ namespace TBF.Rig.TestMethods.StandingStartMassCollection
.AddOperation(heatMetersPromptOp)
.AddOperation(inPath.Pump != null ? cBrd.SetValvesOp(inPath.Pump, null) : null)
.EnterState();
- do {
+ do
+ {
e = StateMachine.WaitRunDevsRunOps();
Bridge.OnTestProgress(this, new TestProgressEventArgs(test, repetitionNr, Progress.FlowSetting));
 
if (TestAndLogUiCmdStop(test, e)) { retVal = Event.UiCmdStop; goto stopTest; }
- if (e.Contains(Event.Error)) { retVal = Event.Error; goto stopTest; }
+ if (e.Contains(Event.Error)) { retVal = Event.Error; goto stopTest; }
}
- while (e.Contains(Event.ValvesBusy) /* || !e.Contains(Event.AllPositionsReached)*/);
+ while (e.Contains(Event.ValvesBusy) /* || !e.Contains(Event.AllPositionsReached)*/);
 
 
if (test.TimePump2StartV > 0)
@@ -245,7 +249,8 @@ namespace TBF.Rig.TestMethods.StandingStartMassCollection
.AddOperation(new Operations.TimerOp(test.TimePump2StartV))
.AddOperation(heatMetersPromptOp)
.EnterState();
- do {
+ do
+ {
e = StateMachine.WaitRunDevsRunOps();
Bridge.OnTestProgress(this, new TestProgressEventArgs(test, repetitionNr, Progress.FlowSetting));
 
@@ -263,10 +268,11 @@ namespace TBF.Rig.TestMethods.StandingStartMassCollection
.AddOperation(cBrd.SetValvesOp(benchPath.StopBFValve, null))
.AddOperation(heatMetersPromptOp)
.EnterState();
- do {
+ do
+ {
e = StateMachine.WaitRunDevsRunOps();
if (TestAndLogUiCmdStop(test, e)) { retVal = Event.UiCmdStop; goto stopTest; }
- if (e.Contains(Event.Error)) { retVal = Event.Error; goto stopTest; }
+ if (e.Contains(Event.Error)) { retVal = Event.Error; goto stopTest; }
}
while (!e.Contains(Event.ValvesSet));
}
@@ -280,7 +286,8 @@ namespace TBF.Rig.TestMethods.StandingStartMassCollection
.AddOperation(new Operations.TimerOp(test.TimeBeforeFlow))
.AddOperation(heatMetersPromptOp)
.EnterState();
- do {
+ do
+ {
e = StateMachine.WaitRunDevsRunOps();
Bridge.OnTestProgress(this, new TestProgressEventArgs(test, repetitionNr, Progress.FlowSetting));
 
@@ -302,8 +309,9 @@ namespace TBF.Rig.TestMethods.StandingStartMassCollection
.AddOperations(readTempPressOps)
.AddOperation(cBrd.SetValvesOp(inPath.Pump, null))
.AddOperation(heatMetersPromptOp)
- .EnterState();
- do {
+ .EnterState();
+ do
+ {
e = StateMachine.WaitRunDevsRunOps();
Bridge.OnTestProgress(this, new TestProgressEventArgs(test, repetitionNr, Progress.FlowSetting));
 
@@ -317,7 +325,8 @@ namespace TBF.Rig.TestMethods.StandingStartMassCollection
.AddOperation(cBrd.OpenStartValveOp())
.AddOperation(heatMetersPromptOp)
.EnterState();
- do {
+ do
+ {
e = StateMachine.WaitRunDevsRunOps();
Bridge.OnTestProgress(this, new TestProgressEventArgs(test, repetitionNr, Progress.FlowSetting));
 
@@ -329,14 +338,15 @@ namespace TBF.Rig.TestMethods.StandingStartMassCollection
.AddOperation(checkUiOp)
.AddOperations(readTempPressOps)
.AddOperation(cBrd.SetFlowOp(test.QfromM3ph(), test.QtoM3ph(), RefFlow, FlowSettingTimeoutSec))
- .AddOperation(heatMetersPromptOp)
- .EnterState();
- do {
+ .AddOperation(heatMetersPromptOp)
+ .EnterState();
+ do
+ {
e = StateMachine.WaitRunDevsRunOps();
Bridge.OnTestProgress(this, new TestProgressEventArgs(test, repetitionNr, Progress.FlowSetting));
 
if (e.Contains(Event.OpArgumentError)) { retVal = Event.OpArgumentError; goto stopTest; }
- if (TestAndLogUiCmdStop(test, e)) { retVal = Event.UiCmdStop; goto stopTest; }
+ if (TestAndLogUiCmdStop(test, e)) { retVal = Event.UiCmdStop; goto stopTest; }
if (e.Contains(Event.RegulValveTimeOut))
{
Bridge.OnError(this, Strings.Flow_adjustment_failed);
@@ -362,15 +372,16 @@ namespace TBF.Rig.TestMethods.StandingStartMassCollection
//---------------------------------------------------
 
int lastTimeSec = StateMachine.Time;
- double Tw_last = 0;
- double Tc_last = 0;
+ double Tw_last = 0;
+ double Tc_last = 0;
 
State.Create(string.Format("{0}({1}) : Checking if the temperature is stable", test.Method, test.Name))
.AddOperation(checkUiOp)
.AddOperations(readTempPressOps)
- .AddOperation(heatMetersPromptOp)
- .EnterState();
- do {
+ .AddOperation(heatMetersPromptOp)
+ .EnterState();
+ do
+ {
e = StateMachine.WaitRunDevsRunOps();
if (TestAndLogUiCmdStop(test, e)) { retVal = Event.UiCmdStop; goto stopTest; }
if (e.Contains(Event.Next))
@@ -378,56 +389,57 @@ namespace TBF.Rig.TestMethods.StandingStartMassCollection
break; /// Simulate temperature is within range
}
 
- if (TempRefHi1.Val != 0 && TempRefHi2.Val != 0 && TempRefLo1.Val != 0 && TempRefLo2.Val != 0)
- {
- if (StateMachine.Time - lastTimeSec > 10 || StateMachine.Time - lastTimeSec < 0)
- {
- double Tw = (TempRefHi1.Val + TempRefHi2.Val) / 2;
- double Tc = (TempRefLo1.Val + TempRefLo2.Val) / 2;
- 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(TempRefHi1.Val - TempRefHi2.Val) <= heatMetersTestParams.DeltaTempWarm) &&
- (Math.Abs(TempRefLo1.Val - TempRefLo2.Val) <= heatMetersTestParams.DeltaTempCold))
- {
+ if (TempRefHi1.Val != 0 && TempRefHi2.Val != 0 && TempRefLo1.Val != 0 && TempRefLo2.Val != 0)
+ {
+ if (StateMachine.Time - lastTimeSec > 10 || StateMachine.Time - lastTimeSec < 0)
+ {
+ double Tw = (TempRefHi1.Val + TempRefHi2.Val) / 2;
+ double Tc = (TempRefLo1.Val + TempRefLo2.Val) / 2;
+ 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(TempRefHi1.Val - TempRefHi2.Val) <= heatMetersTestParams.DeltaTempWarm) &&
+ (Math.Abs(TempRefLo1.Val - TempRefLo2.Val) <= heatMetersTestParams.DeltaTempCold))
+ {
break; /// Temperature is withing required range
}
 
- lastTimeSec = StateMachine.Time;
- Tw_last = Tw;
- Tc_last = Tc;
- }
- }
+ lastTimeSec = StateMachine.Time;
+ Tw_last = Tw;
+ Tc_last = Tc;
+ }
+ }
}
while (true);
}
- else if (!string.IsNullOrEmpty(test.TempControl) && benchPath.TempMtrUp != null && benchPath.TempMtrDown != null)
- {
- //---------------------------------------------------
- Bridge.OnActivity(this, Strings.Setting_temperature);
- //---------------------------------------------------
-
- State.Create(string.Format("{0}({1}) : Wait until the water temperature is within limits", test.Method, test.Name))
- .AddOperation(checkUiOp)
+ else if (!string.IsNullOrEmpty(test.TempControl) && benchPath.TempMtrUp != null && benchPath.TempMtrDown != null)
+ {
+ //---------------------------------------------------
+ Bridge.OnActivity(this, Strings.Setting_temperature);
+ //---------------------------------------------------
+
+ State.Create(string.Format("{0}({1}) : Wait until the water temperature is within limits", test.Method, test.Name))
+ .AddOperation(checkUiOp)
.AddOperations(readTempPressOps)
- .EnterState();
- do {
- e = StateMachine.WaitRunDevsRunOps();
- if (TestAndLogUiCmdStop(test, e)) { retVal = Event.UiCmdStop; goto stopTest; }
+ .EnterState();
+ do
+ {
+ e = StateMachine.WaitRunDevsRunOps();
+ if (TestAndLogUiCmdStop(test, e)) { retVal = Event.UiCmdStop; goto stopTest; }
if (e.Contains(Event.Next))
{
break; /// Simulate temperature is within range
}
 
- if (TempUp.Val >= test.TempLimLo && TempUp.Val <= test.TempLimHi &&
- TempDown.Val >= test.TempLimLo && TempDown.Val <= test.TempLimHi)
- {
+ if (TempUp.Val >= test.TempLimLo && TempUp.Val <= test.TempLimHi &&
+ TempDown.Val >= test.TempLimLo && TempDown.Val <= test.TempLimHi)
+ {
break; /// Temperature set withing required range
}
- }
- while (true);
- }
+ }
+ while (true);
+ }
 
///
/// Temperature is withing required range at this point
@@ -435,7 +447,7 @@ namespace TBF.Rig.TestMethods.StandingStartMassCollection
 
//-----------------------------------------------------------------
Bridge.OnActivity(this, Strings.Stopping_flow_for_the_fixed_start);
- //-----------------------------------------------------------------
+ //-----------------------------------------------------------------
State.Create(string.Format("{0}({1}) : Stop flow regulation", test.Method, test.Name))
.AddOperation(checkUiOp)
.AddOperations(readTempPressOps)
@@ -451,10 +463,11 @@ namespace TBF.Rig.TestMethods.StandingStartMassCollection
.AddOperation(checkUiOp)
.AddOperations(readTempPressOps)
.AddOperation(cBrd.CloseStartValveOp())
- .EnterState();
- do {
+ .EnterState();
+ do
+ {
e = StateMachine.WaitRunDevsRunOps();
- if (e.Contains(Event.Error)) { retVal = Event.Error; goto stopTest; }
+ if (e.Contains(Event.Error)) { retVal = Event.Error; goto stopTest; }
if (TestAndLogUiCmdStop(test, e)) { retVal = Event.UiCmdStop; goto stopTest; }
}
while (!e.Contains(Event.ValvesSet));
@@ -483,10 +496,10 @@ namespace TBF.Rig.TestMethods.StandingStartMassCollection
if (heatMetersPath == null) LogProcessDataHeader(processDataLogger, "Start mass");
else LogProcessDataHeaderHeatMeters(processDataLogger, "Start mass");
 
- ///
- /// Enter water meter begin states and read the start mass at the same time
- ///
- GenericDevices.IHasWMStatesForm dataEntryCmpnt = TbfComponents.FindComponent(StateMachine.Procedure.DataEntry) as GenericDevices.IHasWMStatesForm;
+ ///
+ /// Enter water meter begin states and read the start mass at the same time
+ ///
+ GenericDevices.IHasWMStatesForm dataEntryCmpnt = TbfComponents.FindComponent(StateMachine.Procedure.DataEntry) as GenericDevices.IHasWMStatesForm;
IOperation readStartMassOp = scale.ReadStableMassOp(ref StartMass, test.TimeFlow2Mass, test.MassMethod, test.MassRepeats, test.MassSpread);
 
if (dataEntryCmpnt != null)
@@ -515,7 +528,7 @@ namespace TBF.Rig.TestMethods.StandingStartMassCollection
triggerValve = roi.GetValve();
if (triggerValve != null && !triggerSend)
{
- OpenValveGrabImage(cBrd,testInProgress, triggerValve, e,
+ OpenValveGrabImage(cBrd, testInProgress, triggerValve, e,
string.Format("{0}({1}) : Grabbing images - valve open", test.Method, test.Name));
triggerSend = true;
}
@@ -533,27 +546,28 @@ namespace TBF.Rig.TestMethods.StandingStartMassCollection
}
}
state2.EnterState();
- do {
+ do
+ {
e = StateMachine.WaitRunDevsRunOps();
 
Bridge.OnTestProgress(this, new TestProgressEventArgs(test, repetitionNr, Progress.Test));
 
- if (e.Contains(Event.Error)) { retVal = Event.Error; break; }
+ if (e.Contains(Event.Error)) { retVal = Event.Error; break; }
if (TestAndLogUiCmdStop(test, e)) { retVal = Event.UiCmdStop; break; }
}
while (e.Contains(Event.CameraBusy));
 
(dataEntryCmpnt as GenericDevices.IDataEntryForCamera).StartImages = startImages;
}
-
+
///valve trigger camera close
if (triggerValve != null)
{
- CloseValveGrabImage(cBrd,testInProgress,triggerValve, e,
+ CloseValveGrabImage(cBrd, testInProgress, triggerValve, e,
string.Format("{0}({1}) : Grabbing images - valve close", test.Method, test.Name));
}
///////
-
+
 
Bridge.OnActivity(this, Strings.Enter_water_meter_data);
long readStartTime = StateMachine.Time;
@@ -564,13 +578,14 @@ namespace TBF.Rig.TestMethods.StandingStartMassCollection
.AddOperation((dataEntryCmpnt as GenericDevices.IHasWMStatesForm).ShowTestStartFormOp(sensPath.RegisterReaders))
.AddOperation(processDataLoggingOp)
.EnterState();
- do {
+ do
+ {
e = StateMachine.WaitRunDevsRunOps();
if (TestAndLogUiCmdStop(test, e)) { retVal = Event.UiCmdStop; goto stopTest; }
}
while (!e.Contains(Event.ModelessFormClosed));
long readEndTime = StateMachine.Time;
-
+
log.Debug("Read poseidon - took:" + (readEndTime - readStartTime));
 
if (heatMetersTestParams != null)
@@ -612,7 +627,7 @@ namespace TBF.Rig.TestMethods.StandingStartMassCollection
{
(rr as Rig.Network.Camera.RoiForFixedStartKeyence.Roi).BeginWMState =
dataEntryCmpnt.WMStartState(i);
- log.DebugFormat(" StandingStartMassCollectionSeq.cs - BeginWMState [{0}] -> RoiForFixedStartKeyence.Roi",dataEntryCmpnt.WMStartState(i));
+ log.DebugFormat(" StandingStartMassCollectionSeq.cs - BeginWMState [{0}] -> RoiForFixedStartKeyence.Roi", dataEntryCmpnt.WMStartState(i));
}
if (rr is Rig.Network.Camera.RoiForFixedStartCJMS11.Roi)
(rr as Rig.Network.Camera.RoiForFixedStartCJMS11.Roi).BeginWMState = dataEntryCmpnt.WMStartState(i);
@@ -638,7 +653,7 @@ namespace TBF.Rig.TestMethods.StandingStartMassCollection
string destFName = string.IsNullOrEmpty((dataEntryCmpnt as IDataEntryForCamera).TestStartImgName(i, testName))
? fileName : (dataEntryCmpnt as IDataEntryForCamera).TestStartImgName(i, testName);
File.Copy(Path.Combine(srcDir, fileName), Path.Combine(destDir, destFName), true);
- log.DebugFormat("Save images sourceFile: {0}, destFile: {1} ",Path.Combine(srcDir, fileName), Path.Combine(destDir, destFName));
+ log.DebugFormat("Save images sourceFile: {0}, destFile: {1} ", Path.Combine(srcDir, fileName), Path.Combine(destDir, destFName));
}
}
catch (Exception exc)
@@ -681,7 +696,8 @@ namespace TBF.Rig.TestMethods.StandingStartMassCollection
.AddOperation(scale.ReadStableMassOp(ref StartMass, test.TimeFlow2Mass, test.MassMethod, test.MassRepeats, test.MassSpread))
.AddOperation(processDataLoggingOp)
.EnterState();
- do {
+ do
+ {
e = StateMachine.WaitRunDevsRunOps();
if (e.Contains(Event.Error)) { retVal = Event.Error; goto stopTest; }
if (TestAndLogUiCmdStop(test, e)) { retVal = Event.UiCmdStop; goto stopTest; }
@@ -724,11 +740,12 @@ namespace TBF.Rig.TestMethods.StandingStartMassCollection
.AddOperation(controlFlowOp)
.AddOperation(processDataLoggingOp)
.EnterState();
- do {
+ do
+ {
e = StateMachine.WaitRunDevsRunOps();
if (e.Contains(Event.OpArgumentError)) { retVal = Event.OpArgumentError; goto stopTest; }
- if (e.Contains(Event.Error)) { retVal = Event.Error; goto stopTest; }
- if (TestAndLogUiCmdStop(test, e)) { retVal = Event.UiCmdStop; goto stopTest; }
+ if (e.Contains(Event.Error)) { retVal = Event.Error; goto stopTest; }
+ if (TestAndLogUiCmdStop(test, e)) { retVal = Event.UiCmdStop; goto stopTest; }
 
/// Show remaining time
if ((remainingTime = Math.Max(estimtdEndTime - StateMachine.Time, 0)) > 60)
@@ -767,8 +784,8 @@ namespace TBF.Rig.TestMethods.StandingStartMassCollection
 
Bridge.OnTestProgress(this, new TestProgressEventArgs(test, repetitionNr, Progress.Test));
}
- while ((cBrd.DebugLevel==DebugMode.Simulate && !e.Contains(Event.FlowReached)) ||
- (cBrd.DebugLevel!=DebugMode.Simulate && cBrd.RefPulses < initialPulsesCount + totalPulses && !e.Contains(Event.TestCompleted) && !e.Contains(Event.Next)));
+ while ((cBrd.DebugLevel == DebugMode.Simulate && !e.Contains(Event.FlowReached)) ||
+ (cBrd.DebugLevel != DebugMode.Simulate && cBrd.RefPulses < initialPulsesCount + totalPulses && !e.Contains(Event.TestCompleted) && !e.Contains(Event.Next)));
 
/// Measurement loop end
log.WarnFormat("Start valve switch time on test start = {0} ms", cBrd.ValveOpenCloseTime);
@@ -783,7 +800,8 @@ namespace TBF.Rig.TestMethods.StandingStartMassCollection
.AddOperation(cBrd.CloseStartValveOp(timeStampEnd, stopSwitchTime))
.AddOperation(processDataLoggingOp)
.EnterState();
- do {
+ do
+ {
e = StateMachine.WaitRunDevsRunOps();
if (e.Contains(Event.Error)) { retVal = Event.Error; goto stopTest; }
}
@@ -807,9 +825,10 @@ namespace TBF.Rig.TestMethods.StandingStartMassCollection
.AddOperation(new Operations.TimerOp(StableMassMsrmntTimeoutSec))
.AddOperation(processDataLoggingOp)
.EnterState();
- do {
+ do
+ {
e = StateMachine.WaitRunDevsRunOps();
- if (e.Contains(Event.Error)) { retVal = Event.Error; goto stopTest; }
+ if (e.Contains(Event.Error)) { retVal = Event.Error; goto stopTest; }
if (TestAndLogUiCmdStop(test, e)) { retVal = Event.UiCmdStop; goto stopTest; }
if (e.Contains(Event.ScaleTimeout))
{
@@ -844,7 +863,7 @@ namespace TBF.Rig.TestMethods.StandingStartMassCollection
double buoyancy = Formulas.Buoyancy();
double massOfEvaporatedWater = (double)(tMass2 - tMass1) * outPath.Scale.EvaporationRate(TempDivStat.Average);
double volumeCTV = 1000.0 * buoyancy * (massEnd - massStart + massOfEvaporatedWater) / densityOut;
- if (debugLevel == Common.DebugMode.Simulate) volumeCTV = test.Volume;
+ if (debugLevel == Common.DebugMode.Simulate) volumeCTV = test.Volume;
 
double refEnergy = Energy.Sum * volumeCTV / VolumeForEnergy.Sum; /// [J]=[J]*[l]/[l]
 
@@ -853,33 +872,33 @@ namespace TBF.Rig.TestMethods.StandingStartMassCollection
///
if (dataEntryCmpnt != null)
{
- string fileName = string.Format("{0}-{1}-end.bmp", test.Name, repetitionNr); //string.Format("{0}-end.bmp", test.Name);
-
+ string fileName = string.Format("{0}-{1}-end.bmp", test.Name, repetitionNr); //string.Format("{0}-end.bmp", test.Name);
+
IValve triggerValve = null;
bool triggerSend = false;
- if (dataEntryCmpnt is GenericDevices.IDataEntryForCamera)
- {
- string[] endImages = new string[sensPath.RegisterReaders.Length];
-
- State state2 = State.Create(string.Format("{0}({1}) : Grabbing images", test.Method, test.Name))
- .AddOperation(checkUiOp);
- for (int i = 0; i < sensPath.RegisterReaders.Length; i++)
- {
- GenericDevices.IRegReaderStillCamera roi = sensPath.RegisterReaders[i] as GenericDevices.IRegReaderStillCamera;
- if (roi != null)
- {
+ if (dataEntryCmpnt is GenericDevices.IDataEntryForCamera)
+ {
+ string[] endImages = new string[sensPath.RegisterReaders.Length];
+
+ State state2 = State.Create(string.Format("{0}({1}) : Grabbing images", test.Method, test.Name))
+ .AddOperation(checkUiOp);
+ for (int i = 0; i < sensPath.RegisterReaders.Length; i++)
+ {
+ GenericDevices.IRegReaderStillCamera roi = sensPath.RegisterReaders[i] as GenericDevices.IRegReaderStillCamera;
+ if (roi != null)
+ {
///if exist valve trigger camera open
triggerValve = roi.GetValve();
if (triggerValve != null && !triggerSend)
{
- OpenValveGrabImage(cBrd,testInProgress,triggerValve, e,
+ OpenValveGrabImage(cBrd, testInProgress, triggerValve, e,
string.Format("{0}({1}) : Grabbing images - valve open", test.Method, test.Name));
triggerSend = true;
}
- string directory = Path.Combine(Program.TempImagesDir, BatchRslts.Batch.BatchNr.ToString(), (i + 1).ToString());
- Directory.CreateDirectory(directory);
- endImages[i] = Path.Combine(directory, fileName);
- state2.AddOperation(roi.GrabImageOp(endImages[i]));
+ string directory = Path.Combine(Program.TempImagesDir, BatchRslts.Batch.BatchNr.ToString(), (i + 1).ToString());
+ Directory.CreateDirectory(directory);
+ endImages[i] = Path.Combine(directory, fileName);
+ state2.AddOperation(roi.GrabImageOp(endImages[i]));
state2.AddOperation(testInProgress);
}
else
@@ -890,47 +909,49 @@ namespace TBF.Rig.TestMethods.StandingStartMassCollection
endImages[i] = Path.Combine(directory, fileName);
}
}
- state2.EnterState();
- do {
- e = StateMachine.WaitRunDevsRunOps();
+ state2.EnterState();
+ do
+ {
+ e = StateMachine.WaitRunDevsRunOps();
+
+ Bridge.OnTestProgress(this, new TestProgressEventArgs(test, repetitionNr, Progress.Test));
 
- Bridge.OnTestProgress(this, new TestProgressEventArgs(test, repetitionNr, Progress.Test));
+ if (e.Contains(Event.Error)) { retVal = Event.Error; break; }
+ if (TestAndLogUiCmdStop(test, e)) { retVal = Event.UiCmdStop; break; }
+ }
+ while (e.Contains(Event.CameraBusy));
 
- if (e.Contains(Event.Error)) { retVal = Event.Error; break; }
- if (TestAndLogUiCmdStop(test, e)) { retVal = Event.UiCmdStop; break; }
- }
- while (e.Contains(Event.CameraBusy));
+ (dataEntryCmpnt as GenericDevices.IDataEntryForCamera).EndImages = endImages;
+ }
 
- (dataEntryCmpnt as GenericDevices.IDataEntryForCamera).EndImages = endImages;
- }
-
///valve trigger camera close
if (triggerValve != null)
{
- CloseValveGrabImage(cBrd,testInProgress, triggerValve, e,
+ CloseValveGrabImage(cBrd, testInProgress, triggerValve, e,
string.Format("{0}({1}) : Grabbing images - valve close", test.Method, test.Name));
}
///////
-
- Bridge.OnActivity(this, Strings.Enter_water_meter_data);
+
+ Bridge.OnActivity(this, Strings.Enter_water_meter_data);
State state = State.Create(string.Format("{0}({1}) : Entering the end-state", test.Method, test.Name));
if (heatMetersTestParams != null && dataEntryCmpnt is GenericDevices.IHasHeatMtrStatesForm)
{
state.AddOperation((dataEntryCmpnt as GenericDevices.IHasHeatMtrStatesForm).
- ShowTestEndFormOp(sensPath.RegisterReaders,
- volumeCTV, test.ErrLimLo + test.Uncertainty, test.ErrLimHi - test.Uncertainty,
+ ShowTestEndFormOp(sensPath.RegisterReaders,
+ volumeCTV, test.ErrLimLo + test.Uncertainty, test.ErrLimHi - test.Uncertainty,
refEnergy, test.ErrLimLo + test.Uncertainty, test.ErrLimHi - test.Uncertainty));
}
else
{
- state.AddOperation(dataEntryCmpnt.ShowTestEndFormOp(sensPath.RegisterReaders,
- volumeCTV, test.ErrLimLo + test.Uncertainty, test.ErrLimHi - test.Uncertainty));
+ state.AddOperation(dataEntryCmpnt.ShowTestEndFormOp(sensPath.RegisterReaders,
+ volumeCTV, test.ErrLimLo + test.Uncertainty, test.ErrLimHi - test.Uncertainty));
}
state.AddOperation(checkUiOp)
.AddOperations(readTempPressOps)
.AddOperation(testInProgress)
.EnterState();
- do {
+ do
+ {
e = StateMachine.WaitRunDevsRunOps();
if (TestAndLogUiCmdStop(test, e)) { retVal = Event.UiCmdStop; goto stopTest; }
}
@@ -958,41 +979,41 @@ namespace TBF.Rig.TestMethods.StandingStartMassCollection
{
for (int i = 0; i < waterMetersCount; i++)
{
- GenericDevices.IRegReader rr = sensPath.RegisterReaders[i];
-
+ GenericDevices.IRegReader rr = sensPath.RegisterReaders[i];
+
if (rr is ICommonRegReader)
(rr as ICommonRegReader).EndWMState = dataEntryCmpnt.WMEndState(i);
 
 
- if (rr is Rig.RegisterReaders.StandingStartStop.RegisterReader)
- (rr as Rig.RegisterReaders.StandingStartStop.RegisterReader).EndWMState = dataEntryCmpnt.WMEndState(i);
+ if (rr is Rig.RegisterReaders.StandingStartStop.RegisterReader)
+ (rr as Rig.RegisterReaders.StandingStartStop.RegisterReader).EndWMState = dataEntryCmpnt.WMEndState(i);
 
- if (rr is Rig.Network.Camera.RoiForFixedStart.Roi)
- (rr as Rig.Network.Camera.RoiForFixedStart.Roi).EndWMState = dataEntryCmpnt.WMEndState(i);
+ if (rr is Rig.Network.Camera.RoiForFixedStart.Roi)
+ (rr as Rig.Network.Camera.RoiForFixedStart.Roi).EndWMState = dataEntryCmpnt.WMEndState(i);
 
if (rr is Rig.Network.Camera.RoiForFixedStartKeyence.Roi)
{
(rr as Rig.Network.Camera.RoiForFixedStartKeyence.Roi).EndWMState =
dataEntryCmpnt.WMEndState(i);
- log.DebugFormat(" StandingStartMassCollectionSeq.cs - EndWMState [{0}] -> RoiForFixedStartKeyence.Roi",dataEntryCmpnt.WMEndState(i));
+ log.DebugFormat(" StandingStartMassCollectionSeq.cs - EndWMState [{0}] -> RoiForFixedStartKeyence.Roi", dataEntryCmpnt.WMEndState(i));
}
- if(rr is Rig.Network.Camera.RoiForFixedStartCJMS11.Roi)
+ if (rr is Rig.Network.Camera.RoiForFixedStartCJMS11.Roi)
(rr as Rig.Network.Camera.RoiForFixedStartCJMS11.Roi).EndWMState = dataEntryCmpnt.WMEndState(i);
 
}
}
 
- if (dataEntryCmpnt is IDataEntryForCamera && (dataEntryCmpnt as IDataEntryForCamera).SaveImages)
- {
+ if (dataEntryCmpnt is IDataEntryForCamera && (dataEntryCmpnt as IDataEntryForCamera).SaveImages)
+ {
log.Debug("Save images EndWMState...");
- /// SaveImages==true ... copy images to the directory that will be archived at the end of the cycle
- for (int i = 0; i < sensPath.RegisterReaders.Length; i++)
- {
- var roi = sensPath.RegisterReaders[i] as IRegReaderStillCamera;
- if (roi != null)
- {
- string srcDir = Path.Combine(Program.TempImagesDir, BatchRslts.Batch.BatchNr.ToString(), (i + 1).ToString());
- string destDir = Path.Combine(Program.ImagesDir, BatchRslts.Batch.BatchNr.ToString(), (i + 1).ToString());
+ /// SaveImages==true ... copy images to the directory that will be archived at the end of the cycle
+ for (int i = 0; i < sensPath.RegisterReaders.Length; i++)
+ {
+ var roi = sensPath.RegisterReaders[i] as IRegReaderStillCamera;
+ if (roi != null)
+ {
+ string srcDir = Path.Combine(Program.TempImagesDir, BatchRslts.Batch.BatchNr.ToString(), (i + 1).ToString());
+ string destDir = Path.Combine(Program.ImagesDir, BatchRslts.Batch.BatchNr.ToString(), (i + 1).ToString());
try
{
if (File.Exists(Path.Combine(srcDir, fileName)))
@@ -1001,7 +1022,7 @@ namespace TBF.Rig.TestMethods.StandingStartMassCollection
string destFName = string.IsNullOrEmpty((dataEntryCmpnt as IDataEntryForCamera).TestEndImgName(i, testName))
? fileName : (dataEntryCmpnt as IDataEntryForCamera).TestEndImgName(i, testName);
File.Copy(Path.Combine(srcDir, fileName), Path.Combine(destDir, destFName), true);
- log.DebugFormat("Save images sourceFile: {0}, destFile: {1} ",Path.Combine(srcDir, fileName), Path.Combine(destDir, destFName));
+ log.DebugFormat("Save images sourceFile: {0}, destFile: {1} ", Path.Combine(srcDir, fileName), Path.Combine(destDir, destFName));
}
}
catch (Exception exc)
@@ -1009,8 +1030,8 @@ namespace TBF.Rig.TestMethods.StandingStartMassCollection
log.ErrorFormat("Failed to copy image {0} to {1}: {2}", fileName, destDir, exc.Message);
}
}
- }
- }
+ }
+ }
 
//...MF...kvapkanie
//------------------------------------------------
@@ -1059,14 +1080,14 @@ namespace TBF.Rig.TestMethods.StandingStartMassCollection
 
/// Raw data
UpdateTempPressDensAmb(tstRslt);
- tstRslt.MethodClass = TbfComponents.FindComponent(test.Method).ClassName;
- tstRslt.StartTime = TestStartTime;
- tstRslt.EndTime = TestEndTime;
- tstRslt.FlowSetTime = flowSetTime;
- tstRslt.TestTime = Math.Max(1.0, DateTimeBox.DurationSec(timeStampStart, timeStampEnd)); /// Min. 1s to prevent division by zero
+ tstRslt.MethodClass = TbfComponents.FindComponent(test.Method).ClassName;
+ tstRslt.StartTime = TestStartTime;
+ tstRslt.EndTime = TestEndTime;
+ tstRslt.FlowSetTime = flowSetTime;
+ tstRslt.TestTime = Math.Max(1.0, DateTimeBox.DurationSec(timeStampStart, timeStampEnd)); /// Min. 1s to prevent division by zero
tstRslt.PulsesMaster = Convert.ToDouble(cBrd.RefPulses); /// Pulses of the master flow meter (test total)
tstRslt.MassStartRaw = StartMass.Val;
- tstRslt.MassEndRaw = EndMass.Val;
+ tstRslt.MassEndRaw = EndMass.Val;
tstRslt.TimeBtwnMassMsrmnts = tMass2 - tMass1;
 
/// Corrected values
@@ -1077,6 +1098,8 @@ namespace TBF.Rig.TestMethods.StandingStartMassCollection
/// Main results
tstRslt.VolumeCTV = volumeCTV; /// [l] 1000.0f is because density is in [kg/m3]
tstRslt.Flow = 3.6 * volumeCTV / tstRslt.TestTime; /// [m3/h]
+ tstRslt.MassCTV = massCTV; /// [kg] 1000.0f is because density is in [kg/m3]
+ tstRslt.MassFlow = 3.6 * massCTV / tstRslt.TestTime; /// [kg/h]
 
if (cBrd is ControlBoard.Uni.UniCB)
{
@@ -1085,6 +1108,7 @@ namespace TBF.Rig.TestMethods.StandingStartMassCollection
tstRslt.ConstMasterCorr = outPath.FlowMeter.LtrPerPulseCorrected(tstRslt.Flow, tstRslt.TempDownMean);
tstRslt.VolumeMaster = tstRslt.ConstMasterRaw * tstRslt.PulsesMaster; /// [l] volume from the master flow meter
tstRslt.ConstMaster = (tstRslt.VolumeMaster != 0) ? (tstRslt.ConstMasterRaw * tstRslt.VolumeCTV / tstRslt.VolumeMaster) : tstRslt.ConstMasterCorr;
+ tstRslt.MassConstMaster = (tstRslt.PulsesMaster != 0) ? (tstRslt.MassCTV / tstRslt.PulsesMaster) : tstRslt.ConstMasterCorr;
}
else
{
@@ -1095,11 +1119,12 @@ namespace TBF.Rig.TestMethods.StandingStartMassCollection
tstRslt.ConstMaster = 1;
}
tstRslt.ErrorMaster = Formulas.ErrorFromVolumes(tstRslt.VolumeMaster, tstRslt.VolumeCTV);
+ tstRslt.MassErrorMaster = Formulas.ErrorFromVolumes(tstRslt.VolumeMaster, tstRslt.MassCTV);
 
tstRslt.FlowMean = (float)RefFlowStat.Average;
- tstRslt.FlowStart = (float)RefFlowStat.First;
- tstRslt.FlowEnd = (float)RefFlowStat.Last;
- tstRslt.FlowMin = (float)RefFlowStat.Min;
+ tstRslt.FlowStart = (float)RefFlowStat.First;
+ tstRslt.FlowEnd = (float)RefFlowStat.Last;
+ tstRslt.FlowMin = (float)RefFlowStat.Min;
tstRslt.FlowMax = (float)RefFlowStat.Max;
 
tstRslt.DiverterStart = startSwitchTime.Val;
@@ -1124,7 +1149,7 @@ namespace TBF.Rig.TestMethods.StandingStartMassCollection
for (int isAux = 0; isAux <= 1; isAux++) /// 0=main, 1=aux
{
Results.Entities.MeterTestRslt meterRslt = (isAux == 0) ? mainMeterRslt : auxMeterRslt;
- GenericDevices.IRegReader regReader = sensPath.RegisterReaders[2 * i + isAux];
+ GenericDevices.IRegReader regReader = sensPath.RegisterReaders[2 * i + isAux];
 
if (meterRslt != null && regReader != null)
{
@@ -1166,63 +1191,63 @@ namespace TBF.Rig.TestMethods.StandingStartMassCollection
///
tstRslt.RefEnergy = Energy.Sum * tstRslt.VolumeCTV / VolumeForEnergy.Sum; /// [J] = [J] * [l] / [l]
 
- tstRslt.Custom1 = (float)TempRefHiStat.Average;
- tstRslt.Custom2 = (float)TempRefHiStat.First;
- tstRslt.Custom3 = (float)TempRefHiStat.Last;
- tstRslt.Custom4 = (float)TempRefHiStat.Min;
- tstRslt.Custom5 = (float)TempRefHiStat.Max;
- tstRslt.Custom6 = (float)TempRefLoStat.Average;
- tstRslt.Custom7 = (float)TempRefLoStat.First;
- tstRslt.Custom8 = (float)TempRefLoStat.Last;
- tstRslt.Custom9 = (float)TempRefLoStat.Min;
- tstRslt.Custom10 = (float)TempRefLoStat.Max;
+ tstRslt.Custom1 = (float)TempRefHiStat.Average;
+ tstRslt.Custom2 = (float)TempRefHiStat.First;
+ tstRslt.Custom3 = (float)TempRefHiStat.Last;
+ tstRslt.Custom4 = (float)TempRefHiStat.Min;
+ tstRslt.Custom5 = (float)TempRefHiStat.Max;
+ tstRslt.Custom6 = (float)TempRefLoStat.Average;
+ tstRslt.Custom7 = (float)TempRefLoStat.First;
+ tstRslt.Custom8 = (float)TempRefLoStat.Last;
+ tstRslt.Custom9 = (float)TempRefLoStat.Min;
+ tstRslt.Custom10 = (float)TempRefLoStat.Max;
 
for (int i = 0; i < BatchRslts.WMPositionsCount; i++)
{
if (!test.IsPartCompatible(Utils.PartNr(i + 1, BatchRslts.Batch.Compound))) continue;
 
Results.Entities.MeterTestRslt volumeRslt = BatchRslts.GetMeterTestRslt(testName, i, Common.CompoundMeterId.HeatMeterVolume);
- Results.Entities.MeterTestRslt energyRslt = BatchRslts.GetMeterTestRslt(testName, i, Common.CompoundMeterId.HeatMeterEnergy);
+ Results.Entities.MeterTestRslt energyRslt = BatchRslts.GetMeterTestRslt(testName, i, Common.CompoundMeterId.HeatMeterEnergy);
 
- GenericDevices.IRegReader volumeRegReader =
+ GenericDevices.IRegReader volumeRegReader =
(sensPath.RegisterReaders.Length > 2 * i) ? sensPath.RegisterReaders[2 * i] : null;
 
- GenericDevices.IRegReader energyRegReader =
+ GenericDevices.IRegReader energyRegReader =
(sensPath.RegisterReaders.Length > 2 * i + 1) ? sensPath.RegisterReaders[2 * i + 1] : null;
 
if (volumeRslt != null && volumeRegReader != null)
{
- volumeRslt.PulsesPerLiter = volumeRegReader.PulsesPerLtr;
- volumeRslt.VolumeStart = volumeRegReader.BeginWMState;
- volumeRslt.VolumeEnd = volumeRegReader.EndWMState;
- volumeRslt.VolumeMeter = volumeRslt.VolumeEnd - volumeRslt.VolumeStart;
- volumeRslt.VolumeRef = tstRslt.VolumeCTV;
- volumeRslt.PulsesMeter = volumeRslt.VolumeMeter;
- volumeRslt.PulsesMaster = tstRslt.PulsesMaster; /// <----------------- ???
+ volumeRslt.PulsesPerLiter = volumeRegReader.PulsesPerLtr;
+ volumeRslt.VolumeStart = volumeRegReader.BeginWMState;
+ volumeRslt.VolumeEnd = volumeRegReader.EndWMState;
+ volumeRslt.VolumeMeter = volumeRslt.VolumeEnd - volumeRslt.VolumeStart;
+ volumeRslt.VolumeRef = tstRslt.VolumeCTV;
+ volumeRslt.PulsesMeter = volumeRslt.VolumeMeter;
+ volumeRslt.PulsesMaster = tstRslt.PulsesMaster; /// <----------------- ???
volumeRslt.TestTime = tstRslt.TestTime;
 
volumeRslt.Error = Formulas.ErrorFromVolumes(volumeRslt.VolumeMeter, volumeRslt.VolumeRef);
- volumeRslt.Passed = !heatMetersTestParams.EvaluateVolume ||
- ((volumeRslt.Error >= test.GetErrLimLo(tstRslt.VolumeCTV, tstRslt.TestTime) + test.Uncertainty) &&
- (volumeRslt.Error <= test.GetErrLimHi(tstRslt.VolumeCTV, tstRslt.TestTime) - test.Uncertainty) &&
- (tstRslt.ErrorFlags == 0));
- volumeRslt.TestDone = true;
+ volumeRslt.Passed = !heatMetersTestParams.EvaluateVolume ||
+ ((volumeRslt.Error >= test.GetErrLimLo(tstRslt.VolumeCTV, tstRslt.TestTime) + test.Uncertainty) &&
+ (volumeRslt.Error <= test.GetErrLimHi(tstRslt.VolumeCTV, tstRslt.TestTime) - test.Uncertainty) &&
+ (tstRslt.ErrorFlags == 0));
+ volumeRslt.TestDone = true;
tstRslt.TestDone = true;
}
 
if (energyRslt != null && energyRegReader != null && dataEntryCmpnt is GenericDevices.IHasHeatMtrStatesForm)
- {
- volumeRslt.PulsesPerLiter = energyRegReader.PulsesPerLtr;
- energyRslt.VolumeStart = (dataEntryCmpnt as GenericDevices.IHasHeatMtrStatesForm).EnergyStartState(i);
- energyRslt.VolumeEnd = (dataEntryCmpnt as GenericDevices.IHasHeatMtrStatesForm).EnergyEndState(i);
- energyRslt.VolumeMeter = energyRslt.VolumeEnd - energyRslt.VolumeStart;
- energyRslt.VolumeRef = tstRslt.RefEnergy;
- energyRslt.PulsesMeter = energyRslt.VolumeMeter;
+ {
+ volumeRslt.PulsesPerLiter = energyRegReader.PulsesPerLtr;
+ energyRslt.VolumeStart = (dataEntryCmpnt as GenericDevices.IHasHeatMtrStatesForm).EnergyStartState(i);
+ energyRslt.VolumeEnd = (dataEntryCmpnt as GenericDevices.IHasHeatMtrStatesForm).EnergyEndState(i);
+ energyRslt.VolumeMeter = energyRslt.VolumeEnd - energyRslt.VolumeStart;
+ energyRslt.VolumeRef = tstRslt.RefEnergy;
+ energyRslt.PulsesMeter = energyRslt.VolumeMeter;
energyRslt.PulsesMaster = tstRslt.PulsesMaster; /// <----------------- ???
 
energyRslt.Error = Formulas.ErrorFromVolumes(energyRslt.VolumeMeter, energyRslt.VolumeRef);
- energyRslt.Passed = (energyRslt.Error >= heatMetersTestParams.ErrorLimitLo)
- && (energyRslt.Error <= heatMetersTestParams.ErrorLimitHi)
+ energyRslt.Passed = (energyRslt.Error >= heatMetersTestParams.ErrorLimitLo)
+ && (energyRslt.Error <= heatMetersTestParams.ErrorLimitHi)
&& (tstRslt.ErrorFlags == 0);
energyRslt.TestDone = true;
tstRslt.TestDone = true;
@@ -1244,18 +1269,75 @@ namespace TBF.Rig.TestMethods.StandingStartMassCollection
if (meterRslt != null && regReader != null)
{
meterRslt.RegReaderType = (int)regReader.RegisterReaderType;
- meterRslt.PulsesPerLiter = regReader.PulsesPerLtr;
+
+
+ ComponentProcedure procParamsEntity = test.Procedure.GetProcedureParamsEntity(regReader.Name);
+
+ try
+ {
+ if (regReader.RegisterReaderType == RegisterReaderType.Pulses || regReader.RegisterReaderType == RegisterReaderType.Manual)
+ {
+ XmlSerializer Serializer = XmlSerializer.FromTypes(new[] { typeof(RRProcParams) })[0];
+ RRProcParams tmp = Serializer.Deserialize(new StringReader(procParamsEntity.Parameters.ToString())) as RRProcParams;
+ regReader.PulsesPerLtr = tmp.PulsesPerLtr;
+ regReader.QuantityUnits = tmp.Units;
+ }
+ else
+ {
+ //MessageBox.Show("Cannot create or initialize a printer", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
+ }
+ }
+ catch (Exception ex)
+ {
+ /*log.DebugFormat(
+ "Error during Procedure parameters deserialization. CmpntName='{0}', Procedure='{1}', Parameters='{2}', Exception: {3}",
+ dbEntity?.CmpntName,
+ dbEntity?.Procedure,
+ dbEntity?.Parameters,
+ ex
+ );*/
+ }
+
+ meterRslt.PulsesPerLiter = regReader.PulsesPerLtr;//...MF 11.12.2025 toto chybalo, v .csv bol stlpec naplneny nulami
+ meterRslt.QuantityUnits = regReader.QuantityUnits;
meterRslt.VolumeStart = regReader.BeginWMState;
meterRslt.VolumeEnd = regReader.EndWMState;
meterRslt.VolumeMeter = Math.Abs(meterRslt.VolumeEnd - meterRslt.VolumeStart);
- meterRslt.VolumeRef = tstRslt.VolumeCTV; /// liter
+ meterRslt.MassMeter = Math.Abs(meterRslt.VolumeEnd - meterRslt.VolumeStart);
+ meterRslt.VolumeRef = tstRslt.VolumeCTV; /// liter
+ meterRslt.MassRef = tstRslt.MassCTV; /// kg
meterRslt.PulsesMeter = meterRslt.VolumeMeter;
meterRslt.PulsesMaster = tstRslt.PulsesMaster;
meterRslt.TestTime = tstRslt.TestTime;
- meterRslt.Error = Formulas.ErrorFromVolumes(meterRslt.VolumeMeter, meterRslt.VolumeRef);
- meterRslt.Passed = (meterRslt.Error >= test.GetErrLimLo(tstRslt.VolumeCTV, tstRslt.TestTime) + test.Uncertainty)
+
+ //meterRslt.Error = Formulas.ErrorFromVolumes(meterRslt.VolumeMeter, meterRslt.VolumeRef);
+ double Error = 0;
+ if (meterRslt.GetQuantityFromUnits() == "Mass")
+ Error = Formulas.ErrorFromVolumes(meterRslt.MassMeter, meterRslt.MassRef);
+ else
+ Error = Formulas.ErrorFromVolumes(meterRslt.VolumeMeter, meterRslt.VolumeRef);
+
+ meterRslt.Error = Error;
+
+ /*meterRslt.Passed = (meterRslt.Error >= test.GetErrLimLo(tstRslt.VolumeCTV, tstRslt.TestTime) + test.Uncertainty)
&& (meterRslt.Error <= test.GetErrLimHi(tstRslt.VolumeCTV, tstRslt.TestTime) - test.Uncertainty)
- && (tstRslt.ErrorFlags == 0);
+ && (tstRslt.ErrorFlags == 0);*/
+ var ErrLimLo_Volume = test.GetErrLimLo(tstRslt.VolumeCTV, tstRslt.TestTime);
+ var ErrLimHi_Volume = test.GetErrLimHi(tstRslt.VolumeCTV, tstRslt.TestTime);
+ var ErrLimLo_Mass = test.GetErrLimLo(tstRslt.MassCTV, tstRslt.TestTime);
+ var ErrLimHi_Mass = test.GetErrLimHi(tstRslt.MassCTV, tstRslt.TestTime);
+
+ bool Passed;
+ if (meterRslt.GetQuantityFromUnits() == "Mass")
+ Passed = (meterRslt.Error >= ErrLimLo_Volume + test.Uncertainty) &&
+ (meterRslt.Error <= ErrLimHi_Volume - test.Uncertainty) &&
+ (tstRslt.ErrorFlags == 0);
+ else
+ Passed = (meterRslt.Error >= ErrLimLo_Mass + test.Uncertainty) &&
+ (meterRslt.Error <= ErrLimHi_Mass - test.Uncertainty) &&
+ (tstRslt.ErrorFlags == 0);
+
+ meterRslt.Passed = Passed;
meterRslt.TestDone = true;
tstRslt.TestDone = true;
if (regReader is ICommonRegReader regReaderCommon)
@@ -1265,7 +1347,7 @@ namespace TBF.Rig.TestMethods.StandingStartMassCollection
{
meterRslt.WaterMeter.SerialNr = regReaderCommon.SerialNr;
}
-
+
}
}
}
@@ -1308,9 +1390,9 @@ namespace TBF.Rig.TestMethods.StandingStartMassCollection
 
if (stopCycle) retVal = Event.ErrorFlagsStop;
 
- stopTest:
+ stopTest:
 
- StopRecordingStatistics();
+ StopRecordingStatistics();
 
///
/// Quit this sequence