From 7c3ad0ff0fdb57332d173a41eb192ad1ab275ac1 Mon Sep 17 00:00:00 2001 From: Thomas Wiedebusch Date: Thu, 26 Feb 2026 09:42:01 +0100 Subject: [PATCH] FM2014: - status filter --- .../FM2014/FM2014Core/FM2014.cs | 21 +++++++++++++--- .../Fm2014sTest/FM2014TestBenchWindow.xaml.cs | 24 +++++++++++++++---- .../UserControls/UcFM2014Device.xaml | 14 +++++------ 3 files changed, 44 insertions(+), 15 deletions(-) diff --git a/Common/Hardware/WaterMeter/MechanicalMeter/FM2014/FM2014Core/FM2014.cs b/Common/Hardware/WaterMeter/MechanicalMeter/FM2014/FM2014Core/FM2014.cs index c9206330..5b454007 100644 --- a/Common/Hardware/WaterMeter/MechanicalMeter/FM2014/FM2014Core/FM2014.cs +++ b/Common/Hardware/WaterMeter/MechanicalMeter/FM2014/FM2014Core/FM2014.cs @@ -202,7 +202,7 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core /// /// Force to decode the entire status even if it is not important for this measurement sequence. /// - public static Boolean DecodeEntireStatus { get; set; } = false; + public static Boolean DecodeEntireStatus { get; set; } /// /// Reminder of actual ongoing measurement information @@ -885,7 +885,7 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core StatusDecodingMask = 0; if (measMaskOn) StatusDecodingMask += STATUS_MEASURE_MASK; if (errorMaskOn) StatusDecodingMask += STATUS_ERROR_MASK; - if (faultMaskOn) StatusDecodingMask += (STATUS_FAULT1_MASK + STATUS_FAULT2_MASK); + if (faultMaskOn) StatusDecodingMask += STATUS_FAULT1_MASK + STATUS_FAULT2_MASK; } /// @@ -1439,7 +1439,7 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core /// 0 if double impulse deadtime detection is off /// /// - /// + /// /// - Initial. /// public static Boolean PulseTimeMeasurement(UInt16? refPulsesRequired = null, UInt16? dutPulsesRequired = null, @@ -1490,6 +1490,21 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core if (!BuildAndWriteDoubleImpulseDeadtime(firstActiveFm2014)) return false; + // START FAKE setup for time measurement! + // Setup to get rid of the status message for missing 'Tolerance display attenuation missing' 'T' and + // missing 'Scale REF to DUT missing or out of range' 'K' even if these setting don't have any function + cmdName = CmdName.CmdSetCurrentOutputAttenuation; + if (!Write(cmdName, firstActiveFm2014, firstActiveFm2014.CurrentOutputAttenuation)) + { + return false; + } + cmdName = CmdName.CmdRefToDutScale; + if (!Write(cmdName, firstActiveFm2014, firstActiveFm2014.RefToDutScaleStr)) + { + return false; + } + // END FAKE setup for time measurement! + if (refPulsesRequired != null) { cmdName = CmdName.CmdSetRefPulsesRequired; diff --git a/FM2014TestApp/Ui/Fm2014sTest/FM2014TestBenchWindow.xaml.cs b/FM2014TestApp/Ui/Fm2014sTest/FM2014TestBenchWindow.xaml.cs index 00618939..b3fbee3f 100644 --- a/FM2014TestApp/Ui/Fm2014sTest/FM2014TestBenchWindow.xaml.cs +++ b/FM2014TestApp/Ui/Fm2014sTest/FM2014TestBenchWindow.xaml.cs @@ -1290,19 +1290,19 @@ namespace Sensus.Ui.FM2014TestBench } else if (resp.DoubleValue != null) { - LogText($"{timeUtcStr} - Ad: {fm2014.Address} - {resp.AnswerStr}: {resp.DoubleValue:F4} {resp.Unit}"); + LogText($"{timeUtcStr} - Ad: {fm2014.Address} - {resp.AnswerStr}: {resp.DoubleValue:F6} {resp.Unit}"); switch (resp.CmdName) { case CmdName.CmdGetRefTimerTicks: - valueStr = $"{resp.DoubleValue:F4}"; + valueStr = $"{resp.DoubleValue:F3}"; ucFm2014?.SetValue(CAL_LBL_IDX_REF_MEAS_TMR, valueStr, statusColor); break; case CmdName.CmdGetDutTimerTicks: - valueStr = $"{resp.DoubleValue:F4}"; + valueStr = $"{resp.DoubleValue:F3}"; ucFm2014?.SetValue(CAL_LBL_IDX_DUT_MEAS_TMR, valueStr, statusColor); break; case CmdName.CmdCalculatedDutToRefTolerance: - valueStr = $"{resp.DoubleValue:F4}"; + valueStr = $"{resp.DoubleValue:F3}"; ucFm2014?.SetValue(CAL_LBL_IDX_DUT_TO_REF_TOL, valueStr, statusColor); break; case CmdName.CmdGetDutToRefToleranceUndamped: @@ -1418,7 +1418,6 @@ namespace Sensus.Ui.FM2014TestBench if (refPulsesRequired != null && dutPulsesRequired != null) { - UpdateContentControl(MeasurementLabels[CAL_LBL_IDX_DUT_TO_REF_TOL], StrLblDutToRefToleranceMeasured); } @@ -1443,9 +1442,21 @@ namespace Sensus.Ui.FM2014TestBench // Set initial required pulses as those are static upon the entire measurement if (refPulsesRequired != null) + { ucFM2014.SetValue(CAL_LBL_IDX_REF_REQ_PLS, $"{_fm2014Common.RefPulsesRequired:D}"); + ucFM2014.SetValue(CAL_LBL_IDX_REF_MEAS_TMR, "---"); + } + if (dutPulsesRequired != null) + { ucFM2014.SetValue(CAL_LBL_IDX_DUT_REQ_PLS, $"{_fm2014Common.DutPulsesRequired:D}"); + ucFM2014.SetValue(CAL_LBL_IDX_DUT_MEAS_TMR, "---"); + } + + if (refPulsesRequired != null && dutPulsesRequired != null) + { + ucFM2014.SetValue(CAL_LBL_IDX_DUT_TO_REF_TOL, "---"); + } // Set thresholds for tolerance verification fm2014.DutToRefCalibrationToleranceMax_percent = _fm2014Common.DutToRefCalibrationToleranceMax_percent; @@ -1505,6 +1516,9 @@ namespace Sensus.Ui.FM2014TestBench var ucFM2014 = (UcFM2014Device)UcFM2014s[idx]; ucFM2014.EnableMeasurements(REG_MEASURE_COUNT); fm2014.CurrentOutputDisplayRangeNominal_percent = _fm2014Common.CurrentOutputDisplayRangeNominal_percent; + ucFM2014.SetValue(REG_LBL_IDX_REF_FREQU, "---"); + ucFM2014.SetValue(REG_LBL_IDX_FLOW_RATE, "---"); + ucFM2014.SetValue(REG_LBL_IDX_DUT_TO_REF_TOL, "---"); } // Backup if meanwhile anything has changed diff --git a/FM2014TestApp/Ui/Fm2014sTest/UserControls/UcFM2014Device.xaml b/FM2014TestApp/Ui/Fm2014sTest/UserControls/UcFM2014Device.xaml index 722916fa..ff5a8a3d 100644 --- a/FM2014TestApp/Ui/Fm2014sTest/UserControls/UcFM2014Device.xaml +++ b/FM2014TestApp/Ui/Fm2014sTest/UserControls/UcFM2014Device.xaml @@ -23,13 +23,13 @@