RegisterReader simplified, ReadRegisterOp( ) removed from IRegReader, ReadMoreRegistersOp removed.

This commit is contained in:
Milan Hanajik
2021-03-18 03:56:15 +01:00
parent e201c0ea66
commit ff70a11cad
21 changed files with 12 additions and 179 deletions
-2
View File
@@ -20,7 +20,5 @@ namespace TBF.Rig.GenericDevices
double WMVolume { get; } /// Counted volume of the water meter
double BeginWMState { get; } /// Test begin state of the water meter
double EndWMState { get; } /// Test end state of the water meter
IOperation ReadRegisterOp();
}
}
@@ -22,7 +22,13 @@ namespace TBF.Rig.GenericDevices
/// <summary>
/// Watermeter wheel/arrow detection process.
/// </summary>
/// <returns>Reference to operation object instance</returns>
/// <returns>Reference to operation object</returns>
IOperation RoiDetectionOp();
/// <summary>
/// Update values accessed by properties WMPulses, WMRefPulses, WMVolume, ...
/// </summary>
/// <returns>Reference to operation object</returns>
IOperation ReadRegisterOp();
}
}
+4 -42
View File
@@ -1,5 +1,5 @@
///
/// Copyright (c) 2017 Sensus Metering Systems
/// Copyright (c) 2017-2021 Sensus Metering Systems
///
using System;
using System.Collections.Generic;
@@ -9,7 +9,7 @@ using Config.Entities;
namespace TBF.Rig.Network.Camera.RoiForFixedStart
{
public class Roi : ComponentBase, GenericDevices.IRegReaderStillCamera, IOperation
public class Roi : ComponentBase, GenericDevices.IRegReaderStillCamera
{
/// TODO: Implement support for sharing one camera by multiple ROI-s
@@ -62,13 +62,10 @@ namespace TBF.Rig.Network.Camera.RoiForFixedStart
public int WMPulses { get { return (int)(WMVolume / LtrsPerPulse); } }
int wmRefPulses;
public int WMRefPulses { get { return wmRefPulses; } }
public int WMRefPulses { get { return StateMachine.ControlBoard.RefPulses; ; } }
public Roi()
{
}
public Roi() { }
public Roi(Generic.IComponentCfg cfg, IList<Generic.IComponent> components)
: base(cfg)
@@ -117,12 +114,6 @@ namespace TBF.Rig.Network.Camera.RoiForFixedStart
log.DebugFormat("{0}:Clear()", Name);
beginWMState = 0;
endWMState = 0;
wmRefPulses = 0;
}
private void ReadPulses()
{
wmRefPulses = StateMachine.ControlBoard.RefPulses;
}
@@ -142,34 +133,5 @@ namespace TBF.Rig.Network.Camera.RoiForFixedStart
else
return null;
}
/// <summary>
/// Events: Event.ReadRegisterDone
/// </summary>
/// <returns>ReadWaterMeter instance reference casted to IOperaton</returns>
public IOperation ReadRegisterOp()
{
return this;
}
/// <summary>Start this operation</summary>
public void Start()
{
ReadPulses();
}
/// <summary>Run this operation</summary>
/// <returns>eventDone</returns>
public Event Run()
{
ReadPulses();
return Event.ReadRegisterDone;
}
/// <summary>Stop this operation</summary>
public void Stop()
{
}
}
}
-89
View File
@@ -1,89 +0,0 @@
///
/// Copyright (c) 2013-2015 Sensus Metering Systems
///
using System;
using log4net;
using TBF.Rig;
using TBF.Boxes;
namespace TBF.Rig.Operations
{
public class ReadMoreRegistersOp : IOperation
{
private static readonly ILog log = LogManager.GetLogger(typeof(ReadMoreRegistersOp));
public override string ToString() { return string.Format("ReadAllRegistersOp()"); }
/// Set by the constructor
int readersCount;
IOperation[] readRegOps;
/// <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.IRegReader[] readers)
{
if (readers == null) throw new ArgumentNullException("readers");
readersCount = readers.Length;
readRegOps = new IOperation[readersCount];
for (int i = 0; i < readersCount; i++)
{
if (readers[i] != null) readRegOps[i] = readers[i].ReadRegisterOp();
}
log.Debug(this.ToString());
}
/// <summary>Start this operation</summary>
public void Start()
{
int oriRefPulses = Sequences.ProcessData.RefPulses;
Sequences.ProcessData.RefPulses = StateMachine.ControlBoard.RefPulses;
Sequences.ProcessData.RefPulsesDelta = Sequences.ProcessData.RefPulses - oriRefPulses;
for (int i = 0; i < readersCount; i++)
{
if (readRegOps[i] != null) readRegOps[i].Start();
}
}
/// <summary>Run this operation</summary>
public Event Run()
{
bool allDone = true;
bool anyError = false;
int oriRefPulses = Sequences.ProcessData.RefPulses;
Sequences.ProcessData.RefPulses = StateMachine.ControlBoard.RefPulses;
Sequences.ProcessData.RefPulsesDelta = Sequences.ProcessData.RefPulses - oriRefPulses;
for (int i = 0; i < readersCount; i++)
{
if (readRegOps[i] != null)
{
Event evnt = readRegOps[i].Run();
if (evnt == Event.Error) anyError = true;
if (evnt != Event.ReadRegisterDone) allDone = false;
}
}
if (anyError) return Event.Error;
if (allDone) return Event.ReadAllRegistersDone;
return Event.None;
}
/// <summary>Stop this operation</summary>
public void Stop()
{
for (int i = 0; i < readersCount; i++)
{
if (readRegOps[i] != null) readRegOps[i].Stop();
}
}
}
}
@@ -4,8 +4,6 @@
using System;
using System.Collections.Generic;
using log4net;
using TBF.Rig.ControlBoard.Legacy;
using TBF.Boxes;
namespace TBF.Rig.RegisterReaders.PulsesFromUniCB
{
@@ -15,6 +13,7 @@ namespace TBF.Rig.RegisterReaders.PulsesFromUniCB
public override string ToString() { return string.Format("RegisterReader({0})", Cfg.ToString(-1)); }
readonly RRCfg rrCfg;
readonly TBF.Rig.ControlBoard.IControlBoard cb;
public int Position { get { return rrCfg.Position; } } /// 1 .. Config.Data.WMsCount
@@ -31,9 +30,6 @@ namespace TBF.Rig.RegisterReaders.PulsesFromUniCB
public double EndWMState { get { return WMVolume; } } /// Derived from WMVolume
readonly TBF.Rig.ControlBoard.IControlBoard cb;
public RegisterReader() { }
public RegisterReader(Generic.IComponentCfg cfg, IList<Generic.IComponent> components)
@@ -44,18 +40,7 @@ namespace TBF.Rig.RegisterReaders.PulsesFromUniCB
cb = TbfComponents.FindComponent(cfg.ParentName, components) as TBF.Rig.ControlBoard.IControlBoard;
if (cb == null) throw new Exception("Cannot find " + Name + " parent");
/// Prepare data for SendCalibData() control board component method
log.Warn(this.ToString());
}
/// <summary>
/// Events: Event.ReadRegisterDone, Event.Error
/// </summary>
/// <returns>ReadWaterMeter instance reference casted to IOperaton</returns>
public IOperation ReadRegisterOp()
{
return null;
}
}
}
-4
View File
@@ -82,7 +82,6 @@ namespace TBF.Rig.Sequences
protected static int nextShortPulses;
protected IOperation readRegistersOp;
protected IOperation queryEnd1;
protected IOperation checkUiOp;
@@ -1071,7 +1070,6 @@ namespace TBF.Rig.Sequences
State.Create("Read water meters")
.AddOperation(checkUiOp)
.AddOperations(measureOperations)
.AddOperation(readRegistersOp)
.AddOperation(benchPath.TempMtrUp == null ? null : benchPath.TempMtrUp.ReadTempOp(ref TempUp))
.AddOperation(benchPath.TempMtrDown == null ? null : benchPath.TempMtrDown.ReadTempOp(ref TempDown))
.AddOperation(outPath.TempMtrDiv == null ? null : outPath.TempMtrDiv.ReadTempOp(ref TempDiv))
@@ -1082,8 +1080,6 @@ namespace TBF.Rig.Sequences
.AddOperation(heatMetersPath == null ? null : heatMetersPath.TMeterRefWarm2.ReadTempOp(ref TempRefHi2))
.AddOperation(heatMetersPath == null ? null : heatMetersPath.TMeterRefCold1.ReadTempOp(ref TempRefLo1))
.AddOperation(heatMetersPath == null ? null : heatMetersPath.TMeterRefCold2.ReadTempOp(ref TempRefLo2))
.AddOperation((realTest && (outPath.Scale is IScale)) ? (outPath.Scale as IScale).ReadMassOp(ref Mass) : null)
//.AddOperation(realTest ? (ticTac ? queryEnd1 : queryEnd2) : null)
.AddOperation(realTest ? queryEnd1 : null)
.AddOperation(realTest ? processDataLoggingOp : null)
.EnterState();
@@ -173,9 +173,6 @@ namespace TBF.Rig.TestMethods.CombinedWithDetection
/// int refPulses = (int)(timeSec * (2000.0f * targetFlow / pOut.FlowMeter.NominalFlow));
int totalPulses = (int)(test.Volume / LtrPerRefPulse + 0.5f);
/// Meters path is required for the following:
readRegistersOp = new Operations.ReadMoreRegistersOp(sensPath.RegisterReaders);
//====================================
loop:
/// Read pressure and temperature once before calling Bridge.OnTestSelected(...)
@@ -526,10 +526,6 @@ namespace TBF.Rig.TestMethods.DiverterTest
}
while (!e.Contains(Event.TestInProgress));
/// Measurement loop - preparation
readRegistersOp = new Operations.ReadMoreRegistersOp(sensPath.RegisterReaders);
int estimtdEndTime = StateMachine.Time + (int)(test.TestTime / testParams.DivRepetitions);
/// Measurement loop - begin
@@ -537,8 +533,6 @@ namespace TBF.Rig.TestMethods.DiverterTest
.AddOperation(checkUiOp)
.AddOperations(readTempPressOps)
.AddOperations(measureOperations)
.AddOperation(readRegistersOp)
.AddOperation(scale.ReadMassOp(ref Mass))
//.AddOperation(cBrd.ReadDiverterTransitionOp(outPath.Diverter, CountWhenSendingRdDivCmd, CountWhenReadingDiv, true, DiverterStart, BatchRslts.Batch.BatchNr, test.Name, repetitionNr))
.AddOperation(cBrd.QueryMeasurementEndOp())
.AddOperation(processDataLoggingOp)
@@ -318,7 +318,6 @@ namespace TBF.Rig.TestMethods.Endurance
/// Measurement loop - preparation
readRegistersOp = new Operations.ReadMoreRegistersOp(sensPath.RegisterReaders);
queryEnd1 = cBrd.QueryMeasurementEndOp();
int estimtdEndTime = StateMachine.Time + (int)test.TestTime;
@@ -329,7 +328,6 @@ namespace TBF.Rig.TestMethods.Endurance
.AddOperation(checkUiOp)
.AddOperations(readTempPressOps)
.AddOperations(measureOperations)
.AddOperation(readRegistersOp)
.AddOperation(queryEnd1)
.AddOperation(processDataLoggingOp)
.AddOperation(enduranceDataLoggingOp)
@@ -546,7 +546,6 @@ namespace TBF.Rig.TestMethods.FixedStart
log.WarnFormat("Start valve switch time on test start = {0} ms", cBrd.ValveOpenCloseTime);
/// Measurement loop - preparation
readRegistersOp = new Operations.ReadMoreRegistersOp(sensPath.RegisterReaders);
queryEnd1 = cBrd.QueryMeasurementEndOp();
StartNewStatistics(StateMachine.Time, BatchRslts.Batch.BatchNr, test.Name, repetitionNr, Math.Max((int)(test.TestTime / 10), 5));
@@ -423,7 +423,6 @@ namespace TBF.Rig.TestMethods.FixedStartAdvanced
/// Measurement loop - preparation
readRegistersOp = new Operations.ReadMoreRegistersOp(sensPath.RegisterReaders);
queryEnd1 = cBrd.QueryMeasurementEndOp();
StartNewStatistics(StateMachine.Time, BatchRslts.Batch.BatchNr, test.Name, repetitionNr, Math.Max((int)(test.TestTime / 10), 5));
@@ -584,7 +584,6 @@ namespace TBF.Rig.TestMethods.FixedStartDeferredEval
log.WarnFormat("Start valve switch time on test start = {0} ms", cBrd.ValveOpenCloseTime);
/// Measurement loop - preparation
readRegistersOp = new Operations.ReadMoreRegistersOp(sensPath.RegisterReaders);
queryEnd1 = cBrd.QueryMeasurementEndOp();
StartNewStatistics(StateMachine.Time, BatchRslts.Batch.BatchNr, test.Name, repetitionNr, Math.Max((int)(test.TestTime / 10), 5));
@@ -510,7 +510,6 @@ namespace TBF.Rig.TestMethods.FixedStartMassCollAdvanced
log.WarnFormat("Start valve switch time on test start = {0} ms", cBrd.ValveOpenCloseTime);
/// Measurement loop - preparation
readRegistersOp = new Operations.ReadMoreRegistersOp(sensPath.RegisterReaders);
queryEnd1 = cBrd.QueryMeasurementEndOp();
StartNewStatistics(StateMachine.Time, BatchRslts.Batch.BatchNr, test.Name, repetitionNr, Math.Max((int)(test.TestTime / 10), 5));
@@ -695,7 +695,6 @@ namespace TBF.Rig.TestMethods.FixedStartMassCollDeferredEval
log.WarnFormat("Start valve switch time on test start = {0} ms", cBrd.ValveOpenCloseTime);
/// Measurement loop - preparation
readRegistersOp = new Operations.ReadMoreRegistersOp(sensPath.RegisterReaders);
queryEnd1 = cBrd.QueryMeasurementEndOp();
StartNewStatistics(StateMachine.Time, BatchRslts.Batch.BatchNr, test.Name, repetitionNr, Math.Max((int)(test.TestTime / 10), 5));
@@ -672,7 +672,6 @@ namespace TBF.Rig.TestMethods.FixedStartMassCollection
log.WarnFormat("Start valve switch time on test start = {0} ms", cBrd.ValveOpenCloseTime);
/// Measurement loop - preparation
readRegistersOp = new Operations.ReadMoreRegistersOp(sensPath.RegisterReaders);
queryEnd1 = cBrd.QueryMeasurementEndOp();
StartNewStatistics(StateMachine.Time, BatchRslts.Batch.BatchNr, test.Name, repetitionNr, Math.Max((int)(test.TestTime / 10), 5));
@@ -510,7 +510,6 @@ namespace TBF.Rig.TestMethods.FixedStartTankCollection
log.WarnFormat("Start valve switch time on test start = {0} ms", cBrd.ValveOpenCloseTime);
/// Measurement loop - preparation
readRegistersOp = new Operations.ReadMoreRegistersOp(sensPath.RegisterReaders);
queryEnd1 = cBrd.QueryMeasurementEndOp();
StartNewStatistics(StateMachine.Time, BatchRslts.Batch.BatchNr, test.Name, repetitionNr, Math.Max((int)(test.TestTime / 10), 5));
@@ -1098,7 +1098,6 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection
State.Create(string.Format("{0}({1}) : Reading watermeters", test.Method, test.Name))
.AddOperation(checkUiOp)
.AddOperation(new Operations.ReadMoreRegistersOp(sensPath.RegisterReaders))
.EnterState();
StateMachine.WaitRunDevsRunOps();
StateMachine.WaitRunDevsRunOps();
@@ -349,7 +349,6 @@ namespace TBF.Rig.TestMethods.PulsesTest
while (!e.Contains(Event.TestInProgress));
/// Measurement loop - preparation
readRegistersOp = new Operations.ReadMoreRegistersOp(sensPath.RegisterReaders);
queryEnd1 = cBrd.QueryMeasurementEndOp();
StartNewStatistics(StateMachine.Time, BatchRslts.Batch.BatchNr, test.Name, repetitionNr, 0);
@@ -351,7 +351,6 @@ namespace TBF.Rig.TestMethods.PulsesTestManual
while (!e.Contains(Event.TestInProgress));
/// Measurement loop - preparation
readRegistersOp = new Operations.ReadMoreRegistersOp(sensPath.RegisterReaders);
queryEnd1 = cBrd.QueryMeasurementEndOp();
StartNewStatistics(StateMachine.Time, BatchRslts.Batch.BatchNr, test.Name, repetitionNr, 0);
@@ -121,9 +121,6 @@ namespace TBF.Rig.TestMethods.SensitivityTest
/// float timeSec = 3600.0f * timeHr;
/// int refPulses = (int)(timeSec * (2000.0f * targetFlow / pOut.FlowMeter.NominalFlow));
int totalPulses = (int)(test.Volume / LtrPerRefPulse + 0.5f);
/// Meters path is required for the following:
readRegistersOp = new Operations.ReadMoreRegistersOp(sensPath.RegisterReaders);
//====================================
loop: