laatzen/Common/CordonelPreadjustmentUi/Processes/Actions/LoginProcess.cs
2024-09-17 09:30:32 +02:00

170 lines
5.8 KiB
C#

using CordonelPreadjustmentUi.Processes.Itinerary;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Xylem.Common.Hardware.WaterMeter.Genesis.Registers;
using static CordonelPreadjustmentUi.PreAdjustmentControl;
namespace CordonelPreadjustmentUi.Processes.Actions
{
public class LoginProcess : BaseProcess
{
public LoginProcess(string processName, StatusPanelItems panelState, string performMessage, string failedMessage, int? expectedTimeS) : base(processName, panelState, performMessage, failedMessage, expectedTimeS)
{
}
public override List<Task> StartWork()
{
return Login(base.CurrentProcessProgress);
}
private List<Task> Login(ProcessProgress pp)
{
var MetersToProcess = MeterStateCtls.Where(e => e.IsEnabled).ToList();
MetersToProcess.ForEach(lf => lf.LoginFailed = false);
var listOfLoginTask = new List<Task>();
foreach (var tempmeterctl in TempMeterStateCtls)
{
listOfLoginTask.Add(new Task<bool>(() =>
{
if (pp.Setting.GetTempUseTempFlansh())
{
if (tempmeterctl.Slot == 11)
{
tempmeterctl.OverridePassword = "10C16DF46E6C";
}
else if (tempmeterctl.Slot == 12)
{
tempmeterctl.OverridePassword = "BF8AC70AB27E";
}
var Result = string.IsNullOrEmpty(tempmeterctl.OverridePassword)
? tempmeterctl.Meter.Login()
: tempmeterctl.Meter.Login(tempmeterctl.OverridePassword);
if (!Result)
{
if (!tempmeterctl.Meter.Login(tempmeterctl.OverridePassword))
{
pp.DebugMessage($"Login to Flansch failed");
pp.Aborted = true;
}
}
Thread.Sleep(100);
pp.DebugMessage($"Load Temp {tempmeterctl.Slot} with {MeterStateControl.TempMode.CalcTof}\n");
tempmeterctl.Meter.WriteRegister(Register.Genesisflow.TriggerIdle, 0);
tempmeterctl.Meter.WriteRegister(Register.Genesisflow.LedMode, 6);
tempmeterctl.Meter.WriteRegister(Register.Genesisflow.SampleRate, 10);
try
{
tempmeterctl.StartTempWatch(MeterStateControl.TempMode.CalcTof);
}
catch (Exception ex)
{
pp.DebugMessage($"Load Temp error use hand insted");
pp.DebugMessage(ex.Message);
pp.DebugMessage($"Load Temp {tempmeterctl.Slot} with {MeterStateControl.TempMode.Hand}\n");
tempmeterctl.StartTempWatch();
}
}
else
{
pp.DebugMessage($"Load Temp {tempmeterctl.Slot} with {MeterStateControl.TempMode.Hand}\n");
tempmeterctl.StartTempWatch();
}
tempmeterctl.SetTemperature(0);
tempmeterctl.DisableTemperatureinput(true);
return true;
}));
}
var delay = 1000;
foreach (var meterctl in MetersToProcess)
{
listOfLoginTask.Add(new Task<bool>(() =>
{
Thread.Sleep(delay * listOfLoginTask.Count);
var Result = false;
for (int i = 0; i < 3; i++)
{
pp.DebugMessage($"Performing {ProcessName} procedure\n");
try
{
Result = string.IsNullOrEmpty(meterctl.OverridePassword)
? meterctl.Meter.Login()
: meterctl.Meter.Login(meterctl.OverridePassword);
if (Result)
{
break;
}
Thread.Sleep(100);
}
catch (Exception e)
{
pp.DebugMessage($"Error on {ProcessName} procedure\n");
pp.DebugMessage($"Error {e.Message}\n");
}
}
if (meterctl.Meter != null)
{
meterctl.Meter.SerialNumber = meterctl.Srn;
meterctl.Meter.CurrentActionText = "PreAdjustment";
}
var meterIndex = (meterctl.Slot).ToString(pp.Setting.Culture);
meterctl.LoginFailed = !Result;
meterctl.Failed = !Result;
if (!Result)
{
pp.DebugMessage($"{ProcessName} procedure failed", meterctl.Slot, "APP", meterctl.Meter.PcbId);
//pp.GenerateReturnNote(PredefinedMessages.LoginFailed(pp.Setting.Culture), meterctl);
}
else
{
pp.DebugMessage($"{ProcessName} procedure successful", meterctl.Slot, "APP", meterctl.Meter.PcbId);
}
Thread.Sleep(delay);
return Result;
}));
}
return listOfLoginTask;
}
}
}