286 lines
12 KiB
C#
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;
|
|
|
|
|
|
}
|
|
}
|
|
}
|