common/Ui/GenesisToolBox/FrmPressure.cs
2026-04-23 17:50:07 +02:00

150 lines
4.5 KiB
C#

using Newtonsoft.Json;
using System;
using System.IO;
using System.Text;
using System.Windows.Forms;
using Xylem.Common.CommonCore.Consts;
using Xylem.Common.Hardware.Interfaces.Ports.PortCore;
using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisConfig;
using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore;
using Xylem.Common.Hardware.WaterMeter.Genesis.Registers;
using Xylem.Common.Hardware.WaterMeter.WaterMeterCore;
namespace Xylem.Common.Ui.GenesisToolBox
{
public partial class FrmPressure : Form
{
public FrmPressure()
{
InitializeComponent();
}
private void FrmPressure_Load(Object sender, System.EventArgs e)
{
var configFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), nameof(Hardware.WaterMeter.Genesis), ProgramConfig.SerialConfigFileName);
if (!File.Exists(configFile))
{
configFile = Path.Combine(ProgramConfig.SerialConfigFileName);
if (!File.Exists(configFile))
{
throw new ApplicationException($"Configuration file {configFile} not found ");
}
}
if (!File.Exists(configFile))
{
return;
}
SlotConfig[] meterConfigList;
using (var tr = new StreamReader(configFile))
{
var _fileString = tr.ReadToEnd();
meterConfigList = JsonConvert.DeserializeObject<SlotConfig[]>(_fileString);
}
cblSlots.Items.Clear();
foreach (var item in meterConfigList)
{
cblSlots.Items.Add(item.Slot, false);
}
}
private void button1_Click(Object sender, System.EventArgs e)
{
}
private void timer1_Tick(Object sender, System.EventArgs e)
{
if (meterBatch != null)
{
var sb = new StringBuilder();
sb.Append($"{DateTime.Now} ;");
foreach (var item in meterBatch.ListOfMeters)
{
if (item is GenesisMeter meter)
{
try
{
if (meter.ReLogin())
{
var a = meter.WriteRegister("METROLOGYASST_PressureMeasure", 1, true);
if (a)
{
var toEinheit = RegisterConverter.ByteArrayToValue<Int32>(meter.ReadRegister("METROLOGYASST_PressureMeasure"));
sb.Append($" {meter.Slot } : {toEinheit} Pa;");
meter.WriteLog($" Pressure : {toEinheit} Pa;");
}
}
}
catch (Exception ex)
{
sb.Append($" {meter.Slot } : {ex} ;");
}
}
}
textBox1.Text = textBox1.Text + System.Environment.NewLine + sb.ToString();
}
}
private MeterBatch meterBatch;
private void btnStart_Click(Object sender, EventArgs e)
{
btnStart.Enabled = false;
try
{
if (!timer1.Enabled)
{
timer1.Interval = (Int32)numericUpDown1.Value * 1000;
timer1.Enabled = true;
meterBatch = new MeterBatch();
foreach (var item in cblSlots.CheckedItems)
{
var meter = new GenesisMeter();
meter.SetupFromConfigFile((Int32)item);
meterBatch.AddMeter(meter);
meter.Login();
meter.WriteRegister("METROLOGYASST_PressurePresent", true, true);
}
btnStart.Text = "Stop";
}
else
{
btnStart.Text = "Start";
meterBatch.Dispose();
timer1.Enabled = false;
}
}
catch (Exception ex)
{
btnStart.Text = "Start";
meterBatch.Dispose();
timer1.Enabled = false;
}
finally
{
btnStart.Enabled = true;
}
}
}
}