common/ProductionUiCordonel/ProductionProcesses/Actions/ProductionProcessShippingMode.cs
2026-04-23 17:50:07 +02:00

286 lines
12 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Windows.Controls;
using ProductionUiCordonelLegacy.ProductionProcesses.Enum;
using ProductionUiCordonelLegacy.UserControls.FinalTest;
using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore.Consts;
using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile;
using Xylem.Common.Hardware.WaterMeter.Genesis.Registers;
namespace ProductionUiCordonelLegacy.ProductionProcesses.Actions
{
public class ProductionProcessShippingMode : BaseProductionProcess
{
private UcPlain UserControl;
private Boolean doRestart;
private Boolean hasRadio;
public ProductionProcessShippingMode(Boolean restart = false, Boolean registerHasRadio = true)
{
name = "Versandbereitschaft herstellen";
currentProcessState = ProductionProcessState.Waiting;
doRestart = restart;
hasRadio = registerHasRadio;
}
public override void InitUserControl()
{
UserControl = new UcPlain();
UserControl.lblHl.Content = name;
UserControl.lblText.Content = "Display und Alarme für den Kunden einstellen.";
}
public override UserControl GetControl()
{
if (UserControl == null)
{
throw new Exception($"UserControl {GetType()} not Ready");
}
return UserControl;
}
public override void ProcessDone()
{
//clear
}
public override void StartProcess()
{
hasRadio = Meter.RadioFrequencyMhz.HasValue;
if (doRestart)
{
}
if (hasRadio)
{
if (Meter.StoreAllConfigurations())
{
if (doRestart)
{
var CheckValuesAfterBoot = new List<Tuple<String, Byte[]>>
{
new Tuple<String, Byte[]>("METROLOGYASST_PulseLength",
Meter.ReadRegister("METROLOGYASST_PulseLength")),
new Tuple<String, Byte[]>("POWERMON_BatteryQuantity",
Meter.ReadRegister("POWERMON_BatteryQuantity")),
new Tuple<String, Byte[]>("GENESISFLOW_MeterSize", Meter.ReadRegister("GENESISFLOW_MeterSize")),
new Tuple<String, Byte[]>("GENESISFLOW_CalFactor1", Meter.ReadRegister("GENESISFLOW_CalFactor1")),
new Tuple<String, Byte[]>("SENSUSRADIO_RadioAddress", Meter.ReadRegister("SENSUSRADIO_RadioAddress"))
};
var _meterResetPsu = new MeterResetPsu(Meter)
{
StoreConfigEnable = true
};
var rebootSucceeded = _meterResetPsu.MeterResetPsuExecute();
Thread.Sleep(16000);
if (!Meter.Login())
{
Meter.WriteLog("relogin first attempt Failed");
Thread.Sleep(5000);
if (!Meter.Login())
{
Meter.WriteLog("relogins Failed");
currentProcessState = ProductionProcessState.Error;
}
}
Meter.WriteRegister("SYSTEM_ExitReason", 21, true, false);
var exitResult = RegisterConverter.ByteArrayToValue<Int16>(Meter.ReadRegister("SYSTEM_ExitReason"));
if (exitResult != 0)
{
Meter.WriteLog("PasswordFile incorrect");
currentProcessState = ProductionProcessState.Error;
return;
}
Boolean? hasDiffrences = null;
foreach (var item in CheckValuesAfterBoot)
{
if (!item.Item2.SequenceEqual(Meter.ReadRegister(item.Item1)))
{
hasDiffrences = true;
}
else
{
if (!hasDiffrences.HasValue)
{
hasDiffrences = false;
}
}
}
if (rebootSucceeded && hasDiffrences.HasValue && !hasDiffrences.Value)
{
if (false)
{
Meter.WriteRegister("SENSUSRADIO_MainAlarmMask", new Byte[] { 0x00 }, true);
Meter.WriteRegister("SENSUSRADIO_ExtendedAlarmMask", new Byte[] { 0x00 }, true);
Meter.WriteRegister("CUSTOMER_AlarmEnableMask", new Byte[] { 0xD3, 0x9F, 0x00, 0x00 }, true);
Meter.WriteRegister("CUSTOMER_AlarmBroadcastMask", new Byte[] { 0xDC, 0x1F, 0x00, 0x00 }, true);
Meter.WriteRegister("CUSTOMER_AlarmVisualMask", new Byte[] { 0xDC, 0x1F, 0x00, 0x00 }, true);
}
Meter.WriteRegister("SENSUSRADIO_SystemState", 0xFF);
Meter.Logout();
Thread.Sleep(5000);
if (!Meter.Login())
{
Meter.WriteLog("relogin first attempt Failed");
Thread.Sleep(5000);
if (!Meter.Login())
{
Meter.WriteLog("relogin Failed");
currentProcessState = ProductionProcessState.Error;
}
}
var SENSUSRADIO_MainAlarmMask = Meter.ReadRegister("SENSUSRADIO_MainAlarmMask");
var SENSUSRADIO_ExtendedAlarmMask = Meter.ReadRegister("SENSUSRADIO_ExtendedAlarmMask");
var SENSUSRADIO_SystemState = Meter.ReadRegister("SENSUSRADIO_SystemState");
if (SENSUSRADIO_SystemState[0] == 0x02 && SENSUSRADIO_MainAlarmMask[0] != 0)
{
currentProcessState = ProductionProcessState.Done;
}
else
{
Meter.WriteLog("resetRadio Failed");
currentProcessState = ProductionProcessState.Error;
}
}
else
{
Meter.WriteLog("reboot compare failed");
currentProcessState = ProductionProcessState.Error;
}
}
else
{
Meter.ResetAlarm(Alarm.ALL);//(true, new byte[] { 0x00, 0x00, 0x00, 0x01 });
Meter.SetLcdText(true, new Byte[] { 0x00, 0x00, 0x00, 0x01 });
Meter.ResetAlarm(Alarm.EMPTY_PIPE);//(true, new byte[] { 0x00, 0x00, 0x00, 0x01 });
Meter.WriteRegister("SENSUSRADIO_SystemState", 0xFF);
Meter.Logout();
Thread.Sleep(5000);
if (!Meter.Login())
{
Thread.Sleep(5000);
if (!Meter.Login())
{
currentProcessState = ProductionProcessState.Error;
return;
}
}
var SENSUSRADIO_MainAlarmMask = Meter.ReadRegister("SENSUSRADIO_MainAlarmMask");
var SENSUSRADIO_ExtendedAlarmMask = Meter.ReadRegister("SENSUSRADIO_ExtendedAlarmMask");
var SENSUSRADIO_SystemState = Meter.ReadRegister("SENSUSRADIO_SystemState");
if (SENSUSRADIO_SystemState[0] == 0x02 && SENSUSRADIO_MainAlarmMask[0] != 0)
{
currentProcessState = ProductionProcessState.Done;
}
else
{
Meter.WriteLog("resetRadio Failed");
currentProcessState = ProductionProcessState.Error;
}
}
}
else
{
currentProcessState = ProductionProcessState.Error;
}
return;
}
else
{
if (Meter.StoreAllConfigurations())
{
if (doRestart)
{
var CheckValuesAufterBoot = new List<Tuple<String, Byte[]>>();
CheckValuesAufterBoot.Add(new Tuple<String, Byte[]>("METROLOGYASST_PulseLength", Meter.ReadRegister("METROLOGYASST_PulseLength")));
CheckValuesAufterBoot.Add(new Tuple<String, Byte[]>("POWERMON_BatteryQuantity", Meter.ReadRegister("POWERMON_BatteryQuantity")));
CheckValuesAufterBoot.Add(new Tuple<String, Byte[]>("GENESISFLOW_MeterSize", Meter.ReadRegister("GENESISFLOW_MeterSize")));
CheckValuesAufterBoot.Add(new Tuple<String, Byte[]>("GENESISFLOW_CalFactor1", Meter.ReadRegister("GENESISFLOW_CalFactor1")));
var _meterResetPsu = new MeterResetPsu(Meter)
{
StoreConfigEnable = true
};
var rebootSucceeded = _meterResetPsu.MeterResetPsuExecute();
Thread.Sleep(16000);
Meter.Login();
Meter.WriteRegister("SYSTEM_ExitReason", 21, true, false);
var exitResult = RegisterConverter.ByteArrayToValue<Int16>(Meter.ReadRegister("SYSTEM_ExitReason"));
if (exitResult != 0)
{
Meter.WriteLog("PasswordFile incorrect");
currentProcessState = ProductionProcessState.Error;
return;
}
Boolean? hasDiffrences = null;
foreach (var item in CheckValuesAufterBoot)
{
if (!item.Item2.SequenceEqual(Meter.ReadRegister(item.Item1)))
{
hasDiffrences = true;
}
else
{
if (!hasDiffrences.HasValue)
{
hasDiffrences = false;
}
}
}
Meter.ResetAlarm(Alarm.ALL);//(true, new byte[] { 0x00, 0x00, 0x00, 0x01 });
Meter.SetLcdText(true, new Byte[] { 0x00, 0x00, 0x00, 0x01 });
Meter.ResetAlarm(Alarm.EMPTY_PIPE);//(true, new byte[] { 0x00, 0x00, 0x00, 0x01 });
if (rebootSucceeded && hasDiffrences.HasValue && !hasDiffrences.Value)
{
currentProcessState = ProductionProcessState.Done;
}
else
{
Meter.WriteLog("reboot compare failed");
currentProcessState = ProductionProcessState.Error;
}
}
else
{
currentProcessState = ProductionProcessState.Done;
}
return;
}
}
currentProcessState = ProductionProcessState.Error;
}
}
}