From c015b16f0a7b99e00104d040d3b64f925665dbd9 Mon Sep 17 00:00:00 2001 From: Thomas Wiedebusch Date: Fri, 4 Mar 2022 11:15:00 +0100 Subject: [PATCH] changed sequencing of MeterLutUpdate - still not working: cannot set meter size or erase 1\\mettbl and 1\\mettbl_b --- .../Genesis/GenesisFile/MeterFwUpdate.cs | 1 - .../Genesis/GenesisFile/MeterLutUpdate.cs | 63 +++++++++++-------- .../GenesisToolBox/FrmLutUpdate.Designer.cs | 4 ++ 3 files changed, 41 insertions(+), 27 deletions(-) diff --git a/Common/Hardware/WaterMeter/Genesis/GenesisFile/MeterFwUpdate.cs b/Common/Hardware/WaterMeter/Genesis/GenesisFile/MeterFwUpdate.cs index 1b6cbcf8..87258a41 100644 --- a/Common/Hardware/WaterMeter/Genesis/GenesisFile/MeterFwUpdate.cs +++ b/Common/Hardware/WaterMeter/Genesis/GenesisFile/MeterFwUpdate.cs @@ -971,7 +971,6 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile var writeBackValue = _genesisMeter.ReadRegister(item.Key); _registersAfterUpdate.Add(item.Key, writeBackValue); _genesisMeter.WriteRegister(item.Key, item.Value); - } //remove the update stop action diff --git a/Common/Hardware/WaterMeter/Genesis/GenesisFile/MeterLutUpdate.cs b/Common/Hardware/WaterMeter/Genesis/GenesisFile/MeterLutUpdate.cs index 75dbd293..751745c5 100644 --- a/Common/Hardware/WaterMeter/Genesis/GenesisFile/MeterLutUpdate.cs +++ b/Common/Hardware/WaterMeter/Genesis/GenesisFile/MeterLutUpdate.cs @@ -92,7 +92,6 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile // Look up table file public MeterLutFile LutFile; - public MeterLutFile LutFileReadBack; // list of names of installed meter files on drive 1 private List _meterFilesDrive1; @@ -109,7 +108,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile /// Register subset needed to adjust for update performance content before update /// private readonly Dictionary _registersBeforeUpdate = new Dictionary(); - + /// /// Register to restore after update /// @@ -172,8 +171,8 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile if (genesisMeter.MeterAppListVersion.Any(f => f.AppName == "GENESISFLOW" && f.IsInstalled)) { - _registersBeforeUpdate.Add(Register.Genesisflow.LedMode, new[] {(Byte) LedMode.Off}); - _registersBeforeUpdate.Add(Register.Genesisflow.SampleRate, new Byte[] {1}); + _registersBeforeUpdate.Add(Register.Genesisflow.LedMode, new[] { (Byte)LedMode.Off }); + _registersBeforeUpdate.Add(Register.Genesisflow.SampleRate, new Byte[] { 1 }); } if (genesisMeter.MeterAppListVersion.Any(f => f.AppName == "METROLOGYASST" && f.IsInstalled)) _registersBeforeUpdate.Add(Register.Mertrologyasst.PulseMode, new Byte[] { 0 }); @@ -568,21 +567,21 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile _genesisMeter.TransmitProtocol.SetResponseTimeout(5000); do { - _actualOperation = "Write meter size"; + _actualOperation = "Write Lut CRC to meter"; _operationCtr++; - if (!_genesisMeter.WriteRegister(Register.Genesisflow.MeterSize, (Byte)LutFile.MeterSize)) + if (!_genesisMeter.WriteRegister(Register.Genesisflow.LookupFileCrc, LutFile.FileCrc)) { - ErrorMessage = "Meter size could not be set!\n"; + ErrorMessage += "Meter LUT CRC could not be set!\n"; _operationCtr--; returnValue = false; } else { _operationCtr++; - _actualOperation = "Write Lut CRC to meter"; - if (!_genesisMeter.WriteRegister(Register.Genesisflow.LookupFileCrc, LutFile.FileCrc)) + _actualOperation = "Write meter size"; + if (!_genesisMeter.WriteRegister(Register.Genesisflow.MeterSize, new[] { (Byte)LutFile.MeterSize })) { - ErrorMessage += "Meter LUT CRC could not be set!\n"; + ErrorMessage = "Meter size could not be set!\n"; _operationCtr--; returnValue = false; } @@ -620,6 +619,9 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile /// private Boolean ReadMeterFilesDrive1() { + // logout and re-login to clear all ongoing processes and clear the Genesis buffers + ReestablishMeterFileSystem(); + if (_meterFilesDrive1 == null) { _meterFilesDrive1 = new List(); @@ -645,8 +647,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile var returnValue = _meterFile.UnlockEraseWriteMeterFile(fileDriveName); //erase returns always TRUE, even if the erasure failed! Check with catalogue _meterFile.EraseMeterFile(fileDriveName); - _meterFilesDrive1.Clear(); - + if (ReadMeterFilesDrive1()) { if (_meterFilesDrive1.Contains(fileDriveName)) @@ -674,13 +675,14 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile if (LutFile == null) return false; //set extended timeout for trigger upgrade response delay - _genesisMeter.TransmitProtocol.SetResponseTimeout(5000); + _genesisMeter.TransmitProtocol.SetResponseTimeout(10000); var returnValue = true; - + //erase loop and retry if not successful do { - var filesToErase = new[] { StrLutMeterFileName, StrLutBackupMeterFileName}; + var filesToErase = new[] { StrLutBackupMeterFileName, StrLutMeterFileName }; + //var filesToErase = new[] { StrLutMeterFileName, StrLutBackupMeterFileName}; // read all files which are already installed _actualOperation = "Read installed meter files drive 1"; @@ -702,7 +704,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile _operationCtr--; } } - + if (!returnValue) { ReestablishMeterFileSystem(); @@ -729,19 +731,24 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile if (LutFile == null) return false; //set extended timeout for trigger upgrade response delay - _genesisMeter.TransmitProtocol.SetResponseTimeout(5000); + _genesisMeter.TransmitProtocol.SetResponseTimeout(10000); var returnValue = true; - + //write LUT files and retry if not successful do { _actualOperation = "Download LUT files to meter"; - var filesToDownload = new[] { StrLutMeterFileName, StrLutBackupMeterFileName}; + var filesToDownload = new[] { StrLutMeterFileName, StrLutBackupMeterFileName }; foreach (var fileToDownload in filesToDownload) { _operationCtr++; _actualOperation = $"Write {fileToDownload}"; + + // logout and re-login to clear all ongoing processes and clear the Genesis buffers + ReestablishMeterFileSystem(); + + _meterFile.UnlockEraseWriteMeterFile(fileToDownload); if (_meterFile.WriteMeterFile(fileToDownload, LutFile.BinData.ToArray())) continue; ErrorMessage += $"Writing of {fileToDownload} failed!\n"; @@ -752,6 +759,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile // read all files on drive 1 _operationCtr++; _actualOperation = "Read installed meter files drive 1"; + if (ReadMeterFilesDrive1()) { foreach (var checkInstalledFile in filesToDownload) @@ -766,7 +774,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile { returnValue = false; } - + if (!returnValue) { ReestablishMeterFileSystem(); @@ -793,24 +801,27 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile if (LutFile == null) return false; //set extended timeout for trigger upgrade response delay - _genesisMeter.TransmitProtocol.SetResponseTimeout(5000); + _genesisMeter.TransmitProtocol.SetResponseTimeout(10000); var returnValue = true; - + //write LUT files and retry if not successful do { _actualOperation = "Upload LUT files to meter"; - var filesToUpload = new[] { StrLutMeterFileName, StrLutBackupMeterFileName}; + var filesToUpload = new[] { StrLutMeterFileName, StrLutBackupMeterFileName }; foreach (var fileToUpload in filesToUpload) { _operationCtr++; _actualOperation = $"Read {fileToUpload}"; - LutFileReadBack = new MeterLutFile(fileToUpload); - if (_meterFile.ReadMeterFile(fileToUpload, out LutFileReadBack.BinData, LutFile.BinData.Count)) + + // logout and re-login to clear all ongoing processes and clear the Genesis buffers + ReestablishMeterFileSystem(); + + if (_meterFile.ReadMeterFile(fileToUpload, out var binData, LutFile.BinData.Count)) { // compare the entire buffer which also includes the header of the file - if (!LutFileReadBack.BinData.SequenceEqual(LutFile.BinData)) + if (!binData.SequenceEqual(LutFile.BinData)) { ErrorMessage += $"Meter LUT file is unequal to downloaded {fileToUpload}!\n"; returnValue = false; diff --git a/Common/Ui/GenesisToolBox/FrmLutUpdate.Designer.cs b/Common/Ui/GenesisToolBox/FrmLutUpdate.Designer.cs index 8a2ef11c..68198925 100644 --- a/Common/Ui/GenesisToolBox/FrmLutUpdate.Designer.cs +++ b/Common/Ui/GenesisToolBox/FrmLutUpdate.Designer.cs @@ -439,6 +439,10 @@ this.Controls.Add(this.lblActualProcess); this.Controls.Add(this.grpSetup); this.Controls.Add(this.barOverallProgressUpdate); + this.MaximizeBox = false; + this.MaximumSize = new System.Drawing.Size(739, 403); + this.MinimizeBox = false; + this.MinimumSize = new System.Drawing.Size(739, 403); this.Name = "FrmLutUpdate"; this.Text = "Metrology Lookup Table Update"; this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmLutUpdate_FormClosing);