LUT update improvements

This commit is contained in:
Thomas Wiedebusch
2022-03-03 21:47:54 +01:00
parent a281e753c4
commit 4d9186a322
9 changed files with 367 additions and 140 deletions
+2
View File
@@ -4,6 +4,8 @@
<s:Boolean x:Key="/Default/UserDictionary/Words/=binfile/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=BUGFIX/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Calib/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=catalogue/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=CCITT/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=CONFIGEXCHANGE/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Consts/@EntryIndexedValue">True</s:Boolean>
@@ -1052,6 +1052,16 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore
/// </summary>
public String FwVersion;
/// <summary>
/// This is the Metrology Lookup Table CRC.
/// </summary>
public String LutCrc;
/// <summary>
/// This is the meter size.
/// </summary>
public String MeterSize;
/// <summary>
/// Region (EMEA or NA) and Radio frequency (433 or 868 or null).
/// </summary>
@@ -1107,8 +1117,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore
//build the version string, because e.g. FLEXNETVERSION is one application which does not
//follow the same rule. After the upper conversion, the hexadecimal outline will be lost
versionString = BuildFwVersionString(readFwVersionBytes[1], readFwVersionBytes[0]);
if (appVersionToRead.AppName == "FLEXNETVERSION")
FwVersion = versionString;
if (appVersionToRead.AppName == "FLEXNETVERSION") FwVersion = versionString;
if (readFwVersion != 0)
{
@@ -1139,6 +1148,15 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore
MetrologyUpgradePermission = RegisterConverter.ConvertTo<Byte>(
ReadRegister(Register.System.MetrologyUpgradePermission));
//read metrology lookup table CRC
var lutCrc = RegisterConverter.ConvertTo<UInt32>(ReadRegister(Register.Genesisflow.LookupFileCrc));
LutCrc = $@"0x{lutCrc:X4}";
//read meter size
MeterSize = MeterSizeConverter.ConvertMeterSizeEnumToSizeName((MeterSize)RegisterConverter.ConvertTo<Byte>(
ReadRegister(Register.Genesisflow.MeterSize)));
//read core revision
var coreRegisterRead = RegisterConverter.ConvertTo<String>(ReadRegister(Register.System.CoreRevision, 16));
var coreRevision = coreRegisterRead?.Split('\0');
@@ -560,7 +560,8 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
//set extended timeout for file operations
_currentGenesis.TransmitProtocol.SetResponseTimeout(ExtendedFileIoTimeoutMs);
CommunicationConfig.RequestRetries = 0;
//write "remove-command" to meter, wait for result and read back (read back returns false because of unreadable content)
//write "remove-command" to meter, wait for result and read back
//ATTENTION: read back returns FALSE because of unreadable content
_currentGenesis.WriteRegister(Register.Configexchange.FileRemove, fileName, true, true);
//set timeout back to default value
_currentGenesis.TransmitProtocol.SetDefaultResponseTimeout();
@@ -67,13 +67,13 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
private const String StrProcessLut = "Processing metrology lookup table";
//trigger update retries
private const Int32 RegisterWriteRetries = 2;
private const Int32 RegisterWriteRetries = 0;
//update reties for files
private const Int32 FileWriteRetries = 0;
//retry of entire update procedure
private const Int32 UpdateProcedureRetries = 5;
private const Int32 UpdateProcedureRetries = 0;
//threshold to increase the file write timing
private const Int32 IncreaseTimeoutUpdateProcedureRetries = 4;
@@ -87,17 +87,22 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
private String _actualOperation;
private LutUpdateState _lutUpdateState;
// Process counter for caller to monitor actual progress
private Int32 _processedBytesCtr;
private Int32 _overallBytesCtr;
// Look up table file
public MeterLutFile LutFile;
// actual processed file
private String _actualFileName;
// list of names of installed meter files on drive 1
private List<String> _meterFilesDrive1;
// number of operations for over all access
private const Int32 NumberOfOperations = 11;
private Int32 _operationCtr;
// error message for display of error reason
public String ErrorMessage;
#endregion
#region Events
@@ -124,18 +129,10 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
/// <summary>
/// Process counter in percent
/// </summary>
/// <remarks date="2019-Jun-20" author="Thomas Wiedebusch">
/// <remarks date="2022-Mar-03" author="Thomas Wiedebusch">
/// - Initial
/// </remarks>
public Double OverallProcessCtrPercent
{
get
{
var processFileBytes = _meterFile?.ProcessedBytesCtr ?? 0;
return 100.0 * (processFileBytes + _processedBytesCtr) /
(_overallBytesCtr > 0 ? _overallBytesCtr : 1);
}
}
public Double OverallProcessCtrPercent => 100.0 * _operationCtr / NumberOfOperations;
/// <summary>
/// Single file process counter in percent
@@ -211,7 +208,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
/// </remarks>
public String GetLutUpdateStateOperation()
{
return _lutUpdateState == LutUpdateState.Idle ? "" : $"Downloading {_actualFileName}...";
return _lutUpdateState == LutUpdateState.Idle ? "" : "Processing...";
}
#endregion
@@ -270,6 +267,9 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
return false;
}
_operationCtr = 0;
_actualOperation = "";
ErrorMessage = "";
_lutUpdateState = LutUpdateState.StartInitial;
while (_lutUpdateState != LutUpdateState.Idle && !StopUpdateProcess)
{
@@ -308,13 +308,12 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
StopUpdateProcess = false;
//reset all counters
_processedBytesCtr = 0;
_overallBytesCtr = 0;
_updateProcedureRetryCtr = 0;
//set state machine for automatic FW update
_lutUpdateState = LutUpdateState.Idle;
_actualOperation = "";
_operationCtr = 0;
//logout/login/auto-login
ReestablishMeterFileSystem();
@@ -402,8 +401,6 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
break;
case LutUpdateState.StepFailed:
_processedBytesCtr = 0;
_overallBytesCtr = 0;
_lutUpdateState = _updateProcedureRetryCtr++ < UpdateProcedureRetries
? LutUpdateState.RepeatLutUpdate
@@ -411,8 +408,6 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
break;
case LutUpdateState.RepeatLutUpdate:
_processedBytesCtr = 0;
_overallBytesCtr = 0;
_lutUpdateState = LutUpdateState.DownloadLutFile;
if (_updateProcedureRetryCtr >= IncreaseTimeoutUpdateProcedureRetries)
{
@@ -422,8 +417,6 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
break;
case LutUpdateState.UpdateFailed:
_processedBytesCtr = 0;
_overallBytesCtr = 0;
StopUpdateProcess = true;
_lutUpdateState = LutUpdateState.Idle;
break;
@@ -457,7 +450,11 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
private Boolean ValidateLutFile()
{
// check if LUT file contains data
if (LutFile?.BinData == null || LutFile.BinData.Count < SizeLutFile) return false;
if (LutFile?.BinData == null || LutFile.BinData.Count < SizeLutFile)
{
ErrorMessage += "File size mismatch!";
return false;
}
LutFile.IsValid = false;
// extract the identifier and check, if this is a LUT file
@@ -478,14 +475,16 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
var payload = new List<Byte>();
payload.AddRange(entireFile.GetRange(IndexVersion, LutFileDataLength + LengthVersion));
var calculatedCrc = Crc16Ccitt.CalculateMsb1021(payload.ToArray());
if (calculatedCrc == LutFile.FileCrc)
if (calculatedCrc != LutFile.FileCrc)
{
ErrorMessage += "CRC Mismatch!";
return false;
}
LutFile.CalculatedCrc = calculatedCrc;
LutFile.IsValid = true;
return true;
}
return false;
}
/// <summary>
/// Download the CRC, the meter size and store calibration as preparation for the lookup table
@@ -496,8 +495,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
/// </remarks>
private Boolean PrepareLutDownload()
{
Boolean returnValue;
_actualOperation = "Write Meter Size";
var returnValue = true;
var retryCtr = 0;
if (LutFile == null || _genesisMeter == null || _meterFile == null) return false;
@@ -505,12 +503,36 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
_genesisMeter.TransmitProtocol.SetResponseTimeout(5000);
do
{
_actualOperation = "Write Meter Size";
returnValue = _genesisMeter.WriteRegister(Register.Genesisflow.MeterSize, (Byte)LutFile.MeterSize);
_actualOperation = "Write CRC";
returnValue &= _genesisMeter.WriteRegister<UInt32>(Register.Genesisflow.LookupFileCrc, LutFile.FileCrc);
_actualOperation = "Store calibration";
returnValue &= _genesisMeter.WriteRegister<Byte>(Register.Genesisflow.StoreCalibration, 1);
_actualOperation = "Write meter size";
_operationCtr++;
if (!_genesisMeter.WriteRegister(Register.Genesisflow.MeterSize, (Byte)LutFile.MeterSize))
{
ErrorMessage = "Meter size 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))
{
ErrorMessage += "Meter LUT CRC could not be set!\n";
_operationCtr--;
returnValue = false;
}
else
{
_operationCtr++;
_actualOperation = "Store calibration to meter";
if (!_genesisMeter.WriteRegister(Register.Genesisflow.StoreCalibration, 1))
{
ErrorMessage += "Meter store calibration failed!\n";
_operationCtr--;
returnValue = false;
}
}
}
if (!returnValue)
{
@@ -525,7 +547,36 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
}
/// <summary>
/// Download the metrology lookup table files
/// Erase file and check if done!
/// </summary>
/// <returns></returns>
/// <remarks date="2022-Mar-03" author="Thomas Wiedebusch">
/// - Initial
/// </remarks>
private Boolean EraseFile(String fileDriveName)
{
var returnValue = _meterFile.UnlockEraseWriteMeterFile(fileDriveName);
//erase returns always TRUE, even if the erasure failed! Check with catalogue
_meterFile.EraseMeterFile(fileDriveName);
_meterFilesDrive1.Clear();
if (_meterFile.ReadMeterFileCatalog(out var meterFilesDrive1, MeterFile.StrMeterDrive1,
MeterFile.WildcardAll.ToString()))
{
_meterFilesDrive1.AddRange(meterFilesDrive1);
if (_meterFilesDrive1.Contains(fileDriveName))
{
returnValue = false;
}
}
else
{
returnValue = false;
}
return returnValue;
}
/// <summary>
/// Download the metrology lookup table files and read the catalog of drive 1
/// </summary>
/// <returns></returns>
/// <remarks date="2022-Feb-16" author="Thomas Wiedebusch">
@@ -535,32 +586,97 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
{
//counters for actual process information
_processedBytesCtr = 0;
_overallBytesCtr = 0;
var retryCtr = 0;
Boolean returnValue;
if (LutFile == null) return false;
//set extended timeout for trigger upgrade response delay
_genesisMeter.TransmitProtocol.SetResponseTimeout(5000);
var returnValue = true;
//write file portion and retry if not successful
do
{
// read all files which are already installed
_actualOperation = "Read installed meter files drive 1";
_operationCtr++;
if (_meterFilesDrive1 == null)
{
_meterFilesDrive1 = new List<String>();
}
_meterFilesDrive1.Clear();
if (_meterFile.ReadMeterFileCatalog(out var meterFilesDrive1, MeterFile.StrMeterDrive1,
MeterFile.WildcardAll.ToString()))
{
_meterFilesDrive1.AddRange(meterFilesDrive1);
}
// erase file
_operationCtr++;
_actualFileName = StrLutMeterFileName;
// unlock, erase and write original
returnValue = _meterFile.UnlockEraseWriteMeterFile(_actualFileName);
_actualOperation = $"Erase {_actualFileName}";
returnValue &= _meterFile.EraseMeterFile(_actualFileName);
_actualOperation = $"Write {_actualFileName}";
returnValue &= _meterFile.WriteMeterFile(_actualFileName, LutFile.BinData.ToArray());
if (!EraseFile(_actualFileName))
{
ErrorMessage += $"LUT file {_actualFileName} not erased!\n";
returnValue = false;
}
_actualFileName = StrLutBackupMeterFileName;
// write backup
returnValue &= _meterFile.UnlockEraseWriteMeterFile(_actualFileName);
_actualOperation = $"Erase {_actualFileName}";
returnValue &= _meterFile.EraseMeterFile(_actualFileName);
_operationCtr++;
_actualOperation = $"Write {_actualFileName}";
returnValue &= _meterFile.WriteMeterFile(_actualFileName, LutFile.BinData.ToArray());
if (!_meterFile.WriteMeterFile(_actualFileName, LutFile.BinData.ToArray()))
{
ErrorMessage += $"Writing of {_actualFileName} failed!\n";
returnValue = false;
}
// erase file
_operationCtr++;
_actualFileName = StrLutBackupMeterFileName;
_actualOperation = $"Erase {_actualFileName}";
if (!EraseFile(_actualFileName))
{
ErrorMessage += $"LUT file {_actualFileName} not erased!\n";
returnValue = false;
}
_operationCtr++;
_actualOperation = $"Write {_actualFileName}";
if (!_meterFile.WriteMeterFile(_actualFileName, LutFile.BinData.ToArray()))
{
ErrorMessage += $"Writing of {_actualFileName} failed!\n";
returnValue = false;
}
_operationCtr++;
_actualOperation = $"Write {_actualFileName}";
if (!_meterFile.WriteMeterFile(_actualFileName, LutFile.BinData.ToArray()))
{
ErrorMessage += $"Writing of {_actualFileName} failed!\n";
returnValue = false;
}
_operationCtr++;
_actualOperation = "Read installed meter files drive 1";
_meterFilesDrive1.Clear();
if (!_meterFile.ReadMeterFileCatalog(out meterFilesDrive1, MeterFile.StrMeterDrive1,
MeterFile.WildcardAll.ToString()))
{
returnValue = false;
}
else
{
_meterFilesDrive1.AddRange(meterFilesDrive1);
if (!_meterFilesDrive1.Contains(StrLutMeterFileName))
{
ErrorMessage += $"LUT file {StrLutMeterFileName} not installed!\n";
returnValue = false;
}
if (!_meterFilesDrive1.Contains(StrLutBackupMeterFileName))
{
ErrorMessage += $"LUT file {StrLutBackupMeterFileName} not installed!\n";
returnValue = false;
}
}
if (!returnValue)
{
@@ -568,10 +684,8 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
}
} while (!returnValue && retryCtr++ < FileWriteRetries && !StopUpdateProcess);
returnValue &= retryCtr <= FileWriteRetries;
//update information for process bar
_processedBytesCtr += LutFile.BinData.Count;
//set timeout back to default value
_genesisMeter.TransmitProtocol.SetDefaultResponseTimeout();
return !StopUpdateProcess && returnValue;
}
@@ -83,7 +83,6 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.Registers
public static readonly String NumFirePulses = "GENESISFLOW_NumFirePulses";
public static readonly String LookupFileCrc = "GENESISFLOW_LookupFileCrc";
};
public static class Powermon
@@ -122,6 +121,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.Registers
Configexchange.FileClose,
Configexchange.FileWrite,
Configexchange.FileRead,
Configexchange.Catalogue,
Configexchange.GetFilePointerOffset,
Configexchange.SetFilePointerOffset,
Configexchange.FileRemove,
@@ -136,6 +136,9 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.Registers
Genesisflow.TriggerIdle,
Genesisflow.LedMode,
Genesisflow.SampleRate,
Genesisflow.MeterSize,
Genesisflow.LookupFileCrc,
Genesisflow.StoreCalibration,
Sensusradio.WakeupInterval,
Sensusradio.FrequencyIndicator
+133 -65
View File
@@ -30,6 +30,12 @@
{
this.components = new System.ComponentModel.Container();
this.grpSetup = new System.Windows.Forms.GroupBox();
this.tbxPcbId = new System.Windows.Forms.TextBox();
this.tbxMeterFw = new System.Windows.Forms.TextBox();
this.tbxMeterMeterSize = new System.Windows.Forms.TextBox();
this.tbxMeterLutCrc = new System.Windows.Forms.TextBox();
this.label5 = new System.Windows.Forms.Label();
this.label6 = new System.Windows.Forms.Label();
this.lblFwVersion = new System.Windows.Forms.Label();
this.btnConnect = new System.Windows.Forms.Button();
this.lblConnectPcb = new System.Windows.Forms.Label();
@@ -48,16 +54,16 @@
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.tbxFileMeterSize = new System.Windows.Forms.TextBox();
this.tbxFileCrc = new System.Windows.Forms.TextBox();
this.label3 = new System.Windows.Forms.Label();
this.label1 = new System.Windows.Forms.Label();
this.lblLutFileLoadedInfo = new System.Windows.Forms.Label();
this.tbxLutFilePathName = new System.Windows.Forms.TextBox();
this.label4 = new System.Windows.Forms.Label();
this.btnOpenLutFile = new System.Windows.Forms.Button();
this.label9 = new System.Windows.Forms.Label();
this.lblUpdateTime = new System.Windows.Forms.Label();
this.label1 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.tbxFileCrc = new System.Windows.Forms.TextBox();
this.tbxMeterSize = new System.Windows.Forms.TextBox();
this.grpSetup.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
this.groupBox1.SuspendLayout();
@@ -65,6 +71,12 @@
//
// grpSetup
//
this.grpSetup.Controls.Add(this.tbxPcbId);
this.grpSetup.Controls.Add(this.tbxMeterFw);
this.grpSetup.Controls.Add(this.tbxMeterMeterSize);
this.grpSetup.Controls.Add(this.tbxMeterLutCrc);
this.grpSetup.Controls.Add(this.label5);
this.grpSetup.Controls.Add(this.label6);
this.grpSetup.Controls.Add(this.lblFwVersion);
this.grpSetup.Controls.Add(this.btnConnect);
this.grpSetup.Controls.Add(this.lblConnectPcb);
@@ -72,25 +84,75 @@
this.grpSetup.Controls.Add(this.cbComSlot);
this.grpSetup.Location = new System.Drawing.Point(12, 56);
this.grpSetup.Name = "grpSetup";
this.grpSetup.Size = new System.Drawing.Size(248, 153);
this.grpSetup.Size = new System.Drawing.Size(248, 212);
this.grpSetup.TabIndex = 24;
this.grpSetup.TabStop = false;
this.grpSetup.Text = "Connection";
//
// tbxPcbId
//
this.tbxPcbId.Location = new System.Drawing.Point(126, 27);
this.tbxPcbId.Name = "tbxPcbId";
this.tbxPcbId.ReadOnly = true;
this.tbxPcbId.Size = new System.Drawing.Size(68, 20);
this.tbxPcbId.TabIndex = 32;
//
// tbxMeterFw
//
this.tbxMeterFw.Location = new System.Drawing.Point(126, 56);
this.tbxMeterFw.Name = "tbxMeterFw";
this.tbxMeterFw.ReadOnly = true;
this.tbxMeterFw.Size = new System.Drawing.Size(68, 20);
this.tbxMeterFw.TabIndex = 31;
//
// tbxMeterMeterSize
//
this.tbxMeterMeterSize.Location = new System.Drawing.Point(126, 116);
this.tbxMeterMeterSize.Name = "tbxMeterMeterSize";
this.tbxMeterMeterSize.ReadOnly = true;
this.tbxMeterMeterSize.Size = new System.Drawing.Size(68, 20);
this.tbxMeterMeterSize.TabIndex = 30;
//
// tbxMeterLutCrc
//
this.tbxMeterLutCrc.Location = new System.Drawing.Point(126, 86);
this.tbxMeterLutCrc.Name = "tbxMeterLutCrc";
this.tbxMeterLutCrc.ReadOnly = true;
this.tbxMeterLutCrc.Size = new System.Drawing.Size(68, 20);
this.tbxMeterLutCrc.TabIndex = 29;
//
// label5
//
this.label5.AutoSize = true;
this.label5.Location = new System.Drawing.Point(10, 120);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(60, 13);
this.label5.TabIndex = 28;
this.label5.Text = "Meter Size:";
//
// label6
//
this.label6.AutoSize = true;
this.label6.Location = new System.Drawing.Point(9, 90);
this.label6.Name = "label6";
this.label6.Size = new System.Drawing.Size(56, 13);
this.label6.TabIndex = 27;
this.label6.Text = "LUT CRC:";
//
// lblFwVersion
//
this.lblFwVersion.AutoSize = true;
this.lblFwVersion.Location = new System.Drawing.Point(10, 60);
this.lblFwVersion.Location = new System.Drawing.Point(9, 60);
this.lblFwVersion.Name = "lblFwVersion";
this.lblFwVersion.Size = new System.Drawing.Size(55, 13);
this.lblFwVersion.Size = new System.Drawing.Size(57, 13);
this.lblFwVersion.TabIndex = 25;
this.lblFwVersion.Text = "----------------";
this.lblFwVersion.Text = "Meter FW:";
//
// btnConnect
//
this.btnConnect.Location = new System.Drawing.Point(126, 113);
this.btnConnect.Location = new System.Drawing.Point(126, 181);
this.btnConnect.Name = "btnConnect";
this.btnConnect.Size = new System.Drawing.Size(116, 24);
this.btnConnect.Size = new System.Drawing.Size(116, 25);
this.btnConnect.TabIndex = 24;
this.btnConnect.Text = "Connect";
this.btnConnect.UseVisualStyleBackColor = true;
@@ -101,14 +163,14 @@
this.lblConnectPcb.AutoSize = true;
this.lblConnectPcb.Location = new System.Drawing.Point(10, 30);
this.lblConnectPcb.Name = "lblConnectPcb";
this.lblConnectPcb.Size = new System.Drawing.Size(100, 13);
this.lblConnectPcb.Size = new System.Drawing.Size(33, 13);
this.lblConnectPcb.TabIndex = 23;
this.lblConnectPcb.Text = "NOT CONNECTED";
this.lblConnectPcb.Text = "NOT ";
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(10, 89);
this.label2.Location = new System.Drawing.Point(10, 156);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(28, 13);
this.label2.TabIndex = 20;
@@ -138,7 +200,7 @@
"18",
"19",
"20"});
this.cbComSlot.Location = new System.Drawing.Point(43, 85);
this.cbComSlot.Location = new System.Drawing.Point(126, 150);
this.cbComSlot.Name = "cbComSlot";
this.cbComSlot.Size = new System.Drawing.Size(37, 21);
this.cbComSlot.TabIndex = 5;
@@ -149,7 +211,7 @@
//
this.lblWaitingForMeterResponse.AutoSize = true;
this.lblWaitingForMeterResponse.ForeColor = System.Drawing.Color.Red;
this.lblWaitingForMeterResponse.Location = new System.Drawing.Point(532, 223);
this.lblWaitingForMeterResponse.Location = new System.Drawing.Point(532, 281);
this.lblWaitingForMeterResponse.Name = "lblWaitingForMeterResponse";
this.lblWaitingForMeterResponse.Size = new System.Drawing.Size(182, 13);
this.lblWaitingForMeterResponse.TabIndex = 18;
@@ -157,7 +219,7 @@
//
// btnStopFwUpdate
//
this.btnStopFwUpdate.Location = new System.Drawing.Point(310, 113);
this.btnStopFwUpdate.Location = new System.Drawing.Point(310, 181);
this.btnStopFwUpdate.Name = "btnStopFwUpdate";
this.btnStopFwUpdate.Size = new System.Drawing.Size(116, 25);
this.btnStopFwUpdate.TabIndex = 8;
@@ -167,7 +229,7 @@
//
// btnDownloadLutFile
//
this.btnDownloadLutFile.Location = new System.Drawing.Point(310, 84);
this.btnDownloadLutFile.Location = new System.Drawing.Point(310, 147);
this.btnDownloadLutFile.Name = "btnDownloadLutFile";
this.btnDownloadLutFile.Size = new System.Drawing.Size(116, 25);
this.btnDownloadLutFile.TabIndex = 0;
@@ -178,7 +240,7 @@
// lblOverall
//
this.lblOverall.AutoSize = true;
this.lblOverall.Location = new System.Drawing.Point(21, 260);
this.lblOverall.Location = new System.Drawing.Point(21, 318);
this.lblOverall.Name = "lblOverall";
this.lblOverall.Size = new System.Drawing.Size(80, 13);
this.lblOverall.TabIndex = 7;
@@ -186,7 +248,7 @@
//
// barSingleProgressUpdate
//
this.barSingleProgressUpdate.Location = new System.Drawing.Point(12, 239);
this.barSingleProgressUpdate.Location = new System.Drawing.Point(12, 297);
this.barSingleProgressUpdate.Name = "barSingleProgressUpdate";
this.barSingleProgressUpdate.Size = new System.Drawing.Size(702, 18);
this.barSingleProgressUpdate.TabIndex = 6;
@@ -195,7 +257,7 @@
// lblActualProcess
//
this.lblActualProcess.AutoSize = true;
this.lblActualProcess.Location = new System.Drawing.Point(21, 223);
this.lblActualProcess.Location = new System.Drawing.Point(21, 281);
this.lblActualProcess.Name = "lblActualProcess";
this.lblActualProcess.Size = new System.Drawing.Size(76, 13);
this.lblActualProcess.TabIndex = 4;
@@ -203,7 +265,7 @@
//
// barOverallProgressUpdate
//
this.barOverallProgressUpdate.Location = new System.Drawing.Point(12, 276);
this.barOverallProgressUpdate.Location = new System.Drawing.Point(12, 334);
this.barOverallProgressUpdate.Name = "barOverallProgressUpdate";
this.barOverallProgressUpdate.Size = new System.Drawing.Size(702, 18);
this.barOverallProgressUpdate.TabIndex = 3;
@@ -222,7 +284,7 @@
//
this.lblFwUpdateInfo.AutoSize = true;
this.lblFwUpdateInfo.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblFwUpdateInfo.Location = new System.Drawing.Point(12, 34);
this.lblFwUpdateInfo.Location = new System.Drawing.Point(527, 6);
this.lblFwUpdateInfo.Name = "lblFwUpdateInfo";
this.lblFwUpdateInfo.Size = new System.Drawing.Size(72, 13);
this.lblFwUpdateInfo.TabIndex = 27;
@@ -243,7 +305,7 @@
//
// groupBox1
//
this.groupBox1.Controls.Add(this.tbxMeterSize);
this.groupBox1.Controls.Add(this.tbxFileMeterSize);
this.groupBox1.Controls.Add(this.tbxFileCrc);
this.groupBox1.Controls.Add(this.label3);
this.groupBox1.Controls.Add(this.label1);
@@ -255,15 +317,49 @@
this.groupBox1.Controls.Add(this.btnOpenLutFile);
this.groupBox1.Location = new System.Drawing.Point(278, 56);
this.groupBox1.Name = "groupBox1";
this.groupBox1.Size = new System.Drawing.Size(436, 153);
this.groupBox1.Size = new System.Drawing.Size(436, 212);
this.groupBox1.TabIndex = 28;
this.groupBox1.TabStop = false;
this.groupBox1.Text = "Lookup Table";
//
// tbxFileMeterSize
//
this.tbxFileMeterSize.Location = new System.Drawing.Point(104, 116);
this.tbxFileMeterSize.Name = "tbxFileMeterSize";
this.tbxFileMeterSize.ReadOnly = true;
this.tbxFileMeterSize.Size = new System.Drawing.Size(68, 20);
this.tbxFileMeterSize.TabIndex = 13;
//
// tbxFileCrc
//
this.tbxFileCrc.Location = new System.Drawing.Point(104, 86);
this.tbxFileCrc.Name = "tbxFileCrc";
this.tbxFileCrc.ReadOnly = true;
this.tbxFileCrc.Size = new System.Drawing.Size(68, 20);
this.tbxFileCrc.TabIndex = 12;
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(10, 120);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(60, 13);
this.label3.TabIndex = 11;
this.label3.Text = "Meter Size:";
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(10, 90);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(51, 13);
this.label1.TabIndex = 10;
this.label1.Text = "File CRC:";
//
// lblLutFileLoadedInfo
//
this.lblLutFileLoadedInfo.AutoSize = true;
this.lblLutFileLoadedInfo.Location = new System.Drawing.Point(10, 120);
this.lblLutFileLoadedInfo.Location = new System.Drawing.Point(10, 60);
this.lblLutFileLoadedInfo.Name = "lblLutFileLoadedInfo";
this.lblLutFileLoadedInfo.Size = new System.Drawing.Size(97, 13);
this.lblLutFileLoadedInfo.TabIndex = 9;
@@ -271,7 +367,7 @@
//
// tbxLutFilePathName
//
this.tbxLutFilePathName.Location = new System.Drawing.Point(104, 23);
this.tbxLutFilePathName.Location = new System.Drawing.Point(104, 27);
this.tbxLutFilePathName.Name = "tbxLutFilePathName";
this.tbxLutFilePathName.ReadOnly = true;
this.tbxLutFilePathName.Size = new System.Drawing.Size(322, 20);
@@ -288,7 +384,7 @@
//
// btnOpenLutFile
//
this.btnOpenLutFile.Location = new System.Drawing.Point(310, 53);
this.btnOpenLutFile.Location = new System.Drawing.Point(310, 112);
this.btnOpenLutFile.Name = "btnOpenLutFile";
this.btnOpenLutFile.Size = new System.Drawing.Size(116, 26);
this.btnOpenLutFile.TabIndex = 0;
@@ -299,7 +395,7 @@
// label9
//
this.label9.AutoSize = true;
this.label9.Location = new System.Drawing.Point(250, 223);
this.label9.Location = new System.Drawing.Point(250, 281);
this.label9.Name = "label9";
this.label9.Size = new System.Drawing.Size(101, 13);
this.label9.TabIndex = 30;
@@ -308,52 +404,18 @@
// lblUpdateTime
//
this.lblUpdateTime.AutoSize = true;
this.lblUpdateTime.Location = new System.Drawing.Point(357, 223);
this.lblUpdateTime.Location = new System.Drawing.Point(357, 281);
this.lblUpdateTime.Name = "lblUpdateTime";
this.lblUpdateTime.Size = new System.Drawing.Size(28, 13);
this.lblUpdateTime.TabIndex = 31;
this.lblUpdateTime.Text = "0:00";
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(10, 60);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(51, 13);
this.label1.TabIndex = 10;
this.label1.Text = "File CRC:";
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(10, 90);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(60, 13);
this.label3.TabIndex = 11;
this.label3.Text = "Meter Size:";
//
// tbxFileCrc
//
this.tbxFileCrc.Location = new System.Drawing.Point(104, 56);
this.tbxFileCrc.Name = "tbxFileCrc";
this.tbxFileCrc.ReadOnly = true;
this.tbxFileCrc.Size = new System.Drawing.Size(68, 20);
this.tbxFileCrc.TabIndex = 12;
//
// tbxMeterSize
//
this.tbxMeterSize.Location = new System.Drawing.Point(104, 86);
this.tbxMeterSize.Name = "tbxMeterSize";
this.tbxMeterSize.ReadOnly = true;
this.tbxMeterSize.Size = new System.Drawing.Size(68, 20);
this.tbxMeterSize.TabIndex = 13;
//
// FrmLutUpdate
//
this.AccessibleRole = System.Windows.Forms.AccessibleRole.Sound;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(723, 317);
this.ClientSize = new System.Drawing.Size(723, 364);
this.Controls.Add(this.lblUpdateTime);
this.Controls.Add(this.label9);
this.Controls.Add(this.groupBox1);
@@ -406,9 +468,15 @@
private System.Windows.Forms.Label label9;
private System.Windows.Forms.Label lblUpdateTime;
private System.Windows.Forms.Label lblLutFileLoadedInfo;
private System.Windows.Forms.TextBox tbxMeterSize;
private System.Windows.Forms.TextBox tbxFileMeterSize;
private System.Windows.Forms.TextBox tbxFileCrc;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.TextBox tbxMeterMeterSize;
private System.Windows.Forms.TextBox tbxMeterLutCrc;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.Label label6;
private System.Windows.Forms.TextBox tbxMeterFw;
private System.Windows.Forms.TextBox tbxPcbId;
}
}
+34 -13
View File
@@ -23,7 +23,6 @@ namespace Xylem.Common.Ui.GenesisToolBox
private GenesisMeter _currentGenesis;
private const String StrConnecting = "Connecting to PCB";
private const String StrNotConnected = "NOT CONNECTED";
private const String StrFwVersion = "FW: ";
private const String StrPartPcbConnected = "PCB ID: ";
private const String StrOverallProcess = "Overall Process";
@@ -38,8 +37,8 @@ namespace Xylem.Common.Ui.GenesisToolBox
private Boolean _tryConnectPcb;
private Boolean _lutFileSuccessfulWritten;
private const String StrUpdateErrorMessage = "METROLOGY LOOKUP TABLE UPDATE FAILED!\n\n";
private const String StrUpdateSuccessMessage = "Metrology lookup table successfulley written!\n\n";
private const String StrUpdateErrorMessage = "METROLOGY LOOKUP TABLE UPDATE FAILED!";
private const String StrUpdateSuccessMessage = "Metrology lookup table successfulley written!";
private const String StrLutFileInvalid = "LUT FILE INVALID";
private const String StrLutFileValid = "LUT file loaded";
@@ -64,7 +63,6 @@ namespace Xylem.Common.Ui.GenesisToolBox
{
ProcessViewControl(false);
lblConnectPcb.Text = StrNotConnected;
lblFwVersion.Text = "";
lblConnectPcb.ForeColor = Color.Red;
lblWaitingForMeterResponse.Visible = false;
btnConnect.Enabled = true;
@@ -73,6 +71,7 @@ namespace Xylem.Common.Ui.GenesisToolBox
SetControlDownloadsLocked();
btnStopFwUpdate.Enabled = false;
btnOpenLutFile.Enabled = true;
tbxPcbId.Visible = false;
}
private void FrmLutUpdate_Load(Object sender, EventArgs e)
@@ -185,8 +184,12 @@ namespace Xylem.Common.Ui.GenesisToolBox
Invoke(new Action(() =>
{
lblConnectPcb.Text = StrPartPcbConnected + _currentGenesis.PcbId;
lblFwVersion.Text = StrFwVersion + _currentGenesis.FwVersion;
lblConnectPcb.Text = StrPartPcbConnected;
tbxPcbId.Text = _currentGenesis.PcbId;
tbxPcbId.Visible = true;
tbxMeterFw.Text = _currentGenesis.FwVersion;
tbxMeterMeterSize.Text = _currentGenesis.MeterSize;
tbxMeterLutCrc.Text = _currentGenesis.LutCrc;
lblConnectPcb.ForeColor = Color.Green;
CheckUpdateEnabled();
_currentGenesis.Logout();
@@ -280,9 +283,17 @@ namespace Xylem.Common.Ui.GenesisToolBox
ProcessViewControl(false);
SetControlsDownloadIsFinished();
if (_lutFileSuccessfulWritten)
if (!_lutFileSuccessfulWritten)
{
MessageBoxShow(StrUpdateErrorMessage, @"FAILED",
lblLutFileLoadedInfo.ForeColor = Color.Red;
lblLutFileLoadedInfo.Text = StrUpdateErrorMessage;
var txt = StrUpdateErrorMessage;
if (!string.IsNullOrEmpty(_meterLutUpdate?.ErrorMessage))
{
txt += "\n\n";
txt += _meterLutUpdate?.ErrorMessage;
}
MessageBoxShow(txt, @"FAILED",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else
@@ -327,13 +338,14 @@ namespace Xylem.Common.Ui.GenesisToolBox
lblActualProcess.Text = _meterLutUpdate?.GetActualOperation();
var overallProgress = (Int32)(_meterLutUpdate?.OverallProcessCtrPercent ?? 0);
if (overallProgress < 0) overallProgress = 0;
barOverallProgressUpdate.Value = overallProgress > 100 ? 100 : overallProgress;
barOverallProgressUpdate.Update();
var singleProgress = (Int32)(_meterLutUpdate?.SingleFileProcessCtrPercent ?? 0);
if (_meterLutUpdate?.GetLutUpdateStateOperation() != _lastFwUpdateState)
if (_meterLutUpdate?.GetActualOperation() != _lastFwUpdateState)
{
_lastFwUpdateState = _meterLutUpdate?.GetLutUpdateStateOperation();
_lastFwUpdateState = _meterLutUpdate?.GetActualOperation();
lblWaitingForMeterResponse.Visible = false;
}
else
@@ -394,15 +406,24 @@ namespace Xylem.Common.Ui.GenesisToolBox
lblLutFileLoadedInfo.ForeColor = Color.Green;
lblLutFileLoadedInfo.Text = StrLutFileValid;
tbxFileCrc.Text = $@"0x{_meterLutUpdate.LutFile.FileCrc:X4}";
tbxMeterSize.Text = MeterSizeConverter.ConvertMeterSizeEnumToSizeName(_meterLutUpdate.LutFile.MeterSize);
tbxFileMeterSize.Text = MeterSizeConverter.ConvertMeterSizeEnumToSizeName(_meterLutUpdate.LutFile.MeterSize);
_lutFileValid = true;
}
else
{
var txt = "";
if (!string.IsNullOrEmpty(_meterLutUpdate?.ErrorMessage))
{
txt += _meterLutUpdate?.ErrorMessage;
}
else
{
txt = StrLutFileInvalid;
}
lblLutFileLoadedInfo.ForeColor = Color.Red;
lblLutFileLoadedInfo.Text = StrLutFileInvalid;
lblLutFileLoadedInfo.Text = txt;
tbxFileCrc.Text = @" --- ";
tbxMeterSize.Text = @" --- ";
tbxFileMeterSize.Text = @" --- ";
_lutFileValid = false;
}