129 lines
5.7 KiB
C#
129 lines
5.7 KiB
C#
namespace Common.Hardware.WaterMeter.eRegister
|
|
{
|
|
using Common.Hardware.SIRT;
|
|
using Common.Hardware.WaterMeter.eRegister.Features;
|
|
using Common.Hardware.WaterMeter.eRegister.Models;
|
|
|
|
using System.Globalization;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
|
|
public class EregisterCheckInitializationTask : EregisterTask
|
|
{
|
|
private readonly EregisterProgrammingParameters parameters;
|
|
|
|
private SIRTTaskState pendingState;
|
|
|
|
public EregisterCheckInitializationTask(EregisterProgrammingParameters parameters, int frequency) : base(frequency)
|
|
{
|
|
this.parameters = parameters;
|
|
this.pendingState = SIRTTaskState.Completed;
|
|
this.Name = "Initial Check";
|
|
this.Data = new OpticalTelegram { Minutes = 0, } // parameters.LED_On_Minutes }
|
|
.Append(new ProvidePin { AuthLevel = AuthLevel.III });
|
|
}
|
|
|
|
protected override void EndProcessResponse(SIRTMessage response)
|
|
{
|
|
this.timeoutTimer.Stop();
|
|
|
|
if (this.State == this.pendingState)
|
|
{
|
|
this.State = SIRTTaskState.Running;
|
|
this.Name = "Initial Check - ✓";
|
|
|
|
var message = new StringBuilder();
|
|
message.AppendLine();
|
|
message.AppendLine();
|
|
|
|
if (this.DEBUG != null && this.SEMI != null)
|
|
{
|
|
if (this.DEBUG.BatteryVoltage <= this.parameters.MinBatteryVoltage)
|
|
{
|
|
message.AppendLine();
|
|
message.AppendLine($"- Die Batteriespannung ({this.DEBUG.BatteryVoltage}) liegt unter dem angegebenen Minimum von ({this.parameters.MinBatteryVoltage}). ");
|
|
}
|
|
|
|
if (this.SEMI.BatteryRemainingYears <= this.parameters.MinBatteryRemainingYears)
|
|
{
|
|
message.AppendLine();
|
|
message.AppendLine($"- Die Batterielaufzeit ({this.SEMI.BatteryRemainingYears}) liegt unter dem angegebenen Minimum von ({this.parameters.MinBatteryRemainingYears}). ");
|
|
}
|
|
|
|
// 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.DEBUG.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}).");
|
|
}
|
|
}
|
|
|
|
// All, for production available radio & metrology FW versions.
|
|
if (!string.IsNullOrWhiteSpace(this.parameters.FWVersionsList))
|
|
{
|
|
if (!this.parameters.FWVersionsList.Contains(this.DEBUG.MetrologyFWVersion))
|
|
{
|
|
message.AppendLine();
|
|
message.AppendLine($"- Die Metrologische FW Version ({this.DEBUG.MetrologyFWVersion}) ist nicht für Produktion freigegeben. ");
|
|
}
|
|
|
|
if (!this.parameters.FWVersionsList.Contains(this.DEBUG.RadioFWVersion))
|
|
{
|
|
message.AppendLine();
|
|
message.AppendLine($"- Die Radio FW Version ({this.DEBUG.RadioFWVersion}) ist nicht für Produktion freigegeben. ");
|
|
}
|
|
}
|
|
|
|
if (this.DEBUG.RebootCount > this.parameters.MaxRebootCount)
|
|
{
|
|
message.AppendLine();
|
|
message.AppendLine($"- Der rechenwerk wurde mehr als {this.parameters.MaxRebootCount} mal rebooted.");
|
|
}
|
|
}
|
|
|
|
if (message.Length > 10)
|
|
{
|
|
message.Insert(0, $"Am Einbauplatz: {this.SlotNr}, "
|
|
+ $"eingebaute E-Register mit Funkadressen: {this.RequestAddress} | {this.ResponseAddress}, "
|
|
+ $"sind folgenden Fehler sind aufgetreten:");
|
|
message.AppendLine();
|
|
message.AppendLine("Qualitätssicherung informieren!");
|
|
message.AppendLine();
|
|
message.AppendLine("Möchten Sie mit die Prüfung fortfahren (Yes), oder Abbrechen (No)?");
|
|
|
|
var result = MessageBox.Show(
|
|
message.ToString()
|
|
, $"Fehler bei der Prüfungsinitialisierung"
|
|
, MessageBoxButtons.YesNo);
|
|
|
|
if (result == DialogResult.No)
|
|
{
|
|
this.State = SIRTTaskState.Pending;
|
|
this.pendingState = SIRTTaskState.Cancelled;
|
|
this.Label = nameof(SIRTTaskState.Cancelled);
|
|
this.Data = new OpticalTelegram
|
|
{
|
|
Minutes = 0
|
|
};
|
|
this.Name = "Initial Check ✘";
|
|
|
|
this.NotifyTimeouted();
|
|
}
|
|
}
|
|
}
|
|
|
|
this.State = this.pendingState;
|
|
|
|
this.timeoutTimer.Start();
|
|
base.EndProcessResponse(response);
|
|
}
|
|
}
|
|
}
|