From 06a401a1ff4a53ec1a3eeec5221f79e79ac1646d Mon Sep 17 00:00:00 2001 From: Michal Buzik Date: Fri, 21 Nov 2025 14:14:23 +0100 Subject: [PATCH] bugFix - Morrisville - SerialNr, WMBegginValue Add support for `ICommonRegReader` interface, enhance `ISmartReader` functionality, and update water meter state handling logic across multiple classes. --- TBF/Rig/DataEntry/PoseidonCmd/EntryForm.cs | 6 +-- .../implementations/SmartReader.cs | 10 +---- .../PoseidonCmdStartStop/PoseidonReader.cs | 9 +++-- .../PoseidonReader/SmartReader.cs | 4 +- .../implementations/PoseidonReader.cs | 37 +++++++++++++++---- .../StandingStart/StandingStartSeq.cs | 7 ++++ .../StandingStartMassCollectionSeq.cs | 20 ++++++++++ .../iPerlCommunication/iPerlHead/IperlHead.cs | 4 +- .../common/ICommonRegReader.cs | 16 ++++++++ .../common/ISmartReader.cs | 7 +++- TBF/TBF.csproj | 1 + 11 files changed, 90 insertions(+), 31 deletions(-) create mode 100644 TBF/Rig/Uni/SharedDialogs/SmartMetersCommunication/common/ICommonRegReader.cs diff --git a/TBF/Rig/DataEntry/PoseidonCmd/EntryForm.cs b/TBF/Rig/DataEntry/PoseidonCmd/EntryForm.cs index d37c5310a..5975229b3 100644 --- a/TBF/Rig/DataEntry/PoseidonCmd/EntryForm.cs +++ b/TBF/Rig/DataEntry/PoseidonCmd/EntryForm.cs @@ -134,12 +134,8 @@ namespace TBF.Rig.DataEntry.PoseidonCmd PoseidonReader poseidonReader = (reader as PoseidonReader); if (waterMeters.Count > iterator) { - if(string.IsNullOrEmpty(poseidonReader.SerialNr)) + if(!string.IsNullOrEmpty(poseidonReader.SerialNr)) waterMeters[iterator].SerialNr = poseidonReader.SerialNr; - else - { - waterMeters[iterator].SerialNr = "*"; - } } } diff --git a/TBF/Rig/RegisterReaders/IPerlReader/implementations/SmartReader.cs b/TBF/Rig/RegisterReaders/IPerlReader/implementations/SmartReader.cs index 71b341b68..7c34fe550 100644 --- a/TBF/Rig/RegisterReaders/IPerlReader/implementations/SmartReader.cs +++ b/TBF/Rig/RegisterReaders/IPerlReader/implementations/SmartReader.cs @@ -506,15 +506,9 @@ namespace TBF.Rig.RegisterReaders.IPerlReader.implementations get { return wmVolume; } } - public double BeginWMState - { - get { return beginWMState; } - } + public double BeginWMState { get { return beginWMState; } set { beginWMState = value; } } - public double EndWMState - { - get { return endWMState; } - } + public double EndWMState { get { return endWMState; } set { endWMState = value; } } public IOperation ReadDatastreamOp() { diff --git a/TBF/Rig/RegisterReaders/PoseidonCmdStartStop/PoseidonReader.cs b/TBF/Rig/RegisterReaders/PoseidonCmdStartStop/PoseidonReader.cs index d8da47f93..437cb113b 100644 --- a/TBF/Rig/RegisterReaders/PoseidonCmdStartStop/PoseidonReader.cs +++ b/TBF/Rig/RegisterReaders/PoseidonCmdStartStop/PoseidonReader.cs @@ -17,10 +17,11 @@ using TBF.Rig.Generic; using TBF.Rig.GenericDevices; using TBF.Rig.RegisterReaders.SerialStream; using TBF.Rig.RegisterReaders.StandingStartStop; +using TBF.Rig.Uni.SharedDialogs.SmartMetersCommunication.common; namespace TBF.Rig.RegisterReaders.PoseidonCmdStartStop { - public class PoseidonReader : ComponentBase, IDevice, IRegReaderDatastream, ISessionDataMngmnt, IOperation + public class PoseidonReader : ComponentBase, IDevice, IRegReaderDatastream, ISessionDataMngmnt, IOperation, ICommonRegReader { private static readonly ILog log = LogManager.GetLogger(typeof(PoseidonReader)); public override string ToString() { return string.Format("{0}({1})", ClassName, Cfg.ToString(-1)); } @@ -134,10 +135,10 @@ namespace TBF.Rig.RegisterReaders.PoseidonCmdStartStop public int WMPulses { get { return wmPulses; } } public int WMRefPulses { get { return wmRefPulses; } } public double WMVolume { get { return wmVolume; } } - public double BeginWMState { get { return beginWMState; } } - public double EndWMState { get { return endWMState; } } + public double BeginWMState { get { return beginWMState; } set { beginWMState = value;} } + public double EndWMState { get { return endWMState; } set { endWMState = value;} } public double WMTestTime { get { return wmTestTime; } } - public string SerialNr { get => wmSerialNr; } + public string SerialNr { get => wmSerialNr; set => wmSerialNr = value; } double beginWMState; diff --git a/TBF/Rig/RegisterReaders/PoseidonReader/SmartReader.cs b/TBF/Rig/RegisterReaders/PoseidonReader/SmartReader.cs index aebebbfd6..538cdbf52 100644 --- a/TBF/Rig/RegisterReaders/PoseidonReader/SmartReader.cs +++ b/TBF/Rig/RegisterReaders/PoseidonReader/SmartReader.cs @@ -369,8 +369,8 @@ namespace TBF.Rig.RegisterReaders.PoseidonReader public int WMPulses { get { return wmPulses; } } public int WMRefPulses { get { return wmRefPulses; }} public double WMVolume { get { return wmVolume; } } - public double BeginWMState { get { return beginWMState; } } - public double EndWMState { get { return endWMState; } } + public double BeginWMState { get { return beginWMState;} set => beginWMState = value; } + public double EndWMState { get { return endWMState; } set => endWMState = value; } public IOperation ReadDatastreamOp() { return this; diff --git a/TBF/Rig/RegisterReaders/PoseidonReader/implementations/PoseidonReader.cs b/TBF/Rig/RegisterReaders/PoseidonReader/implementations/PoseidonReader.cs index b855db6c3..aaecb32c3 100644 --- a/TBF/Rig/RegisterReaders/PoseidonReader/implementations/PoseidonReader.cs +++ b/TBF/Rig/RegisterReaders/PoseidonReader/implementations/PoseidonReader.cs @@ -17,7 +17,18 @@ namespace TBF.Rig.RegisterReaders.PoseidonReader.implementations public class PoseidonReader : ComponentBase, IDevice, IRegReaderDatastream, ISessionDataMngmnt, IOperation, ISmartReader { private static readonly ILog log = LogManager.GetLogger(typeof(PoseidonReader)); - + + public PoseidonReader() + { + _pulsesPerLtr = 0; + _ltrsPerPulse = 0; + _wmPulses = 0; + _wmRefPulses = 0; + _wmVolume = 0; + _beginWmState = 0; + _endWmState = 0; + } + public override string ToString() { return string.Format("{0}({1})", ClassName, Cfg.ToString(-1)); @@ -101,13 +112,23 @@ namespace TBF.Rig.RegisterReaders.PoseidonReader.implementations throw new System.NotImplementedException(); } - public double PulsesPerLtr { get; } - public double LtrsPerPulse { get; } - public int WMPulses { get; } - public int WMRefPulses { get; } - public double WMVolume { get; } - public double BeginWMState { get; } - public double EndWMState { get; } + private double _pulsesPerLtr ; + private double _ltrsPerPulse ; + private int _wmPulses ; + private int _wmRefPulses ; + private double _wmVolume ; + private double _beginWmState ; + private double _endWmState ; + + + public double PulsesPerLtr { get => _pulsesPerLtr; } + public double LtrsPerPulse { get => _ltrsPerPulse; } + public int WMPulses { get => _wmPulses; } + public int WMRefPulses { get =>_wmRefPulses; } + public double WMVolume { get =>_wmVolume; } + public double BeginWMState { get => _beginWmState; set => _beginWmState = value; } + public double EndWMState { get => _endWmState; set => _endWmState = value; } + public IOperation ReadDatastreamOp() { throw new System.NotImplementedException(); diff --git a/TBF/Rig/TestMethods/StandingStart/StandingStartSeq.cs b/TBF/Rig/TestMethods/StandingStart/StandingStartSeq.cs index fa99dca35..1486c2df0 100644 --- a/TBF/Rig/TestMethods/StandingStart/StandingStartSeq.cs +++ b/TBF/Rig/TestMethods/StandingStart/StandingStartSeq.cs @@ -9,6 +9,7 @@ using Common; using TBF.Boxes; using TBF.Resources; using TBF.Rig.GenericDevices; +using TBF.Rig.Uni.SharedDialogs.SmartMetersCommunication.common; using TBF.UiBridge; namespace TBF.Rig.TestMethods.StandingStart @@ -511,6 +512,9 @@ namespace TBF.Rig.TestMethods.StandingStart for (int i = 0; i < waterMetersCount; i++) { GenericDevices.IRegReader rr = sensPath.RegisterReaders[i]; + + if (rr is ISmartReader) + (rr as ISmartReader).BeginWMState = dataEntryCmpnt.WMStartState(i); if (rr is Rig.RegisterReaders.StandingStartStop.RegisterReader) (rr as Rig.RegisterReaders.StandingStartStop.RegisterReader).BeginWMState = dataEntryCmpnt.WMStartState(i); @@ -763,6 +767,9 @@ namespace TBF.Rig.TestMethods.StandingStart { GenericDevices.IRegReader rr = sensPath.RegisterReaders[i]; + if (rr is ISmartReader) + (rr as ISmartReader).EndWMState = dataEntryCmpnt.WMEndState(i); + if (rr is Rig.RegisterReaders.StandingStartStop.RegisterReader) (rr as Rig.RegisterReaders.StandingStartStop.RegisterReader).EndWMState = dataEntryCmpnt.WMEndState(i); diff --git a/TBF/Rig/TestMethods/StandingStartMassCollection/StandingStartMassCollectionSeq.cs b/TBF/Rig/TestMethods/StandingStartMassCollection/StandingStartMassCollectionSeq.cs index 00d7c37d2..7bcab41c9 100644 --- a/TBF/Rig/TestMethods/StandingStartMassCollection/StandingStartMassCollectionSeq.cs +++ b/TBF/Rig/TestMethods/StandingStartMassCollection/StandingStartMassCollectionSeq.cs @@ -11,6 +11,7 @@ using Config.Entities; using TBF.Boxes; using TBF.Resources; using TBF.Rig.GenericDevices; +using TBF.Rig.Uni.SharedDialogs.SmartMetersCommunication.common; using TBF.UiBridge; namespace TBF.Rig.TestMethods.StandingStartMassCollection @@ -593,8 +594,15 @@ namespace TBF.Rig.TestMethods.StandingStartMassCollection { for (int i = 0; i < waterMetersCount; i++) { + IRegReader rr = sensPath.RegisterReaders[i]; + + if (rr is ICommonRegReader) + { + (rr as ICommonRegReader).BeginWMState = dataEntryCmpnt.WMStartState(i); + } + if (rr is Rig.RegisterReaders.StandingStartStop.RegisterReader) (rr as Rig.RegisterReaders.StandingStartStop.RegisterReader).BeginWMState = dataEntryCmpnt.WMStartState(i); @@ -951,6 +959,10 @@ namespace TBF.Rig.TestMethods.StandingStartMassCollection for (int i = 0; i < waterMetersCount; i++) { GenericDevices.IRegReader rr = sensPath.RegisterReaders[i]; + + if (rr is ICommonRegReader) + (rr as ICommonRegReader).EndWMState = dataEntryCmpnt.WMEndState(i); + if (rr is Rig.RegisterReaders.StandingStartStop.RegisterReader) (rr as Rig.RegisterReaders.StandingStartStop.RegisterReader).EndWMState = dataEntryCmpnt.WMEndState(i); @@ -1246,6 +1258,14 @@ namespace TBF.Rig.TestMethods.StandingStartMassCollection && (tstRslt.ErrorFlags == 0); meterRslt.TestDone = true; tstRslt.TestDone = true; + if (regReader is ICommonRegReader regReaderCommon) + // if (meterRslt.WaterMeter != null + // && tstRslt is ICommonRegReader tstRsltCommon + // && !string.IsNullOrEmpty(tstRsltCommon.SerialNr)) + { + meterRslt.WaterMeter.SerialNr = regReaderCommon.SerialNr; + } + } } } diff --git a/TBF/Rig/TestMethods/iPerlCommunication/iPerlHead/IperlHead.cs b/TBF/Rig/TestMethods/iPerlCommunication/iPerlHead/IperlHead.cs index 630d94fae..6f95a88d6 100644 --- a/TBF/Rig/TestMethods/iPerlCommunication/iPerlHead/IperlHead.cs +++ b/TBF/Rig/TestMethods/iPerlCommunication/iPerlHead/IperlHead.cs @@ -187,8 +187,8 @@ namespace TBF.Rig.TestMethods.iPerlCommunication.iPerlHead /// public int WMPulses { get { return wmPulses; } } public int WMRefPulses { get { return wmRefPulses; } } - public double BeginWMState { get { return beginWMState; } } - public double EndWMState { get { return endWMState; } } + public double BeginWMState { get { return beginWMState; } set { beginWMState = value; }} + public double EndWMState { get { return endWMState; } set { endWMState = value;} } public double WMVolume { get { return wmVolume; } } public double WMTestTime { get { return wmTestTime; } } diff --git a/TBF/Rig/Uni/SharedDialogs/SmartMetersCommunication/common/ICommonRegReader.cs b/TBF/Rig/Uni/SharedDialogs/SmartMetersCommunication/common/ICommonRegReader.cs new file mode 100644 index 000000000..921016ff3 --- /dev/null +++ b/TBF/Rig/Uni/SharedDialogs/SmartMetersCommunication/common/ICommonRegReader.cs @@ -0,0 +1,16 @@ +using Common; +using TBF.Rig.GenericDevices; + +namespace TBF.Rig.Uni.SharedDialogs.SmartMetersCommunication.common +{ + public interface ICommonRegReader : IRegReader + { + new string Name { get; } + new DebugMode DebugLevel { get; set; } + public string SerialNr { get; set; } + + new double BeginWMState { get; set; } /// Test begin state of the water meter + new double EndWMState { get; set; } /// Test end state of the water meter + + } +} \ No newline at end of file diff --git a/TBF/Rig/Uni/SharedDialogs/SmartMetersCommunication/common/ISmartReader.cs b/TBF/Rig/Uni/SharedDialogs/SmartMetersCommunication/common/ISmartReader.cs index b2d1916fa..4847ea419 100644 --- a/TBF/Rig/Uni/SharedDialogs/SmartMetersCommunication/common/ISmartReader.cs +++ b/TBF/Rig/Uni/SharedDialogs/SmartMetersCommunication/common/ISmartReader.cs @@ -5,11 +5,14 @@ using TBF.Rig.RegisterReaders.CommonRR; namespace TBF.Rig.Uni.SharedDialogs.SmartMetersCommunication.common { - public interface ISmartReader : IRegReader + public interface ISmartReader : ICommonRegReader { new string Name { get; } new DebugMode DebugLevel { get; set; } - public string SerialNr { get; } + new string SerialNr { get; set; } + new double BeginWMState { get; set; } /// Test begin state of the water meter + new double EndWMState { get; set; } /// Test end state of the water meter + public string CommInterface { get; } public int RfidComPortNr { get; } diff --git a/TBF/TBF.csproj b/TBF/TBF.csproj index ac4364cef..cfa9ba9b2 100644 --- a/TBF/TBF.csproj +++ b/TBF/TBF.csproj @@ -2064,6 +2064,7 @@ +