215 lines
7.6 KiB
C#
215 lines
7.6 KiB
C#
using CordonelPreadjustmentUi.Processes.Itinerary;
|
|
using Newtonsoft.Json;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using Xylem.Common.CommonCore.Consts;
|
|
using Xylem.Common.Hardware.WaterMeter.Genesis.Registers;
|
|
using Xylem.Common.Ui.CordonelPreadjustmentUi;
|
|
using static CordonelPreadjustmentUi.PreAdjustmentControl;
|
|
|
|
|
|
namespace CordonelPreadjustmentUi.Processes.Actions
|
|
{
|
|
public class TempFlanschPaswordItem
|
|
{
|
|
public TempFlanschPaswordItem()
|
|
{ }
|
|
public TempFlanschPaswordItem(String pcbID, String password)
|
|
{
|
|
PcbID = pcbID;
|
|
Password = password;
|
|
|
|
}
|
|
|
|
public String PcbID { get; set; }
|
|
public String Password { get; set; }
|
|
|
|
|
|
public int Slot { get; set; }
|
|
|
|
}
|
|
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())
|
|
{
|
|
|
|
String CurrentConfigDir = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), ProgramConfig.GenesisBaseFolder, "TempFlansch.json");
|
|
|
|
if (File.Exists(CurrentConfigDir))
|
|
{
|
|
var listOfOfflinePasswords = JsonConvert.DeserializeObject<List<TempFlanschPaswordItem>>(
|
|
File.ReadAllText(CurrentConfigDir));
|
|
if (listOfOfflinePasswords != null)
|
|
{
|
|
var falkeItem = listOfOfflinePasswords.First(x => x.Slot == tempmeterctl.Slot);
|
|
if (falkeItem != null)
|
|
{
|
|
tempmeterctl.OverridePassword = falkeItem.Password;
|
|
tempmeterctl.OverridePcbId = falkeItem.PcbID;
|
|
pp.DebugMessage($"Fixed Tempflansch on Slot {tempmeterctl.Slot} OverridePcbId {tempmeterctl.OverridePcbId }\n");
|
|
}
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
//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;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|