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;