common/CordonelPreadjustmentUi/Processes/ActionsSinglePath/SPPreparationProcess.cs
2026-04-23 17:50:07 +02:00

151 lines
6.1 KiB
C#

using System;
using System.Collections.Generic;
using System.Diagnostics.Eventing.Reader;
using System.Linq;
using System.Text;
using CordonelPreadjustmentUi.Processes.Itinerary;
using System.Threading;
using static CordonelPreadjustmentUi.PreAdjustmentControl;
using System.Threading.Tasks;
using Xylem.Common.Logic.SoftwareAccessHelper;
using Xylem.Common.CommonCore.Configuration;
using Newtonsoft.Json;
using Xylem.Common.Hardware.WaterMeter.Genesis.Registers;
namespace CordonelPreadjustmentUi.Processes.Actions
{
public class SPPreparationProcess : BaseProcess
{
public SPPreparationProcess(string processName, StatusPanelItems panelState, string performMessage, string failedMessage, int? expectedTimeS) : base(processName, panelState, performMessage, failedMessage, expectedTimeS)
{
}
public override List<Task> StartWork()
{
return doWorkProcess(base.CurrentProcessProgress);
}
private List<Task> doWorkProcess(ProcessProgress pp)
{
var MetersToProcess = MeterStateCtls.Where(e => e.IsEnabled).ToList();
//MetersToProcess.AddRange(TempMeterStateCtls.Where(e => e.IsEnabled));
var listOfProcessTask = new List<Task>();
foreach (var item in TempMeterStateCtls.Where(e => e.IsEnabled))
{
listOfProcessTask.Add(new Task<bool>(() =>
{
item.Meter.StartRecordData();
return true;
}));
}
foreach (var meterctl in MetersToProcess)
{
listOfProcessTask.Add(new Task<bool>(() =>
{
meterctl.Id = string.IsNullOrEmpty(meterctl.Meter.PcbId) ? "Unknown" : $"Pcb:{meterctl.Meter.PcbId}";
meterctl.Meter.StartRecordData();
Boolean Ok = false;
if (pp.Setting.NumberOfPaths > 0)
{
Ok = WriteRegisterSafe(meterctl.Meter, "Calibration factor1", Register.Genesisflow.CalFactor1, pp.Setting.CalFactor1);
if (CheckAbort(Ok, meterctl)) { return Ok; }
}
if (pp.Setting.NumberOfPaths > 1)
{
Ok = WriteRegisterSafe(meterctl.Meter, "Calibration factor2", Register.Genesisflow.CalFactor2, pp.Setting.CalFactor2);
if (CheckAbort(Ok, meterctl)) { return Ok; }
}
if (pp.Setting.NumberOfPaths > 2)
{
Ok = WriteRegisterSafe(meterctl.Meter, "Calibration factor3", Register.Genesisflow.CalFactor3, pp.Setting.CalFactor3);
if (CheckAbort(Ok, meterctl)) { return Ok; }
}
if (pp.Setting.doOffsetTest)
{
//if (pp.Setting.NumberOfPaths > 0)
//{
Ok = WriteRegisterSafe(meterctl.Meter, "Zeroflow offset1", Register.Genesisflow.ZeroOffset1, pp.Setting.ZeroOffset1);
if (CheckAbort(Ok, meterctl)) { return Ok; }
//}
//if (pp.Setting.NumberOfPaths > 1)
//{
Ok = WriteRegisterSafe(meterctl.Meter, "Zeroflow offset2", Register.Genesisflow.ZeroOffset2, pp.Setting.ZeroOffset2);
if (CheckAbort(Ok, meterctl)) { return Ok; }
//}
//if (pp.Setting.NumberOfPaths > 2)
//{
Ok = WriteRegisterSafe(meterctl.Meter, "Zeroflow offset3", Register.Genesisflow.ZeroOffset3, pp.Setting.ZeroOffset3);
if (CheckAbort(Ok, meterctl)) { return Ok; }
//}
}
meterctl.Meter.calibrationResult.AddAdditionalLog($"OffsetTestNumberOfLines", pp.Setting.OffsetTestNumberOfLines.ToString());
meterctl.Meter.calibrationResult.AddAdditionalLog($"Samplerate", pp.Setting.Samplerate.ToString());
Ok = WriteRegisterSafe(meterctl.Meter, "Samplerate", Register.Genesisflow.SampleRate, pp.Setting.Samplerate);
if (CheckAbort(Ok, meterctl)) { return Ok; }
if (pp.Setting.Production)
{
Ok = WriteRegisterSafe(meterctl.Meter, "Metersize", Register.Genesisflow.MeterSize, pp.Setting.MeterSize.GetHashCode(), false);
if (CheckAbort(Ok, meterctl)) { return Ok; }
}
else
{
WriteRegisterSafe(meterctl.Meter, "Metersize", Register.Genesisflow.MeterSize, pp.Setting.MeterSize.GetHashCode(), false);
if (CheckAbort(Ok, meterctl)) { return Ok; }
}
Ok = WriteRegisterSafe(meterctl.Meter, "LED mode", Register.Genesisflow.LedMode, pp.Setting.LedMode.GetHashCode());
if (CheckAbort(Ok, meterctl)) { return Ok; }
Ok = WriteRegisterSafe(meterctl.Meter, "TriggerActive", Register.Genesisflow.TriggerActive, 1, false);
if (CheckAbort(Ok, meterctl)) { return Ok; }
if (CheckAbort(Ok, meterctl)) { return Ok; }
var r = LocalWebRequest.GetRequest($"{ ServiceUrls.GenesisFinalCheckServiceUrl()}GetMetersizeProgrammingData?MeterSize={pp.Setting.MeterSize.GetHashCode()}", 2000);
var dt = JsonConvert.DeserializeObject<Dictionary<string, UInt32>>(r);
foreach (var item in dt)
{
Ok = meterctl.Meter.WriteRegisterUnsafe(item.Key, item.Value);
if (CheckAbort(Ok, meterctl)) { return Ok; }
}
return Ok;
}));
}
return listOfProcessTask;
}
private static byte[] ReservandFill(byte[] b)
{
return b.Reverse().ToArray();
}
}
}