diff --git a/Common/Hardware/WaterMeter/MechanicalMeter/FM2014/FM2014Core/FM2014.cs b/Common/Hardware/WaterMeter/MechanicalMeter/FM2014/FM2014Core/FM2014.cs
index efcbf7f7..b6969c17 100644
--- a/Common/Hardware/WaterMeter/MechanicalMeter/FM2014/FM2014Core/FM2014.cs
+++ b/Common/Hardware/WaterMeter/MechanicalMeter/FM2014/FM2014Core/FM2014.cs
@@ -482,7 +482,7 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core
cmdName = CmdName.CMD_REF_GET_PLS_CTR;
if (CyclicReceiveTaskLoopIsActive && refCtrOn && Write(cmdName))
{
- if (StatusReturn.Okay == Read(cmdName, out var responseStr) &&
+ if (Read(cmdName, out var responseStr) &&
int.TryParse(responseStr, NumberStyles.HexNumber, new CultureInfo("en"), out var intValue))
{
var response = new CmdResponse(cmdName, infoRef, intValue);
@@ -496,7 +496,7 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core
if (CyclicReceiveTaskLoopIsActive && dutCtrOn && Write(cmdName))
{
- if (StatusReturn.Okay == Read(cmdName, out var responseStr) &&
+ if (Read(cmdName, out var responseStr) &&
int.TryParse(responseStr, NumberStyles.HexNumber, new CultureInfo("en"), out var intValue))
{
var response = new CmdResponse(cmdName, infoDut, intValue);
@@ -600,7 +600,7 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core
var info = GetCmdInfo(cmdName);
if (CyclicReceiveTaskLoopIsActive && Write(cmdName))
{
- if (StatusReturn.Okay == Read(cmdName, out responseStr))
+ if (Read(cmdName, out responseStr))
{
// The response contains a sign!
var signMultiplier = responseStr.Contains("+") ? 1.0f : -1.0f;
@@ -623,7 +623,7 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core
info = GetCmdInfo(cmdName);
if (RequestDebugInformation && CyclicReceiveTaskLoopIsActive && Write(cmdName))
{
- if (StatusReturn.Okay == Read(cmdName, out responseStr) &&
+ if (Read(cmdName, out responseStr) &&
int.TryParse(responseStr, NumberStyles.HexNumber, new CultureInfo("en"), out var period))
{
// Publish the period [ms]
@@ -663,7 +663,7 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core
info = GetCmdInfo(cmdName);
if (RequestDebugInformation && CyclicReceiveTaskLoopIsActive && Write(cmdName))
{
- if (StatusReturn.Okay == Read(cmdName, out responseStr) &&
+ if (Read(cmdName, out responseStr) &&
int.TryParse(responseStr, NumberStyles.HexNumber, new CultureInfo("en"), out var period))
{
// Publish the period [ms]
@@ -703,7 +703,7 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core
info = GetCmdInfo(cmdName);
if (CyclicReceiveTaskLoopIsActive && Write(cmdName))
{
- if (StatusReturn.Okay == Read(cmdName, out responseStr) &&
+ if (Read(cmdName, out responseStr) &&
int.TryParse(responseStr, NumberStyles.HexNumber, new CultureInfo("en"), out var refFrequency))
{
// Publish the frequency in [Hz]
@@ -833,7 +833,7 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core
var loopCtr = 4;
do
{
- if (StatusReturn.Okay == Read(cmdName, out var responseStr))
+ if (Read(cmdName, out var responseStr))
responseStrs.Add(responseStr);
} while (loopCtr-- > 0);
}
@@ -843,7 +843,7 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core
var loopCtr = 5;
do
{
- if (StatusReturn.Okay == Read(cmdName, out var responseStr))
+ if (Read(cmdName, out var responseStr))
responseStrs.Add(responseStr);
} while (loopCtr-- > 0);
}
@@ -953,7 +953,7 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core
return false;
}
- if (StatusReturn.Okay == Read(cmdName, out var responseStr))
+ if (Read(cmdName, out var responseStr))
SerialNumber = responseStr;
if (!string.IsNullOrEmpty(SerialNumber))
@@ -1128,30 +1128,41 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core
///
/// - Initial.
///
- private StatusReturn Read(CmdName cmdName, out String responseStr)
+ private Boolean Read(CmdName cmdName, out String responseStr)
{
responseStr = "";
- var retVal = StatusReturn.Failed;
+ var cmdCodeStr = GetCmdStr(cmdName);
+ var info = $"{Resources.StrCommResponse}: {GetCmdInfo(cmdName)}";
+ var statusReturn = StatusReturn.Failed;
// Check for individual command without response
if (CmdType.INDIVIDUAL_UNRESPONSIVE == CmdTypeReminderLastCmd &&
CmdType.INDIVIDUAL_UNRESPONSIVE == GetCmdCmdType(cmdName))
{
- retVal = StatusReturn.Skipped;
+ statusReturn = StatusReturn.Skipped;
}
-
else if (CmdType.INDIVIDUAL == CmdTypeReminderLastCmd &&
CmdType.INDIVIDUAL == GetCmdCmdType(cmdName))
{
+ // Read or timeout with a TimeoutException
var answerStr = SerialPort.ReadTo(END_OF_STR);
if (string.IsNullOrEmpty(answerStr))
- return retVal;
-
- responseStr = answerStr;
- retVal = StatusReturn.Okay;
+ {
+ statusReturn = StatusReturn.Failed;
+ }
+ else
+ {
+ statusReturn = StatusReturn.Okay;
+ responseStr = answerStr;
+ }
}
- return retVal;
+ var isErrorStr = StatusReturn.Failed == statusReturn ? Resources.StrError + ": " : "";
+ var response = new CmdResponse(cmdName, $"{isErrorStr}{info} {responseStr}");
+ OnRawRecordReceived?.Invoke(this, new ProcessExecEventArgs("", specificInfoObj: response,
+ statusReturn: statusReturn));
+
+ return StatusReturn.Failed != statusReturn;
}
///
@@ -1172,7 +1183,7 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core
///
private Boolean Write(CmdName cmdName, Object dataObj = null)
{
- if (SerialPort == null)//|| !SerialPort.IsOpen)
+ if (SerialPort == null)
{
CmdTypeReminderLastCmd = CmdType.NOT_INITIALIZED;
IsLoggedOn = false;
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 91599e34..5d35087f 100644
--- a/Common/Hardware/WaterMeter/MechanicalMeter/FM2014/FM2014Core/Properties/Resources.Designer.cs
+++ b/Common/Hardware/WaterMeter/MechanicalMeter/FM2014/FM2014Core/Properties/Resources.Designer.cs
@@ -619,6 +619,15 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core.Pr
}
}
+ ///
+ /// Looks up a localized string similar to Response.
+ ///
+ internal static string StrCommResponse {
+ get {
+ return ResourceManager.GetString("StrCommResponse", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to ERROR.
///
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 afc7784e..10df4cfa 100644
--- a/Common/Hardware/WaterMeter/MechanicalMeter/FM2014/FM2014Core/Properties/Resources.de.resx
+++ b/Common/Hardware/WaterMeter/MechanicalMeter/FM2014/FM2014Core/Properties/Resources.de.resx
@@ -321,4 +321,7 @@
Parametertyp wird nicht unterstützt
+
+ Antwort
+
\ No newline at end of file
diff --git a/Common/Hardware/WaterMeter/MechanicalMeter/FM2014/FM2014Core/Properties/Resources.resx b/Common/Hardware/WaterMeter/MechanicalMeter/FM2014/FM2014Core/Properties/Resources.resx
index d0734aa3..1e277eda 100644
--- a/Common/Hardware/WaterMeter/MechanicalMeter/FM2014/FM2014Core/Properties/Resources.resx
+++ b/Common/Hardware/WaterMeter/MechanicalMeter/FM2014/FM2014Core/Properties/Resources.resx
@@ -321,4 +321,7 @@
Parameter type not supported
+
+ Response
+
\ No newline at end of file