IRegisterReader extended, ReadReferenceForRegisterOp removed, ReadRegisteOp integrated into RegisterReader class, ProcessTabPages updated.

This commit is contained in:
Milan Hanajik
2016-02-13 15:02:10 +01:00
parent 7534fc7c24
commit 3946d26cb4
22 changed files with 535 additions and 621 deletions
+2 -6
View File
@@ -1,6 +1,4 @@
iPerl: iPerl:
- naimplementovat Spooler pre OracleDB
- updatovat progress bary pre iPerl comm.
- neukladat process data pre UnknownPcbNr... vodomery - neukladat process data pre UnknownPcbNr... vodomery
- log pre pevny start, podobne (zarazky) ako pre letmy - log pre pevny start, podobne (zarazky) ako pre letmy
@@ -10,12 +8,10 @@ iPerl:
- v iPerlCommunication ponukat stringy v drop-down menu - v iPerlCommunication ponukat stringy v drop-down menu
- na Process obrazovke posunut stupacku a rezervoar uplne doprava - 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 - 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 - 'publish' a 'evaluate' pre vsetky metody
- prechadzat na double (results) - prechadzat na double (results)
@@ -27,7 +27,17 @@ namespace TBF.BenchControl.Cameras.CameraRoi
readonly GenericDevices.ICamera camera; readonly GenericDevices.ICamera camera;
public GenericDevices.ICamera Camera { get { return 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() public CameraRoi()
{ {
@@ -37,6 +47,7 @@ namespace TBF.BenchControl.Cameras.CameraRoi
: base(cfg) : base(cfg)
{ {
cameraRoiCfg = cfg; cameraRoiCfg = cfg;
ltrsPerPulse = (PulsesPerLtr <= float.Epsilon) ? 0 : (1 / PulsesPerLtr);
if (cfg.DebugLevel != DebugMode.Off) if (cfg.DebugLevel != DebugMode.Off)
{ {
@@ -50,6 +61,17 @@ namespace TBF.BenchControl.Cameras.CameraRoi
log.Debug(this.ToString()); log.Debug(this.ToString());
} }
public void Clear()
{
wmPulses = 0;
wmRefPulses = 0;
}
public void TestCompleted()
{
/// TODO: Implement
}
/// <summary> /// <summary>
/// Events: Event.ReadRegisterDone, Event.Error /// Events: Event.ReadRegisterDone, Event.Error
/// </summary> /// </summary>
@@ -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;
/// <summary>
/// Events: or Error
/// </summary>
/// <param name="register">Flow meter reference</param>
/// <param name="flow">Reference to the measured flow variable, value is in bar</param>
/// <param name="eventDone">Event to be returned by Run() when completed OK</param>
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)
{
}
/// <summary>Start this operation</summary>
public void Start()
{
}
/// <summary>Run this operation</summary>
/// <returns>
/// Event.FlowInDone or Event.FlowOutDone
/// </returns>
public Event Run()
{
pulses.Val = controlBoard.EtPulses(0);
return eventDone;
}
/// <summary>Stop this operation</summary>
public void Stop()
{
}
}
}
@@ -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;
/// <summary>
/// Events: Event.ReadRegisterDone or Event.Error
/// </summary>
/// <param name="reader">Register reader reference</param>
/// <param name="pulses">Reference to a field with the water meter pulses</param>
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());
}
/// <summary>
/// Events: Event.ReadRegisterDone or Event.Error
/// </summary>
/// <param name="reader">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.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);
}
}
/// <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()
{
}
}
}
@@ -1,5 +1,5 @@
/// ///
/// Copyright (c) 2013-2015 Sensus Metering Systems /// Copyright (c) 2013-2016 Sensus Metering Systems
/// ///
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@@ -8,7 +8,7 @@ using TBF.Boxes;
namespace TBF.BenchControl.Elde.FixedStartRegisterReader 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)); private static readonly ILog log = LogManager.GetLogger(typeof(RegisterReader));
public override string ToString() { return string.Format("FixedStartRegisterReader({0})", Cfg.ToString(1)); } 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 BeginWMState;
public float EndWMState; 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() public RegisterReader()
{ {
Clear();
} }
public RegisterReader(RegisterReaderCfg cfg, IList<Generic.IComponent> components) public RegisterReader(RegisterReaderCfg cfg, IList<Generic.IComponent> components)
: base(cfg) : base(cfg)
{ {
registerReaderCfg = cfg; registerReaderCfg = cfg;
ltrsPerPulse = (cfg.ProcParams.PulsesPerLtr <= float.Epsilon) ? 0 : (1 / cfg.ProcParams.PulsesPerLtr);
ControlBoard = (ControlBoardDev)TbfComponents.FindComponent(cfg.ParentName, components); controlBoard = (ControlBoardDev)TbfComponents.FindComponent(cfg.ParentName, components);
if (ControlBoard == null) throw new Exception("Cannot find " + Name + " parent"); if (controlBoard == null) throw new Exception("Cannot find " + Name + " parent");
/// Prepare data for SendCalibData() control board component method /// Prepare data for SendCalibData() control board component method
log.Debug(this.ToString()); log.Debug(this.ToString());
} }
public void Clear()
{
wmPulses = 0;
wmRefPulses = 0;
}
public void TestCompleted()
{
ReadPulses();
}
/// <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> /// <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 pulses) public IOperation ReadRegisterOp(ref IntBox pulsesBox)
{ {
return new ReadRegisterOp(this, ref pulses); this.pulsesBox = pulsesBox;
return this;
} }
/// <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> /// <param name="pulsesBox">Reference to a variable for the water meter pulses</param>
/// <param name="pulses">Reference to a variable for the related reference flowmeter pulses</param> /// <param name="refPulsesBox">Reference to a variable for the related reference flowmeter pulses</param>
/// <returns>Reference to operation object instance</returns> /// <returns>Reference to operation object instance</returns>
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;
} }
/// <summary>
/// Events: ReadReferenceDone, Error private void ReadPulses()
/// </summary> {
/// <param name="pulses">Reference to a variable for the water meter pulses</param> wmPulses = (int)(EndWMState - BeginWMState); /// TODO: replace 0
/// <returns>Reference to operation object instance</returns> wmRefPulses = (int)controlBoard.EtPulses(0);
public IOperation ReadReferenceForRegisterOp(ref IntBox pulses, ref IntBox refPulses)
pulsesBox.Val = wmPulses;
if (refPulsesBox != null) refPulsesBox.Val = wmRefPulses;
}
/// <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()
{ {
return new ReadReferenceForRegisterOp(this, ref pulses);
} }
} }
} }
@@ -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;
/// <summary>
/// Events: or Error
/// </summary>
/// <param name="register">Flow meter reference</param>
/// <param name="flow">Reference to the measured flow variable, value is in bar</param>
/// <param name="eventDone">Event to be returned by Run() when completed OK</param>
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)
{
}
/// <summary>Start this operation</summary>
public void Start()
{
}
/// <summary>Run this operation</summary>
/// <returns>
/// Event.FlowInDone or Event.FlowOutDone
/// </returns>
public Event Run()
{
pulses.Val = (int)controlBoard.EtPulses(registerNr);
return eventDone;
}
/// <summary>Stop this operation</summary>
public void Stop()
{
}
}
}
@@ -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;
/// <summary>
/// Events: Event.ReadRegisterDone or Event.Error
/// </summary>
/// <param name="reader">Register reader reference</param>
/// <param name="pulses">Reference to a field with the water meter pulses</param>
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());
}
/// <summary>
/// Events: Event.ReadRegisterDone or Event.Error
/// </summary>
/// <param name="reader">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.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);
}
}
/// <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()
{
}
}
}
@@ -1,5 +1,5 @@
/// ///
/// Copyright (c) 2013-2015 Sensus Metering Systems /// Copyright (c) 2013-2016 Sensus Metering Systems
/// ///
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@@ -8,7 +8,7 @@ using TBF.Boxes;
namespace TBF.BenchControl.Elde.RegisterReader 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)); private static readonly ILog log = LogManager.GetLogger(typeof(RegisterReader));
public override string ToString() { return string.Format("RegisterReader({0})", Cfg.ToString(1)); } public override string ToString() { return string.Format("RegisterReader({0})", Cfg.ToString(1)); }
@@ -16,57 +16,133 @@ namespace TBF.BenchControl.Elde.RegisterReader
readonly RegisterReaderCfg registerReaderCfg; readonly RegisterReaderCfg registerReaderCfg;
public int Position { get { return registerReaderCfg.Position; } } /// 1 .. inf 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;
/// <summary> This is to cope with counter overflow </summary>
int lastPulses;
bool lastPulsesValid;
readonly ControlBoardDev controlBoard;
public RegisterReader() public RegisterReader()
{ {
Clear();
} }
public RegisterReader(RegisterReaderCfg cfg, IList<Generic.IComponent> components) public RegisterReader(RegisterReaderCfg cfg, IList<Generic.IComponent> components)
: base(cfg) : base(cfg)
{ {
registerReaderCfg = cfg; registerReaderCfg = cfg;
ltrsPerPulse = (cfg.ProcParams.PulsesPerLtr <= float.Epsilon) ? 0 : (1 / cfg.ProcParams.PulsesPerLtr);
ControlBoard = (ControlBoardDev)TbfComponents.FindComponent(cfg.ParentName, components); controlBoard = (ControlBoardDev)TbfComponents.FindComponent(cfg.ParentName, components);
if (ControlBoard == null) throw new Exception("Cannot find " + Name + " parent"); if (controlBoard == null) throw new Exception("Cannot find " + Name + " parent");
/// Prepare data for SendCalibData() control board component method /// Prepare data for SendCalibData() control board component method
log.Debug(this.ToString()); log.Debug(this.ToString());
} }
public void Clear()
{
wmPulses = 0;
wmRefPulses = 0;
lastPulsesValid = false;
}
public void TestCompleted()
{
ReadPulses();
}
/// <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> /// <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 pulses) public IOperation ReadRegisterOp(ref IntBox pulsesBox)
{ {
return new ReadRegisterOp(this, ref pulses); this.pulsesBox = pulsesBox;
return this;
} }
/// <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> /// <param name="pulsesBox">Reference to a variable for the water meter pulses</param>
/// <param name="pulses">Reference to a variable for the related reference flowmeter pulses</param> /// <param name="refPulsesBox">Reference to a variable for the related reference flowmeter pulses</param>
/// <returns>Reference to operation object instance</returns> /// <returns>Reference to operation object instance</returns>
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;
} }
/// <summary>
/// Events: ReadReferenceDone, Error private void ReadPulses()
/// </summary> {
/// <param name="pulses">Reference to a variable for the water meter pulses</param> if (!lastPulsesValid)
/// <returns>Reference to operation object instance</returns> {
public IOperation ReadReferenceForRegisterOp(ref IntBox pulses, ref IntBox refPulses) 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;
}
/// <summary>Start this operation</summary>
public void Start()
{
lastPulsesValid = false;
ReadPulses();
}
/// <summary>Run this operation</summary>
/// <returns>eventDone</returns>
public Event Run()
{
ReadPulses();
return Event.ReadRegisterDone;
}
/// <summary>Stop this operation</summary>
public void Stop()
{ {
return new ReadReferenceForRegisterOp(this, ref pulses);
} }
} }
} }
@@ -8,9 +8,19 @@ namespace TBF.BenchControl.GenericDevices
{ {
public interface IRegisterReader : IComponent 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);
IOperation ReadRegisterOp(ref IntBox pulses, ref IntBox refPulses); IOperation ReadRegisterOp(ref IntBox pulses, ref IntBox refPulses);
IOperation ReadReferenceForRegisterOp(ref IntBox pulses, ref IntBox refPulses);
} }
} }
@@ -513,13 +513,15 @@ namespace TBF.BenchControl.Sequences
if (testMethodSequence != null && testMethodSequence.CanTest(StateMachine.Procedure.MetersKind)) if (testMethodSequence != null && testMethodSequence.CanTest(StateMachine.Procedure.MetersKind))
{ {
StateMachine.LoadTestParams(test); 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) {
if ((rr is WaterMeters.iPerl.WaterMeter) && (BenchInfo != null))
{
(rr as WaterMeters.iPerl.WaterMeter).BenchName = BenchInfo.TestBenchName; (rr as WaterMeters.iPerl.WaterMeter).BenchName = BenchInfo.TestBenchName;
} }
}
e = testMethodSequence.Execute(test); e = testMethodSequence.Execute(test);
@@ -570,13 +572,15 @@ namespace TBF.BenchControl.Sequences
if (testMethodSequence != null && testMethodSequence.CanTest(StateMachine.Procedure.MetersKind)) if (testMethodSequence != null && testMethodSequence.CanTest(StateMachine.Procedure.MetersKind))
{ {
StateMachine.LoadTestParams(test); 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) {
if ((rr is WaterMeters.iPerl.WaterMeter) && (BenchInfo != null))
{
(rr as WaterMeters.iPerl.WaterMeter).BenchName = BenchInfo.TestBenchName; (rr as WaterMeters.iPerl.WaterMeter).BenchName = BenchInfo.TestBenchName;
} }
}
e = testMethodSequence.Execute(test); e = testMethodSequence.Execute(test);
@@ -17,10 +17,10 @@ namespace TBF.BenchControl.Sequences
public static FloatBox PressureUp = new FloatBox() { Name = "Pressure In", Format = "F3", Factor = 0.01f }; 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 FloatBox PressureDown = new FloatBox() { Name = "Pressure Out", Format = "F3", Factor = 0.01f };
public static float LtrPerRefPulse; /// to calculate the ref.volume
public static IntBox RefCount = new IntBox() { Name = "RefCount" }; public static IntBox RefCount = new IntBox() { Name = "RefCount" };
public static FloatBox RefFreq = new FloatBox() { Name = "RefFreq", Format = "F2" }; 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 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 Mass = new FloatBox() { Name = "Mass", Format = "F3" }; /// [kg]
public static FloatBox StartMass = new FloatBox() { Name = "Start Mass", Format = "F3" }; /// [kg] public static FloatBox StartMass = new FloatBox() { Name = "Start Mass", Format = "F3" }; /// [kg]
@@ -29,10 +29,40 @@ namespace TBF.BenchControl.Sequences
public static DateTime TestStartTime; public static DateTime TestStartTime;
public static DateTime TestEndTime; public static DateTime TestEndTime;
public static Results.BatchResults BatchRslts; 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];
}
/// <summary>
/// To clear process values at the beginning of each test
/// </summary>
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.) /// Statistics of 'continuous' variables (temperature, pressure, flow, etc.)
/// ///
@@ -86,30 +86,6 @@ namespace TBF.BenchControl.Sequences
protected static FloatBox[] WMVolumes; protected static FloatBox[] WMVolumes;
protected static FloatBox[] WMErrors; protected static FloatBox[] WMErrors;
/// <summary>
/// To clear process values at the beginning of each test
/// </summary>
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 /// Process data logging
@@ -310,8 +310,8 @@ namespace TBF.BenchControl.TestMethods.Adjustment
meterRslt.PulsesMaster = Convert.ToDouble(WMRefPulses[i]); meterRslt.PulsesMaster = Convert.ToDouble(WMRefPulses[i]);
meterRslt.VolumeStart = 0; /// liter meterRslt.VolumeStart = 0; /// liter
meterRslt.VolumeEnd = 0; /// liter meterRslt.VolumeEnd = 0; /// liter
meterRslt.VolumeMeter = (meterRslt.PulsesPerLiter <= float.Epsilon) ? 0 : meterRslt.PulsesMeter / meterRslt.PulsesPerLiter; meterRslt.VolumeMeter = meterRslt.PulsesMeter * regReader.LtrsPerPulse; /// liter
meterRslt.VolumeRef = tstRslt.ConstMaster * meterRslt.PulsesMaster; /// liter meterRslt.VolumeRef = meterRslt.PulsesMaster * tstRslt.ConstMaster; /// liter
meterRslt.TestTime = tstRslt.TestTime; meterRslt.TestTime = tstRslt.TestTime;
meterRslt.Error = Formulas.ErrorFromVolumes(meterRslt.VolumeMeter, meterRslt.VolumeRef); meterRslt.Error = Formulas.ErrorFromVolumes(meterRslt.VolumeMeter, meterRslt.VolumeRef);
meterRslt.Passed = (meterRslt.Error >= test.ErrLimLo + test.Uncertainty) meterRslt.Passed = (meterRslt.Error >= test.ErrLimLo + test.Uncertainty)
@@ -416,9 +416,7 @@ namespace TBF.BenchControl.TestMethods.CombinedMeters
meterRslt.VolumeStart = 0; meterRslt.VolumeStart = 0;
meterRslt.VolumeEnd = 0; meterRslt.VolumeEnd = 0;
meterRslt.VolumeRef = tstRslt.VolumeCTV; meterRslt.VolumeRef = tstRslt.VolumeCTV;
meterRslt.VolumeMeter = meterRslt.PulsesMeter * regReader.LtrsPerPulse; /// liter
meterRslt.VolumeMeter = (regReader.PulsesPerLtr <= float.Epsilon)
? 0 : meterRslt.PulsesMeter / meterRslt.PulsesPerLiter;
if (meterRslt.PulsesMaster != 0) if (meterRslt.PulsesMaster != 0)
{ {
@@ -593,9 +593,8 @@ namespace TBF.BenchControl.TestMethods.CombinedWithDetection
meterRslt.VolumeEnd = 0; meterRslt.VolumeEnd = 0;
meterRslt.VolumeRef = tstRslt.VolumeCTV; meterRslt.VolumeRef = tstRslt.VolumeCTV;
meterRslt.VolumeMeter = (regReader.PulsesPerLtr <= float.Epsilon) meterRslt.VolumeMeter = meterRslt.PulsesMeter * regReader.LtrsPerPulse; /// liter
? 0 : meterRslt.PulsesMeter / meterRslt.PulsesPerLiter; ///
if (meterRslt.PulsesMaster != 0) if (meterRslt.PulsesMaster != 0)
{ {
meterRslt.VolumeMeter *= (tstRslt.PulsesMaster / meterRslt.PulsesMaster); meterRslt.VolumeMeter *= (tstRslt.PulsesMaster / meterRslt.PulsesMaster);
@@ -285,8 +285,8 @@ namespace TBF.BenchControl.TestMethods.FlyingStart
meterRslt.TestTime = tstRslt.TestTime; /// TODO: Malo by sa citat z dosky meterRslt.TestTime = tstRslt.TestTime; /// TODO: Malo by sa citat z dosky
meterRslt.VolumeStart = 0; meterRslt.VolumeStart = 0;
meterRslt.VolumeEnd = 0; meterRslt.VolumeEnd = 0;
meterRslt.VolumeMeter = (meterRslt.PulsesPerLiter <= float.Epsilon) ? 0 : meterRslt.PulsesMeter / meterRslt.PulsesPerLiter; meterRslt.VolumeMeter = meterRslt.PulsesMeter * regReader.LtrsPerPulse; /// liter
meterRslt.VolumeRef = tstRslt.ConstMaster * meterRslt.PulsesMaster; /// liter meterRslt.VolumeRef = meterRslt.PulsesMaster * tstRslt.ConstMaster; /// liter
} }
meterRslt.Error = Formulas.ErrorFromVolumes(meterRslt.VolumeMeter, meterRslt.VolumeRef); meterRslt.Error = Formulas.ErrorFromVolumes(meterRslt.VolumeMeter, meterRslt.VolumeRef);
@@ -472,8 +472,8 @@ namespace TBF.BenchControl.TestMethods.FlyingStartMassCollection
meterRslt.TestTime = tstRslt.TestTime; /// TODO: Malo by sa citat z dosky meterRslt.TestTime = tstRslt.TestTime; /// TODO: Malo by sa citat z dosky
meterRslt.VolumeStart = 0; /// liter meterRslt.VolumeStart = 0; /// liter
meterRslt.VolumeEnd = 0; /// liter meterRslt.VolumeEnd = 0; /// liter
meterRslt.VolumeMeter = (meterRslt.PulsesPerLiter <= float.Epsilon) ? 0 : meterRslt.PulsesMeter / meterRslt.PulsesPerLiter; meterRslt.VolumeMeter = meterRslt.PulsesMeter * regReader.LtrsPerPulse; /// liter
meterRslt.VolumeRef = tstRslt.ConstMaster * meterRslt.PulsesMaster; /// liter meterRslt.VolumeRef = meterRslt.PulsesMaster * tstRslt.ConstMaster; /// liter
} }
meterRslt.Error = Formulas.ErrorFromVolumes(meterRslt.VolumeMeter, meterRslt.VolumeRef); meterRslt.Error = Formulas.ErrorFromVolumes(meterRslt.VolumeMeter, meterRslt.VolumeRef);
@@ -29,7 +29,9 @@ namespace TBF.BenchControl.WaterMeters.iPerl
public int MuxBoardNr { get { return iPerlCfg.MuxBoardNr; } } public int MuxBoardNr { get { return iPerlCfg.MuxBoardNr; } }
public int Group { get { return iPerlCfg.Group; } } 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;
/// <summary>WaterMeter producer</summary> /// <summary>WaterMeter producer</summary>
public string Producer { get { return iPerlCfg.ProcParams.Producer; } } public string Producer { get { return iPerlCfg.ProcParams.Producer; } }
@@ -119,6 +121,20 @@ namespace TBF.BenchControl.WaterMeters.iPerl
public double NominalTestFlow; /// liter per hour 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;
/// <summary> /// <summary>
/// New calibration factor calculated from the original factor (argument) /// New calibration factor calculated from the original factor (argument)
/// and results of the last test. /// and results of the last test.
@@ -282,6 +298,8 @@ namespace TBF.BenchControl.WaterMeters.iPerl
ClearData(); ClearData();
iPerlCfg = cfg; iPerlCfg = cfg;
ltrsPerPulse = (cfg.ProcParams.PulsesPerLtr <= float.Epsilon) ? 0 : (1 / cfg.ProcParams.PulsesPerLtr);
log.Debug(this.ToString()); log.Debug(this.ToString());
} }
@@ -429,16 +447,23 @@ namespace TBF.BenchControl.WaterMeters.iPerl
} }
/// <summary> /// <summary>
/// Events: ReadReferenceDone, Error /// Clear data/counters related to a specific tests
/// </summary> /// </summary>
/// <param name="pulses">Reference to a variable for the water meter pulses</param> public void Clear()
/// <param name="refPulses">Reference to a variable for the water meter pulses</param>
/// <returns>Reference to operation object instance</returns>
public IOperation ReadReferenceForRegisterOp(ref Boxes.IntBox pulses, ref Boxes.IntBox refPulses)
{ {
this.pulses = pulses; sampleNr = 0;
this.refPulses = refPulses;
return this; volumeLtr = 0;
volumeLtr0 = 0;
timestampSec = 0;
timestampSec0 = 0;
ReadPulses();
}
public void TestCompleted()
{
/// TODO: Implement
} }
@@ -447,6 +472,8 @@ namespace TBF.BenchControl.WaterMeters.iPerl
/// <summary>Start this operation</summary> /// <summary>Start this operation</summary>
public void Start() public void Start()
{ {
Clear();
/// Reset opto data /// Reset opto data
optoDataCount = 0; optoDataCount = 0;
TestStartTelegramIx = 0; TestStartTelegramIx = 0;
@@ -469,14 +496,6 @@ namespace TBF.BenchControl.WaterMeters.iPerl
flowNr, flowNr,
StateMachine.CycleStartHH_MI_SS); StateMachine.CycleStartHH_MI_SS);
sampleNr = 0;
volumeLtr = 0;
volumeLtr0 = 0;
timestampSec = 0;
timestampSec0 = 0;
ReadPulses();
StartParsingOptoSerialPort(); StartParsingOptoSerialPort();
} }
@@ -561,9 +580,14 @@ namespace TBF.BenchControl.WaterMeters.iPerl
void ReadPulses() void ReadPulses()
{ {
pulses.Val = (int)((volumeLtr - volumeLtr0) * (double)PulsesPerLtr + 0.5); wmVolume = volumeLtr - volumeLtr0;
if (timeSec != null) timeSec.Val = timestampSec - timestampSec0; wmPulses = (int)(wmVolume * (double)PulsesPerLtr + 0.5);
if (refPulses != null) refPulses.Val = StateMachine.ControlBoard.EtPulses(0); wmRefPulses = StateMachine.ControlBoard.EtPulses(0);
wmTestTime = timestampSec - timestampSec0;
pulses.Val = wmPulses;
if (refPulses != null) refPulses.Val = wmRefPulses;
if (timeSec != null) timeSec.Val = wmTestTime;
} }
@@ -400,13 +400,18 @@ namespace TBF.Screens
massLabel.Text = ProcessData.Mass.ToString(); massLabel.Text = ProcessData.Mass.ToString();
if (args.TestPhase == Config.Entities.Progress.FlowSetting)
{
/// ///
/// Available when setting the flow /// Available when setting the flow
/// ///
refFreqLabel.Text = ProcessData.RefFreq.ToString(); refFreqLabel.Text = ProcessData.RefFreq.ToString();
refFlowLabel.Text = Utils.FloatToStr(ProcessData.RefFlow.Val, 4); 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 /// Available during a test
/// ///
@@ -422,28 +427,42 @@ namespace TBF.Screens
if (currentMetersKind == MetersKind.Single) if (currentMetersKind == MetersKind.Single)
{ {
for (int i = 0; i < textBoxesCount; i++) for (int i = 0; i < Math.Min(textBoxesCount, ProcessData.RegisterReaders.Length); i++)
{ {
/// TODO: Reimplement BenchControl.GenericDevices.IRegisterReader rr = ProcessData.RegisterReaders[i];
//pulses[i].Text = args.TestResult.Meters[i].PulsesMeter.ToString(); if (rr != null)
//refPulses[i].Text = args.TestResult.Meters[i].PulsesMaster.ToString(); {
//volume[i].Text = args.TestResult.Meters[i].VolumeMeter.ToString(); pulses[i].Text = rr.WMPulses.ToString();
//error[i].Text = args.TestResult.Meters[i].VolumeErrorPct.ToString("F2"); 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) else if (currentMetersKind == MetersKind.Combined)
{ {
for (int i = 0; i < 2; i++) for (int compMtr = 0; compMtr < Config.Data.CompoundWMsCount; compMtr++)
{ {
/// TODO: Reimplement int end = Math.Min(2 * compMtr + 2, Math.Min(textBoxesCount, ProcessData.RegisterReaders.Length));
//pulses[i].Text = args.TestResult.Meters[i].PulsesMeter.ToString();
//refPulses[i].Text = args.TestResult.Meters[i].PulsesMaster.ToString(); double compoundVolume = 0;
//volume[i].Text = args.TestResult.Meters[i].VolumeMeter.ToString(); for (int i = 2 * compMtr; i < end; i++)
//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");
compoundVolume += rr.WMVolume;
}
}
volume1zLabel.Text = compoundVolume.ToString("F1");
error1zLabel.Text = BenchControl.Formulas.ErrorFromVolumes(compoundVolume, refVolume).ToString("F1");
}
} }
/// 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 || diverterToTank != args.DivToTank)
@@ -456,26 +456,41 @@ namespace TBF.Screens
if (currentMetersKind == MetersKind.Single) 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(); BenchControl.GenericDevices.IRegisterReader rr = ProcessData.RegisterReaders[i];
//refPulses[i].Text = args.TestResult.Meters[i].PulsesMaster.ToString(); if (rr != null)
//volume[i].Text = args.TestResult.Meters[i].VolumeMeter.ToString(); {
//error[i].Text = args.TestResult.Meters[i].VolumeErrorPct.ToString("F2"); 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) 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(); int end = Math.Min(2 * compMtr+2, Math.Min(textBoxesCount, ProcessData.RegisterReaders.Length));
//refPulses[i].Text = args.TestResult.Meters[i].PulsesMaster.ToString();
//volume[i].Text = args.TestResult.Meters[i].VolumeMeter.ToString(); double compoundVolume = 0;
//error[i].Text = args.TestResult.Meters[i].VolumeErrorPct.ToString("F2"); 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 = args.TestResult.CombinedMeters[0].VolumeMeter.ToString(); volume1zLabel.Text = compoundVolume.ToString("F1");
//error1zLabel.Text = args.TestResult.CombinedMeters[0].VolumeErrorPct.ToString("F2"); error1zLabel.Text = BenchControl.Formulas.ErrorFromVolumes(compoundVolume, refVolume).ToString("F1");
}
} }
} }
@@ -20,6 +20,15 @@ namespace TBF.Screens
MetersKind currentMetersKind; MetersKind currentMetersKind;
int textBoxesCount;
Label[] sensor;
Label[] pulses;
Label[] refPulses;
Label[] volume;
Label[] error;
Label[] passed;
bool pumpOn = true; bool pumpOn = true;
bool diverterToTank = true; bool diverterToTank = true;
@@ -32,6 +41,13 @@ namespace TBF.Screens
InitializeComponent(); 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) Bridge.ProcedureSelectedHandler += delegate(object sndr, ProcedureSelectedEventArgs args)
{ {
if (InvokeRequired) if (InvokeRequired)
@@ -355,101 +371,87 @@ namespace TBF.Screens
void OnProcessDataChanged(object sender, ProcessDataEventArgs args) void OnProcessDataChanged(object sender, ProcessDataEventArgs args)
{ {
/// Top part ///
//airTempLabel.Text = args.AmbientTemp.ToString(); /// Always available
//airPressLabel.Text = args.AmbientPressure.ToString(); ///
//airHumiLabel.Text = args.AmbientHumidity.ToString(); airTempLabel.Text = ProcessData.AmbientTemp.ToString();
airPressLabel.Text = ProcessData.AmbientPressure.ToString();
airHumiLabel.Text = ProcessData.AmbientHumidity.ToString();
//refPulsesLabel.Text = args.RefPulses.ToString(); tInLabel.Text = ProcessData.TempIn.ToString();
//refFreqLabel.Text = args.FlowMtrFreq.ToString(); tOutLabel.Text = ProcessData.TempOut.ToString();
//refFlowLabel.Text = Utils.FloatToStr(args.Flow.Val, 4); tDivLabel.Text = ProcessData.TempDiv.ToString();
//refVolumeLabel.Text = args.Volume.ToString();
//regValvePosLabel.Text = args.RegValvePos.ToString(); prInLabel.Text = ProcessData.PressureUp.ToString();
//tDivLabel.Text = args.Tdiv.ToString(); prOutLabel.Text = ProcessData.PressureDown.ToString();
/// Bottom part massLabel.Text = ProcessData.Mass.ToString();
/// 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");
if (Config.Data.WMsCount >= 2) if (args.TestPhase == Config.Entities.Progress.FlowSetting)
{ {
/// TODO: Reimplement ///
//pulses2Label.Text = args.TestResult.Meters[1].PulsesMeter.ToString(); /// Available when setting the flow
//refPulses2Label.Text = args.TestResult.Meters[1].PulsesMaster.ToString(); ///
//volume2Label.Text = args.TestResult.Meters[1].VolumeMeter.ToString(); refFreqLabel.Text = ProcessData.RefFreq.ToString();
//error2Label.Text = args.TestResult.Meters[1].VolumeErrorPct.ToString("F2"); refFlowLabel.Text = Utils.FloatToStr(ProcessData.RefFlow.Val, 4);
}
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) || if (args.TestPhase == Config.Entities.Progress.FlowSetting ||
(currentMetersKind == MetersKind.Combined && Config.Data.WMsCount >= 4)) args.TestPhase == Config.Entities.Progress.Test)
{ {
/// TODO: Reimplement ///
//pulses3Label.Text = args.TestResult.Meters[2].PulsesMeter.ToString(); /// Available during a test
//refPulses3Label.Text = args.TestResult.Meters[2].PulsesMaster.ToString(); ///
//volume3Label.Text = args.TestResult.Meters[2].VolumeMeter.ToString(); refPulsesLabel.Text = ProcessData.RefCount.ToString();
//error3Label.Text = args.TestResult.Meters[2].VolumeErrorPct.ToString("F2"); 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");
} }
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) }
else if (currentMetersKind == MetersKind.Combined)
{ {
/// TODO: Reimplement for (int compMtr = 0; compMtr < Config.Data.CompoundWMsCount; compMtr++)
//volume2zLabel.Text = args.TestResult.CombinedMeters[1].VolumeMeter.ToString(); {
//error2zLabel.Text = args.TestResult.CombinedMeters[1].VolumeErrorPct.ToString("F2"); 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;
}
} }
if ((currentMetersKind == MetersKind.Single && Config.Data.WMsCount >= 5) || volume1zLabel.Text = compoundVolume.ToString("F1");
(currentMetersKind == MetersKind.Combined && Config.Data.WMsCount >= 6)) error1zLabel.Text = BenchControl.Formulas.ErrorFromVolumes(compoundVolume, refVolume).ToString("F1");
{
/// 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");
} }
//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 || diverterToTank != args.DivToTank)
//{ //{
// //if (pumpOn != args.PumpOn) // //if (pumpOn != args.PumpOn)
-4
View File
@@ -670,8 +670,6 @@
<DependentUpon>EntryFormCfgCtrl.cs</DependentUpon> <DependentUpon>EntryFormCfgCtrl.cs</DependentUpon>
</Compile> </Compile>
<Compile Include="BenchControl\DataEntry\WMStates\EntryFormFactory.cs" /> <Compile Include="BenchControl\DataEntry\WMStates\EntryFormFactory.cs" />
<Compile Include="BenchControl\Elde\FixedStartRegisterReader\ReadReferenceForRegisterOp.cs" />
<Compile Include="BenchControl\Elde\FixedStartRegisterReader\ReadRegisterOp.cs" />
<Compile Include="BenchControl\Elde\FixedStartRegisterReader\RegisterReader.cs" /> <Compile Include="BenchControl\Elde\FixedStartRegisterReader\RegisterReader.cs" />
<Compile Include="BenchControl\Elde\FixedStartRegisterReader\RegisterReaderCfg.cs" /> <Compile Include="BenchControl\Elde\FixedStartRegisterReader\RegisterReaderCfg.cs" />
<Compile Include="BenchControl\Elde\FixedStartRegisterReader\RegisterReaderCfgCtrl.cs"> <Compile Include="BenchControl\Elde\FixedStartRegisterReader\RegisterReaderCfgCtrl.cs">
@@ -753,8 +751,6 @@
<Compile Include="BenchControl\Elde\PressureMeter\PressureMeterCfgCtrl.Designer.cs"> <Compile Include="BenchControl\Elde\PressureMeter\PressureMeterCfgCtrl.Designer.cs">
<DependentUpon>PressureMeterCfgCtrl.cs</DependentUpon> <DependentUpon>PressureMeterCfgCtrl.cs</DependentUpon>
</Compile> </Compile>
<Compile Include="BenchControl\Elde\RegisterReader\ReadReferenceForRegisterOp.cs" />
<Compile Include="BenchControl\Elde\RegisterReader\ReadRegisterOp.cs" />
<Compile Include="BenchControl\Elde\Pump\Pump.cs" /> <Compile Include="BenchControl\Elde\Pump\Pump.cs" />
<Compile Include="BenchControl\Elde\Pump\PumpCfg.cs" /> <Compile Include="BenchControl\Elde\Pump\PumpCfg.cs" />
<Compile Include="BenchControl\Elde\Pump\PumpCfgCtrl.cs"> <Compile Include="BenchControl\Elde\Pump\PumpCfgCtrl.cs">