diff --git a/TBF/Rig/TestMethods/iPerlCommunication/communication/C4/protocolCommons/VersionTypeResult.cs b/TBF/Rig/TestMethods/iPerlCommunication/communication/C4/protocolCommons/VersionTypeResult.cs index 692ea7e08..4f6fe4553 100644 --- a/TBF/Rig/TestMethods/iPerlCommunication/communication/C4/protocolCommons/VersionTypeResult.cs +++ b/TBF/Rig/TestMethods/iPerlCommunication/communication/C4/protocolCommons/VersionTypeResult.cs @@ -2,134 +2,128 @@ using System.Text.RegularExpressions; namespace TBF.Rig.TestMethods.iPerlCommunication.communication.C4.protocolCommons { - using System; -using System.Text.RegularExpressions; - - namespace TBF.Rig.TestMethods.iPerlCommunication.communication.C4.IperlHatProtocol + public class VersionTypeResult { - public class VersionTypeResult + public string TouchReadVersion { get; set; } + + public string MeterDeviceType { get; set; } + + public string MeterFirmwareVersion { get; set; } + + public static VersionTypeResult ParseVersionTypePayload( + string payload) { - public string TouchReadVersion { get; set; } - - public string MeterDeviceType { get; set; } - - public string MeterFirmwareVersion { get; set; } - - public static VersionTypeResult ParseVersionTypePayload( - string payload) + if (string.IsNullOrWhiteSpace(payload)) { - if (string.IsNullOrWhiteSpace(payload)) - { - return null; - } - - string normalizedPayload = payload - .Trim('\0', '\r', '\n', ' '); - - VersionTypeResult result = - ParseCompactPayload(normalizedPayload); - - if (result != null) - { - return result; - } - - return ParseLegacyPayload(normalizedPayload); + return null; } - private static VersionTypeResult ParseCompactPayload( - string payload) + string normalizedPayload = payload + .Trim('\0', '\r', '\n', ' '); + + VersionTypeResult result = + ParseCompactPayload(normalizedPayload); + + if (result != null) { - // Expected format: - // B1.23,SWM004,1.00 - - string[] parts = payload.Split(','); - - if (parts.Length != 3) - { - return null; - } - - string touchReadVersion = parts[0].Trim(); - string meterDeviceType = parts[1].Trim(); - string meterFirmwareVersion = parts[2].Trim(); - - if (string.IsNullOrWhiteSpace(touchReadVersion) || - string.IsNullOrWhiteSpace(meterDeviceType) || - string.IsNullOrWhiteSpace(meterFirmwareVersion)) - { - return null; - } - - return new VersionTypeResult - { - TouchReadVersion = touchReadVersion, - MeterDeviceType = meterDeviceType, - MeterFirmwareVersion = meterFirmwareVersion - }; + return result; } - private static VersionTypeResult ParseLegacyPayload( - string payload) + return ParseLegacyPayload(normalizedPayload); + } + + private static VersionTypeResult ParseCompactPayload( + string payload) + { + // Expected format: + // B1.23,SWM004,1.00 + + string[] parts = payload.Split(','); + + if (parts.Length != 3) { - // Expected example: - // - // vers: Harry T:B800, V:06.06.01, FW:190215, - // 7ECE, B1.6.01, HW:4, Serial:0 - - Match deviceTypeMatch = Regex.Match( - payload, - @"(?:^|[\s,])T\s*:\s*([^,\s]+)", - RegexOptions.IgnoreCase); - - Match versionMatch = Regex.Match( - payload, - @"(?:^|[\s,])V\s*:\s*([^,\s]+)", - RegexOptions.IgnoreCase); - - Match firmwareMatch = Regex.Match( - payload, - @"(?:^|[\s,])FW\s*:\s*([^,\s]+)", - RegexOptions.IgnoreCase); - - if (!deviceTypeMatch.Success || - !versionMatch.Success || - !firmwareMatch.Success) - { - return null; - } - - string meterDeviceType = - deviceTypeMatch.Groups[1].Value.Trim(); - - string touchReadVersion = - versionMatch.Groups[1].Value.Trim(); - - string meterFirmwareVersion = - firmwareMatch.Groups[1].Value.Trim(); - - if (string.IsNullOrWhiteSpace(touchReadVersion) || - string.IsNullOrWhiteSpace(meterDeviceType) || - string.IsNullOrWhiteSpace(meterFirmwareVersion)) - { - return null; - } - - return new VersionTypeResult - { - TouchReadVersion = touchReadVersion, - MeterDeviceType = meterDeviceType, - MeterFirmwareVersion = meterFirmwareVersion - }; + return null; } - public override string ToString() + string touchReadVersion = parts[0].Trim(); + string meterDeviceType = parts[1].Trim(); + string meterFirmwareVersion = parts[2].Trim(); + + if (string.IsNullOrWhiteSpace(touchReadVersion) || + string.IsNullOrWhiteSpace(meterDeviceType) || + string.IsNullOrWhiteSpace(meterFirmwareVersion)) { - return - $"TouchReadVersion={TouchReadVersion}, " + - $"MeterDeviceType={MeterDeviceType}, " + - $"MeterFirmwareVersion={MeterFirmwareVersion}"; + return null; } + + return new VersionTypeResult + { + TouchReadVersion = touchReadVersion, + MeterDeviceType = meterDeviceType, + MeterFirmwareVersion = meterFirmwareVersion + }; + } + + private static VersionTypeResult ParseLegacyPayload( + string payload) + { + // Expected example: + // + // vers: Harry T:B800, V:06.06.01, FW:190215, + // 7ECE, B1.6.01, HW:4, Serial:0 + + Match deviceTypeMatch = Regex.Match( + payload, + @"(?:^|[\s,])T\s*:\s*([^,\s]+)", + RegexOptions.IgnoreCase); + + Match versionMatch = Regex.Match( + payload, + @"(?:^|[\s,])V\s*:\s*([^,\s]+)", + RegexOptions.IgnoreCase); + + Match firmwareMatch = Regex.Match( + payload, + @"(?:^|[\s,])FW\s*:\s*([^,\s]+)", + RegexOptions.IgnoreCase); + + if (!deviceTypeMatch.Success || + !versionMatch.Success || + !firmwareMatch.Success) + { + return null; + } + + string meterDeviceType = + deviceTypeMatch.Groups[1].Value.Trim(); + + string touchReadVersion = + versionMatch.Groups[1].Value.Trim(); + + string meterFirmwareVersion = + firmwareMatch.Groups[1].Value.Trim(); + + if (string.IsNullOrWhiteSpace(touchReadVersion) || + string.IsNullOrWhiteSpace(meterDeviceType) || + string.IsNullOrWhiteSpace(meterFirmwareVersion)) + { + return null; + } + + return new VersionTypeResult + { + TouchReadVersion = touchReadVersion, + MeterDeviceType = meterDeviceType, + MeterFirmwareVersion = meterFirmwareVersion + }; + } + + public override string ToString() + { + return + $"TouchReadVersion={TouchReadVersion}, " + + $"MeterDeviceType={MeterDeviceType}, " + + $"MeterFirmwareVersion={MeterFirmwareVersion}"; } } } \ No newline at end of file diff --git a/TBF/Rig/TestMethods/iPerlCommunication/communication/OptoHeadTest.cs b/TBF/Rig/TestMethods/iPerlCommunication/communication/OptoHeadTest.cs index 8b238f183..5ecd3ffac 100644 --- a/TBF/Rig/TestMethods/iPerlCommunication/communication/OptoHeadTest.cs +++ b/TBF/Rig/TestMethods/iPerlCommunication/communication/OptoHeadTest.cs @@ -5,6 +5,7 @@ using log4net; using TBF.Rig.TestMethods.iPerlCommunication.communication.C4.diagnosticLed; using TBF.Rig.TestMethods.iPerlCommunication.communication.Utils; using TBF.Rig.TestMethods.iPerlCommunication.iPerlHead; +using TBF.Rig.TestMethods.iPerlCommunication.communication.C4.protocolCommons; namespace TBF.Rig.TestMethods.iPerlCommunication.communication { @@ -365,5 +366,466 @@ namespace TBF.Rig.TestMethods.iPerlCommunication.communication return false; } } + + /// + /// Reads TouchRead version, meter device type + /// and meter firmware version. + /// + /// + /// Parsed version information or null when the operation fails. + /// + public VersionTypeResult SetViewVersionAndType() + { + if (iperlHead == null) + { + log.Warn( + "SetViewVersionAndType: IperlHead is null."); + + return null; + } + + if (iperlHead.DebugLevel == DebugMode.Simulate) + { + return new VersionTypeResult + { + TouchReadVersion = "SIMULATED", + MeterDeviceType = "SIMULATED", + MeterFirmwareVersion = "SIMULATED" + }; + } + + try + { + if (serialDriver == null) + { + serialDriver = BuildConnection(iperlHead); + } + + log.Debug( + "SetViewVersionAndType called for iHead: " + + iperlHead + + " serialDriver: " + + serialDriver); + + var headService = + new RadioService(serialDriver); + + VersionTypeResult result = + headService.SetViewVersionAndType(iperlHead); + + if (result == null) + { + log.Warn( + "SetViewVersionAndType: No valid response received."); + } + else + { + log.Info( + "SetViewVersionAndType result: " + + result); + } + + return result; + } + catch (Exception ex) + { + log.Error( + "SetViewVersionAndType failed.", + ex); + + return null; + } + } + + /// + /// Reads the configured meter reading units. + /// + /// + /// Reading units or null when the operation fails. + /// + public ReadingUnits? ViewReadingUnits() + { + if (iperlHead == null) + { + log.Warn( + "ViewReadingUnits: IperlHead is null."); + + return null; + } + + if (iperlHead.DebugLevel == DebugMode.Simulate) + { + return ReadingUnits.CubicMeters; + } + + try + { + if (serialDriver == null) + { + serialDriver = BuildConnection(iperlHead); + } + + log.Debug( + "ViewReadingUnits called for iHead: " + + iperlHead + + " serialDriver: " + + serialDriver); + + var headService = + new RadioService(serialDriver); + + ReadingUnits? result = + headService.ViewReadingUnits(iperlHead); + + if (!result.HasValue) + { + log.Warn( + "ViewReadingUnits: No valid response received."); + } + else + { + log.Info( + $"ViewReadingUnits result: {result.Value} " + + $"(0x{Convert.ToByte(result.Value):X2})"); + } + + return result; + } + catch (Exception ex) + { + log.Error( + "ViewReadingUnits failed.", + ex); + + return null; + } + } + + /// + /// Reads the configured display flip mode. + /// + /// + /// Flip mode or null when the operation fails. + /// + public FlipMode? ViewFlipMode() + { + if (iperlHead == null) + { + log.Warn( + "ViewFlipMode: IperlHead is null."); + + return null; + } + + if (iperlHead.DebugLevel == DebugMode.Simulate) + { + return (FlipMode)0x00; + } + + try + { + if (serialDriver == null) + { + serialDriver = BuildConnection(iperlHead); + } + + log.Debug( + "ViewFlipMode called for iHead: " + + iperlHead + + " serialDriver: " + + serialDriver); + + var headService = + new RadioService(serialDriver); + + FlipMode? result = + headService.ViewFlipMode(iperlHead); + + if (!result.HasValue) + { + log.Warn( + "ViewFlipMode: No valid response received."); + } + else + { + log.Info( + $"ViewFlipMode result: {result.Value} " + + $"(0x{Convert.ToByte(result.Value):X2})"); + } + + return result; + } + catch (Exception ex) + { + log.Error( + "ViewFlipMode failed.", + ex); + + return null; + } + } + + /// + /// Reads the calibration factor. + /// + /// + /// Calibration factor information or null when the operation fails. + /// + public CalibrationFactorResult ViewCalibration() + { + if (iperlHead == null) + { + log.Warn( + "ViewCalibration: IperlHead is null."); + + return null; + } + + if (iperlHead.DebugLevel == DebugMode.Simulate) + { + return new CalibrationFactorResult + { + RawValue = 4096, + Percentage = 100.0, + CorrectionPercentage = 0.0 + }; + } + + try + { + if (serialDriver == null) + { + serialDriver = BuildConnection(iperlHead); + } + + log.Debug( + "ViewCalibration called for iHead: " + + iperlHead + + " serialDriver: " + + serialDriver); + + var headService = + new RadioService(serialDriver); + + CalibrationFactorResult result = + headService.ViewCalibration(iperlHead); + + if (result == null) + { + log.Warn( + "ViewCalibration: No valid response received."); + } + else + { + log.Info( + "ViewCalibration result: " + + result); + } + + return result; + } + catch (Exception ex) + { + log.Error( + "ViewCalibration failed.", + ex); + + return null; + } + } + + /// + /// Reads and logs all additional configuration values. + /// + /// + /// True when all values were read successfully. + /// + public bool ReadExtendedConfiguration() + { + if (iperlHead == null) + { + log.Warn( + "ReadExtendedConfiguration: IperlHead is null."); + + return false; + } + + try + { + VersionTypeResult versionType = + SetViewVersionAndType(); + + ReadingUnits? readingUnits = + ViewReadingUnits(); + + FlipMode? flipMode = + ViewFlipMode(); + + CalibrationFactorResult calibration = + ViewCalibration(); + + bool successful = + versionType != null && + readingUnits.HasValue && + flipMode.HasValue && + calibration != null; + + log.Info( + "ReadExtendedConfiguration result: " + + $"Success={successful}, " + + $"VersionType={versionType}, " + + $"ReadingUnits={readingUnits}, " + + $"FlipMode={flipMode}, " + + $"Calibration={calibration}"); + + return successful; + } + catch (Exception ex) + { + log.Error( + "ReadExtendedConfiguration failed.", + ex); + + return false; + } + } + + /// + /// Reads additional common parameters: + /// version and type, reading units, flip mode + /// and calibration factor. + /// + /// + /// Result intended for GUI and test-process output. + /// + /// + /// True when all parameters were read successfully. + /// + public bool ReadAdditionalCommonParameters( + out string resultStr) + { + resultStr = string.Empty; + + if (iperlHead == null) + { + resultStr = + "Read additional common parameters: iPerl head is null."; + + log.Warn(resultStr); + + return false; + } + + if (iperlHead.DebugLevel == DebugMode.Simulate) + { + resultStr = + "Version/type: SIMULATED; " + + "Reading units: CubicMeters; " + + "Flip mode: 0x00; " + + "Calibration: 4096 (100.0000 %, correction 0.0000 %)"; + + return true; + } + + try + { + if (serialDriver == null) + { + serialDriver = + BuildConnection(iperlHead); + } + + var headService = + new RadioService(serialDriver); + + VersionTypeResult versionType = + headService.SetViewVersionAndType(iperlHead); + + ReadingUnits? readingUnits = + headService.ViewReadingUnits(iperlHead); + + FlipMode? flipMode = + headService.ViewFlipMode(iperlHead); + + CalibrationFactorResult calibration = + headService.ViewCalibration(iperlHead); + + bool successful = + versionType != null && + readingUnits.HasValue && + flipMode.HasValue && + calibration != null; + + string versionTypeText = + versionType == null + ? "FAILED" + : versionType.ToString(); + + string readingUnitsText = + readingUnits.HasValue + ? string.Format( + "{0} (0x{1:X2})", + readingUnits.Value, + Convert.ToByte(readingUnits.Value)) + : "FAILED"; + + string flipModeText = + flipMode.HasValue + ? string.Format( + "{0} (0x{1:X2})", + flipMode.Value, + Convert.ToByte(flipMode.Value)) + : "FAILED"; + + string calibrationText; + + if (calibration == null) + { + calibrationText = "FAILED"; + } + else + { + calibrationText = string.Format( + "{0} ({1:F4} %, correction {2:+0.0000;-0.0000;0.0000} %)", + calibration.RawValue, + calibration.Percentage, + calibration.CorrectionPercentage); + } + + resultStr = + "Version/type: " + versionTypeText + + "; Reading units: " + readingUnitsText + + "; Flip mode: " + flipModeText + + "; Calibration: " + calibrationText; + + if (successful) + { + log.Info( + "ReadAdditionalCommonParameters: " + + resultStr); + } + else + { + log.Warn( + "ReadAdditionalCommonParameters failed: " + + resultStr); + } + + return successful; + } + catch (Exception ex) + { + resultStr = + "Read additional common parameters failed: " + + ex.Message; + + log.Error( + "ReadAdditionalCommonParameters failed.", + ex); + + return false; + } + } + } } \ No newline at end of file diff --git a/TBF/Rig/TestMethods/iPerlCommunication/communication/RadioService.cs b/TBF/Rig/TestMethods/iPerlCommunication/communication/RadioService.cs index 9055f0853..f0b8a40f2 100644 --- a/TBF/Rig/TestMethods/iPerlCommunication/communication/RadioService.cs +++ b/TBF/Rig/TestMethods/iPerlCommunication/communication/RadioService.cs @@ -1,11 +1,9 @@ using System; using System.Text; -using System.Text.RegularExpressions; using log4net; using TBF.Rig.TestMethods.iPerlCommunication.communication.C4.diagnosticLed; using TBF.Rig.TestMethods.iPerlCommunication.communication.C4.IperlHatProtocol; using TBF.Rig.TestMethods.iPerlCommunication.communication.C4.protocolCommons; -using TBF.Rig.TestMethods.iPerlCommunication.communication.C4.protocolCommons.TBF.Rig.TestMethods.iPerlCommunication.communication.C4.IperlHatProtocol; using TBF.Rig.TestMethods.iPerlCommunication.communication.C4.wiredProtocol; using TBF.Rig.TestMethods.iPerlCommunication.communication.Utils; using TBF.Rig.TestMethods.iPerlCommunication.iPerlHead; diff --git a/TBF/Rig/TestMethods/iPerlCommunication/iPerlCommunicationForm.cs b/TBF/Rig/TestMethods/iPerlCommunication/iPerlCommunicationForm.cs index 81d210d10..1d1cefd29 100644 --- a/TBF/Rig/TestMethods/iPerlCommunication/iPerlCommunicationForm.cs +++ b/TBF/Rig/TestMethods/iPerlCommunication/iPerlCommunicationForm.cs @@ -20,9 +20,10 @@ using TBF.Rig.TestMethods.iPerlCommunication.iPerlHead; using Results.Entities; using static Sensus.iPerl.NfcHandler.MCI_Protocol; using System.Threading.Tasks; -using TBF.Rig.TestMethods.iPerlCommunication.communication; using TBF.Rig.TestMethods.iPerlCommunication.communication.C4.diagnosticLed; using TBF.Rig.TestMethods.iPerlCommunication.communication.C4.protocolCommons; +using TBF.Rig.Uni.SharedDialogs.SmartMetersCommunication; + namespace TBF.Rig.TestMethods.iPerlCommunication { @@ -61,8 +62,8 @@ namespace TBF.Rig.TestMethods.iPerlCommunication const int Q2CorrFactorsAddrLR = 0x1878; const int Q2CorrFactorsAddrRL = 0x1879; - public const string ReadConfigurationStr = "Read configuration"; /// Example: "Read configuration" or "Read configuration if enabled" - public const string SetTestModeStr = "Set Test mode"; /// Example: "Set Test mode" or "Set Test mode A0" (hexadecimal number is the required 'testModeConfig' + public const string ReadConfigurationStr = "Read configuration"; // Example: "Read configuration" or "Read configuration if enabled" + public const string SetTestModeStr = "Set Test mode"; // Example: "Set Test mode" or "Set Test mode A0" (hexadecimal number is the required 'testModeConfig' public const string SetActiveModeStr = "Set Active mode"; public const string ReadSerialNrStr = "Read SerialNr"; public const string SetIdleModeStr = "Set Idle mode"; @@ -237,6 +238,7 @@ namespace TBF.Rig.TestMethods.iPerlCommunication #if IPERL ContextMenu cm = new ContextMenu(); cm.MenuItems.Add(NewMenuItem("Read PCB Number" , "ReadPCB")); + cm.MenuItems.Add(NewMenuItem( iPerlCommunicationConstants.ReadAdditionalCommonParametersStr, "ReadAdditionalCommonParameters")); cm.MenuItems.Add(NewMenuItem("Enter Test Mode" , "StartTestMode")); cm.MenuItems.Add(NewMenuItem("Turn Off Test Mode (Enter Active Mode)", "TurnOffTestMode")); cm.MenuItems.Add(NewMenuItem("Set Production Mode (Radio not start with flow)" , "SetProductionMode")); @@ -715,6 +717,7 @@ namespace TBF.Rig.TestMethods.iPerlCommunication else if (currentActivity.ToLower().Equals(SetActiveModeStr.ToLower())) error = SetActiveMode(threadID, ihead, ref resultStr); else if (currentActivity.ToLower().Equals(SetIdleModeStr.ToLower())) error = SetIdleMode(threadID, ihead, ref resultStr); else if (currentActivity.ToLower().Contains(ReadConfigurationStr.ToLower())) error = ReadConfiguration(ihead, wm, ref resultStr); + else if (currentActivity.ToLower().Contains( iPerlCommunicationConstants.ReadAdditionalCommonParametersStr.ToLower())) error = ReadAdditionalCommonParameters( ihead, ref resultStr); /// /// RFID communication functions below require a reference to water meter entity (wm != null) /// @@ -1012,6 +1015,41 @@ namespace TBF.Rig.TestMethods.iPerlCommunication return error; } + /// + /// Reads additional common parameters through the optical head. + /// + private static CommErr ReadAdditionalCommonParameters( IperlHead ihead, ref string resultStr) + { + if (ihead == null) + { + resultStr = "Read additional common parameters: iPerl head is null."; + return CommErr.CommFailed; + } + + if (ihead.CommFailed) + { + resultStr = "Read additional common parameters: previous communication failed."; + return CommErr.CommFailed; + } + + if (ihead.OptoHeadTest == null) + { + resultStr = "Read additional common parameters: OptoHeadTest is not available."; + return CommErr.CommFailed; + } + + try + { + bool successful = ihead.OptoHeadTest.ReadAdditionalCommonParameters( out resultStr); + return successful ? CommErr.None : CommErr.Read; + } + catch (Exception ex) + { + resultStr = "Read additional common parameters failed: " + ex.Message; + log.Error( "ReadAdditionalCommonParameters failed.", ex); + return CommErr.Read; + } + } /// /// Read a complete calibration structure from the watermeter @@ -2719,6 +2757,22 @@ namespace TBF.Rig.TestMethods.iPerlCommunication case "ReadPCB": txt = iHead.OptoHeadTest.ReadRequest_PCB(); break; + case "ReadAdditionalCommonParameters": + { + if (iHead.OptoHeadTest == null) + { + txt = "OptoHeadTest is not available."; + break; + } + + success = iHead.OptoHeadTest .ReadAdditionalCommonParameters( out txt); + + if (!success && string.IsNullOrWhiteSpace(txt)) + { + txt = "Failed to read additional common parameters."; + } + break; + } case "WriteRequestPort_u8_Customer_Text": txt = "Not Supported NOW!";//OpticalHeadTest.WriteRequestPort_u8_Customer_Text(iHead); break; @@ -2743,6 +2797,9 @@ namespace TBF.Rig.TestMethods.iPerlCommunication case "SetNFC": txt = "Not Supported NOW!";//OpticalHeadTest.SetNfcMode(iHead); break; + default: + txt = "Unsupported operation: " + Convert.ToString(tag); + break; } return txt; } @@ -2862,5 +2919,6 @@ namespace TBF.Rig.TestMethods.iPerlCommunication e.Cancel = true; } } + } } diff --git a/TBF/Rig/Uni/SharedDialogs/SmartMetersCommunication/iPerlCommunicationConstants.cs b/TBF/Rig/Uni/SharedDialogs/SmartMetersCommunication/iPerlCommunicationConstants.cs index f2f092549..81421a066 100644 --- a/TBF/Rig/Uni/SharedDialogs/SmartMetersCommunication/iPerlCommunicationConstants.cs +++ b/TBF/Rig/Uni/SharedDialogs/SmartMetersCommunication/iPerlCommunicationConstants.cs @@ -10,6 +10,7 @@ namespace TBF.Rig.Uni.SharedDialogs.SmartMetersCommunication public const int Q2CorrFactorsAddrRL = 0x1879; public const string ReadConfigurationStr = "Read configuration"; /// Example: "Read configuration" or "Read configuration if enabled" + public const string ReadAdditionalCommonParametersStr = "Read Additional Common Parameters"; public const string SetTestModeStr = "Set Test mode"; /// Example: "Set Test mode" or "Set Test mode A0" (hexadecimal number is the required 'testModeConfig' public const string SetActiveModeStr = "Set Active mode"; public const string ReadCalibrationStr = "Read calibration"; diff --git a/TBF/Rig/Uni/SharedDialogs/SmartMetersCommunication/iPerlCommunicationParams.cs b/TBF/Rig/Uni/SharedDialogs/SmartMetersCommunication/iPerlCommunicationParams.cs index afab00fdc..b356a8951 100644 --- a/TBF/Rig/Uni/SharedDialogs/SmartMetersCommunication/iPerlCommunicationParams.cs +++ b/TBF/Rig/Uni/SharedDialogs/SmartMetersCommunication/iPerlCommunicationParams.cs @@ -44,6 +44,7 @@ namespace TBF.Rig.Uni.SharedDialogs.SmartMetersCommunication { var retVal = new List(); retVal.Add(iPerlCommunicationConstants.ReadConfigurationStr); + retVal.Add(iPerlCommunicationConstants.ReadAdditionalCommonParametersStr); retVal.Add(string.Format("{0} A0", iPerlCommunicationConstants.SetTestModeStr)); retVal.Add(string.Format("{0} A4", iPerlCommunicationConstants.SetTestModeStr)); retVal.Add(iPerlCommunicationConstants.ReadCalibrationStr);