129 lines
5.6 KiB
C#
129 lines
5.6 KiB
C#
namespace Common.Hardware.WaterMeter.eRegister
|
|
{
|
|
using Common.Hardware.SIRT;
|
|
using Common.Hardware.SIRT.Tasks;
|
|
using Common.Hardware.WaterMeter.eRegister.Features;
|
|
using Common.Hardware.WaterMeter.eRegister.Models;
|
|
|
|
using System.Globalization;
|
|
using System.Text;
|
|
|
|
public class EregisterCheckInitializationTask : EregisterTask
|
|
{
|
|
private readonly EregisterProgrammingParameters parameters;
|
|
|
|
public EregisterCheckInitializationTask(EregisterProgrammingParameters parameters, int frequency) : base(frequency)
|
|
{
|
|
this.parameters = parameters;
|
|
this.Name = "Check state";
|
|
this.WakeUpCmd = true;
|
|
this.Data = new OpticalTelegram
|
|
{
|
|
Minutes = 1
|
|
}
|
|
.Append(new ProvidePin
|
|
{
|
|
AuthLevel = AuthLevel.III
|
|
});
|
|
}
|
|
|
|
public override byte[] Start()
|
|
{
|
|
this.WakeUpModul = !this.AnyTelegramReceived;
|
|
|
|
return base.Start();
|
|
}
|
|
|
|
public override void Push(SIRTMessage response)
|
|
{
|
|
base.Push(response);
|
|
|
|
if (this.State == SIRTTaskState.Completed)
|
|
{
|
|
this.ErrorMessage = default(ErrorMessage);
|
|
var hasValidConfiguration = true;
|
|
var message = new StringBuilder();
|
|
message.AppendLine();
|
|
message.AppendLine();
|
|
|
|
if (this.DEBUGMessage != null && this.SEMIMessage != null)
|
|
{
|
|
uint min = 0x02000000;
|
|
|
|
if (this.DEBUGMessage.BatterySeconds > min)
|
|
{
|
|
var over = (this.DEBUGMessage.BatterySeconds - min) / 60D / 60D / 24D;
|
|
|
|
message.AppendLine();
|
|
message.AppendLine($"- Das Rechenwerk ist um {over:0.0000} Tage älter als erlaubt. Bitte informieren Sie die Linienleitung und QS.");
|
|
hasValidConfiguration = false;
|
|
}
|
|
|
|
if (this.SEMIMessage.BatteryRemainingYears <= this.parameters.MinBatteryRemainingYears)
|
|
{
|
|
message.AppendLine();
|
|
message.AppendLine($"- Die Batterielaufzeit ({this.SEMIMessage.BatteryRemainingYears}) liegt unter dem angegebenen Minimum von ({this.parameters.MinBatteryRemainingYears}).");
|
|
hasValidConfiguration = false;
|
|
}
|
|
|
|
// Min metrology FW version (>= 1108) CSD dependent
|
|
if (!string.IsNullOrWhiteSpace(this.parameters.MinMetrologyFWVersion))
|
|
{
|
|
var culture = CultureInfo.CurrentCulture;
|
|
var numberStyle = NumberStyles.HexNumber | NumberStyles.AllowHexSpecifier;
|
|
var minParsed = int.TryParse(this.parameters.MinMetrologyFWVersion, numberStyle, culture, out var minFW);
|
|
var curParsed = int.TryParse(this.DEBUGMessage.MetrologyFWVersion, numberStyle, culture, out var curFW);
|
|
|
|
if (minFW > curFW)
|
|
{
|
|
message.AppendLine();
|
|
message.AppendLine($"- Die Metrologische FW Version ({curFW}) liegt unter dem angegebenen Minimum von ({minFW}).");
|
|
hasValidConfiguration = false;
|
|
}
|
|
}
|
|
|
|
// All, for production available radio & metrology FW versions.
|
|
if (!string.IsNullOrWhiteSpace(this.parameters.FWVersionsList))
|
|
{
|
|
if (!this.parameters.FWVersionsList.Contains(this.DEBUGMessage.MetrologyFWVersion))
|
|
{
|
|
message.AppendLine();
|
|
message.AppendLine($"- Die Metrologische FW Version ({this.DEBUGMessage.MetrologyFWVersion}) ist nicht für Produktion freigegeben. ");
|
|
hasValidConfiguration = false;
|
|
}
|
|
|
|
if (!this.parameters.FWVersionsList.Contains(this.DEBUGMessage.RadioFWVersion))
|
|
{
|
|
message.AppendLine();
|
|
message.AppendLine($"- Die Radio FW Version ({this.DEBUGMessage.RadioFWVersion}) ist nicht für Produktion freigegeben. ");
|
|
hasValidConfiguration = false;
|
|
}
|
|
}
|
|
|
|
if (this.DEBUGMessage.RebootCount > this.parameters.MaxRebootCount)
|
|
{
|
|
message.AppendLine();
|
|
message.AppendLine($"- Der rechenwerk wurde mehr als {this.parameters.MaxRebootCount} mal rebooted.");
|
|
hasValidConfiguration = false;
|
|
}
|
|
}
|
|
|
|
if (!hasValidConfiguration)
|
|
{
|
|
message.Insert(0, $"Am Einbauplatz: {this.SlotNr}, "
|
|
+ $"eingebaute E-Register mit Funkadressen: {this.RequestAddress} | {this.ResponseAddress}, "
|
|
+ $"sind folgenden Fehler aufgetreten:");
|
|
message.AppendLine();
|
|
message.AppendLine("Linienleitung und QS informieren!");
|
|
|
|
this.ErrorMessage = new ErrorMessage
|
|
{
|
|
Title = "Fehler bei der Prüfungsinitialisierung",
|
|
Text = message.ToString()
|
|
};
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|