diff --git a/Common/Hardware/WaterMeter/MechanicalMeter/FM2014/FM2014Core/Consts/FM2014CmdDef.cs b/Common/Hardware/WaterMeter/MechanicalMeter/FM2014/FM2014Core/Consts/FM2014CmdDef.cs
index 1af3abc3..642ab286 100644
--- a/Common/Hardware/WaterMeter/MechanicalMeter/FM2014/FM2014Core/Consts/FM2014CmdDef.cs
+++ b/Common/Hardware/WaterMeter/MechanicalMeter/FM2014/FM2014Core/Consts/FM2014CmdDef.cs
@@ -642,15 +642,15 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core.Co
/// Get the command type like addressing to individual with and without answer or broadcast
///
///
- /// command type
+ /// Command type
///
/// - Initial.
///
- public static CmdType GetCmdCmdType(CmdName cmdName)
+ public static CmdType GetCmdType(CmdName cmdName)
{
return (from ct in CmdTbl
- where ct.CmdName == cmdName
- select ct.CmdType).FirstOrDefault();
+ where ct.CmdName == cmdName
+ select ct.CmdType).FirstOrDefault();
}
}
}
diff --git a/Common/Hardware/WaterMeter/MechanicalMeter/FM2014/FM2014Core/FM2014.cs b/Common/Hardware/WaterMeter/MechanicalMeter/FM2014/FM2014Core/FM2014.cs
index 4adc6d71..ed9fdbaa 100644
--- a/Common/Hardware/WaterMeter/MechanicalMeter/FM2014/FM2014Core/FM2014.cs
+++ b/Common/Hardware/WaterMeter/MechanicalMeter/FM2014/FM2014Core/FM2014.cs
@@ -453,12 +453,12 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core
// Check for individual command without response
if (CmdType.INDIVIDUAL_UNRESPONSIVE == SharedCmdTypeReminderLastCmd &&
- CmdType.INDIVIDUAL_UNRESPONSIVE == GetCmdCmdType(cmdName))
+ CmdType.INDIVIDUAL_UNRESPONSIVE == GetCmdType(cmdName))
{
statusReturn = StatusReturn.Skipped;
}
else if (CmdType.INDIVIDUAL == SharedCmdTypeReminderLastCmd &&
- CmdType.INDIVIDUAL == GetCmdCmdType(cmdName))
+ CmdType.INDIVIDUAL == GetCmdType(cmdName))
{
// Read or timeout with a TimeoutException
var answerStr = SharedSerialPort?.ReadTo(END_OF_STR);
@@ -515,7 +515,7 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core
// Initiate communication using the individual or broadcast address
var retVal = true;
- if (CmdType.BROADCAST == GetCmdCmdType(cmdName))
+ if (CmdType.BROADCAST == GetCmdType(cmdName))
{
if (SharedCmdTypeReminderLastCmd != CmdType.BROADCAST)
{
@@ -546,7 +546,7 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core
if (dataObj == null)
{
SharedSerialPort.Write($"{cmdCodeStr}{END_OF_STR}");
- var additionalInfo = GetCmdCmdType(cmdName) == CmdType.BROADCAST
+ var additionalInfo = GetCmdType(cmdName) == CmdType.BROADCAST
? Resources.StrCommDirectionSetup
: Resources.StrCommDirectionRequest;
response = new CmdResponse(cmdName, $"{additionalInfo}: {info}");
@@ -698,7 +698,7 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core
fm2014.ConnectResponse = fm2014.ConnectResponse.Replace(ADDR_RECORD_STR, "");
var fields = fm2014.ConnectResponse.Split('.');
fm2014.FwVersion = fields[1];
- SharedCmdTypeReminderLastCmd = GetCmdCmdType(cmdName);
+ SharedCmdTypeReminderLastCmd = GetCmdType(cmdName);
return true;
}
}
@@ -756,6 +756,9 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core
///
/// - Support for multiple FM2014s.
///
+ ///
+ /// - If any FM2014 has REF and DUT pulse counter on then use for ALL the synchronized readout.
+ ///
public Boolean PulseCounterMeasurement(Boolean refCtrOn = true, Boolean dutCtrOn = false)
{
if (!IsLoggedOn || (!refCtrOn && !dutCtrOn))
@@ -820,35 +823,38 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core
do
{
- foreach (var fm2014 in RegisteredFm2014s.Where(fm2014 => fm2014.IsLoggedOn))
+ CmdName cmdNameRef;
+ CmdName cmdNameDut;
+ Boolean syncPulseCtr;
+
+ // Check if any FM2014 has a synchronized request to synchronize all FM2014 pulse counter values
+ if (RegisteredFm2014s.Any(x => x.RefPulseCtrOn && x.DutPulseCtrOn))
{
- try
+ cmdNameDut = CmdName.CMD_DUT_GET_PLS_CTR_BU;
+ cmdNameRef = CmdName.CMD_REF_GET_PLS_CTR_BU;
+ syncPulseCtr = true;
+ }
+ else
+ {
+ cmdNameDut = CmdName.CMD_DUT_GET_PLS_CTR;
+ cmdNameRef = CmdName.CMD_REF_GET_PLS_CTR;
+ syncPulseCtr = false;
+ }
+ // Get the process information
+ var infoRef = GetCmdInfo(cmdNameRef);
+ var infoDut = GetCmdInfo(cmdNameDut);
+
+ try
+ {
+ // Make a backup of the pulse counters to synchronize those and read out the backups
+ if (SharedCyclicMeasSequ != CyclicMeasSequ.IDLE && syncPulseCtr)
{
- CmdName cmdNameRef;
- CmdName cmdNameDut;
- // Select the actual or backup pulse counter value command
- if (fm2014.DutPulseCtrOn && fm2014.RefPulseCtrOn)
- {
- cmdNameDut = CmdName.CMD_DUT_GET_PLS_CTR_BU;
- cmdNameRef = CmdName.CMD_REF_GET_PLS_CTR_BU;
- }
- else
- {
- cmdNameDut = CmdName.CMD_DUT_GET_PLS_CTR;
- cmdNameRef = CmdName.CMD_REF_GET_PLS_CTR;
- }
- // Get the process information
- var infoRef = GetCmdInfo(cmdNameRef);
- var infoDut = GetCmdInfo(cmdNameDut);
-
- // Make a backup of the pulse counters to synchronize those and read out the backups
- if (SharedCyclicMeasSequ != CyclicMeasSequ.IDLE &&
- fm2014.DutPulseCtrOn && fm2014.RefPulseCtrOn)
- {
- // Synchronized backup of REF and DUT pulse counter
- Write(CmdName.CMD_REF_DUT_BU_PLS_CTR, fm2014);
- }
+ // Synchronized backup of REF and DUT pulse counter
+ Write(CmdName.CMD_REF_DUT_BU_PLS_CTR, this);
+ }
+ foreach (var fm2014 in RegisteredFm2014s.Where(fm2014 => fm2014.IsLoggedOn))
+ {
if (SharedCyclicMeasSequ != CyclicMeasSequ.IDLE)
{
if (fm2014.RefPulseCtrOn && Write(cmdNameRef, fm2014))
@@ -878,12 +884,12 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core
}
}
}
- catch (Exception e)
- {
- var response = new CmdResponse(cmdName, e.Message);
- PublishResponse(fm2014, new ProcessExecEventArgs(Resources.StrError,
- specificInfoObj: response, statusReturn: StatusReturn.Failed));
- }
+ }
+ catch (Exception e)
+ {
+ var response = new CmdResponse(cmdName, e.Message);
+ PublishResponse(this, new ProcessExecEventArgs(Resources.StrError,
+ specificInfoObj: response, statusReturn: StatusReturn.Failed));
}
} while (SharedCyclicMeasSequ != CyclicMeasSequ.IDLE);
}, SharedCancellationToken).ContinueWith(delegate
@@ -1274,7 +1280,7 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core
var info = GetCmdInfo(cmdName);
Attenuation = attenuation;
var response = new CmdResponse(cmdName, info, Attenuation);
- PublishResponse(this, new ProcessExecEventArgs("",
+ PublishResponse(this, new ProcessExecEventArgs("",
actualProcessMessage: measurementInfoStr, specificInfoObj: response));
}
}
@@ -1338,7 +1344,7 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core
///
/// - Initial.
///
- ///
+ ///
/// - Support for multiple FM2014s.
///
public Boolean Login()
@@ -1379,7 +1385,7 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core
if (Read(cmdName, this, out responseStr))
{
var cleanedResponse = Regex.Replace(responseStr, "[^0-9]", string.Empty);
- if (int.TryParse(cleanedResponse, /*NumberStyles.HexNumber, new CultureInfo("en"),*/ out var intValue))
+ if (int.TryParse(cleanedResponse, out var intValue))
Lifetime_h = intValue;
}
diff --git a/Common/Hardware/WaterMeter/MechanicalMeter/FM2014/FM2014Core/Properties/Resources.Designer.cs b/Common/Hardware/WaterMeter/MechanicalMeter/FM2014/FM2014Core/Properties/Resources.Designer.cs
index 5d35087f..8fe3b623 100644
--- a/Common/Hardware/WaterMeter/MechanicalMeter/FM2014/FM2014Core/Properties/Resources.Designer.cs
+++ b/Common/Hardware/WaterMeter/MechanicalMeter/FM2014/FM2014Core/Properties/Resources.Designer.cs
@@ -611,7 +611,7 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core.Pr
}
///
- /// Looks up a localized string similar to Setup.
+ /// Looks up a localized string similar to Command.
///
internal static string StrCommDirectionSetup {
get {
diff --git a/Common/Hardware/WaterMeter/MechanicalMeter/FM2014/FM2014Core/Properties/Resources.de.resx b/Common/Hardware/WaterMeter/MechanicalMeter/FM2014/FM2014Core/Properties/Resources.de.resx
index 10df4cfa..36a7dd7e 100644
--- a/Common/Hardware/WaterMeter/MechanicalMeter/FM2014/FM2014Core/Properties/Resources.de.resx
+++ b/Common/Hardware/WaterMeter/MechanicalMeter/FM2014/FM2014Core/Properties/Resources.de.resx
@@ -298,7 +298,7 @@
Verbinde mit Adresse
- Einstellung
+ Befehl
Abfrage
diff --git a/Common/Hardware/WaterMeter/MechanicalMeter/FM2014/FM2014Core/Properties/Resources.resx b/Common/Hardware/WaterMeter/MechanicalMeter/FM2014/FM2014Core/Properties/Resources.resx
index 1e277eda..d293ca20 100644
--- a/Common/Hardware/WaterMeter/MechanicalMeter/FM2014/FM2014Core/Properties/Resources.resx
+++ b/Common/Hardware/WaterMeter/MechanicalMeter/FM2014/FM2014Core/Properties/Resources.resx
@@ -298,7 +298,7 @@
Connect to address
- Setup
+ Command
Request
diff --git a/MiniPrf/Ui/FrmMainMiniPrf.cs b/MiniPrf/Ui/FrmMainMiniPrf.cs
index faf23bb2..42878734 100644
--- a/MiniPrf/Ui/FrmMainMiniPrf.cs
+++ b/MiniPrf/Ui/FrmMainMiniPrf.cs
@@ -530,6 +530,7 @@ namespace Sensus.MiniPrf.Ui
var dt = DateTime.UtcNow;
var msg = $"{dt:yyyy-MM-dd HH:mm:ss} UTC";
LogText($"{Resources.StrMsgPcDateTime} {msg}");
+ LogText(StrSeparator);
CheckUpdateEnabled();
}));
@@ -833,7 +834,7 @@ namespace Sensus.MiniPrf.Ui
if (cbxMultipleFm2014.Checked)
{
// Just take the DUT pulses as REF is parallel to all devices
- Fm2014_TEST.PulseCounterMeasurement(false, true);
+ Fm2014_TEST?.PulseCounterMeasurement(false, true);
}
}
@@ -1245,7 +1246,7 @@ namespace Sensus.MiniPrf.Ui
}
}
-#endregion Buttons and Controls
+ #endregion Buttons and Controls
#region Event handler
@@ -1377,7 +1378,7 @@ namespace Sensus.MiniPrf.Ui
}
///
- /// Feedback from FM2014being parsed to GUI
+ /// Feedback from FM2014 TEST device being logged to history window
///
///
/// - Initial.