WMPulses[], WMRefPulses[], WMTimes[] removed from SequenceBase, operations, etc., clean-up.

This commit is contained in:
Milan Hanajik
2016-02-13 17:39:38 +01:00
parent e94e16c9e6
commit 6a159f773e
18 changed files with 48 additions and 297 deletions
@@ -35,8 +35,8 @@ namespace TBF.BenchControl.Cameras.CameraRoi
public int WMRefPulses { get { return wmRefPulses; } } public int WMRefPulses { get { return wmRefPulses; } }
public double WMVolume { get { return ltrsPerPulse * (double)wmPulses; } } public double WMVolume { get { return ltrsPerPulse * (double)wmPulses; } }
int wmPulses; public int wmPulses;
int wmRefPulses; public int wmRefPulses;
public CameraRoi() public CameraRoi()
@@ -77,30 +77,9 @@ namespace TBF.BenchControl.Cameras.CameraRoi
/// </summary> /// </summary>
/// <param name="pulses">Reference to a variable for the water meter pulses</param> /// <param name="pulses">Reference to a variable for the water meter pulses</param>
/// <returns>ReadWaterMeter instance reference casted to IOperaton</returns> /// <returns>ReadWaterMeter instance reference casted to IOperaton</returns>
public IOperation ReadRegisterOp(ref IntBox pulses) public IOperation ReadRegisterOp()
{ {
return new ReadRegisterOp(this, ref pulses); return new ReadRegisterOp(this);
}
/// <summary>
/// Events: Event.ReadRegisterDone, Event.Error
/// </summary>
/// <param name="pulses">Reference to a variable for the water meter pulses</param>
/// <param name="pulses">Reference to a variable for the related reference flow meter pulses</param>
/// <returns>ReadWaterMeter instance reference casted to IOperaton</returns>
public IOperation ReadRegisterOp(ref IntBox pulses, ref IntBox refPulses)
{
return new ReadRegisterOp(this, ref pulses, ref refPulses);
}
/// <summary>
/// Events: ReadReferenceDone, Error
/// </summary>
/// <param name="pulses">Reference to a variable for the water meter pulses</param>
/// <returns>ReadWaterMeter instance reference casted to IOperaton</returns>
public IOperation ReadReferenceForRegisterOp(ref IntBox pulses, ref IntBox refPulses)
{
return null; /// not implemented
} }
/// <summary> /// <summary>
@@ -13,47 +13,28 @@ namespace TBF.BenchControl.Cameras.CameraRoi
public override string ToString() { return string.Format("ReadRegisterOp({0})", cameraRoi.Cfg.Name); } public override string ToString() { return string.Format("ReadRegisterOp({0})", cameraRoi.Cfg.Name); }
/// Set by the constructor /// Set by the constructor
readonly GenericDevices.ICameraRoi cameraRoi; readonly CameraRoi cameraRoi;
readonly BenchControl.Cameras.IdcCamera.IdcCamera camera; readonly BenchControl.Cameras.IdcCamera.IdcCamera camera;
IntBox pulses;
IntBox refPulses;
/// <summary> /// <summary>
/// Events: Event.ReadRegisterDone or Event.Error /// Events: Event.ReadRegisterDone or Event.Error
/// </summary> /// </summary>
/// <param name="reader">Register reader reference</param> /// <param name="reader">Register reader reference</param>
/// <param name="pulses">Reference to a field with the water meter pulses</param> /// <param name="pulses">Reference to a field with the water meter pulses</param>
public ReadRegisterOp(GenericDevices.ICameraRoi cameraRoi, ref IntBox pulses) public ReadRegisterOp(CameraRoi cameraRoi)
{ {
this.cameraRoi = cameraRoi; this.cameraRoi = cameraRoi;
if (cameraRoi == null) throw new ArgumentNullException("reader is null or it is not IdcCamera"); if (cameraRoi == null) throw new ArgumentNullException("reader is null or it is not IdcCamera");
camera = cameraRoi.Camera as BenchControl.Cameras.IdcCamera.IdcCamera; camera = cameraRoi.Camera as BenchControl.Cameras.IdcCamera.IdcCamera;
this.pulses = pulses;
log.Debug(this.ToString()); log.Debug(this.ToString());
} }
/// <summary>
/// Events: Event.ReadRegisterDone or Event.Error
/// </summary>
/// <param name="cameraRoi">Register reader reference</param>
/// <param name="pulses">Reference to a Box with the water meter pulses</param>
/// <param name="refPulses">Reference to a Box with the reference flow meter pulses synchronized with the water meter</param>
public ReadRegisterOp(GenericDevices.ICameraRoi cameraRoi, ref IntBox pulses, ref IntBox refPulses)
: this(cameraRoi, ref pulses)
{
this.refPulses = refPulses;
log.Debug(this.ToString());
}
private void ReadPulses() private void ReadPulses()
{ {
pulses.Val = camera.Idc100.Pulses; cameraRoi.wmPulses = camera.Idc100.Pulses;
if (refPulses != null) cameraRoi.wmRefPulses = StateMachine.ControlBoard.EtPulses(0);
{
refPulses.Val = StateMachine.ControlBoard.EtPulses(0);
}
} }
/// <summary>Start this operation</summary> /// <summary>Start this operation</summary>
@@ -28,8 +28,6 @@ namespace TBF.BenchControl.Elde.FixedStartRegisterReader
int wmPulses; int wmPulses;
int wmRefPulses; int wmRefPulses;
IntBox pulsesBox;
IntBox refPulsesBox;
readonly ControlBoardDev controlBoard; readonly ControlBoardDev controlBoard;
@@ -67,35 +65,16 @@ namespace TBF.BenchControl.Elde.FixedStartRegisterReader
/// <summary> /// <summary>
/// Events: Event.ReadRegisterDone, Event.Error /// Events: Event.ReadRegisterDone, Event.Error
/// </summary> /// </summary>
/// <param name="pulsesBox">Reference to a variable for the water meter pulses</param>
/// <returns>ReadWaterMeter instance reference casted to IOperaton</returns> /// <returns>ReadWaterMeter instance reference casted to IOperaton</returns>
public IOperation ReadRegisterOp(ref IntBox pulsesBox) public IOperation ReadRegisterOp()
{ {
this.pulsesBox = pulsesBox;
return this; return this;
} }
/// <summary>
/// Events: Event.ReadRegisterDone, Event.Error
/// </summary>
/// <param name="pulsesBox">Reference to a variable for the water meter pulses</param>
/// <param name="refPulsesBox">Reference to a variable for the related reference flowmeter pulses</param>
/// <returns>Reference to operation object instance</returns>
public IOperation ReadRegisterOp(ref IntBox pulsesBox, ref IntBox refPulsesBox)
{
this.pulsesBox = pulsesBox;
this.refPulsesBox = refPulsesBox;
return this;
}
private void ReadPulses() private void ReadPulses()
{ {
wmPulses = (int)(EndWMState - BeginWMState); /// TODO: replace 0 wmPulses = (int)(EndWMState - BeginWMState); /// TODO: replace 0
wmRefPulses = (int)controlBoard.EtPulses(0); wmRefPulses = (int)controlBoard.EtPulses(0);
pulsesBox.Val = wmPulses;
if (refPulsesBox != null) refPulsesBox.Val = wmRefPulses;
} }
/// <summary>Start this operation</summary> /// <summary>Start this operation</summary>
@@ -27,8 +27,6 @@ namespace TBF.BenchControl.Elde.RegisterReader
int wmPulses; int wmPulses;
int wmRefPulses; int wmRefPulses;
IntBox pulsesBox;
IntBox refPulsesBox;
/// <summary> This is to cope with counter overflow </summary> /// <summary> This is to cope with counter overflow </summary>
int lastPulses; int lastPulses;
@@ -71,28 +69,12 @@ namespace TBF.BenchControl.Elde.RegisterReader
/// <summary> /// <summary>
/// Events: Event.ReadRegisterDone, Event.Error /// Events: Event.ReadRegisterDone, Event.Error
/// </summary> /// </summary>
/// <param name="pulsesBox">Reference to a variable for the water meter pulses</param>
/// <returns>ReadWaterMeter instance reference casted to IOperaton</returns> /// <returns>ReadWaterMeter instance reference casted to IOperaton</returns>
public IOperation ReadRegisterOp(ref IntBox pulsesBox) public IOperation ReadRegisterOp()
{ {
this.pulsesBox = pulsesBox;
return this; return this;
} }
/// <summary>
/// Events: Event.ReadRegisterDone, Event.Error
/// </summary>
/// <param name="pulsesBox">Reference to a variable for the water meter pulses</param>
/// <param name="refPulsesBox">Reference to a variable for the related reference flowmeter pulses</param>
/// <returns>Reference to operation object instance</returns>
public IOperation ReadRegisterOp(ref IntBox pulsesBox, ref IntBox refPulsesBox)
{
this.pulsesBox = pulsesBox;
this.refPulsesBox = refPulsesBox;
return this;
}
private void ReadPulses() private void ReadPulses()
{ {
if (!lastPulsesValid) if (!lastPulsesValid)
@@ -120,9 +102,6 @@ namespace TBF.BenchControl.Elde.RegisterReader
wmPulses = lastPulses; wmPulses = lastPulses;
wmRefPulses = (int)controlBoard.EtPulses(Position); wmRefPulses = (int)controlBoard.EtPulses(Position);
pulsesBox.Val = wmPulses;
if (refPulsesBox != null) refPulsesBox.Val = wmRefPulses;
} }
/// <summary>Start this operation</summary> /// <summary>Start this operation</summary>
@@ -20,7 +20,6 @@ namespace TBF.BenchControl.GenericDevices
void TestCompleted(); /// To be used when the test is completed ... void TestCompleted(); /// To be used when the test is completed ...
/// ... for more accurate WMPulses, WMRefPulses calculation /// ... for more accurate WMPulses, WMRefPulses calculation
IOperation ReadRegisterOp(ref IntBox pulses); IOperation ReadRegisterOp();
IOperation ReadRegisterOp(ref IntBox pulses, ref IntBox refPulses);
} }
} }
@@ -15,12 +15,6 @@ namespace TBF.BenchControl.Operations
/// Set by the constructor /// Set by the constructor
int readersCount; int readersCount;
int[] iPulses;
int[] iRefPulses;
double[] dTimes;
IntBox[] pulses;
IntBox[] refPulses;
DoubleBox[] times;
IOperation[] readRegOps; IOperation[] readRegOps;
/// <summary> /// <summary>
@@ -28,117 +22,21 @@ namespace TBF.BenchControl.Operations
/// </summary> /// </summary>
/// <param name="register">Register reader reference</param> /// <param name="register">Register reader reference</param>
/// <param name="pulses">Reference to the water meter register state in pulses</param> /// <param name="pulses">Reference to the water meter register state in pulses</param>
public ReadMoreRegistersOp(GenericDevices.IRegisterReader[] readers, ref int[] iPulses) public ReadMoreRegistersOp(GenericDevices.IRegisterReader[] readers)
{ {
if (readers == null) throw new ArgumentNullException("readers"); if (readers == null) throw new ArgumentNullException("readers");
readersCount = readers.Length; readersCount = readers.Length;
if (iPulses == null || iPulses.Length != readersCount)
{
throw new ArgumentException("iPulses");
}
this.iPulses = iPulses;
pulses = new IntBox[Config.Data.WMsCount];
readRegOps = new IOperation[readersCount]; readRegOps = new IOperation[readersCount];
for (int i = 0; i < readersCount; i++) for (int i = 0; i < readersCount; i++)
{ {
pulses[i] = new IntBox(iPulses[i]); if (readers[i] != null) readRegOps[i] = readers[i].ReadRegisterOp();
if (readers[i] != null)
{
readRegOps[i] = readers[i].ReadRegisterOp(ref pulses[i]);
}
} }
log.Debug(this.ToString()); log.Debug(this.ToString());
} }
/// <summary>
/// Events: eventDone (default=Event.ReadRegisterDone) or Event.Error
/// </summary>
/// <param name="register">Register reader reference</param>
/// <param name="pulses">Reference to the water meter register state in pulses</param>
public ReadMoreRegistersOp(GenericDevices.IRegisterReader[] readers, ref int[] iPulses, ref int[] iRefPulses)
: this(readers, ref iPulses)
{
if (readers == null) throw new ArgumentNullException("readers");
readersCount = readers.Length;
if (iPulses == null || iPulses.Length != readersCount ||
iRefPulses == null || iRefPulses.Length != readersCount)
{
throw new ArgumentException("iPulses or iRefPulses");
}
this.iPulses = iPulses;
this.iRefPulses = iRefPulses;
pulses = new IntBox[Config.Data.WMsCount];
refPulses = new IntBox[Config.Data.WMsCount];
readRegOps = new IOperation[readersCount];
for (int i = 0; i < readersCount; i++)
{
pulses[i] = new IntBox(iPulses[i]);
refPulses[i] = new IntBox(iRefPulses[i]);
if (readers[i] != null)
{
readRegOps[i] = readers[i].ReadRegisterOp(ref pulses[i], ref refPulses[i]);
}
}
log.Debug(this.ToString());
}
/// <summary>
/// Events: eventDone (default=Event.ReadRegisterDone) or Event.Error
/// </summary>
/// <param name="register">Register reader reference</param>
/// <param name="pulses">Reference to the water meter register state in pulses</param>
public ReadMoreRegistersOp(GenericDevices.IRegisterReader[] readers, ref int[] iPulses, ref double[] dTimes, ref int[] iRefPulses)
: this(readers, ref iPulses)
{
if (readers == null) throw new ArgumentNullException("readers");
readersCount = readers.Length;
if (iPulses == null || iPulses.Length != readersCount ||
dTimes == null || dTimes.Length != readersCount ||
iRefPulses == null || iRefPulses.Length != readersCount)
{
throw new ArgumentException("iPulses or iRefPulses");
}
this.iPulses = iPulses;
this.dTimes = dTimes;
this.iRefPulses = iRefPulses;
pulses = new IntBox[Config.Data.WMsCount];
times = new DoubleBox[Config.Data.WMsCount];
refPulses = new IntBox[Config.Data.WMsCount];
readRegOps = new IOperation[readersCount];
for (int i = 0; i < readersCount; i++)
{
pulses[i] = new IntBox(iPulses[i]);
times[i] = new DoubleBox(dTimes[i]);
refPulses[i] = new IntBox(iRefPulses[i]);
if (readers[i] != null)
{
if (readers[i] is WaterMeters.iPerl.WaterMeter)
{
readRegOps[i] = (readers[i] as WaterMeters.iPerl.WaterMeter).ReadRegisterOp(ref pulses[i], ref times[i], ref refPulses[i]);
}
else
{
readRegOps[i] = readers[i].ReadRegisterOp(ref pulses[i], ref refPulses[i]);
}
}
}
log.Debug(this.ToString());
}
/// <summary>Start this operation</summary> /// <summary>Start this operation</summary>
public void Start() public void Start()
@@ -160,11 +58,7 @@ namespace TBF.BenchControl.Operations
if (readRegOps[i] != null) if (readRegOps[i] != null)
{ {
Event evnt = readRegOps[i].Run(); Event evnt = readRegOps[i].Run();
iPulses[i] = pulses[i].Val;
if (iRefPulses != null)
{
iRefPulses[i] = refPulses[i].Val;
}
if (evnt == Event.Error) anyError = true; if (evnt == Event.Error) anyError = true;
if (evnt != Event.ReadRegisterDone) allDone = false; if (evnt != Event.ReadRegisterDone) allDone = false;
} }
@@ -21,7 +21,6 @@ namespace TBF.BenchControl.Sequences
public override string ToString() { return "Sequences.MainSeq"; } public override string ToString() { return "Sequences.MainSeq"; }
System.Windows.Forms.Form modelessDlg; System.Windows.Forms.Form modelessDlg;
/// ///
delegate void iPerlCommFormDlgt(MainSeq myRef, Generic.IComponentCfg cfg, IList<Test> tests, IList<Generic.ITestParams> multiTestParams); delegate void iPerlCommFormDlgt(MainSeq myRef, Generic.IComponentCfg cfg, IList<Test> tests, IList<Generic.ITestParams> multiTestParams);
@@ -467,6 +466,10 @@ namespace TBF.BenchControl.Sequences
if (selection == Selection.Cycle) if (selection == Selection.Cycle)
{ {
float TimeEstimateTotal; /// Time estimate of the selected cycle or test
float TimeEstimateBeginRpts; /// Time estimate at the beginning of all repetitions of the current tests
float TimeEstimateOneTest; /// Time estimate of the current test (one repetition)
TimeEstimateTotal = 0; TimeEstimateTotal = 0;
for (int i = simultWithPurgingCount; i < StateMachine.Tests.Count - simultWithEvacuationCount; i++) for (int i = simultWithPurgingCount; i < StateMachine.Tests.Count - simultWithEvacuationCount; i++)
{ {
@@ -565,9 +568,9 @@ namespace TBF.BenchControl.Sequences
StartMass.Format = outPath.Balance.Format; StartMass.Format = outPath.Balance.Format;
EndMass.Format = outPath.Balance.Format; EndMass.Format = outPath.Balance.Format;
TimeEstimateTotal = test.Repeats * (test.TstTime + 10.0f); float TimeEstimateTotal = test.Repeats * (test.TstTime + 10.0f);
TimeEstimateOneTest = test.TstTime + 10.0f; float TimeEstimateOneTest = test.TstTime + 10.0f;
TimeEstimateBeginRpts = 0; float TimeEstimateBeginRpts = 0;
ITestMethod testMethodSequence = TbfComponents.FindComponent(test.Method) as ITestMethod; ITestMethod testMethodSequence = TbfComponents.FindComponent(test.Method) as ITestMethod;
if (testMethodSequence != null && testMethodSequence.CanTest(StateMachine.Procedure.MetersKind)) if (testMethodSequence != null && testMethodSequence.CanTest(StateMachine.Procedure.MetersKind))
@@ -21,6 +21,7 @@ namespace TBF.BenchControl.Sequences
public class SequenceBase : ProcessData public class SequenceBase : ProcessData
{ {
private static readonly ILog log = LogManager.GetLogger(typeof(SequenceBase)); private static readonly ILog log = LogManager.GetLogger(typeof(SequenceBase));
protected static readonly ILog processDataLogger = LogManager.GetLogger("ProcessData"); protected static readonly ILog processDataLogger = LogManager.GetLogger("ProcessData");
protected static readonly ILog allResults = LogManager.GetLogger("AllResults"); protected static readonly ILog allResults = LogManager.GetLogger("AllResults");
protected static readonly ILog summaryResults = LogManager.GetLogger("SummaryResults"); protected static readonly ILog summaryResults = LogManager.GetLogger("SummaryResults");
@@ -44,14 +45,6 @@ namespace TBF.BenchControl.Sequences
public static double Qfall; public static double Qfall;
protected static float TimeEstimateTotal; /// Time estimate of the selected cycle or test
protected static float TimeEstimateBeginRpts; /// Time estimate at the beginning of all repetitions of the current tests
protected static float TimeEstimateOneTest; /// Time estimate of the current test (one repetition)
static SequenceBase()
{
}
///------------------------------------------------------------ ///------------------------------------------------------------
/// Test related (instance) variables. /// Test related (instance) variables.
/// Created when test sequence is open. /// Created when test sequence is open.
@@ -72,10 +65,6 @@ namespace TBF.BenchControl.Sequences
protected IOperation processDataLoggingOp; protected IOperation processDataLoggingOp;
protected int[] WMPulses = new int[Config.Data.WMsCount];
protected int[] WMRefPulses = new int[Config.Data.WMsCount];
protected double[] WMTimes = new double[Config.Data.WMsCount];
/// ///
/// Process data logging /// Process data logging
@@ -206,7 +206,7 @@ namespace TBF.BenchControl.TestMethods.Adjustment
while (!e.Contains(Event.MeasurementStarted)); while (!e.Contains(Event.MeasurementStarted));
/// Measurement loop - preparation /// Measurement loop - preparation
readRegistersOp = new Operations.ReadMoreRegistersOp(sensPath.RegisterReaders, ref WMPulses, ref WMRefPulses); readRegistersOp = new Operations.ReadMoreRegistersOp(sensPath.RegisterReaders);
queryEnd1 = cBrd.QueryMeasurementEndOp(); queryEnd1 = cBrd.QueryMeasurementEndOp();
queryEnd2 = cBrd.QueryMeasurementEndOp(); queryEnd2 = cBrd.QueryMeasurementEndOp();
@@ -301,13 +301,13 @@ namespace TBF.BenchControl.TestMethods.Adjustment
for (int i = 0; i < BatchRslts.WMPositionsCount; i++) for (int i = 0; i < BatchRslts.WMPositionsCount; i++)
{ {
Results.Entities.MeterTestRslt meterRslt = BatchRslts.GetMeterTestRslt(testName, i, CompoundMeterId.Single); Results.Entities.MeterTestRslt meterRslt = BatchRslts.GetMeterTestRslt(testName, i, CompoundMeterId.Single);
GenericDevices.IRegisterReader regReader = (sensPath.RegisterReaders == null) ? null : sensPath.RegisterReaders[i]; GenericDevices.IRegisterReader regReader = sensPath.RegisterReaders[i];
if (meterRslt != null && regReader != null) if (meterRslt != null && regReader != null)
{ {
meterRslt.PulsesPerLiter = regReader.PulsesPerLtr; meterRslt.PulsesPerLiter = regReader.PulsesPerLtr;
meterRslt.PulsesMeter = Convert.ToDouble(WMPulses[i]); meterRslt.PulsesMeter = Convert.ToDouble(regReader.WMPulses);
meterRslt.PulsesMaster = Convert.ToDouble(WMRefPulses[i]); meterRslt.PulsesMaster = Convert.ToDouble(regReader.WMRefPulses);
meterRslt.VolumeStart = 0; /// liter meterRslt.VolumeStart = 0; /// liter
meterRslt.VolumeEnd = 0; /// liter meterRslt.VolumeEnd = 0; /// liter
meterRslt.VolumeMeter = meterRslt.PulsesMeter * regReader.LtrsPerPulse; /// liter meterRslt.VolumeMeter = meterRslt.PulsesMeter * regReader.LtrsPerPulse; /// liter
@@ -240,7 +240,7 @@ namespace TBF.BenchControl.TestMethods.CombinedMeters
while (!e.Contains(Event.MeasurementStarted)); while (!e.Contains(Event.MeasurementStarted));
/// Measurement loop - preparation /// Measurement loop - preparation
readRegistersOp = new Operations.ReadMoreRegistersOp(sensPath.RegisterReaders, ref WMPulses, ref WMRefPulses); readRegistersOp = new Operations.ReadMoreRegistersOp(sensPath.RegisterReaders);
queryEnd1 = cBrd.QueryMeasurementEndOp(); queryEnd1 = cBrd.QueryMeasurementEndOp();
queryEnd2 = cBrd.QueryMeasurementEndOp(); queryEnd2 = cBrd.QueryMeasurementEndOp();
@@ -409,8 +409,8 @@ namespace TBF.BenchControl.TestMethods.CombinedMeters
meterRslt.PulsesPerLiter = regReader.PulsesPerLtr; meterRslt.PulsesPerLiter = regReader.PulsesPerLtr;
/// Optionally supress pulses from the large water meter /// Optionally supress pulses from the large water meter
meterRslt.PulsesMeter = (isAux == 0 && testParams.SupressTrills) ? 0 : Convert.ToDouble(WMPulses[2 * i + isAux]); meterRslt.PulsesMeter = (isAux == 0 && testParams.SupressTrills) ? 0 : Convert.ToDouble(regReader.WMPulses);
meterRslt.PulsesMaster = Convert.ToDouble(WMRefPulses[2 * i + isAux]); meterRslt.PulsesMaster = Convert.ToDouble(regReader.WMRefPulses);
meterRslt.TestTime = tstRslt.TestTime; meterRslt.TestTime = tstRslt.TestTime;
meterRslt.VolumeStart = 0; meterRslt.VolumeStart = 0;
@@ -61,7 +61,7 @@ namespace TBF.BenchControl.TestMethods.CombinedWithDetection
processDataLoggingOp = new TBF.BenchControl.Operations.ProcessDataLoggingOp(processDataLogger, this); processDataLoggingOp = new TBF.BenchControl.Operations.ProcessDataLoggingOp(processDataLogger, this);
/// Meters path is required for the following: /// Meters path is required for the following:
readRegistersOp = new Operations.ReadMoreRegistersOp(sensPath.RegisterReaders, ref WMPulses, ref WMRefPulses); readRegistersOp = new Operations.ReadMoreRegistersOp(sensPath.RegisterReaders);
int repetitionNr = 1; /// First test: repetitionNr=1 int repetitionNr = 1; /// First test: repetitionNr=1
@@ -217,7 +217,7 @@ namespace TBF.BenchControl.TestMethods.CombinedWithDetection
while (!e.Contains(Event.PositionReached)); while (!e.Contains(Event.PositionReached));
// Last pulses are kept to calculate differences // Last pulses are kept to calculate differences
for (int i = 0; i < 2 * Config.Data.CompoundWMsCount; i++) lastWMPulses[i] = WMPulses[i]; for (int i = 0; i < 2 * Config.Data.CompoundWMsCount; i++) lastWMPulses[i] = RegisterReaders[i].WMPulses;
// Shift data in the detection buffers // Shift data in the detection buffers
for (int i = DetectionBufferSize - 2; i >= 0; i--) for (int i = DetectionBufferSize - 2; i >= 0; i--)
@@ -233,7 +233,7 @@ namespace TBF.BenchControl.TestMethods.CombinedWithDetection
} }
int time = StateMachine.Time; int time = StateMachine.Time;
int diff = WMPulses[(test.Part - 1) * 2 + 1] - lastWMPulses[(test.Part - 1) * 2 + 1]; int diff = RegisterReaders[(test.Part - 1) * 2 + 1].WMPulses - lastWMPulses[(test.Part - 1) * 2 + 1];
flowsForDetection[0] = cBrd.ReferenceFreq * outPath.FlowMeter.NominalFlow / 2000.0f; flowsForDetection[0] = cBrd.ReferenceFreq * outPath.FlowMeter.NominalFlow / 2000.0f;
pulseFreqsForDetection[0] = (float)diff / (float)(time - lastTime); pulseFreqsForDetection[0] = (float)diff / (float)(time - lastTime);
lastTime = StateMachine.Time; lastTime = StateMachine.Time;
@@ -585,9 +585,8 @@ namespace TBF.BenchControl.TestMethods.CombinedWithDetection
meterRslt.PulsesPerLiter = regReader.PulsesPerLtr; meterRslt.PulsesPerLiter = regReader.PulsesPerLtr;
/// Optionally supress pulses from the large water meter /// Optionally supress pulses from the large water meter
meterRslt.PulsesMeter = (isAux == 0 && testParams.SupressTrills) ? 0 : Convert.ToDouble(WMPulses[2 * i + isAux]); meterRslt.PulsesMeter = (isAux == 0 && testParams.SupressTrills) ? 0 : Convert.ToDouble(regReader.WMPulses);
meterRslt.PulsesMaster = Convert.ToDouble(regReader.WMRefPulses);
meterRslt.PulsesMaster = Convert.ToDouble(WMRefPulses[2 * i + isAux]);
meterRslt.TestTime = cBrd.TTime; meterRslt.TestTime = cBrd.TTime;
meterRslt.VolumeStart = 0; meterRslt.VolumeStart = 0;
meterRslt.VolumeEnd = 0; meterRslt.VolumeEnd = 0;
@@ -306,7 +306,7 @@ namespace TBF.BenchControl.TestMethods.FixedStartAdvanced
/// Measurement loop - preparation /// Measurement loop - preparation
readRegistersOp = new Operations.ReadMoreRegistersOp(sensPath.RegisterReaders, ref WMPulses, ref WMRefPulses); readRegistersOp = new Operations.ReadMoreRegistersOp(sensPath.RegisterReaders);
queryEnd1 = cBrd.QueryMeasurementEndOp(); queryEnd1 = cBrd.QueryMeasurementEndOp();
queryEnd2 = cBrd.QueryMeasurementEndOp(); queryEnd2 = cBrd.QueryMeasurementEndOp();
@@ -305,7 +305,7 @@ namespace TBF.BenchControl.TestMethods.FixedStartCombinedMeters
/// Measurement loop - preparation /// Measurement loop - preparation
readRegistersOp = new Operations.ReadMoreRegistersOp(sensPath.RegisterReaders, ref WMPulses, ref WMRefPulses); readRegistersOp = new Operations.ReadMoreRegistersOp(sensPath.RegisterReaders);
queryEnd1 = cBrd.QueryMeasurementEndOp(); queryEnd1 = cBrd.QueryMeasurementEndOp();
queryEnd2 = cBrd.QueryMeasurementEndOp(); queryEnd2 = cBrd.QueryMeasurementEndOp();
@@ -305,7 +305,7 @@ namespace TBF.BenchControl.TestMethods.FixedStartMassCollection
/// Measurement loop - preparation /// Measurement loop - preparation
readRegistersOp = new Operations.ReadMoreRegistersOp(sensPath.RegisterReaders, ref WMPulses, ref WMRefPulses); readRegistersOp = new Operations.ReadMoreRegistersOp(sensPath.RegisterReaders);
queryEnd1 = cBrd.QueryMeasurementEndOp(); queryEnd1 = cBrd.QueryMeasurementEndOp();
queryEnd2 = cBrd.QueryMeasurementEndOp(); queryEnd2 = cBrd.QueryMeasurementEndOp();
@@ -146,7 +146,7 @@ namespace TBF.BenchControl.TestMethods.FlyingStart
/// Measurement loop - preparation /// Measurement loop - preparation
readRegistersOp = new Operations.ReadMoreRegistersOp(sensPath.RegisterReaders, ref WMPulses, ref WMRefPulses); readRegistersOp = new Operations.ReadMoreRegistersOp(sensPath.RegisterReaders);
queryEnd1 = cBrd.QueryMeasurementEndOp(); queryEnd1 = cBrd.QueryMeasurementEndOp();
queryEnd2 = cBrd.QueryMeasurementEndOp(); queryEnd2 = cBrd.QueryMeasurementEndOp();
@@ -254,14 +254,14 @@ namespace TBF.BenchControl.TestMethods.FlyingStart
for (int i = 0; i < BatchRslts.WMPositionsCount; i++) for (int i = 0; i < BatchRslts.WMPositionsCount; i++)
{ {
Results.Entities.MeterTestRslt meterRslt = BatchRslts.GetMeterTestRslt(testName, i, Config.Entities.CompoundMeterId.Single); Results.Entities.MeterTestRslt meterRslt = BatchRslts.GetMeterTestRslt(testName, i, Config.Entities.CompoundMeterId.Single);
GenericDevices.IRegisterReader regReader = (sensPath.RegisterReaders == null) ? null : sensPath.RegisterReaders[i]; GenericDevices.IRegisterReader regReader = sensPath.RegisterReaders[i];
WaterMeters.iPerl.WaterMeter iPerl = regReader as WaterMeters.iPerl.WaterMeter; WaterMeters.iPerl.WaterMeter iPerl = regReader as WaterMeters.iPerl.WaterMeter;
if (meterRslt != null && regReader != null) if (meterRslt != null && regReader != null)
{ {
meterRslt.PulsesPerLiter = regReader.PulsesPerLtr; meterRslt.PulsesPerLiter = regReader.PulsesPerLtr;
meterRslt.PulsesMeter = Convert.ToDouble(WMPulses[i]); meterRslt.PulsesMeter = Convert.ToDouble(regReader.WMPulses);
meterRslt.PulsesMaster = Convert.ToDouble(WMRefPulses[i]); meterRslt.PulsesMaster = Convert.ToDouble(regReader.WMRefPulses);
if (iPerl != null) if (iPerl != null)
{ {
@@ -267,7 +267,7 @@ namespace TBF.BenchControl.TestMethods.FlyingStartMassCollection
/// Measurement loop - preparation /// Measurement loop - preparation
readRegistersOp = new Operations.ReadMoreRegistersOp(sensPath.RegisterReaders, ref WMPulses, ref WMTimes, ref WMRefPulses); readRegistersOp = new Operations.ReadMoreRegistersOp(sensPath.RegisterReaders);
queryEnd1 = cBrd.QueryMeasurementEndOp(); queryEnd1 = cBrd.QueryMeasurementEndOp();
int estimtdEndTime = StateMachine.Time + (int)test.TstTime; int estimtdEndTime = StateMachine.Time + (int)test.TstTime;
@@ -441,14 +441,14 @@ namespace TBF.BenchControl.TestMethods.FlyingStartMassCollection
for (int i = 0; i < BatchRslts.WMPositionsCount; i++) for (int i = 0; i < BatchRslts.WMPositionsCount; i++)
{ {
Results.Entities.MeterTestRslt meterRslt = BatchRslts.GetMeterTestRslt(testName, i, Config.Entities.CompoundMeterId.Single); Results.Entities.MeterTestRslt meterRslt = BatchRslts.GetMeterTestRslt(testName, i, Config.Entities.CompoundMeterId.Single);
GenericDevices.IRegisterReader regReader = (sensPath.RegisterReaders == null) ? null : sensPath.RegisterReaders[i]; GenericDevices.IRegisterReader regReader = sensPath.RegisterReaders[i];
WaterMeters.iPerl.WaterMeter iPerl = regReader as WaterMeters.iPerl.WaterMeter; WaterMeters.iPerl.WaterMeter iPerl = regReader as WaterMeters.iPerl.WaterMeter;
if (meterRslt != null && regReader != null) if (meterRslt != null && regReader != null)
{ {
meterRslt.PulsesPerLiter = regReader.PulsesPerLtr; meterRslt.PulsesPerLiter = regReader.PulsesPerLtr;
meterRslt.PulsesMeter = Convert.ToDouble(WMPulses[i]); meterRslt.PulsesMeter = Convert.ToDouble(regReader.WMPulses);
meterRslt.PulsesMaster = Convert.ToDouble(WMRefPulses[i]); meterRslt.PulsesMaster = Convert.ToDouble(regReader.WMRefPulses);
if (iPerl != null) if (iPerl != null)
{ {
@@ -212,7 +212,7 @@ namespace TBF.BenchControl.TestMethods.ReferenceFlowmeterCalibration
while (!e.Contains(Event.MeasurementStarted)); while (!e.Contains(Event.MeasurementStarted));
/// Measurement loop - preparation /// Measurement loop - preparation
readRegistersOp = new Operations.ReadMoreRegistersOp(sensPath.RegisterReaders, ref WMPulses, ref WMRefPulses); readRegistersOp = new Operations.ReadMoreRegistersOp(sensPath.RegisterReaders);
queryEnd1 = cBrd.QueryMeasurementEndOp(); queryEnd1 = cBrd.QueryMeasurementEndOp();
queryEnd2 = cBrd.QueryMeasurementEndOp(); queryEnd2 = cBrd.QueryMeasurementEndOp();
@@ -261,10 +261,6 @@ namespace TBF.BenchControl.WaterMeters.iPerl
public int TestStartTelegramIx; public int TestStartTelegramIx;
public int TestEndTelegramIx; public int TestEndTelegramIx;
private Boxes.IntBox pulses;
private Boxes.IntBox refPulses;
private Boxes.DoubleBox timeSec;
OptoTelegramRaw[] optoData; OptoTelegramRaw[] optoData;
const int MaxOptoDataCount = 40000; const int MaxOptoDataCount = 40000;
@@ -397,55 +393,12 @@ namespace TBF.BenchControl.WaterMeters.iPerl
/// <summary> /// <summary>
/// Events: Event.ReadRegisterDone, Event.Error /// Events: Event.ReadRegisterDone, Event.Error
/// </summary> /// </summary>
/// <param name="pulses">Reference to a variable for the water meter pulses</param>
/// <returns>ReadWaterMeter instance reference casted to IOperaton</returns> /// <returns>ReadWaterMeter instance reference casted to IOperaton</returns>
public IOperation ReadRegisterOp(ref Boxes.IntBox pulses) public IOperation ReadRegisterOp()
{ {
this.pulses = pulses;
return this; return this;
} }
/// <summary>
/// Events: Event.ReadRegisterDone, Event.Error
/// </summary>
/// <param name="pulses">Reference to a variable for the water meter pulses</param>
/// <param name="refPulses">Reference to a variable for the related reference flowmeter pulses</param>
/// <returns>Reference to operation object instance</returns>
public IOperation ReadRegisterOp(ref Boxes.IntBox pulses, ref Boxes.IntBox refPulses)
{
this.pulses = pulses;
this.refPulses = refPulses;
return this;
}
/// <summary>
/// Events: Event.ReadRegisterDone, Event.Error
/// </summary>
/// <param name="pulses">Reference to a variable for the water meter pulses</param>
/// <param name="timeSec">Reference to a variable for the related time in seconds</param>
/// <returns>Reference to operation object instance</returns>
public IOperation ReadRegisterOp(ref Boxes.IntBox pulses, ref Boxes.DoubleBox timeSec)
{
this.pulses = pulses;
this.timeSec = timeSec;
return this;
}
/// <summary>
/// Events: ReadReferenceDone, Error
/// </summary>
/// <param name="pulses">Reference to a variable for the water meter pulses</param>
/// <param name="timeSec">Reference to a variable for the related time in seconds</param>
/// <param name="refPulses">Reference to a variable for the water meter pulses</param>
/// <returns>Reference to operation object instance</returns>
public IOperation ReadRegisterOp(ref Boxes.IntBox pulses, ref Boxes.DoubleBox timeSec, ref Boxes.IntBox refPulses)
{
this.pulses = pulses;
this.timeSec = timeSec;
this.refPulses = refPulses;
return this;
}
/// <summary> /// <summary>
/// Clear data/counters related to a specific tests /// Clear data/counters related to a specific tests
/// </summary> /// </summary>
@@ -584,10 +537,6 @@ namespace TBF.BenchControl.WaterMeters.iPerl
wmPulses = (int)(wmVolume * (double)PulsesPerLtr + 0.5); wmPulses = (int)(wmVolume * (double)PulsesPerLtr + 0.5);
wmRefPulses = StateMachine.ControlBoard.EtPulses(0); wmRefPulses = StateMachine.ControlBoard.EtPulses(0);
wmTestTime = timestampSec - timestampSec0; wmTestTime = timestampSec - timestampSec0;
pulses.Val = wmPulses;
if (refPulses != null) refPulses.Val = wmRefPulses;
if (timeSec != null) timeSec.Val = wmTestTime;
} }