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.