diff --git a/TODO.txt b/TODO.txt
index da5a819f9..ed3cd44d7 100644
--- a/TODO.txt
+++ b/TODO.txt
@@ -1,6 +1,4 @@
iPerl:
-- naimplementovat Spooler pre OracleDB
-- updatovat progress bary pre iPerl comm.
- neukladat process data pre UnknownPcbNr... vodomery
- log pre pevny start, podobne (zarazky) ako pre letmy
@@ -10,12 +8,10 @@ iPerl:
- v iPerlCommunication ponukat stringy v drop-down menu
- na Process obrazovke posunut stupacku a rezervoar uplne doprava
-- ked su Q3 part 1 a Q3 part 2 neda sa vybrat cez UI Q3 part 2
-
- export the DB (=make a backup of configuration) from TBF program
-
-
+- IRegisterReader: int Position readonly property
+- IRegisterReader: TestCompleted() implementation and use.
- 'publish' a 'evaluate' pre vsetky metody
- prechadzat na double (results)
diff --git a/TestBenchFramework/BenchControl/Cameras/CameraRoi/CameraRoi.cs b/TestBenchFramework/BenchControl/Cameras/CameraRoi/CameraRoi.cs
index 866e269b0..142ea42da 100644
--- a/TestBenchFramework/BenchControl/Cameras/CameraRoi/CameraRoi.cs
+++ b/TestBenchFramework/BenchControl/Cameras/CameraRoi/CameraRoi.cs
@@ -27,7 +27,17 @@ namespace TBF.BenchControl.Cameras.CameraRoi
readonly GenericDevices.ICamera camera;
public GenericDevices.ICamera Camera { get { return camera; } }
- public float PulsesPerLtr { get { return cameraRoiCfg.ProcParams.GradPerLtr; } }
+ public double PulsesPerLtr { get { return (double)cameraRoiCfg.ProcParams.GradPerLtr; } }
+ public double LtrsPerPulse { get { return ltrsPerPulse; } }
+ readonly double ltrsPerPulse;
+
+ public int WMPulses { get { return wmPulses; } }
+ public int WMRefPulses { get { return wmRefPulses; } }
+ public double WMVolume { get { return ltrsPerPulse * (double)wmPulses; } }
+
+ int wmPulses;
+ int wmRefPulses;
+
public CameraRoi()
{
@@ -37,6 +47,7 @@ namespace TBF.BenchControl.Cameras.CameraRoi
: base(cfg)
{
cameraRoiCfg = cfg;
+ ltrsPerPulse = (PulsesPerLtr <= float.Epsilon) ? 0 : (1 / PulsesPerLtr);
if (cfg.DebugLevel != DebugMode.Off)
{
@@ -50,6 +61,17 @@ namespace TBF.BenchControl.Cameras.CameraRoi
log.Debug(this.ToString());
}
+ public void Clear()
+ {
+ wmPulses = 0;
+ wmRefPulses = 0;
+ }
+
+ public void TestCompleted()
+ {
+ /// TODO: Implement
+ }
+
///
/// Events: Event.ReadRegisterDone, Event.Error
///
diff --git a/TestBenchFramework/BenchControl/Elde/FixedStartRegisterReader/ReadReferenceForRegisterOp.cs b/TestBenchFramework/BenchControl/Elde/FixedStartRegisterReader/ReadReferenceForRegisterOp.cs
deleted file mode 100644
index 55bf32395..000000000
--- a/TestBenchFramework/BenchControl/Elde/FixedStartRegisterReader/ReadReferenceForRegisterOp.cs
+++ /dev/null
@@ -1,60 +0,0 @@
-///
-/// Copyright (c) 2013-2015 Sensus Metering Systems
-///
-using System;
-using log4net;
-using TBF.Boxes;
-
-namespace TBF.BenchControl.Elde.FixedStartRegisterReader
-{
- public class ReadReferenceForRegisterOp : IOperation
- {
- private static readonly ILog log = LogManager.GetLogger(typeof(ReadReferenceForRegisterOp));
- public override string ToString() { return string.Format("ReadWaterMeterOp(.,{0},.)", eventDone); }
-
- /// Set by the constructor
- readonly ControlBoardDev controlBoard;
- readonly Event eventDone;
- IntBox pulses;
-
- ///
- /// Events: or Error
- ///
- /// Flow meter reference
- /// Reference to the measured flow variable, value is in bar
- /// Event to be returned by Run() when completed OK
- public ReadReferenceForRegisterOp(RegisterReader register, ref IntBox pulses, Event eventDone)
- {
- if (register == null) throw new ArgumentNullException("register");
- this.controlBoard = register.ControlBoard;
- this.eventDone = eventDone;
- this.pulses = pulses;
-
- log.Debug(this.ToString());
- }
- public ReadReferenceForRegisterOp(RegisterReader register, ref IntBox pulses)
- : this(register, ref pulses, Event.ReadReferenceDone)
- {
- }
-
- /// Start this operation
- public void Start()
- {
- }
-
- /// Run this operation
- ///
- /// Event.FlowInDone or Event.FlowOutDone
- ///
- public Event Run()
- {
- pulses.Val = controlBoard.EtPulses(0);
- return eventDone;
- }
-
- /// Stop this operation
- public void Stop()
- {
- }
- }
-}
diff --git a/TestBenchFramework/BenchControl/Elde/FixedStartRegisterReader/ReadRegisterOp.cs b/TestBenchFramework/BenchControl/Elde/FixedStartRegisterReader/ReadRegisterOp.cs
deleted file mode 100644
index 0d808a60c..000000000
--- a/TestBenchFramework/BenchControl/Elde/FixedStartRegisterReader/ReadRegisterOp.cs
+++ /dev/null
@@ -1,75 +0,0 @@
-///
-/// Copyright (c) 2013-2015 Sensus Metering Systems
-///
-using System;
-using log4net;
-using TBF.Boxes;
-
-namespace TBF.BenchControl.Elde.FixedStartRegisterReader
-{
- public class ReadRegisterOp : IOperation
- {
- private static readonly ILog log = LogManager.GetLogger(typeof(ReadRegisterOp));
- public override string ToString() { return string.Format("ReadRegisterOp({0})", reader.Name); }
-
- /// Set by the constructor
- readonly RegisterReader reader;
- IntBox pulses;
- IntBox refPulses;
-
- ///
- /// Events: Event.ReadRegisterDone or Event.Error
- ///
- /// Register reader reference
- /// Reference to a field with the water meter pulses
- public ReadRegisterOp(GenericDevices.IRegisterReader reader, ref IntBox pulses)
- {
- this.reader = reader as RegisterReader;
- if (reader == null) throw new ArgumentNullException("reader is null or it is not Elde");
-
- this.pulses = pulses;
- log.Debug(this.ToString());
- }
-
- ///
- /// Events: Event.ReadRegisterDone or Event.Error
- ///
- /// Register reader reference
- /// Reference to a Box with the water meter pulses
- /// Reference to a Box with the reference flow meter pulses synchronized with the water meter
- public ReadRegisterOp(GenericDevices.IRegisterReader reader, ref IntBox pulses, ref IntBox refPulses)
- : this(reader, ref pulses)
- {
- this.refPulses = refPulses;
- log.Debug(this.ToString());
- }
-
- private void ReadPulses()
- {
- pulses.Val = (int)(reader.EndWMState - reader.BeginWMState); /// TODO: replace 0
- if (refPulses != null)
- {
- refPulses.Val = (int)reader.ControlBoard.EtPulses(0);
- }
- }
-
- /// Start this operation
- public void Start()
- {
- ReadPulses();
- }
-
- /// Run this operation
- /// eventDone
- public Event Run()
- {
- ReadPulses();
- return Event.ReadRegisterDone;
- }
-
- /// Stop this operation
- public void Stop()
- {
- }
- }
-}
diff --git a/TestBenchFramework/BenchControl/Elde/FixedStartRegisterReader/RegisterReader.cs b/TestBenchFramework/BenchControl/Elde/FixedStartRegisterReader/RegisterReader.cs
index 201c8e2ac..1ee585add 100644
--- a/TestBenchFramework/BenchControl/Elde/FixedStartRegisterReader/RegisterReader.cs
+++ b/TestBenchFramework/BenchControl/Elde/FixedStartRegisterReader/RegisterReader.cs
@@ -1,5 +1,5 @@
///
-/// Copyright (c) 2013-2015 Sensus Metering Systems
+/// Copyright (c) 2013-2016 Sensus Metering Systems
///
using System;
using System.Collections.Generic;
@@ -8,7 +8,7 @@ using TBF.Boxes;
namespace TBF.BenchControl.Elde.FixedStartRegisterReader
{
- public class RegisterReader : ComponentBase, GenericDevices.IRegisterReader
+ public class RegisterReader : ComponentBase, GenericDevices.IRegisterReader, IOperation
{
private static readonly ILog log = LogManager.GetLogger(typeof(RegisterReader));
public override string ToString() { return string.Format("FixedStartRegisterReader({0})", Cfg.ToString(1)); }
@@ -18,56 +18,103 @@ namespace TBF.BenchControl.Elde.FixedStartRegisterReader
public float BeginWMState;
public float EndWMState;
- public float PulsesPerLtr { get { return registerReaderCfg.ProcParams.PulsesPerLtr; } }
+ public double PulsesPerLtr { get { return (double)registerReaderCfg.ProcParams.PulsesPerLtr; } }
+ public double LtrsPerPulse { get { return ltrsPerPulse; } }
+ readonly double ltrsPerPulse;
+
+ public int WMPulses { get { return wmPulses; } }
+ public int WMRefPulses { get { return wmRefPulses; } }
+ public double WMVolume { get { return ltrsPerPulse * (double)wmPulses; } }
+
+ int wmPulses;
+ int wmRefPulses;
+ IntBox pulsesBox;
+ IntBox refPulsesBox;
+
+ readonly ControlBoardDev controlBoard;
- public readonly ControlBoardDev ControlBoard;
public RegisterReader()
{
+ Clear();
}
public RegisterReader(RegisterReaderCfg cfg, IList components)
: base(cfg)
{
registerReaderCfg = cfg;
+ ltrsPerPulse = (cfg.ProcParams.PulsesPerLtr <= float.Epsilon) ? 0 : (1 / cfg.ProcParams.PulsesPerLtr);
- ControlBoard = (ControlBoardDev)TbfComponents.FindComponent(cfg.ParentName, components);
- if (ControlBoard == null) throw new Exception("Cannot find " + Name + " parent");
+ controlBoard = (ControlBoardDev)TbfComponents.FindComponent(cfg.ParentName, components);
+ if (controlBoard == null) throw new Exception("Cannot find " + Name + " parent");
/// Prepare data for SendCalibData() control board component method
log.Debug(this.ToString());
}
+ public void Clear()
+ {
+ wmPulses = 0;
+ wmRefPulses = 0;
+ }
+
+ public void TestCompleted()
+ {
+ ReadPulses();
+ }
+
///
/// Events: Event.ReadRegisterDone, Event.Error
///
- /// Reference to a variable for the water meter pulses
+ /// Reference to a variable for the water meter pulses
/// ReadWaterMeter instance reference casted to IOperaton
- public IOperation ReadRegisterOp(ref IntBox pulses)
+ public IOperation ReadRegisterOp(ref IntBox pulsesBox)
{
- return new ReadRegisterOp(this, ref pulses);
+ this.pulsesBox = pulsesBox;
+ return this;
}
///
/// Events: Event.ReadRegisterDone, Event.Error
///
- /// Reference to a variable for the water meter pulses
- /// Reference to a variable for the related reference flowmeter pulses
+ /// Reference to a variable for the water meter pulses
+ /// Reference to a variable for the related reference flowmeter pulses
/// Reference to operation object instance
- public IOperation ReadRegisterOp(ref IntBox pulses, ref IntBox refPulses)
+ public IOperation ReadRegisterOp(ref IntBox pulsesBox, ref IntBox refPulsesBox)
{
- return new ReadRegisterOp(this, ref pulses, ref refPulses);
+ this.pulsesBox = pulsesBox;
+ this.refPulsesBox = refPulsesBox;
+ return this;
}
- ///
- /// Events: ReadReferenceDone, Error
- ///
- /// Reference to a variable for the water meter pulses
- /// Reference to operation object instance
- public IOperation ReadReferenceForRegisterOp(ref IntBox pulses, ref IntBox refPulses)
- {
- return new ReadReferenceForRegisterOp(this, ref pulses);
- }
+
+ private void ReadPulses()
+ {
+ wmPulses = (int)(EndWMState - BeginWMState); /// TODO: replace 0
+ wmRefPulses = (int)controlBoard.EtPulses(0);
+
+ pulsesBox.Val = wmPulses;
+ if (refPulsesBox != null) refPulsesBox.Val = wmRefPulses;
+ }
+
+ /// Start this operation
+ public void Start()
+ {
+ ReadPulses();
+ }
+
+ /// Run this operation
+ /// eventDone
+ public Event Run()
+ {
+ ReadPulses();
+ return Event.ReadRegisterDone;
+ }
+
+ /// Stop this operation
+ public void Stop()
+ {
+ }
}
}
diff --git a/TestBenchFramework/BenchControl/Elde/RegisterReader/ReadReferenceForRegisterOp.cs b/TestBenchFramework/BenchControl/Elde/RegisterReader/ReadReferenceForRegisterOp.cs
deleted file mode 100644
index a683be9fe..000000000
--- a/TestBenchFramework/BenchControl/Elde/RegisterReader/ReadReferenceForRegisterOp.cs
+++ /dev/null
@@ -1,62 +0,0 @@
-///
-/// Copyright (c) 2013-2015 Sensus Metering Systems
-///
-using System;
-using log4net;
-using TBF.Boxes;
-
-namespace TBF.BenchControl.Elde.RegisterReader
-{
- public class ReadReferenceForRegisterOp : IOperation
- {
- private static readonly ILog log = LogManager.GetLogger(typeof(ReadReferenceForRegisterOp));
- public override string ToString() { return string.Format("ReadWaterMeterOp(.,{0},{1},.)", eventDone, registerNr); }
-
- /// Set by the constructor
- readonly ControlBoardDev controlBoard;
- readonly int registerNr; /// 1 .. nr.watermeters
- readonly Event eventDone;
- IntBox pulses;
-
- ///
- /// Events: or Error
- ///
- /// Flow meter reference
- /// Reference to the measured flow variable, value is in bar
- /// Event to be returned by Run() when completed OK
- public ReadReferenceForRegisterOp(RegisterReader register, ref IntBox pulses, Event eventDone)
- {
- if (register == null) throw new ArgumentNullException("register");
- this.controlBoard = register.ControlBoard;
- this.registerNr = register.Position;
- this.eventDone = eventDone;
- this.pulses = pulses;
-
- log.Debug(this.ToString());
- }
- public ReadReferenceForRegisterOp(RegisterReader register, ref IntBox pulses)
- : this(register, ref pulses, Event.ReadReferenceDone)
- {
- }
-
- /// Start this operation
- public void Start()
- {
- }
-
- /// Run this operation
- ///
- /// Event.FlowInDone or Event.FlowOutDone
- ///
- public Event Run()
- {
- pulses.Val = (int)controlBoard.EtPulses(registerNr);
- return eventDone;
- }
-
- /// Stop this operation
- public void Stop()
- {
- }
- }
-}
diff --git a/TestBenchFramework/BenchControl/Elde/RegisterReader/ReadRegisterOp.cs b/TestBenchFramework/BenchControl/Elde/RegisterReader/ReadRegisterOp.cs
deleted file mode 100644
index 291ee940f..000000000
--- a/TestBenchFramework/BenchControl/Elde/RegisterReader/ReadRegisterOp.cs
+++ /dev/null
@@ -1,103 +0,0 @@
-///
-/// Copyright (c) 2013-2015 Sensus Metering Systems
-///
-using System;
-using log4net;
-using TBF.Boxes;
-
-namespace TBF.BenchControl.Elde.RegisterReader
-{
- public class ReadRegisterOp : IOperation
- {
- private static readonly ILog log = LogManager.GetLogger(typeof(ReadRegisterOp));
- public override string ToString() { return string.Format("ReadRegisterOp({0})", reader.Name); }
-
- /// Set by the constructor
- readonly RegisterReader reader;
-
- IntBox pulses;
- int lastPulses;
- bool lastPulsesValid;
-
- IntBox refPulses;
-
- ///
- /// Events: Event.ReadRegisterDone or Event.Error
- ///
- /// Register reader reference
- /// Reference to a field with the water meter pulses
- public ReadRegisterOp(GenericDevices.IRegisterReader reader, ref IntBox pulses)
- {
- this.reader = reader as RegisterReader;
- if (reader == null) throw new ArgumentNullException("reader is null or it is not Elde");
-
- this.pulses = pulses;
- lastPulsesValid = false;
- log.Debug(this.ToString());
- }
-
- ///
- /// Events: Event.ReadRegisterDone or Event.Error
- ///
- /// Register reader reference
- /// Reference to a Box with the water meter pulses
- /// Reference to a Box with the reference flow meter pulses synchronized with the water meter
- public ReadRegisterOp(GenericDevices.IRegisterReader reader, ref IntBox pulses, ref IntBox refPulses)
- : this(reader, ref pulses)
- {
- this.refPulses = refPulses;
- log.Debug(this.ToString());
- }
-
- private void ReadPulses()
- {
- if (!lastPulsesValid)
- {
- lastPulses = (int)reader.ControlBoard.WMeterPulses(reader.Position);
- lastPulsesValid = true;
- }
- else
- {
- UInt16 lowerWord = reader.ControlBoard.WMeterPulses(reader.Position);
- int uncorrected = (int)(((uint)lastPulses & 0xFFFF0000) | lowerWord);
- if (Math.Abs(uncorrected - lastPulses) <= Int16.MaxValue)
- {
- lastPulses = uncorrected;
- }
- else if (Math.Abs(uncorrected + 65536 - lastPulses) <= Int16.MaxValue)
- {
- lastPulses = uncorrected + 65536;
- }
- else if (Math.Abs(uncorrected - 65536 - lastPulses) <= Int16.MaxValue)
- {
- lastPulses = uncorrected - 65536;
- }
- }
- pulses.Val = lastPulses;
-
- if (refPulses != null)
- {
- refPulses.Val = (int)reader.ControlBoard.EtPulses(reader.Position);
- }
- }
-
- /// Start this operation
- public void Start()
- {
- ReadPulses();
- }
-
- /// Run this operation
- /// eventDone
- public Event Run()
- {
- ReadPulses();
- return Event.ReadRegisterDone;
- }
-
- /// Stop this operation
- public void Stop()
- {
- }
- }
-}
diff --git a/TestBenchFramework/BenchControl/Elde/RegisterReader/RegisterReader.cs b/TestBenchFramework/BenchControl/Elde/RegisterReader/RegisterReader.cs
index 81d1d34ce..3a6fdfb39 100644
--- a/TestBenchFramework/BenchControl/Elde/RegisterReader/RegisterReader.cs
+++ b/TestBenchFramework/BenchControl/Elde/RegisterReader/RegisterReader.cs
@@ -1,5 +1,5 @@
///
-/// Copyright (c) 2013-2015 Sensus Metering Systems
+/// Copyright (c) 2013-2016 Sensus Metering Systems
///
using System;
using System.Collections.Generic;
@@ -8,7 +8,7 @@ using TBF.Boxes;
namespace TBF.BenchControl.Elde.RegisterReader
{
- public class RegisterReader : ComponentBase, GenericDevices.IRegisterReader
+ public class RegisterReader : ComponentBase, GenericDevices.IRegisterReader, IOperation
{
private static readonly ILog log = LogManager.GetLogger(typeof(RegisterReader));
public override string ToString() { return string.Format("RegisterReader({0})", Cfg.ToString(1)); }
@@ -16,57 +16,133 @@ namespace TBF.BenchControl.Elde.RegisterReader
readonly RegisterReaderCfg registerReaderCfg;
public int Position { get { return registerReaderCfg.Position; } } /// 1 .. inf
- public float PulsesPerLtr { get { return registerReaderCfg.ProcParams.PulsesPerLtr; } }
+ ///
+ public double PulsesPerLtr { get { return (double)registerReaderCfg.ProcParams.PulsesPerLtr; } }
+ public double LtrsPerPulse { get { return ltrsPerPulse; } }
+ readonly double ltrsPerPulse;
- public readonly ControlBoardDev ControlBoard;
+ public int WMPulses { get { return wmPulses; } }
+ public int WMRefPulses { get { return wmRefPulses; } }
+ public double WMVolume { get { return ltrsPerPulse * (double)wmPulses; } }
+
+ int wmPulses;
+ int wmRefPulses;
+ IntBox pulsesBox;
+ IntBox refPulsesBox;
+
+ /// This is to cope with counter overflow
+ int lastPulses;
+ bool lastPulsesValid;
+
+ readonly ControlBoardDev controlBoard;
public RegisterReader()
{
+ Clear();
}
public RegisterReader(RegisterReaderCfg cfg, IList components)
: base(cfg)
{
registerReaderCfg = cfg;
+ ltrsPerPulse = (cfg.ProcParams.PulsesPerLtr <= float.Epsilon) ? 0 : (1 / cfg.ProcParams.PulsesPerLtr);
- ControlBoard = (ControlBoardDev)TbfComponents.FindComponent(cfg.ParentName, components);
- if (ControlBoard == null) throw new Exception("Cannot find " + Name + " parent");
+ controlBoard = (ControlBoardDev)TbfComponents.FindComponent(cfg.ParentName, components);
+ if (controlBoard == null) throw new Exception("Cannot find " + Name + " parent");
/// Prepare data for SendCalibData() control board component method
log.Debug(this.ToString());
}
+ public void Clear()
+ {
+ wmPulses = 0;
+ wmRefPulses = 0;
+ lastPulsesValid = false;
+ }
+
+ public void TestCompleted()
+ {
+ ReadPulses();
+ }
+
///
/// Events: Event.ReadRegisterDone, Event.Error
///
- /// Reference to a variable for the water meter pulses
+ /// Reference to a variable for the water meter pulses
/// ReadWaterMeter instance reference casted to IOperaton
- public IOperation ReadRegisterOp(ref IntBox pulses)
+ public IOperation ReadRegisterOp(ref IntBox pulsesBox)
{
- return new ReadRegisterOp(this, ref pulses);
+ this.pulsesBox = pulsesBox;
+ return this;
}
///
/// Events: Event.ReadRegisterDone, Event.Error
///
- /// Reference to a variable for the water meter pulses
- /// Reference to a variable for the related reference flowmeter pulses
+ /// Reference to a variable for the water meter pulses
+ /// Reference to a variable for the related reference flowmeter pulses
/// Reference to operation object instance
- public IOperation ReadRegisterOp(ref IntBox pulses, ref IntBox refPulses)
+ public IOperation ReadRegisterOp(ref IntBox pulsesBox, ref IntBox refPulsesBox)
{
- return new ReadRegisterOp(this, ref pulses, ref refPulses);
+ this.pulsesBox = pulsesBox;
+ this.refPulsesBox = refPulsesBox;
+ return this;
}
- ///
- /// Events: ReadReferenceDone, Error
- ///
- /// Reference to a variable for the water meter pulses
- /// Reference to operation object instance
- public IOperation ReadReferenceForRegisterOp(ref IntBox pulses, ref IntBox refPulses)
- {
- return new ReadReferenceForRegisterOp(this, ref pulses);
- }
- }
+
+ private void ReadPulses()
+ {
+ if (!lastPulsesValid)
+ {
+ lastPulses = (int)controlBoard.WMeterPulses(Position);
+ lastPulsesValid = true;
+ }
+ else
+ {
+ UInt16 lowerWord = controlBoard.WMeterPulses(Position);
+ int uncorrected = (int)(((uint)lastPulses & 0xFFFF0000) | lowerWord);
+ if (Math.Abs(uncorrected - lastPulses) <= Int16.MaxValue)
+ {
+ lastPulses = uncorrected;
+ }
+ else if (Math.Abs(uncorrected + 65536 - lastPulses) <= Int16.MaxValue)
+ {
+ lastPulses = uncorrected + 65536;
+ }
+ else if (Math.Abs(uncorrected - 65536 - lastPulses) <= Int16.MaxValue)
+ {
+ lastPulses = uncorrected - 65536;
+ }
+ }
+
+ wmPulses = lastPulses;
+ wmRefPulses = (int)controlBoard.EtPulses(Position);
+
+ pulsesBox.Val = wmPulses;
+ if (refPulsesBox != null) refPulsesBox.Val = wmRefPulses;
+ }
+
+ /// Start this operation
+ public void Start()
+ {
+ lastPulsesValid = false;
+ ReadPulses();
+ }
+
+ /// Run this operation
+ /// eventDone
+ public Event Run()
+ {
+ ReadPulses();
+ return Event.ReadRegisterDone;
+ }
+
+ /// Stop this operation
+ public void Stop()
+ {
+ }
+ }
}
diff --git a/TestBenchFramework/BenchControl/GenericDevices/IRegisterReader.cs b/TestBenchFramework/BenchControl/GenericDevices/IRegisterReader.cs
index 18e58a461..07620969e 100644
--- a/TestBenchFramework/BenchControl/GenericDevices/IRegisterReader.cs
+++ b/TestBenchFramework/BenchControl/GenericDevices/IRegisterReader.cs
@@ -8,9 +8,19 @@ namespace TBF.BenchControl.GenericDevices
{
public interface IRegisterReader : IComponent
{
- float PulsesPerLtr { get; }
+ double PulsesPerLtr { get; } /// Entered by users in configuration
+ double LtrsPerPulse { get; } /// To calculate the volume from WMPulses
+
+ int WMPulses { get; } /// Counted pulses of the water meter
+ double WMVolume { get; } /// Counted volume of the water metter
+ int WMRefPulses { get; } /// 'Gated' reference pulses of the water meters
+
+ void Clear(); /// To be used at the beginning of a test
+
+ void TestCompleted(); /// To be used when the test is completed ...
+ /// ... for more accurate WMPulses, WMRefPulses calculation
+
IOperation ReadRegisterOp(ref IntBox pulses);
IOperation ReadRegisterOp(ref IntBox pulses, ref IntBox refPulses);
- IOperation ReadReferenceForRegisterOp(ref IntBox pulses, ref IntBox refPulses);
}
}
diff --git a/TestBenchFramework/BenchControl/Sequences/MainSeq.cs b/TestBenchFramework/BenchControl/Sequences/MainSeq.cs
index 20b9bb94e..510a6a8db 100644
--- a/TestBenchFramework/BenchControl/Sequences/MainSeq.cs
+++ b/TestBenchFramework/BenchControl/Sequences/MainSeq.cs
@@ -513,12 +513,14 @@ namespace TBF.BenchControl.Sequences
if (testMethodSequence != null && testMethodSequence.CanTest(StateMachine.Procedure.MetersKind))
{
StateMachine.LoadTestParams(test);
+ ProcessData.RegisterReaders = sensPath.RegisterReaders;
- if (BenchInfo != null && sensPath.RegisterReaders != null)
+ foreach (var rr in sensPath.RegisterReaders)
{
- foreach (var rr in sensPath.RegisterReaders)
- if (rr is WaterMeters.iPerl.WaterMeter)
- (rr as WaterMeters.iPerl.WaterMeter).BenchName = BenchInfo.TestBenchName;
+ if ((rr is WaterMeters.iPerl.WaterMeter) && (BenchInfo != null))
+ {
+ (rr as WaterMeters.iPerl.WaterMeter).BenchName = BenchInfo.TestBenchName;
+ }
}
e = testMethodSequence.Execute(test);
@@ -570,13 +572,15 @@ namespace TBF.BenchControl.Sequences
if (testMethodSequence != null && testMethodSequence.CanTest(StateMachine.Procedure.MetersKind))
{
StateMachine.LoadTestParams(test);
+ ProcessData.RegisterReaders = sensPath.RegisterReaders;
- if (BenchInfo != null && sensPath.RegisterReaders != null)
- {
- foreach (var rr in sensPath.RegisterReaders)
- if (rr is WaterMeters.iPerl.WaterMeter)
- (rr as WaterMeters.iPerl.WaterMeter).BenchName = BenchInfo.TestBenchName;
- }
+ foreach (var rr in sensPath.RegisterReaders)
+ {
+ if ((rr is WaterMeters.iPerl.WaterMeter) && (BenchInfo != null))
+ {
+ (rr as WaterMeters.iPerl.WaterMeter).BenchName = BenchInfo.TestBenchName;
+ }
+ }
e = testMethodSequence.Execute(test);
diff --git a/TestBenchFramework/BenchControl/Sequences/ProcessData.cs b/TestBenchFramework/BenchControl/Sequences/ProcessData.cs
index e82011cc5..b7fe624fa 100644
--- a/TestBenchFramework/BenchControl/Sequences/ProcessData.cs
+++ b/TestBenchFramework/BenchControl/Sequences/ProcessData.cs
@@ -8,31 +8,61 @@ namespace TBF.BenchControl.Sequences
{
public static IBenchInfo BenchInfo;
- public static FloatBox AmbientTemp = new FloatBox() { Name = "Ambient Temperature", Format = "F1" }; /// [Celsius]
+ public static FloatBox AmbientTemp = new FloatBox() { Name = "Ambient Temperature", Format = "F1" }; /// [Celsius]
public static FloatBox AmbientPressure = new FloatBox() { Name = "Ambient Pressure", Format = "F1" };
- public static FloatBox AmbientHumidity = new FloatBox() { Name = "Ambient Humidity", Format = "F1" }; /// [%]
- public static FloatBox TempIn = new FloatBox() { Name = "Temperature In", Format = "F2" }; /// [Celsius]
- public static FloatBox TempOut = new FloatBox() { Name = "Temperature Out", Format = "F2" }; /// [Celsius]
- public static FloatBox TempDiv = new FloatBox() { Name = "Temperature Div", Format = "F2" }; /// [Celsius]
+ public static FloatBox AmbientHumidity = new FloatBox() { Name = "Ambient Humidity", Format = "F1" }; /// [%]
+ public static FloatBox TempIn = new FloatBox() { Name = "Temperature In", Format = "F2" }; /// [Celsius]
+ public static FloatBox TempOut = new FloatBox() { Name = "Temperature Out", Format = "F2" }; /// [Celsius]
+ public static FloatBox TempDiv = new FloatBox() { Name = "Temperature Div", Format = "F2" }; /// [Celsius]
public static FloatBox PressureUp = new FloatBox() { Name = "Pressure In", Format = "F3", Factor = 0.01f };
public static FloatBox PressureDown = new FloatBox() { Name = "Pressure Out", Format = "F3", Factor = 0.01f };
-
- public static IntBox RefCount = new IntBox() { Name = "RefCount" };
- public static FloatBox RefFreq = new FloatBox() { Name = "RefFreq", Format = "F2" };
- public static FloatBox RefFlow = new FloatBox() { Name = "RefFlow", Format = "F2" }; /// [m3/h]
- public static float LtrPerRefPulse; /// to calculate ref. volume
- public static FloatBox Mass = new FloatBox() { Name = "Mass", Format = "F3" }; /// [kg]
- public static FloatBox StartMass = new FloatBox() { Name = "Start Mass", Format = "F3" }; /// [kg]
- public static FloatBox EndMass = new FloatBox() { Name = "End Mass", Format = "F3" }; /// [kg]
+ public static float LtrPerRefPulse; /// to calculate the ref.volume
+ public static IntBox RefCount = new IntBox() { Name = "RefCount" };
+ public static FloatBox RefFreq = new FloatBox() { Name = "RefFreq", Format = "F2" };
+ public static FloatBox RefFlow = new FloatBox() { Name = "RefFlow", Format = "F2" }; /// [m3/h]
+
+ public static FloatBox Mass = new FloatBox() { Name = "Mass", Format = "F3" }; /// [kg]
+ public static FloatBox StartMass = new FloatBox() { Name = "Start Mass", Format = "F3" }; /// [kg]
+ public static FloatBox EndMass = new FloatBox() { Name = "End Mass", Format = "F3" }; /// [kg]
public static DateTime TestStartTime;
public static DateTime TestEndTime;
-
public static Results.BatchResults BatchRslts;
+ public static IRegisterReader[] RegisterReaders;
+ ///
+ static ProcessData()
+ {
+ ///
+ /// RegisterReaders should never be null, RegisterReader.Length should be Config.Data.WMsCount
+ /// RegisterReader[i] where i = 0..Config.Data.WMsCount-1 may be null and should always be tested
+ ///
+ RegisterReaders = new IRegisterReader[Config.Data.WMsCount];
+ }
+
+
+ ///
+ /// To clear process values at the beginning of each test
+ ///
+ protected void ClearProcessValues()
+ {
+ for (int i = 0; i < RegisterReaders.Length; i++)
+ {
+ if (RegisterReaders[i] != null) RegisterReaders[i].Clear();
+ }
+
+ RefCount.Clear();
+ RefFreq.Clear();
+ RefFlow.Clear();
+ Mass.Clear();
+ StartMass.Clear();
+ EndMass.Clear();
+ }
+
+
///
/// Statistics of 'continuous' variables (temperature, pressure, flow, etc.)
///
diff --git a/TestBenchFramework/BenchControl/Sequences/SequenceBase.cs b/TestBenchFramework/BenchControl/Sequences/SequenceBase.cs
index 396a87e81..14ef10832 100644
--- a/TestBenchFramework/BenchControl/Sequences/SequenceBase.cs
+++ b/TestBenchFramework/BenchControl/Sequences/SequenceBase.cs
@@ -86,30 +86,6 @@ namespace TBF.BenchControl.Sequences
protected static FloatBox[] WMVolumes;
protected static FloatBox[] WMErrors;
- ///
- /// To clear process values at the beginning of each test
- ///
- protected void ClearProcessValues()
- {
- //if (WMPulses != null) { for (int i = 0; i < WMPulses.Length; i++) WMPulses[i] = 0; }
- //if (WMRefPulses != null) { for (int i = 0; i < WMRefPulses.Length; i++) WMPulses[i] = 0; }
-
- for (int i = 0; i < Config.Data.WMsCount; i++)
- {
- WMPulses[i] = 0;
- WMPulses[i] = 0;
- WMVolumes[i].Clear();
- WMErrors[i].Clear();
- }
-
- RefCount.Clear();
- RefFreq.Clear();
- RefFlow.Clear();
- Mass.Clear();
- StartMass.Clear();
- EndMass.Clear();
- }
-
///
/// Process data logging
diff --git a/TestBenchFramework/BenchControl/TestMethods/Adjustment/AdjustmentSeq.cs b/TestBenchFramework/BenchControl/TestMethods/Adjustment/AdjustmentSeq.cs
index 635a2f372..2634d3fa4 100644
--- a/TestBenchFramework/BenchControl/TestMethods/Adjustment/AdjustmentSeq.cs
+++ b/TestBenchFramework/BenchControl/TestMethods/Adjustment/AdjustmentSeq.cs
@@ -306,17 +306,17 @@ namespace TBF.BenchControl.TestMethods.Adjustment
if (meterRslt != null && regReader != null)
{
meterRslt.PulsesPerLiter = regReader.PulsesPerLtr;
- meterRslt.PulsesMeter = Convert.ToDouble(WMPulses[i]);
- meterRslt.PulsesMaster = Convert.ToDouble(WMRefPulses[i]);
- meterRslt.VolumeStart = 0; /// liter
- meterRslt.VolumeEnd = 0; /// liter
- meterRslt.VolumeMeter = (meterRslt.PulsesPerLiter <= float.Epsilon) ? 0 : meterRslt.PulsesMeter / meterRslt.PulsesPerLiter;
- meterRslt.VolumeRef = tstRslt.ConstMaster * meterRslt.PulsesMaster; /// liter
- meterRslt.TestTime = tstRslt.TestTime;
- meterRslt.Error = Formulas.ErrorFromVolumes(meterRslt.VolumeMeter, meterRslt.VolumeRef);
- meterRslt.Passed = (meterRslt.Error >= test.ErrLimLo + test.Uncertainty)
- && (meterRslt.Error <= test.ErrLimHi - test.Uncertainty);
- meterRslt.TestDone = meterRslt.Passed;
+ meterRslt.PulsesMeter = Convert.ToDouble(WMPulses[i]);
+ meterRslt.PulsesMaster = Convert.ToDouble(WMRefPulses[i]);
+ meterRslt.VolumeStart = 0; /// liter
+ meterRslt.VolumeEnd = 0; /// liter
+ meterRslt.VolumeMeter = meterRslt.PulsesMeter * regReader.LtrsPerPulse; /// liter
+ meterRslt.VolumeRef = meterRslt.PulsesMaster * tstRslt.ConstMaster; /// liter
+ meterRslt.TestTime = tstRslt.TestTime;
+ meterRslt.Error = Formulas.ErrorFromVolumes(meterRslt.VolumeMeter, meterRslt.VolumeRef);
+ meterRslt.Passed = (meterRslt.Error >= test.ErrLimLo + test.Uncertainty)
+ && (meterRslt.Error <= test.ErrLimHi - test.Uncertainty);
+ meterRslt.TestDone = meterRslt.Passed;
}
}
diff --git a/TestBenchFramework/BenchControl/TestMethods/CombinedMeters/CombinedMetersSeq.cs b/TestBenchFramework/BenchControl/TestMethods/CombinedMeters/CombinedMetersSeq.cs
index d7a6e348f..7c6d6f62a 100644
--- a/TestBenchFramework/BenchControl/TestMethods/CombinedMeters/CombinedMetersSeq.cs
+++ b/TestBenchFramework/BenchControl/TestMethods/CombinedMeters/CombinedMetersSeq.cs
@@ -412,13 +412,11 @@ namespace TBF.BenchControl.TestMethods.CombinedMeters
meterRslt.PulsesMeter = (isAux == 0 && testParams.SupressTrills) ? 0 : Convert.ToDouble(WMPulses[2 * i + isAux]);
meterRslt.PulsesMaster = Convert.ToDouble(WMRefPulses[2 * i + isAux]);
- meterRslt.TestTime = tstRslt.TestTime;
- meterRslt.VolumeStart = 0;
- meterRslt.VolumeEnd = 0;
- meterRslt.VolumeRef = tstRslt.VolumeCTV;
-
- meterRslt.VolumeMeter = (regReader.PulsesPerLtr <= float.Epsilon)
- ? 0 : meterRslt.PulsesMeter / meterRslt.PulsesPerLiter;
+ meterRslt.TestTime = tstRslt.TestTime;
+ meterRslt.VolumeStart = 0;
+ meterRslt.VolumeEnd = 0;
+ meterRslt.VolumeRef = tstRslt.VolumeCTV;
+ meterRslt.VolumeMeter = meterRslt.PulsesMeter * regReader.LtrsPerPulse; /// liter
if (meterRslt.PulsesMaster != 0)
{
diff --git a/TestBenchFramework/BenchControl/TestMethods/CombinedWithDetection/CombinedWithDetectionSeq.cs b/TestBenchFramework/BenchControl/TestMethods/CombinedWithDetection/CombinedWithDetectionSeq.cs
index fb9254f4a..14f7eeeb1 100644
--- a/TestBenchFramework/BenchControl/TestMethods/CombinedWithDetection/CombinedWithDetectionSeq.cs
+++ b/TestBenchFramework/BenchControl/TestMethods/CombinedWithDetection/CombinedWithDetectionSeq.cs
@@ -587,15 +587,14 @@ namespace TBF.BenchControl.TestMethods.CombinedWithDetection
/// Optionally supress pulses from the large water meter
meterRslt.PulsesMeter = (isAux == 0 && testParams.SupressTrills) ? 0 : Convert.ToDouble(WMPulses[2 * i + isAux]);
- meterRslt.PulsesMaster = Convert.ToDouble(WMRefPulses[2 * i + isAux]);
- meterRslt.TestTime = cBrd.TTime;
- meterRslt.VolumeStart = 0;
- meterRslt.VolumeEnd = 0;
- meterRslt.VolumeRef = tstRslt.VolumeCTV;
-
- meterRslt.VolumeMeter = (regReader.PulsesPerLtr <= float.Epsilon)
- ? 0 : meterRslt.PulsesMeter / meterRslt.PulsesPerLiter;
+ meterRslt.PulsesMaster = Convert.ToDouble(WMRefPulses[2 * i + isAux]);
+ meterRslt.TestTime = cBrd.TTime;
+ meterRslt.VolumeStart = 0;
+ meterRslt.VolumeEnd = 0;
+ meterRslt.VolumeRef = tstRslt.VolumeCTV;
+ meterRslt.VolumeMeter = meterRslt.PulsesMeter * regReader.LtrsPerPulse; /// liter
+ ///
if (meterRslt.PulsesMaster != 0)
{
meterRslt.VolumeMeter *= (tstRslt.PulsesMaster / meterRslt.PulsesMaster);
diff --git a/TestBenchFramework/BenchControl/TestMethods/FlyingStart/FlyingStartSeq.cs b/TestBenchFramework/BenchControl/TestMethods/FlyingStart/FlyingStartSeq.cs
index ba7bc36e4..177977e92 100644
--- a/TestBenchFramework/BenchControl/TestMethods/FlyingStart/FlyingStartSeq.cs
+++ b/TestBenchFramework/BenchControl/TestMethods/FlyingStart/FlyingStartSeq.cs
@@ -285,8 +285,8 @@ namespace TBF.BenchControl.TestMethods.FlyingStart
meterRslt.TestTime = tstRslt.TestTime; /// TODO: Malo by sa citat z dosky
meterRslt.VolumeStart = 0;
meterRslt.VolumeEnd = 0;
- meterRslt.VolumeMeter = (meterRslt.PulsesPerLiter <= float.Epsilon) ? 0 : meterRslt.PulsesMeter / meterRslt.PulsesPerLiter;
- meterRslt.VolumeRef = tstRslt.ConstMaster * meterRslt.PulsesMaster; /// liter
+ meterRslt.VolumeMeter = meterRslt.PulsesMeter * regReader.LtrsPerPulse; /// liter
+ meterRslt.VolumeRef = meterRslt.PulsesMaster * tstRslt.ConstMaster; /// liter
}
meterRslt.Error = Formulas.ErrorFromVolumes(meterRslt.VolumeMeter, meterRslt.VolumeRef);
diff --git a/TestBenchFramework/BenchControl/TestMethods/FlyingStartMassCollection/FlyingStartMassCollectionSeq.cs b/TestBenchFramework/BenchControl/TestMethods/FlyingStartMassCollection/FlyingStartMassCollectionSeq.cs
index 7039045a6..bf8e784ce 100644
--- a/TestBenchFramework/BenchControl/TestMethods/FlyingStartMassCollection/FlyingStartMassCollectionSeq.cs
+++ b/TestBenchFramework/BenchControl/TestMethods/FlyingStartMassCollection/FlyingStartMassCollectionSeq.cs
@@ -470,10 +470,10 @@ namespace TBF.BenchControl.TestMethods.FlyingStartMassCollection
else
{
meterRslt.TestTime = tstRslt.TestTime; /// TODO: Malo by sa citat z dosky
- meterRslt.VolumeStart = 0; /// liter
- meterRslt.VolumeEnd = 0; /// liter
- meterRslt.VolumeMeter = (meterRslt.PulsesPerLiter <= float.Epsilon) ? 0 : meterRslt.PulsesMeter / meterRslt.PulsesPerLiter;
- meterRslt.VolumeRef = tstRslt.ConstMaster * meterRslt.PulsesMaster; /// liter
+ meterRslt.VolumeStart = 0; /// liter
+ meterRslt.VolumeEnd = 0; /// liter
+ meterRslt.VolumeMeter = meterRslt.PulsesMeter * regReader.LtrsPerPulse; /// liter
+ meterRslt.VolumeRef = meterRslt.PulsesMaster * tstRslt.ConstMaster; /// liter
}
meterRslt.Error = Formulas.ErrorFromVolumes(meterRslt.VolumeMeter, meterRslt.VolumeRef);
diff --git a/TestBenchFramework/BenchControl/WaterMeters/iPerl/WaterMeter.cs b/TestBenchFramework/BenchControl/WaterMeters/iPerl/WaterMeter.cs
index e8e3720db..42a261ebf 100644
--- a/TestBenchFramework/BenchControl/WaterMeters/iPerl/WaterMeter.cs
+++ b/TestBenchFramework/BenchControl/WaterMeters/iPerl/WaterMeter.cs
@@ -29,7 +29,9 @@ namespace TBF.BenchControl.WaterMeters.iPerl
public int MuxBoardNr { get { return iPerlCfg.MuxBoardNr; } }
public int Group { get { return iPerlCfg.Group; } }
- public float PulsesPerLtr { get { return iPerlCfg.ProcParams.PulsesPerLtr; } }
+ public double PulsesPerLtr { get { return (double)iPerlCfg.ProcParams.PulsesPerLtr; } }
+ public double LtrsPerPulse { get { return ltrsPerPulse; } }
+ readonly double ltrsPerPulse;
/// WaterMeter producer
public string Producer { get { return iPerlCfg.ProcParams.Producer; } }
@@ -119,6 +121,20 @@ namespace TBF.BenchControl.WaterMeters.iPerl
public double NominalTestFlow; /// liter per hour
+ ///
+ /// Required for IRegisterReader interface
+ ///
+ public int WMPulses { get { return wmPulses; } }
+ public int WMRefPulses { get { return wmRefPulses; } }
+ public double WMVolume { get { return wmVolume; } }
+ public double WMTestTime { get { return wmTestTime; } }
+
+ double wmVolume;
+ int wmPulses;
+ int wmRefPulses;
+ double wmTestTime;
+
+
///
/// New calibration factor calculated from the original factor (argument)
/// and results of the last test.
@@ -282,6 +298,8 @@ namespace TBF.BenchControl.WaterMeters.iPerl
ClearData();
iPerlCfg = cfg;
+ ltrsPerPulse = (cfg.ProcParams.PulsesPerLtr <= float.Epsilon) ? 0 : (1 / cfg.ProcParams.PulsesPerLtr);
+
log.Debug(this.ToString());
}
@@ -429,16 +447,23 @@ namespace TBF.BenchControl.WaterMeters.iPerl
}
///
- /// Events: ReadReferenceDone, Error
+ /// Clear data/counters related to a specific tests
///
- /// Reference to a variable for the water meter pulses
- /// Reference to a variable for the water meter pulses
- /// Reference to operation object instance
- public IOperation ReadReferenceForRegisterOp(ref Boxes.IntBox pulses, ref Boxes.IntBox refPulses)
+ public void Clear()
{
- this.pulses = pulses;
- this.refPulses = refPulses;
- return this;
+ sampleNr = 0;
+
+ volumeLtr = 0;
+ volumeLtr0 = 0;
+ timestampSec = 0;
+ timestampSec0 = 0;
+
+ ReadPulses();
+ }
+
+ public void TestCompleted()
+ {
+ /// TODO: Implement
}
@@ -447,6 +472,8 @@ namespace TBF.BenchControl.WaterMeters.iPerl
/// Start this operation
public void Start()
{
+ Clear();
+
/// Reset opto data
optoDataCount = 0;
TestStartTelegramIx = 0;
@@ -469,14 +496,6 @@ namespace TBF.BenchControl.WaterMeters.iPerl
flowNr,
StateMachine.CycleStartHH_MI_SS);
- sampleNr = 0;
-
- volumeLtr = 0;
- volumeLtr0 = 0;
- timestampSec = 0;
- timestampSec0 = 0;
-
- ReadPulses();
StartParsingOptoSerialPort();
}
@@ -561,9 +580,14 @@ namespace TBF.BenchControl.WaterMeters.iPerl
void ReadPulses()
{
- pulses.Val = (int)((volumeLtr - volumeLtr0) * (double)PulsesPerLtr + 0.5);
- if (timeSec != null) timeSec.Val = timestampSec - timestampSec0;
- if (refPulses != null) refPulses.Val = StateMachine.ControlBoard.EtPulses(0);
+ wmVolume = volumeLtr - volumeLtr0;
+ wmPulses = (int)(wmVolume * (double)PulsesPerLtr + 0.5);
+ wmRefPulses = StateMachine.ControlBoard.EtPulses(0);
+ wmTestTime = timestampSec - timestampSec0;
+
+ pulses.Val = wmPulses;
+ if (refPulses != null) refPulses.Val = wmRefPulses;
+ if (timeSec != null) timeSec.Val = wmTestTime;
}
diff --git a/TestBenchFramework/Screens/ProcessTabPageCtrl24.cs b/TestBenchFramework/Screens/ProcessTabPageCtrl24.cs
index 461a58d34..2ac625e05 100644
--- a/TestBenchFramework/Screens/ProcessTabPageCtrl24.cs
+++ b/TestBenchFramework/Screens/ProcessTabPageCtrl24.cs
@@ -400,63 +400,82 @@ namespace TBF.Screens
massLabel.Text = ProcessData.Mass.ToString();
- ///
- /// Available when setting the flow
- ///
- refFreqLabel.Text = ProcessData.RefFreq.ToString();
- refFlowLabel.Text = Utils.FloatToStr(ProcessData.RefFlow.Val, 4);
-
-
- ///
- /// Available during a test
- ///
- refPulsesLabel.Text = ProcessData.RefCount.ToString();
- double refVolume = ProcessData.LtrPerRefPulse * (double)ProcessData.RefCount.Val;
-
- float massDiff = ProcessData.Mass.Val - ProcessData.StartMass.Val;
- massDiffLabel.Text = massDiff.ToString("F3");
- float volumeCtv = 1001.03f * massDiff / (float)TBF.BenchControl.Formulas.WaterDensityFromTemp(ProcessData.TempOut.Val);
- volumeCtvLabel.Text = volumeCtv.ToString("F2");
- double refError = TBF.BenchControl.Formulas.ErrorFromVolumes(refVolume, volumeCtv);
- refErrorLabel.Text = refError.ToString("F3");
-
- if (currentMetersKind == MetersKind.Single)
+ if (args.TestPhase == Config.Entities.Progress.FlowSetting)
{
- for (int i = 0; i < textBoxesCount; i++)
+ ///
+ /// Available when setting the flow
+ ///
+ refFreqLabel.Text = ProcessData.RefFreq.ToString();
+ refFlowLabel.Text = Utils.FloatToStr(ProcessData.RefFlow.Val, 4);
+ }
+
+ if (args.TestPhase == Config.Entities.Progress.FlowSetting ||
+ args.TestPhase == Config.Entities.Progress.Test)
+ {
+ ///
+ /// Available during a test
+ ///
+ refPulsesLabel.Text = ProcessData.RefCount.ToString();
+ double refVolume = ProcessData.LtrPerRefPulse * (double)ProcessData.RefCount.Val;
+
+ float massDiff = ProcessData.Mass.Val - ProcessData.StartMass.Val;
+ massDiffLabel.Text = massDiff.ToString("F3");
+ float volumeCtv = 1001.03f * massDiff / (float)TBF.BenchControl.Formulas.WaterDensityFromTemp(ProcessData.TempOut.Val);
+ volumeCtvLabel.Text = volumeCtv.ToString("F2");
+ double refError = TBF.BenchControl.Formulas.ErrorFromVolumes(refVolume, volumeCtv);
+ refErrorLabel.Text = refError.ToString("F3");
+
+ if (currentMetersKind == MetersKind.Single)
{
- /// TODO: Reimplement
- //pulses[i].Text = args.TestResult.Meters[i].PulsesMeter.ToString();
- //refPulses[i].Text = args.TestResult.Meters[i].PulsesMaster.ToString();
- //volume[i].Text = args.TestResult.Meters[i].VolumeMeter.ToString();
- //error[i].Text = args.TestResult.Meters[i].VolumeErrorPct.ToString("F2");
+ for (int i = 0; i < Math.Min(textBoxesCount, ProcessData.RegisterReaders.Length); i++)
+ {
+ BenchControl.GenericDevices.IRegisterReader rr = ProcessData.RegisterReaders[i];
+ if (rr != null)
+ {
+ pulses[i].Text = rr.WMPulses.ToString();
+ refPulses[i].Text = rr.WMRefPulses.ToString();
+ volume[i].Text = rr.WMVolume.ToString("F1");
+ error[i].Text = BenchControl.Formulas.ErrorFromVolumes(rr.WMVolume, refVolume).ToString("F1");
+ }
+ }
+ }
+ else if (currentMetersKind == MetersKind.Combined)
+ {
+ for (int compMtr = 0; compMtr < Config.Data.CompoundWMsCount; compMtr++)
+ {
+ int end = Math.Min(2 * compMtr + 2, Math.Min(textBoxesCount, ProcessData.RegisterReaders.Length));
+
+ double compoundVolume = 0;
+ for (int i = 2 * compMtr; i < end; i++)
+ {
+ BenchControl.GenericDevices.IRegisterReader rr = ProcessData.RegisterReaders[i];
+ if (rr != null)
+ {
+ pulses[i].Text = rr.WMPulses.ToString();
+ refPulses[i].Text = rr.WMRefPulses.ToString();
+ volume[i].Text = rr.WMVolume.ToString("F1");
+ error[i].Text = BenchControl.Formulas.ErrorFromVolumes(rr.WMVolume, refVolume).ToString("F1");
+ compoundVolume += rr.WMVolume;
+ }
+ }
+
+ volume1zLabel.Text = compoundVolume.ToString("F1");
+ error1zLabel.Text = BenchControl.Formulas.ErrorFromVolumes(compoundVolume, refVolume).ToString("F1");
+ }
}
}
- else if (currentMetersKind == MetersKind.Combined)
- {
- for (int i = 0; i < 2; i++)
- {
- /// TODO: Reimplement
- //pulses[i].Text = args.TestResult.Meters[i].PulsesMeter.ToString();
- //refPulses[i].Text = args.TestResult.Meters[i].PulsesMaster.ToString();
- //volume[i].Text = args.TestResult.Meters[i].VolumeMeter.ToString();
- //error[i].Text = args.TestResult.Meters[i].VolumeErrorPct.ToString("F2");
- }
- /// TODO: Reimplement
- //volume1zLabel.Text = args.TestResult.CombinedMeters[0].VolumeMeter.ToString();
- //error1zLabel.Text = args.TestResult.CombinedMeters[0].VolumeErrorPct.ToString("F2");
- }
- //if (pumpOn != args.PumpOn || diverterToTank != args.DivToTank)
- //{
- // //if (pumpOn != args.PumpOn)
- // //{
- // // if (pumpOn) pumpPictureBox.Image = System.Resources.
- // // else pumpPictureBox.Image = System.Resources.
- // //}
- // pumpOn = args.PumpOn;
- // diverterToTank = args.DivToTank;
- // Invalidate();
- //}
+ //if (pumpOn != args.PumpOn || diverterToTank != args.DivToTank)
+ //{
+ // //if (pumpOn != args.PumpOn)
+ // //{
+ // // if (pumpOn) pumpPictureBox.Image = System.Resources.
+ // // else pumpPictureBox.Image = System.Resources.
+ // //}
+ // pumpOn = args.PumpOn;
+ // diverterToTank = args.DivToTank;
+ // Invalidate();
+ //}
}
void OnTestCompleted(object sender, TestCompletedEventArgs args)
diff --git a/TestBenchFramework/Screens/ProcessTabPageCtrl48.cs b/TestBenchFramework/Screens/ProcessTabPageCtrl48.cs
index 0537a5ba6..b64fb0e66 100644
--- a/TestBenchFramework/Screens/ProcessTabPageCtrl48.cs
+++ b/TestBenchFramework/Screens/ProcessTabPageCtrl48.cs
@@ -456,26 +456,41 @@ namespace TBF.Screens
if (currentMetersKind == MetersKind.Single)
{
- for (int i = 0; i < textBoxesCount; i++)
+ for (int i = 0; i < Math.Min(textBoxesCount, ProcessData.RegisterReaders.Length); i++)
{
- //pulses[i].Text = args.TestResult.Meters[i].PulsesMeter.ToString();
- //refPulses[i].Text = args.TestResult.Meters[i].PulsesMaster.ToString();
- //volume[i].Text = args.TestResult.Meters[i].VolumeMeter.ToString();
- //error[i].Text = args.TestResult.Meters[i].VolumeErrorPct.ToString("F2");
+ BenchControl.GenericDevices.IRegisterReader rr = ProcessData.RegisterReaders[i];
+ if (rr != null)
+ {
+ pulses[i].Text = rr.WMPulses.ToString();
+ refPulses[i].Text = rr.WMRefPulses.ToString();
+ volume[i].Text = rr.WMVolume.ToString("F1");
+ error[i].Text = BenchControl.Formulas.ErrorFromVolumes(rr.WMVolume, refVolume).ToString("F1");
+ }
}
}
else if (currentMetersKind == MetersKind.Combined)
{
- for (int i = 0; i < 2; i++)
+ for (int compMtr = 0; compMtr < Config.Data.CompoundWMsCount; compMtr++)
{
- //pulses[i].Text = args.TestResult.Meters[i].PulsesMeter.ToString();
- //refPulses[i].Text = args.TestResult.Meters[i].PulsesMaster.ToString();
- //volume[i].Text = args.TestResult.Meters[i].VolumeMeter.ToString();
- //error[i].Text = args.TestResult.Meters[i].VolumeErrorPct.ToString("F2");
- }
+ int end = Math.Min(2 * compMtr+2, Math.Min(textBoxesCount, ProcessData.RegisterReaders.Length));
- //volume1zLabel.Text = args.TestResult.CombinedMeters[0].VolumeMeter.ToString();
- //error1zLabel.Text = args.TestResult.CombinedMeters[0].VolumeErrorPct.ToString("F2");
+ double compoundVolume = 0;
+ for (int i = 2 * compMtr; i < end; i++)
+ {
+ BenchControl.GenericDevices.IRegisterReader rr = ProcessData.RegisterReaders[i];
+ if (rr != null)
+ {
+ pulses[i].Text = rr.WMPulses.ToString();
+ refPulses[i].Text = rr.WMRefPulses.ToString();
+ volume[i].Text = rr.WMVolume.ToString("F1");
+ error[i].Text = BenchControl.Formulas.ErrorFromVolumes(rr.WMVolume, refVolume).ToString("F1");
+ compoundVolume += rr.WMVolume;
+ }
+ }
+
+ volume1zLabel.Text = compoundVolume.ToString("F1");
+ error1zLabel.Text = BenchControl.Formulas.ErrorFromVolumes(compoundVolume, refVolume).ToString("F1");
+ }
}
}
diff --git a/TestBenchFramework/Screens/ProcessTabPageCtrl6.cs b/TestBenchFramework/Screens/ProcessTabPageCtrl6.cs
index 6814cbea1..2bf249754 100644
--- a/TestBenchFramework/Screens/ProcessTabPageCtrl6.cs
+++ b/TestBenchFramework/Screens/ProcessTabPageCtrl6.cs
@@ -20,6 +20,15 @@ namespace TBF.Screens
MetersKind currentMetersKind;
+ int textBoxesCount;
+
+ Label[] sensor;
+ Label[] pulses;
+ Label[] refPulses;
+ Label[] volume;
+ Label[] error;
+ Label[] passed;
+
bool pumpOn = true;
bool diverterToTank = true;
@@ -32,6 +41,13 @@ namespace TBF.Screens
InitializeComponent();
+ textBoxesCount = 6;
+ sensor = new Label[] { sensor1Label, sensor2Label, sensor3Label, sensor4Label, sensor5Label, sensor6Label };
+ pulses = new Label[] { pulses1Label, pulses2Label, pulses3Label, pulses4Label, pulses5Label, pulses6Label };
+ refPulses = new Label[] { refPulses1Label, refPulses2Label, refPulses3Label, refPulses4Label, refPulses5Label, refPulses6Label };
+ volume = new Label[] { volume1Label, volume2Label, volume3Label, volume4Label, volume5Label, volume6Label };
+ error = new Label[] { error1Label, error2Label, error3Label, error4Label, error5Label, error6Label };
+
Bridge.ProcedureSelectedHandler += delegate(object sndr, ProcedureSelectedEventArgs args)
{
if (InvokeRequired)
@@ -355,112 +371,98 @@ namespace TBF.Screens
void OnProcessDataChanged(object sender, ProcessDataEventArgs args)
{
- /// Top part
- //airTempLabel.Text = args.AmbientTemp.ToString();
- //airPressLabel.Text = args.AmbientPressure.ToString();
- //airHumiLabel.Text = args.AmbientHumidity.ToString();
+ ///
+ /// Always available
+ ///
+ airTempLabel.Text = ProcessData.AmbientTemp.ToString();
+ airPressLabel.Text = ProcessData.AmbientPressure.ToString();
+ airHumiLabel.Text = ProcessData.AmbientHumidity.ToString();
- //refPulsesLabel.Text = args.RefPulses.ToString();
- //refFreqLabel.Text = args.FlowMtrFreq.ToString();
- //refFlowLabel.Text = Utils.FloatToStr(args.Flow.Val, 4);
- //refVolumeLabel.Text = args.Volume.ToString();
+ tInLabel.Text = ProcessData.TempIn.ToString();
+ tOutLabel.Text = ProcessData.TempOut.ToString();
+ tDivLabel.Text = ProcessData.TempDiv.ToString();
- //regValvePosLabel.Text = args.RegValvePos.ToString();
- //tDivLabel.Text = args.Tdiv.ToString();
+ prInLabel.Text = ProcessData.PressureUp.ToString();
+ prOutLabel.Text = ProcessData.PressureDown.ToString();
- /// Bottom part
- /// TODO: Reimplement
- //pulses1Label.Text = args.TestResult.Meters[0].PulsesMeter.ToString();
- //refPulses1Label.Text = args.TestResult.Meters[0].PulsesMaster.ToString();
- //volume1Label.Text = args.TestResult.Meters[0].VolumeMeter.ToString();
- //error1Label.Text = args.TestResult.Meters[0].VolumeErrorPct.ToString("F2");
+ massLabel.Text = ProcessData.Mass.ToString();
- if (Config.Data.WMsCount >= 2)
- {
- /// TODO: Reimplement
- //pulses2Label.Text = args.TestResult.Meters[1].PulsesMeter.ToString();
- //refPulses2Label.Text = args.TestResult.Meters[1].PulsesMaster.ToString();
- //volume2Label.Text = args.TestResult.Meters[1].VolumeMeter.ToString();
- //error2Label.Text = args.TestResult.Meters[1].VolumeErrorPct.ToString("F2");
- }
- if (currentMetersKind == MetersKind.Combined && Config.Data.WMsCount >= 2)
- {
- /// TODO: Reimplement
- //volume1zLabel.Text = args.TestResult.CombinedMeters[0].VolumeMeter.ToString();
- //error1zLabel.Text = args.TestResult.CombinedMeters[0].VolumeErrorPct.ToString("F2");
- }
-
- if ((currentMetersKind == MetersKind.Single && Config.Data.WMsCount >= 3) ||
- (currentMetersKind == MetersKind.Combined && Config.Data.WMsCount >= 4))
- {
- /// TODO: Reimplement
- //pulses3Label.Text = args.TestResult.Meters[2].PulsesMeter.ToString();
- //refPulses3Label.Text = args.TestResult.Meters[2].PulsesMaster.ToString();
- //volume3Label.Text = args.TestResult.Meters[2].VolumeMeter.ToString();
- //error3Label.Text = args.TestResult.Meters[2].VolumeErrorPct.ToString("F2");
- }
- if (Config.Data.WMsCount >= 4)
- {
- /// TODO: Reimplement
- //pulses4Label.Text = args.TestResult.Meters[3].PulsesMeter.ToString();
- //refPulses4Label.Text = args.TestResult.Meters[3].PulsesMaster.ToString();
- //volume4Label.Text = args.TestResult.Meters[3].VolumeMeter.ToString();
- //error4Label.Text = args.TestResult.Meters[3].VolumeErrorPct.ToString("F2");
- }
- if (currentMetersKind == MetersKind.Combined && Config.Data.WMsCount >= 4)
- {
- /// TODO: Reimplement
- //volume2zLabel.Text = args.TestResult.CombinedMeters[1].VolumeMeter.ToString();
- //error2zLabel.Text = args.TestResult.CombinedMeters[1].VolumeErrorPct.ToString("F2");
+ if (args.TestPhase == Config.Entities.Progress.FlowSetting)
+ {
+ ///
+ /// Available when setting the flow
+ ///
+ refFreqLabel.Text = ProcessData.RefFreq.ToString();
+ refFlowLabel.Text = Utils.FloatToStr(ProcessData.RefFlow.Val, 4);
}
- if ((currentMetersKind == MetersKind.Single && Config.Data.WMsCount >= 5) ||
- (currentMetersKind == MetersKind.Combined && Config.Data.WMsCount >= 6))
- {
- /// TODO: Reimplement
- //pulses5Label.Text = args.TestResult.Meters[4].PulsesMeter.ToString();
- //refPulses5Label.Text = args.TestResult.Meters[4].PulsesMaster.ToString();
- //volume5Label.Text = args.TestResult.Meters[4].VolumeMeter.ToString();
- //error5Label.Text = args.TestResult.Meters[4].VolumeErrorPct.ToString("F2");
- }
- if (Config.Data.WMsCount >= 6)
- {
- /// TODO: Reimplement
- //pulses6Label.Text = args.TestResult.Meters[5].PulsesMeter.ToString();
- //refPulses6Label.Text = args.TestResult.Meters[5].PulsesMaster.ToString();
- //volume6Label.Text = args.TestResult.Meters[5].VolumeMeter.ToString();
- //error6Label.Text = args.TestResult.Meters[5].VolumeErrorPct.ToString("F2");
- }
- if (currentMetersKind == MetersKind.Combined && Config.Data.WMsCount >= 6)
- {
- /// TODO: Reimplement
- //volume3zLabel.Text = args.TestResult.CombinedMeters[2].VolumeMeter.ToString();
- //error3zLabel.Text = args.TestResult.CombinedMeters[2].VolumeErrorPct.ToString("F2");
+ if (args.TestPhase == Config.Entities.Progress.FlowSetting ||
+ args.TestPhase == Config.Entities.Progress.Test)
+ {
+ ///
+ /// Available during a test
+ ///
+ refPulsesLabel.Text = ProcessData.RefCount.ToString();
+ double refVolume = ProcessData.LtrPerRefPulse * (double)ProcessData.RefCount.Val;
+
+ float massDiff = ProcessData.Mass.Val - ProcessData.StartMass.Val;
+ massDiffLabel.Text = massDiff.ToString("F3");
+ float volumeCtv = 1001.03f * massDiff / (float)TBF.BenchControl.Formulas.WaterDensityFromTemp(ProcessData.TempOut.Val);
+ volumeCtvLabel.Text = volumeCtv.ToString("F2");
+ double refError = TBF.BenchControl.Formulas.ErrorFromVolumes(refVolume, volumeCtv);
+ refErrorLabel.Text = refError.ToString("F3");
+
+ if (currentMetersKind == MetersKind.Single)
+ {
+ for (int i = 0; i < Math.Min(textBoxesCount, ProcessData.RegisterReaders.Length); i++)
+ {
+ BenchControl.GenericDevices.IRegisterReader rr = ProcessData.RegisterReaders[i];
+ if (rr != null)
+ {
+ pulses[i].Text = rr.WMPulses.ToString();
+ refPulses[i].Text = rr.WMRefPulses.ToString();
+ volume[i].Text = rr.WMVolume.ToString("F1");
+ error[i].Text = BenchControl.Formulas.ErrorFromVolumes(rr.WMVolume, refVolume).ToString("F1");
+ }
+ }
+ }
+ else if (currentMetersKind == MetersKind.Combined)
+ {
+ for (int compMtr = 0; compMtr < Config.Data.CompoundWMsCount; compMtr++)
+ {
+ int end = Math.Min(2 * compMtr + 2, Math.Min(textBoxesCount, ProcessData.RegisterReaders.Length));
+
+ double compoundVolume = 0;
+ for (int i = 2 * compMtr; i < end; i++)
+ {
+ BenchControl.GenericDevices.IRegisterReader rr = ProcessData.RegisterReaders[i];
+ if (rr != null)
+ {
+ pulses[i].Text = rr.WMPulses.ToString();
+ refPulses[i].Text = rr.WMRefPulses.ToString();
+ volume[i].Text = rr.WMVolume.ToString("F1");
+ error[i].Text = BenchControl.Formulas.ErrorFromVolumes(rr.WMVolume, refVolume).ToString("F1");
+ compoundVolume += rr.WMVolume;
+ }
+ }
+
+ volume1zLabel.Text = compoundVolume.ToString("F1");
+ error1zLabel.Text = BenchControl.Formulas.ErrorFromVolumes(compoundVolume, refVolume).ToString("F1");
+ }
+ }
}
- //tInLabel.Text = args.Tin.ToString();
- //tOutLabel.Text = args.Tout.ToString();
- //prInLabel.Text = args.Pin.ToString();
- //prOutLabel.Text = args.Pout.ToString();
-
- //massLabel.Text = args.Mass.ToString();
-
- //if (args.Mass.Valid && args.StartMass.Valid)
- //{
- // massDiffLabel.Text = (args.Mass.Val - args.StartMass.Val).ToString(args.Mass.Format);
- //}
-
- //if (pumpOn != args.PumpOn || diverterToTank != args.DivToTank)
- //{
- // //if (pumpOn != args.PumpOn)
- // //{
- // // if (pumpOn) pumpPictureBox.Image = System.Resources.
- // // else pumpPictureBox.Image = System.Resources.
- // //}
- // pumpOn = args.PumpOn;
- // diverterToTank = args.DivToTank;
- // Invalidate();
- //}
+ //if (pumpOn != args.PumpOn || diverterToTank != args.DivToTank)
+ //{
+ // //if (pumpOn != args.PumpOn)
+ // //{
+ // // if (pumpOn) pumpPictureBox.Image = System.Resources.
+ // // else pumpPictureBox.Image = System.Resources.
+ // //}
+ // pumpOn = args.PumpOn;
+ // diverterToTank = args.DivToTank;
+ // Invalidate();
+ //}
}
void OnTestCompleted(object sender, TestCompletedEventArgs args)
diff --git a/TestBenchFramework/TBF.csproj b/TestBenchFramework/TBF.csproj
index 51475d3c7..a5671cac8 100644
--- a/TestBenchFramework/TBF.csproj
+++ b/TestBenchFramework/TBF.csproj
@@ -670,8 +670,6 @@
EntryFormCfgCtrl.cs
-
-
@@ -753,8 +751,6 @@
PressureMeterCfgCtrl.cs
-
-