CUST: - FwUpdateSw: - start implementation of power correction
This commit is contained in:
parent
1fbc2d0f61
commit
4e716823f9
@ -1,4 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore;
|
||||
|
||||
namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
|
||||
{
|
||||
@ -10,14 +12,19 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
|
||||
/// <summary>
|
||||
/// Drive and name for power correction file stored on meter
|
||||
/// </summary>
|
||||
public const String StrMeterPowerCorrectionFilePathName = "1\\powcorr";
|
||||
public const String StrMeterPowCorrFileName = "1\\powcorr";
|
||||
|
||||
|
||||
private readonly GenesisMeter _currentGenesis;
|
||||
private readonly MeterFile _meterFile;
|
||||
private const Int32 MeterPwrCorrFileLengthIndex = 0;
|
||||
private const Int32 MeterPwrCorrFileLengthSize = 2;
|
||||
private const Int32 MeterPwrCorrFileCrcIndex = MeterPwrCorrFileLengthIndex + MeterPwrCorrFileLengthSize;
|
||||
private const Int32 MeterPwrCorrFileCrcSize= 2;
|
||||
private const Int32 MeterPwrCorrFileDataIndex = MeterPwrCorrFileCrcIndex + MeterPwrCorrFileCrcSize;
|
||||
|
||||
private List<Byte>_meterBinData = new List<Byte>();
|
||||
|
||||
/// <summary>
|
||||
/// Detected FW version before maintenance
|
||||
/// </summary>
|
||||
@ -97,5 +104,39 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
|
||||
/// CRC of power correction file
|
||||
/// </summary>
|
||||
public UInt32 MeterPowerCorrectionCRC { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Ctor
|
||||
/// </summary>
|
||||
/// <param name="currentGenesis"></param>
|
||||
/// <remarks date="2024-May-08" author="Thomas Wiedebusch">
|
||||
/// - Initial.
|
||||
/// </remarks>
|
||||
public MeterPowerCorrectionFile(GenesisMeter currentGenesis)
|
||||
{
|
||||
_currentGenesis = currentGenesis;
|
||||
_meterFile = new MeterFile(_currentGenesis);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Read power correction meter file.
|
||||
/// </summary>
|
||||
/// <returns>true: file found</returns>
|
||||
/// <remarks date="2024-May-08" author="Thomas Wiedebusch">
|
||||
/// - Initial
|
||||
/// </remarks>
|
||||
public Boolean ReadPowCorrMeterFile()
|
||||
{
|
||||
if (_currentGenesis == null || _meterFile == null)
|
||||
return false;
|
||||
|
||||
var retVal = _currentGenesis.ReLogin();
|
||||
if (retVal)
|
||||
{
|
||||
retVal = _meterFile.ReadMeterFile(StrMeterPowCorrFileName, out _meterBinData);
|
||||
}
|
||||
|
||||
return retVal;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1096,6 +1096,42 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw.Properties {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Power correction:.
|
||||
/// </summary>
|
||||
internal static string StrPowerCorrection {
|
||||
get {
|
||||
return ResourceManager.GetString("StrPowerCorrection", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to ERROR: Power correction failed!.
|
||||
/// </summary>
|
||||
internal static string StrPowerCorrectionFailed {
|
||||
get {
|
||||
return ResourceManager.GetString("StrPowerCorrectionFailed", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Power correction not needed..
|
||||
/// </summary>
|
||||
internal static string StrPowerCorrectionNotNeeded {
|
||||
get {
|
||||
return ResourceManager.GetString("StrPowerCorrectionNotNeeded", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Power correction succeeded..
|
||||
/// </summary>
|
||||
internal static string StrPowerCorrectionSucceeded {
|
||||
get {
|
||||
return ResourceManager.GetString("StrPowerCorrectionSucceeded", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Process state connect.
|
||||
/// </summary>
|
||||
|
||||
@ -694,4 +694,16 @@
|
||||
<data name="StrFwUpdateFailed" xml:space="preserve">
|
||||
<value>ERROR: Firmware update failed!</value>
|
||||
</data>
|
||||
<data name="StrPowerCorrection" xml:space="preserve">
|
||||
<value>Power correction:</value>
|
||||
</data>
|
||||
<data name="StrPowerCorrectionFailed" xml:space="preserve">
|
||||
<value>ERROR: Power correction failed!</value>
|
||||
</data>
|
||||
<data name="StrPowerCorrectionNotNeeded" xml:space="preserve">
|
||||
<value>Power correction not needed.</value>
|
||||
</data>
|
||||
<data name="StrPowerCorrectionSucceeded" xml:space="preserve">
|
||||
<value>Power correction succeeded.</value>
|
||||
</data>
|
||||
</root>
|
||||
@ -1395,10 +1395,13 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw
|
||||
/// Correct power overestimation at FW change from
|
||||
/// <see cref="PowerCorrection.EmeaFwThresholdForPowCorr"/>,
|
||||
/// <see cref="PowerCorrection.NaFNaFwThresholdForPowCorr"/>.
|
||||
/// Precondition:
|
||||
/// Meter registers have to be read in advance,
|
||||
/// Meter files have to be read in advance.
|
||||
/// </summary>
|
||||
/// <param name="successExitState"></param>
|
||||
/// <param name="errorExitState"></param>
|
||||
/// <remarks date="2024-May-07" author="Thomas Wiedebusch">
|
||||
/// <remarks date="2024-May-08" author="Thomas Wiedebusch">
|
||||
/// - Initial.
|
||||
/// </remarks>
|
||||
private void CorrectPowerOverestimation(ProcessState successExitState,
|
||||
@ -1407,29 +1410,92 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw
|
||||
// remind the invoker being able to generate error messages based on the last state
|
||||
_invokerProcessState = _processState;
|
||||
|
||||
if ( _fwUpdatePowerCorrection == null
|
||||
|| _currentGenesis?.InstalledFwVersion == null
|
||||
|| _cordonelFirmwarePackage?.FwPackageInfo?.Version == null)
|
||||
if (_currentGenesis?.InstalledFwVersion == null ||
|
||||
_cordonelFirmwarePackage?.FwPackageInfo?.Version == null)
|
||||
{
|
||||
InfoProcessFailed(null, Resources.StrLifeTimeCalculationFailed);
|
||||
InfoProcessFailed(null, Resources.StrPowerCorrectionFailed);
|
||||
_processState = errorExitState;
|
||||
return;
|
||||
}
|
||||
|
||||
_fwUpdatePowerCorrection.ActualFwVersion = _currentGenesis.InstalledFwVersion;
|
||||
_fwUpdatePowerCorrection.RequiredFwVersion =
|
||||
(UInt32?)_cordonelFirmwarePackage?.FwPackageInfo?.Version;
|
||||
var powCorrFile = new MeterPowerCorrectionFile(_currentGenesis);
|
||||
// CASE 1: Power correction has been executed in previous run:
|
||||
// Check if file "1\\powcorr" is in meter
|
||||
if (_readMeterFiles.Any(f => f.Contains(MeterPowerCorrectionFile.StrMeterPowCorrFileName)))
|
||||
{
|
||||
// read the powCorrFile
|
||||
powCorrFile.ReadPowCorrMeterFile();
|
||||
LogPowCorrContent(powCorrFile);
|
||||
_processState = successExitState;
|
||||
return;
|
||||
}
|
||||
|
||||
// CASE 2: Power correction needed due to update of FW to corrected version regarding the
|
||||
// power calculation:
|
||||
// Check required versus installed FW versions and threshold version for power correction
|
||||
if ((_currentGenesis.Region == "EMEA" &&
|
||||
_cordonelFirmwarePackage.FwPackageInfo.Version >= PowerCorrection.EmeaFwThresholdForPowCorr &&
|
||||
_currentGenesis.InstalledFwVersion < PowerCorrection.EmeaFwThresholdForPowCorr) ||
|
||||
(_currentGenesis.Region == "NA" &&
|
||||
_cordonelFirmwarePackage.FwPackageInfo.Version >= PowerCorrection.NaFNaFwThresholdForPowCorr &&
|
||||
_currentGenesis.InstalledFwVersion < PowerCorrection.NaFNaFwThresholdForPowCorr))
|
||||
{
|
||||
var applyAlgorithm1 = true;
|
||||
// CASE 2.1: Missing power correction settings from FW update package
|
||||
if (_fwUpdatePowerCorrection == null)
|
||||
{
|
||||
applyAlgorithm1 = false;
|
||||
//do something
|
||||
_fwUpdatePowerCorrection = new PowerCorrection();
|
||||
}
|
||||
// calculate the power correction
|
||||
if (applyAlgorithm1)
|
||||
{
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
}
|
||||
// correct the total used seconds
|
||||
|
||||
// fill all infos to meter power correction file
|
||||
_fwUpdatePowerCorrection.ActualFwVersion = _currentGenesis.InstalledFwVersion;
|
||||
_fwUpdatePowerCorrection.RequiredFwVersion = (UInt32?)_cordonelFirmwarePackage.FwPackageInfo.Version;
|
||||
|
||||
|
||||
// store results to "1\\powcorr" in the meter
|
||||
}
|
||||
else
|
||||
{
|
||||
InfoProcessSuccess(null, Resources.StrPowerCorrectionNotNeeded);
|
||||
_processState = successExitState;
|
||||
return;
|
||||
}
|
||||
|
||||
LogPowCorrContent(powCorrFile);
|
||||
_processState = successExitState;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Log the power correction file content.
|
||||
/// </summary>
|
||||
/// <param name="powCorrFile"></param>
|
||||
/// <remarks date="2023-Nov-21" author="Thomas Wiedebusch">
|
||||
/// - Initial.
|
||||
/// </remarks>
|
||||
private void LogPowCorrContent(MeterPowerCorrectionFile powCorrFile)
|
||||
{
|
||||
//TODO THW
|
||||
var lifeTimeInfo = new List<String>
|
||||
var powerCorrectionInfo = new List<String>
|
||||
{
|
||||
$"{Resources.StrLifeTimeDrainedBattery} {0} ",
|
||||
$"{Resources.StrLifeTimeRemainingYears} {0} " +
|
||||
$"{Resources.StrLifeTimeYears}"
|
||||
};
|
||||
|
||||
LogStringList(Resources.StrLifeTimeCalculation, lifeTimeInfo, Resources.StrLifeTimeCalculationSucceeded);
|
||||
_processState = successExitState;
|
||||
LogStringList(Resources.StrPowerCorrection, powerCorrectionInfo, Resources.StrPowerCorrectionSucceeded);
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@ -694,4 +694,16 @@
|
||||
<data name="StrFwUpdateFailed" xml:space="preserve">
|
||||
<value>FEHLER: Firmware Update fehlgeschlagen!</value>
|
||||
</data>
|
||||
<data name="StrPowerCorrection" xml:space="preserve">
|
||||
<value>Verbrauchskorrektur:</value>
|
||||
</data>
|
||||
<data name="StrPowerCorrectionFailed" xml:space="preserve">
|
||||
<value>FEHLER: Verbrauchskorrektur fehlgeschlagen!</value>
|
||||
</data>
|
||||
<data name="StrPowerCorrectionNotNeeded" xml:space="preserve">
|
||||
<value>Verbrauchskorrektur nich nötig.</value>
|
||||
</data>
|
||||
<data name="StrPowerCorrectionSucceeded" xml:space="preserve">
|
||||
<value>Verbrauchskorrektur erfolgreich durchgeführt.</value>
|
||||
</data>
|
||||
</root>
|
||||
Loading…
Reference in New Issue
Block a user