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> { new Tuple("METROLOGYASST_PulseLength", Meter.ReadRegister("METROLOGYASST_PulseLength")), new Tuple("POWERMON_BatteryQuantity", Meter.ReadRegister("POWERMON_BatteryQuantity")), new Tuple("GENESISFLOW_MeterSize", Meter.ReadRegister("GENESISFLOW_MeterSize")), new Tuple("GENESISFLOW_CalFactor1", Meter.ReadRegister("GENESISFLOW_CalFactor1")), new Tuple("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(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>(); CheckValuesAufterBoot.Add(new Tuple("METROLOGYASST_PulseLength", Meter.ReadRegister("METROLOGYASST_PulseLength"))); CheckValuesAufterBoot.Add(new Tuple("POWERMON_BatteryQuantity", Meter.ReadRegister("POWERMON_BatteryQuantity"))); CheckValuesAufterBoot.Add(new Tuple("GENESISFLOW_MeterSize", Meter.ReadRegister("GENESISFLOW_MeterSize"))); CheckValuesAufterBoot.Add(new Tuple("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(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; } } }