From 49c7cc5cc62890d2cb87bb9b15f88186392db313 Mon Sep 17 00:00:00 2001 From: Thomas Wiedebusch Date: Fri, 13 Feb 2026 16:56:42 +0100 Subject: [PATCH] FM2014: - time measurement automatic stop --- .../FM2014/FM2014Core/FM2014.cs | 182 ++++++++++-------- .../Fm2014sTest/FM2014TestBenchWindow.xaml.cs | 36 ++-- 2 files changed, 119 insertions(+), 99 deletions(-) diff --git a/Common/Hardware/WaterMeter/MechanicalMeter/FM2014/FM2014Core/FM2014.cs b/Common/Hardware/WaterMeter/MechanicalMeter/FM2014/FM2014Core/FM2014.cs index 0021f414..9fead8d5 100644 --- a/Common/Hardware/WaterMeter/MechanicalMeter/FM2014/FM2014Core/FM2014.cs +++ b/Common/Hardware/WaterMeter/MechanicalMeter/FM2014/FM2014Core/FM2014.cs @@ -77,7 +77,7 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core /// /// The mantissa for the scale value has to be in the range from 1000 to 9999. /// - private const UInt16 MANTISSA_SCALE_MIN = 1000; + private const UInt16 REF_TO_DUT_SCALE_MANTISSA_MIN = 1000; /// /// REF to DUT scale conversion factor to meaningful human interpretable value @@ -87,29 +87,29 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core /// /// Default tolerance if not properly setup. /// - public const Int32 STANDARD_NOMINAL_TOLERANCE_INPUT_percent = 3; + public const Int32 CURRENT_OUTPUT_TOLERANCE_STANDARD_NOMINAL_INT_percent = 3; /// /// Default tolerance if not properly setup. /// - public const Int32 EXTENDED_NOMINAL_TOLERANCE_INPUT_percent = 5; + public const Int32 CURRENT_OUTPUT_TOLERANCE_EXTENDED_VALUE_INT_percent = 5; /// /// Standard tolerance (nominal 3 %) multiplicator for calculation of value based on feedback from FM2014 /// (+/- 255 digits). /// - private const Double STANDARD_TOLERANCE_VALUE_percent = 3.3; + private const Double CURRENT_OUTPUT_TOLERANCE_STANDARD_VALUE_DOUBLE_percent = 3.3; /// /// Extended tolerance (nominal 5 %) multiplicator for calculation of value based on feedback from FM2014 /// (+/- 255 digits). /// - private const Double EXTENDED_TOLERANCE_VALUE_percent = 5.5; + private const Double CURRENT_OUTPUT_TOLERANCE_EXTENDED_VALUE_DOUBLE_percent = 5.5; /// /// Resolution of tolerance raw value feedback from FM2014 (+/- 255 digits). /// - private const Double RESOLUTION_TOLERANCE_RAW_VALUE = 255; + private const Double CURRENT_OUTPUT_TOLERANCE_RESOLUTION_PLUS_MINUS_BYTE = 255; /// /// Minimal value for attenuation. @@ -159,12 +159,12 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core /// /// FM2014 minimal pulses for REF and DUT time measurement. /// - public const UInt16 TIME_MEASUREMENT_INPUT_MIN_pulses = 1; + public const UInt16 PULSES_TIME_MEASUREMENT_INPUT_MIN = 1; /// /// FM2014 maximal pulses for REF and DUT time measurement. /// - public const UInt16 TIME_MEASUREMENT_INPUT_MAX_pulses = 0xFFFF; + public const UInt16 PULSES_TIME_MEASUREMENT_INPUT_MAX = 0xFFFF; /// /// Minimal baudrate for serial communication. @@ -247,7 +247,7 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core /// /// Progress of actual process converted to percent /// - private static Double ActualProcessProgress_percent { get; set; } + private static Double? ActualProcessProgress_percent { get; set; } private static Int32 _actualProcessProgress; /// @@ -343,35 +343,35 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core /// /// Private tolerance percentage /// - private Int32 _tolerance_percent = STANDARD_NOMINAL_TOLERANCE_INPUT_percent; + private Int32 _currentOutputToleranceNominalInt_percent = CURRENT_OUTPUT_TOLERANCE_STANDARD_NOMINAL_INT_percent; /// /// Actual tolerance scale to convert raw value from FM2014 to percent /// - private Double ToleranceRawToPercentScale { set; get; } = - STANDARD_TOLERANCE_VALUE_percent / RESOLUTION_TOLERANCE_RAW_VALUE; + private Double CurrentOutputToleranceNominalToRealScale { set; get; } = + CURRENT_OUTPUT_TOLERANCE_STANDARD_VALUE_DOUBLE_percent / CURRENT_OUTPUT_TOLERANCE_RESOLUTION_PLUS_MINUS_BYTE; /// - /// Tolerance output of current loop in percent: + /// Nominal tolerance output of current loop in percent: /// - hardware dependent 3% or 5% /// - public Int32 Tolerance_percent + public Int32 CurrentOutputToleranceNominalInt_percent { - get => _tolerance_percent; + get => _currentOutputToleranceNominalInt_percent; set { // Limit input to discrete nominal setting of 3 or 5 %, // Internally those values are going to be scaled for higher resolution to 3.3 or 5.5 Double percentage; - if (value == STANDARD_NOMINAL_TOLERANCE_INPUT_percent) - percentage = STANDARD_TOLERANCE_VALUE_percent; - else if (value == EXTENDED_NOMINAL_TOLERANCE_INPUT_percent) - percentage = EXTENDED_TOLERANCE_VALUE_percent; + if (value == CURRENT_OUTPUT_TOLERANCE_STANDARD_NOMINAL_INT_percent) + percentage = CURRENT_OUTPUT_TOLERANCE_STANDARD_VALUE_DOUBLE_percent; + else if (value == CURRENT_OUTPUT_TOLERANCE_EXTENDED_VALUE_INT_percent) + percentage = CURRENT_OUTPUT_TOLERANCE_EXTENDED_VALUE_DOUBLE_percent; else - percentage = STANDARD_TOLERANCE_VALUE_percent; + percentage = CURRENT_OUTPUT_TOLERANCE_STANDARD_VALUE_DOUBLE_percent; - _tolerance_percent = value; - ToleranceRawToPercentScale = percentage / RESOLUTION_TOLERANCE_RAW_VALUE; + _currentOutputToleranceNominalInt_percent = value; + CurrentOutputToleranceNominalToRealScale = percentage / CURRENT_OUTPUT_TOLERANCE_RESOLUTION_PLUS_MINUS_BYTE; } } @@ -390,7 +390,7 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core private set { // Check limits and equality - if (value < TIME_MEASUREMENT_INPUT_MIN_pulses || + if (value < PULSES_TIME_MEASUREMENT_INPUT_MIN || value == _refPulsesRequired) return; @@ -408,7 +408,7 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core private set { // Check limits and equality - if (value < TIME_MEASUREMENT_INPUT_MIN_pulses || + if (value < PULSES_TIME_MEASUREMENT_INPUT_MIN || value == _dutPulsesRequired) return; @@ -563,7 +563,7 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core number *= REF_TO_DUT_SCALE_CONVERSION; mantissa = (UInt16)(number + 0.5); exponent--; - } while (mantissa < MANTISSA_SCALE_MIN); + } while (mantissa < REF_TO_DUT_SCALE_MANTISSA_MIN); // The pre-generated string will be used to send it to the FM2014 directly RefToDutScaleStr = $"{mantissa}{GetCmdStr(CmdName.CMD_REF_SET_SCALE)}{exponent}"; @@ -688,7 +688,7 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core /// /// Measured tolerance during calibration /// - public Double DutToRefToleranceMeasured_percent { get; private set; } + public Double? DutToRefToleranceMeasured_percent { get; private set; } #endregion ---------------------------------------- object properties ----------------------------------------- @@ -777,7 +777,7 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core /// Get the first FM2014 which is connected and logged in for common service routines /// using a broadcast command /// - /// + /// null if no device is connected and logged in /// /// - Initial. /// @@ -1150,17 +1150,18 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core // The response contains a sign! var signMultiplier = responseStr.Contains("+") ? 1.0f : -1.0f; var cleanedStr = responseStr.Replace("+", "").Replace("-", ""); - if (int.TryParse(cleanedStr, NumberStyles.HexNumber, new CultureInfo("en"), - out var measTolerance)) + if (int.TryParse(cleanedStr, NumberStyles.HexNumber, + new CultureInfo("en"), out var measTolerance)) { fm2014.DutToRefToleranceMeasured_percent = - measTolerance * fm2014.ToleranceRawToPercentScale * signMultiplier; + measTolerance * fm2014.CurrentOutputToleranceNominalToRealScale * signMultiplier; var response = new CmdResponse(cmdName, info, doubleValue: fm2014.DutToRefToleranceMeasured_percent, unit: Units.GetInfo(Units.Name.PERCENT)); // Check the threshold for OOR - if (Math.Abs(fm2014.DutToRefToleranceMeasured_percent) > fm2014.Tolerance_percent) + if (Math.Abs((Double)fm2014.DutToRefToleranceMeasured_percent) > + fm2014.CurrentOutputToleranceNominalInt_percent) statusReturn = StatusReturn.MeasurementOutOfRange; else statusReturn = StatusReturn.Okay; @@ -1338,7 +1339,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, @@ -1359,8 +1360,8 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core // Check if regulation can be done if ((refPulsesRequired == null && dutPulsesRequired == null) || - refPulsesRequired < TIME_MEASUREMENT_INPUT_MIN_pulses || - dutPulsesRequired < TIME_MEASUREMENT_INPUT_MIN_pulses || + refPulsesRequired < PULSES_TIME_MEASUREMENT_INPUT_MIN || + dutPulsesRequired < PULSES_TIME_MEASUREMENT_INPUT_MIN || doublePulseDeadtime_ms > DOUBLE_PULSE_DEADTIME_MAX_ms) { return false; @@ -1458,8 +1459,26 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core String info; String responseStr; StatusReturn statusReturn; + + // Read the device status to check for timeout between pulses + cmdName = CmdName.CMD_GET_STATUS; + info = GetCmdInfo(cmdName); + if (SharedCyclicMeasSequ != CyclicMeasSequ.IDLE && Write(cmdName, fm2014)) + { + if (Read(cmdName, fm2014, out responseStr) && + int.TryParse(responseStr, NumberStyles.HexNumber, new CultureInfo("en"), + out var status)) + { + info += $": {responseStr}"; + var response = new CmdResponse(cmdName, info); + PublishResponse(fm2014, new ProcessExecEventArgs("", + actualProcessPercent: ActualProcessProgress_percent, + actualProcessMessage: measurementInfo, specificInfoObj: response)); + } + } + // Read the remaining REF pulses if required - if (firstActiveFm2014.RefPulsesRequired != 0) + if (fm2014.RefPulsesRequired != 0) { // Feed the progress counter ActualProcessProgress = firstActiveFm2014.RefPulsesRequired - @@ -1473,16 +1492,30 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core out var pulses)) { fm2014.RefPulsesRemaining = pulses; + + // Check if remaining pulses are going to count down based on required pulses + if (RegisteredFm2014s.Any(fm => fm.RefPulsesRemaining * 1.1 < fm.RefPulsesRequired) && + fm2014.RefPulsesRemaining == fm2014.RefPulsesRequired) + { + statusReturn = StatusReturn.MeasurementOutOfRange; + fm2014.ErrorIsDetected = true; + } + else + { + statusReturn = StatusReturn.Okay; + } + var response = new CmdResponse(cmdName, info, pulses); PublishResponse(fm2014, new ProcessExecEventArgs("", actualProcessPercent: ActualProcessProgress_percent, + statusReturn: statusReturn, actualProcessMessage: measurementInfo, specificInfoObj: response)); } } } // Read the remaining DUT pulses if required - if (firstActiveFm2014.DutPulsesRequired != 0) + if (fm2014.DutPulsesRequired != 0) { // Feed the progress counter but only if not done for REF pulses if (firstActiveFm2014.RefPulsesRequired == 0) @@ -1497,9 +1530,23 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core out var pulses)) { fm2014.DutPulsesRemaining = pulses; + + // Check if remaining pulses are going to count down based on required pulses + if (RegisteredFm2014s.Any(fm => fm.DutPulsesRemaining * 1.1 < fm.DutPulsesRequired) && + fm2014.DutPulsesRemaining == fm2014.DutPulsesRequired) + { + statusReturn = StatusReturn.MeasurementOutOfRange; + fm2014.ErrorIsDetected = true; + } + else + { + statusReturn = StatusReturn.Okay; + } + var response = new CmdResponse(cmdName, info, pulses); PublishResponse(fm2014, new ProcessExecEventArgs("", actualProcessMessage: measurementInfo, + statusReturn: statusReturn, specificInfoObj: response)); } } @@ -1512,7 +1559,7 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core var retVal = true; // Read the REF timer ticks for the counted pulses - if (firstActiveFm2014.RefPulsesRequired != 0) + if (fm2014.RefPulsesRequired != 0) { cmdName = CmdName.CMD_REF_GET_TMR; info = GetCmdInfo(cmdName); @@ -1542,7 +1589,7 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core } // Read the DUT timer ticks for the counted pulses - if (firstActiveFm2014.DutPulsesRequired != 0) + if (fm2014.DutPulsesRequired != 0) { cmdName = CmdName.CMD_DUT_GET_TMR; info = GetCmdInfo(cmdName); @@ -1572,7 +1619,7 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core } // Calculate the DUT to REF tolerance if both timer had been active - if (firstActiveFm2014.RefPulsesRequired != 0 && firstActiveFm2014.DutPulsesRequired != 0) + if (fm2014.RefPulsesRequired != 0 && fm2014.DutPulsesRequired != 0) { cmdName = CmdName.CMD_CAL_DUT_TO_REF_TOL; info = GetCmdInfo(cmdName); @@ -1614,9 +1661,8 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core // Check all remaining DUT and REF pulses are counted on all connected devices and finalize process by // reading out all results - //TODO THW take timeout for unresponsive device into account and if REF and/or DUT - if (RegisteredFm2014s.All(fm2014 => fm2014.RefPulsesRemaining == 0 && - fm2014.DutPulsesRemaining == 0)) + if (RegisteredFm2014s.All(fm2014 => fm2014.MeasurementIsReady || fm2014.ErrorIsDetected || + !fm2014.IsLoggedOn)) { ResetHardwareAllDevices(); // Exit this task @@ -1696,12 +1742,9 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core /// /// /// - /// + /// /// - Initial. /// - /// - /// - Support for multiple FM2014s. - /// private static Boolean Write(CmdName cmdName, FM2014 fm2014, Object dataObj = null, Boolean isHexFormat = false) { if (fm2014 == null) @@ -1795,12 +1838,9 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core /// /// /// - /// + /// /// - Initial. /// - /// - /// - Support for multiple FM2014s. - /// private static Boolean InitiateBroadcastComm(FM2014 fm2014) { if (fm2014 == null) @@ -1858,12 +1898,9 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core /// /// /// - /// + /// /// - Initial. /// - /// - /// - Support for multiple FM2014s. - /// private static Boolean InitiateIndividualComm(FM2014 fm2014) { if (fm2014 == null) @@ -1951,15 +1988,9 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core /// Transfer all standalone settings to FM2014 RAM and safe those to nonvolatile EEPROM /// /// - /// + /// /// - Initial. /// - /// - /// - REF pulse rate can be 0 as 'invalid marker'. - /// - /// - /// - Support for multiple FM2014s. - /// private Boolean SaveStandAloneMeasurement() { // If the cyclic task has already been started everything is fine @@ -2014,19 +2045,14 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core /// Handle the standalone measurement which will be executed after BOOT of the FM2014: /// - Read the setup stored to nonvolatile memory (EEPROM), /// - Read the actual setup kept in RAM. - /// - /// - /// - /// - /// - Initial. - /// - /// /// - 'Ref_pulse_per_cm' will be calculated by 'Ref_pulses_per_cm = Dut_pulses_per_cm * RefToDutScale_norm' /// to avoid an overflow as the REF pulses per volume can store max 9999 pulses. As the Dut_pulse_per_cm /// is for the smallest meter 1000 Impulses/m³ - /// - /// - /// - Support for multiple FM2014s. + /// + /// + /// + /// + /// - Initial. /// private Boolean ReadStandAloneMeasurement(CmdName cmdName) { @@ -2140,16 +2166,9 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core /// Login to individual address. /// /// - /// + /// /// - Initial. /// - /// - /// - Support for multiple FM2014s. - /// - /// - /// - Login with , - /// - Other communications moved to - /// public Boolean Login() { // If the cyclic task has already been started the login isn't allowed anymore @@ -2186,8 +2205,9 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core { foreach (var fm2014 in RegisteredFm2014s.Where(fm2014 => fm2014.IsLoggedOn)) { - fm2014.RefTimerTicksMeasured = 0; - fm2014.DutTimerTicksMeasured = 0; + fm2014.RefTimeMeasured_s = 0; + fm2014.DutTimeMeasured_s = 0; + fm2014.DutToRefToleranceMeasured_percent = null; fm2014.RefFlowRate_cm_per_h = 0; fm2014.DutFlowRate_cm_per_h = 0; } diff --git a/FM2014TestApp/Ui/Fm2014sTest/FM2014TestBenchWindow.xaml.cs b/FM2014TestApp/Ui/Fm2014sTest/FM2014TestBenchWindow.xaml.cs index 94b7c718..6caa69d8 100644 --- a/FM2014TestApp/Ui/Fm2014sTest/FM2014TestBenchWindow.xaml.cs +++ b/FM2014TestApp/Ui/Fm2014sTest/FM2014TestBenchWindow.xaml.cs @@ -503,8 +503,8 @@ namespace Sensus.Ui.FM2014TestBench if (_fm2014Config?.IndividualTolerancePercent?[ctr] != null && _fm2014Config.IndividualTolerancePercent.Count == MaxFm2014s) { - fm2014.Tolerance_percent = _fm2014Config?.IndividualTolerancePercent[ctr] ?? - FM2014.STANDARD_NOMINAL_TOLERANCE_INPUT_percent; + fm2014.CurrentOutputToleranceNominalInt_percent = _fm2014Config?.IndividualTolerancePercent[ctr] ?? + FM2014.CURRENT_OUTPUT_TOLERANCE_STANDARD_NOMINAL_INT_percent; } } if (_fm2014Config != null) @@ -512,7 +512,7 @@ namespace Sensus.Ui.FM2014TestBench // Restore baudrate FM2014.Baudrate = _fm2014Config.Baudrate; - // Restore Calibration settings for user convenience + // Restore calibration settings for user convenience tbxRefPulsesRequired.Text = $"{_fm2014Config.RefPulsesRequired:D}"; tbxDutPulsesRequired.Text = $"{_fm2014Config.DutPulsesRequired:D}"; tbxDoublePulseDeadtime.Text = $"{_fm2014Config.DoublePulseDeadtime:D}"; @@ -646,7 +646,7 @@ namespace Sensus.Ui.FM2014TestBench var fm2014 = Fm2014s[ctr]; if (fm2014 == null) return; - _fm2014Config.IndividualTolerancePercent.Add(fm2014.Tolerance_percent); + _fm2014Config.IndividualTolerancePercent.Add(fm2014.CurrentOutputToleranceNominalInt_percent); _fm2014Config.SlotIsSelected.Add(SlotSelections[ctr].IsChecked); } @@ -1291,14 +1291,14 @@ namespace Sensus.Ui.FM2014TestBench Dispatcher.Invoke(() => { if (int.TryParse(tbxRefPulsesRequired.Text, out var pulses) && - FM2014.TIME_MEASUREMENT_INPUT_MIN_pulses <= pulses && - FM2014.TIME_MEASUREMENT_INPUT_MAX_pulses >= pulses) + FM2014.PULSES_TIME_MEASUREMENT_INPUT_MIN <= pulses && + FM2014.PULSES_TIME_MEASUREMENT_INPUT_MAX >= pulses) { refPulsesRequired = (UInt16)pulses; } if (int.TryParse(tbxDutPulsesRequired.Text, out pulses) && - FM2014.TIME_MEASUREMENT_INPUT_MIN_pulses <= pulses && - FM2014.TIME_MEASUREMENT_INPUT_MAX_pulses >= pulses) + FM2014.PULSES_TIME_MEASUREMENT_INPUT_MIN <= pulses && + FM2014.PULSES_TIME_MEASUREMENT_INPUT_MAX >= pulses) { dutPulsesRequired = (UInt16)pulses; } @@ -1420,8 +1420,8 @@ namespace Sensus.Ui.FM2014TestBench } if (int.TryParse(cbxToleranceCalc.SelectedItem.ToString(), out var tolerance) && - (tolerance == FM2014.STANDARD_NOMINAL_TOLERANCE_INPUT_percent || - tolerance == FM2014.EXTENDED_NOMINAL_TOLERANCE_INPUT_percent)) + (tolerance == FM2014.CURRENT_OUTPUT_TOLERANCE_STANDARD_NOMINAL_INT_percent || + tolerance == FM2014.CURRENT_OUTPUT_TOLERANCE_EXTENDED_VALUE_INT_percent)) { toleranceSetup = tolerance; } @@ -1433,7 +1433,7 @@ namespace Sensus.Ui.FM2014TestBench var idx = fm2014.Address - 1; var ucFM2014 = (UcFM2014Device)UcFM2014s[idx]; ucFM2014.EnableMeasurements(REG_MEASURE_COUNT); - fm2014.Tolerance_percent = toleranceSetup; + fm2014.CurrentOutputToleranceNominalInt_percent = toleranceSetup; } if (FM2014.RegulationMeasurement(refPulses_per_cm, dutPulses_per_cm, doublePulseDeadtime_ms, @@ -1547,9 +1547,9 @@ namespace Sensus.Ui.FM2014TestBench Dispatcher.Invoke(() => { if (byte.TryParse(cbxToleranceCalc.SelectedItem.ToString(), out var tolerance) && - (tolerance == FM2014.STANDARD_NOMINAL_TOLERANCE_INPUT_percent || - tolerance == FM2014.EXTENDED_NOMINAL_TOLERANCE_INPUT_percent) && - firstFm2014.Tolerance_percent != tolerance) + (tolerance == FM2014.CURRENT_OUTPUT_TOLERANCE_STANDARD_NOMINAL_INT_percent || + tolerance == FM2014.CURRENT_OUTPUT_TOLERANCE_EXTENDED_VALUE_INT_percent) && + firstFm2014.CurrentOutputToleranceNominalInt_percent != tolerance) { _regulationSetupHasChanged = true; btnSaveRegulationSetup.IsEnabled = true; @@ -1789,8 +1789,8 @@ namespace Sensus.Ui.FM2014TestBench // Convert the input and check limits if (int.TryParse(tbxRefPulsesRequired.Text, out var pulses) && - FM2014.TIME_MEASUREMENT_INPUT_MIN_pulses <= pulses && - FM2014.TIME_MEASUREMENT_INPUT_MAX_pulses >= pulses) + FM2014.PULSES_TIME_MEASUREMENT_INPUT_MIN <= pulses && + FM2014.PULSES_TIME_MEASUREMENT_INPUT_MAX >= pulses) { if (backupPulsesRequired != pulses) _calibrationSetupHasChanged = true; @@ -1884,8 +1884,8 @@ namespace Sensus.Ui.FM2014TestBench // Convert the input and check limits if (int.TryParse(tbxDutPulsesRequired.Text, out var pulses) && - FM2014.TIME_MEASUREMENT_INPUT_MIN_pulses <= pulses && - FM2014.TIME_MEASUREMENT_INPUT_MAX_pulses >= pulses) + FM2014.PULSES_TIME_MEASUREMENT_INPUT_MIN <= pulses && + FM2014.PULSES_TIME_MEASUREMENT_INPUT_MAX >= pulses) { if (backupPulsesRequired != pulses) _calibrationSetupHasChanged = true;