changed sequencing of MeterLutUpdate - still not working: cannot set meter size or erase 1\\mettbl and 1\\mettbl_b
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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<String> _meterFilesDrive1;
|
||||
@@ -109,7 +108,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
|
||||
/// Register subset needed to adjust for update performance content before update
|
||||
/// </summary>
|
||||
private readonly Dictionary<String, Byte[]> _registersBeforeUpdate = new Dictionary<String, Byte[]>();
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Register to restore after update
|
||||
/// </summary>
|
||||
@@ -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<UInt32>(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<UInt32>(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
|
||||
/// </remarks>
|
||||
private Boolean ReadMeterFilesDrive1()
|
||||
{
|
||||
// logout and re-login to clear all ongoing processes and clear the Genesis buffers
|
||||
ReestablishMeterFileSystem();
|
||||
|
||||
if (_meterFilesDrive1 == null)
|
||||
{
|
||||
_meterFilesDrive1 = new List<String>();
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user