diff --git a/Common/Common.sln.DotSettings b/Common/Common.sln.DotSettings index f349cffd..ba87d3a2 100644 --- a/Common/Common.sln.DotSettings +++ b/Common/Common.sln.DotSettings @@ -55,6 +55,7 @@ True True True + True True True True diff --git a/Common/Hardware/WaterMeter/Genesis/GenesisCore/GenesisMeter.cs b/Common/Hardware/WaterMeter/Genesis/GenesisCore/GenesisMeter.cs index 9fa76f80..31087bf8 100644 --- a/Common/Hardware/WaterMeter/Genesis/GenesisCore/GenesisMeter.cs +++ b/Common/Hardware/WaterMeter/Genesis/GenesisCore/GenesisMeter.cs @@ -1316,6 +1316,12 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore /// /// - Remind installed FW version of FLEXNETVERSION for StoreAllConfigurations. /// + /// + /// - Avoid doubled or tripled registers in register dictionary as the configuration.json may overlap + /// on some versions. If one register has been added, this passed the test and is valid for this FW. + /// It has to be avoided to have the register multiple times as it may cause unpredictable + /// assignments of values to one and reading and compare from another which doesn't have a value! + /// private void ReadMeterFirmwareAndAssignRegisters() { //avoid overwriting of list if this already exits @@ -1451,6 +1457,9 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore registerToCheck.Key.RegisterDetail.Version.Last.Value >= currentGroup.Version) { registerToCheck.Key.IsAvailable = true; + // Avoid doubled or tripled registers in dictionary if one has passed the test + if (_configRegister.MeterRegisterDic.Any(reg => reg.Key.GetIdent().Equals(registerToCheck.Key.GetIdent()))) + continue; _configRegister.MeterRegisterDic.TryAdd(registerToCheck.Key, null); } } diff --git a/Common/Hardware/WaterMeter/Genesis/GenesisCore/GenesisMeterStreamingQuality.cs b/Common/Hardware/WaterMeter/Genesis/GenesisCore/GenesisMeterStreamingQuality.cs index de95bfe7..050b07f7 100644 --- a/Common/Hardware/WaterMeter/Genesis/GenesisCore/GenesisMeterStreamingQuality.cs +++ b/Common/Hardware/WaterMeter/Genesis/GenesisCore/GenesisMeterStreamingQuality.cs @@ -165,6 +165,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore //the DecodeMsg has assigned either a DataCalib or DataFlowTest data set var calibrationRecord = sd.DataCalib; var flowTestRecord = sd.DataFlowTest; + var bendDetectRecord = sd.DataBendDetectTest; if (flowTestRecord != null) { @@ -172,6 +173,12 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore continue; } + if (bendDetectRecord != null) + { + TotalValidationWithoutErrorsCount++; + continue; + } + if (calibrationRecord != null) { if (calibrationRecord.Validation == 0) diff --git a/Common/Hardware/WaterMeter/Genesis/GenesisCore/RegisterRestorer.cs b/Common/Hardware/WaterMeter/Genesis/GenesisCore/RegisterRestorer.cs index 57c94ee9..4de6aaf2 100644 --- a/Common/Hardware/WaterMeter/Genesis/GenesisCore/RegisterRestorer.cs +++ b/Common/Hardware/WaterMeter/Genesis/GenesisCore/RegisterRestorer.cs @@ -58,7 +58,6 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore /// /// List for parameters which need to be removed from parameter list - /// if meter has radio /// public static readonly List ProhibitedParameters = new List { @@ -66,7 +65,6 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore }; /// /// List for un-reversed parameters, all others need to be swapped byte-wise - /// if meter has radio /// public static readonly List UnRevertedParameters = new List { @@ -75,6 +73,13 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore "METROLOGYASST_FlowPoint" }; /// + /// + /// + public static readonly List ExcludedFromCompareParameters = new List + { + "SENSUSRADIO_UpgFWVersion" // After a FW-Update the FW version has changed and the compare will fail + }; + /// /// Pre programming parameters for all devices defined here, will be filled with radio parameters /// if meter has radio /// @@ -387,6 +392,9 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore /// - Compare registers reactivated based on new interface (configuration.json) with new /// "StaticType": “approximate”. /// + /// + /// - Removed as those will change on e.g. FW update. + /// public Boolean CompareRegisters() { if (_pcbIdFinalRegisterRead != _pcbIdInitialRegisterRead || @@ -400,6 +408,11 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore // build a string list of the registers being able to sort those var registerNames = _restoreRegisters.MeterRegisterDic.Select(register => register.Key.GetIdent()).ToList(); + // Remove all excluded registers + foreach (var regName in ExcludedFromCompareParameters.Where(regName => registerNames.Any(reg => reg == regName))) + { + registerNames.Remove(regName); + } // sort the list of register names registerNames.Sort(); // limit the count to 1 to avoid division by zero diff --git a/Common/Hardware/WaterMeter/Genesis/Protocols/StreamingProtocol/StreamingDecoder.cs b/Common/Hardware/WaterMeter/Genesis/Protocols/StreamingProtocol/StreamingDecoder.cs index 049d1f8c..ae455bbf 100644 --- a/Common/Hardware/WaterMeter/Genesis/Protocols/StreamingProtocol/StreamingDecoder.cs +++ b/Common/Hardware/WaterMeter/Genesis/Protocols/StreamingProtocol/StreamingDecoder.cs @@ -138,6 +138,9 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.StreamingProtocol /// /// - Modified using common CRC check before branching to the protocol specific decoder. /// + /// + /// - Introduced protocol 'm' for bending detection. + /// public Boolean DecodeMsg(String rawMsg) { var rawRecordIsValid = false;