laatzen/Common/Ui/GenesisToolBox/FrmConfigurations.cs
2022-04-06 10:42:16 +02:00

322 lines
11 KiB
C#

using Newtonsoft.Json;
using NLog;
using System;
using System.Collections.Generic;
using System.IO;
using System.Windows.Forms;
using Xylem.Common.CommonCore.Consts;
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;
using Xylem.Common.Utils.Logging;
namespace Xylem.Common.Ui.GenesisToolBox
{
public enum METROLOGYASST_PulseMode
{
OFF = 0, /* No pulse output */
FOR_REV_AB, /* Forward/reverse on A/B */
FOR_REV_BA, /* Forward/reverse on B/A */
PUL_DIR_AB, /* Pulse/direction on A/B */
PUL_DIR_BA, /* Pulse/direction on B/A */
PUL_BAL_A, /* Balanced pulse on A? */
PUL_BAL_B, /* Balanced pulse on B? */
TEST_PUL_DIR_AB, /* Test mode, pulse/direction on A/B */
};
public enum METROLOGYASST_PulseLength
{
L_1MS_NotSupported = 0, /* 1ms pulse <- not supported */
L_2MS_NotSupported, /* 2ms pulse <- not supported */
L_5MS, /* 5ms pulse */
L_10MS, /* 10ms pulse */
L_20MS, /* 20ms pulse */
L_50MS, /* 50ms pulse */
L_100MS_NotSupported, /* 100ms pulse <- not supported */
L_200MS, /* 200ms pulse */
L_500MS, /* 500ms pulse */
L_DYNAMIC, /* Dynamic pulse width */
L_1_5MS, /* 1.5ms pulse */
};
public partial class FrmConfigurations : Form
{
private GenesisMeter _currentGenesis;
private String _currentPcbId;
private MeterBatch _meterBatch = new MeterBatch();
private readonly ILogger logger = NLogHelper.CreateOrGetLogger("GenesisConfigurator");
public FrmConfigurations()
{
InitializeComponent();
cbxPulseLength.DataSource = Enum.GetValues(typeof(METROLOGYASST_PulseLength));
cbxPulseMode.DataSource = Enum.GetValues(typeof(METROLOGYASST_PulseMode));
_meterBatch = new MeterBatch();
var configfile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), nameof(Xylem.Common.Hardware.WaterMeter.Genesis), ProgramConfig.SerialConfigFileName);
if (!File.Exists(configfile))
{
throw new ApplicationException($"Configuration file {configfile} not found ");
}
var tr = new StreamReader(configfile);
var meterConfigList = JsonConvert.DeserializeObject<SlotConfig[]>(tr.ReadToEnd());
cbComSlot.Items.Clear();
var listSlots = new List<Int32>();
foreach (var item in meterConfigList)
{
cbComSlot.Items.Add(item.Slot);
listSlots.Add(item.Slot);
}
if (cbComSlot.Items.Count >= 1)
{
cbComSlot.SelectedItem = cbComSlot.Items[0];
}
//foreach (var info in typeof(Register).GetNestedTypes())
//{
// cbPreselection.Items.Add(info.Name);
//}
}
private void btnLogout_Click(Object sender, EventArgs e)
{
if (_currentGenesis != null && _currentGenesis.IsLoggedOn)
{
_currentGenesis.Logout();
}
_currentPcbId = "";
}
private void btnConnect_Click(Object sender, EventArgs e)
{
if (cbComSlot.SelectedItem != null) // && cbComSlot.SelectedValue is ListBoxItem)
{
Int32 slotNR = 0;
if (!string.IsNullOrEmpty(cbComSlot.SelectedItem.ToString()) &&
int.TryParse(cbComSlot.SelectedItem.ToString(), out slotNR))
{
conntect(slotNR);
}
}
}
private void btnRead_Click(Object sender, EventArgs e)
{
if (_currentGenesis != null && _currentGenesis.IsLoggedOn)
{
Boolean TriggerTest = false;
Boolean PulseEvenDistributio = false;
Byte AdapterPresenceLimit;
Byte PulseSequence;
Int32 PulseLength;
Int32 PulseMode;
Byte PulseResolution = 0;
UInt32 PulseWeight;
TriggerTest = RegisterConverter.ConvertTo<Boolean>(_currentGenesis.ReadRegister("GENESISFLOW_TriggerTest"));
try
{
PulseEvenDistributio = RegisterConverter.ConvertTo<Boolean>(_currentGenesis.ReadRegister("METROLOGYASST_PulseEvenDistribution"));
PulseResolution = RegisterConverter.ConvertTo<Byte>(_currentGenesis.ReadRegister("METROLOGYASST_PulseResolution"));
}
catch (Exception)
{
}
AdapterPresenceLimit = RegisterConverter.ConvertTo<Byte>(_currentGenesis.ReadRegister("IRDA_AdapterPresenceLimit"));
PulseSequence = RegisterConverter.ConvertTo<Byte>(_currentGenesis.ReadRegister("IRDA_PulseSequence"));
PulseLength = RegisterConverter.ConvertTo<Int32>(_currentGenesis.ReadRegister("METROLOGYASST_PulseLength"));
PulseMode = RegisterConverter.ConvertTo<Int32>(_currentGenesis.ReadRegister("METROLOGYASST_PulseMode"));
PulseWeight = RegisterConverter.ConvertTo<UInt32>(_currentGenesis.ReadRegister("METROLOGYASST_PulseWeight"));
rbTestModeOn.Checked = false;
rbTestModeOff.Checked = true;
if (TriggerTest)
{
rbTestModeOff.Checked = false;
rbTestModeOn.Checked = true;
}
rbEvenDistOn.Checked = false;
rbEvenDistOff.Checked = true;
if (PulseEvenDistributio)
{
rbEvenDistOff.Checked = false;
rbEvenDistOn.Checked = true;
}
nudAdapterPresence.Value = AdapterPresenceLimit;
lblPulsesequence.Text = PulseSequence.ToString();
cbxPulseLength.SelectedItem = ((METROLOGYASST_PulseLength)PulseLength);
cbxPulseMode.SelectedItem = ((METROLOGYASST_PulseMode)PulseMode);
nudPulseResolution.Value = PulseResolution;
nudPulseWeight.Value = PulseWeight * (Decimal)0.03125;
}
}
private void btnWrite_Click(Object sender, EventArgs e)
{
if (_currentGenesis != null && _currentGenesis.IsLoggedOn)
{
Boolean TriggerTest = rbTestModeOn.Checked;
Boolean PulseEvenDistributio = rbEvenDistOn.Checked;
Byte AdapterPresenceLimit = (Byte)nudAdapterPresence.Value;
Int32 PulseLength = ((METROLOGYASST_PulseLength)cbxPulseLength.SelectedItem).GetHashCode();
Int32 PulseMode = ((METROLOGYASST_PulseMode)cbxPulseMode.SelectedItem).GetHashCode();
Byte PulseResolution = (Byte)nudPulseResolution.Value;
UInt32 PulseWeight = (UInt32)(nudPulseWeight.Value / (Decimal)0.03125);
actionResult = null;
try
{
setActionResult(_currentGenesis.WriteRegister("METROLOGYASST_PulseEvenDistribution", PulseEvenDistributio));
// setActionResult(_currentGenesis.WriteRegister("METROLOGYASST_PulseResolution", PulseResolution));
}
catch (Exception)
{
}
if (TriggerTest)
{
setActionResult(_currentGenesis.WriteRegister("GENESISFLOW_TriggerTest", 1));
}
else
{
setActionResult(_currentGenesis.WriteRegister("GENESISFLOW_TriggerActive", 1));
}
setActionResult(_currentGenesis.WriteRegister("IRDA_AdapterPresenceLimit", AdapterPresenceLimit));
setActionResult(_currentGenesis.WriteRegister("METROLOGYASST_PulseLength", PulseLength));
setActionResult(_currentGenesis.WriteRegister("METROLOGYASST_PulseMode", PulseMode));
setActionResult(_currentGenesis.WriteRegister("METROLOGYASST_PulseWeight", PulseWeight));
setActionResult(_currentGenesis.StoreAllApps());
setActionResult(_currentGenesis.WriteRegister("SENSUSRADIO_SYSTEMSTATE", 0xFF, true, false));
}
}
private void tabPage1_Click(Object sender, EventArgs e)
{
}
private void conntect(Int32 slotNR)
{
try
{
_meterBatch.RemoveAllMeters();
_currentGenesis = new GenesisMeter();
//_currentGenesis.IsDevelopmentUsage = true; //Make sure to set this before login
try
{
_currentGenesis.SetupFromConfigFile(slotNR);
_currentGenesis.EnableAutoLogon();
_meterBatch.AddMeter(_currentGenesis);
}
catch (Exception ex)
{
logger.Error(ex, $"Slot #{slotNR} failed: {ex.Message}");
}
_currentGenesis.Login();
_currentPcbId = _currentGenesis.PcbId;
}
catch (Exception ex)
{
logger.Error(ex, ex.Message);
}
}
private void nudAdapterPresence_ValueChanged(Object sender, EventArgs e)
{
lblPrencesInMin.Text = (nudAdapterPresence.Value * 15).ToString();
}
private void nudPulseWeight_ValueChanged(Object sender, EventArgs e)
{
lblPulseWeightInternal.Text = (nudPulseWeight.Value / (Decimal)0.03125).ToString();
}
private void btnDisplayDefault_Click(Object sender, EventArgs e)
{
if (_currentGenesis != null && _currentGenesis.IsLoggedOn)
{
actionResult = null;
setActionResult(_currentGenesis.WriteRegister("GENESISFLOW_SealDisplay", 0));
setActionResult(_currentGenesis.WriteRegister("CUSTOMER_Locale", 0));
setActionResult(_currentGenesis.WriteRegister("GENESISFLOW_DisplayPow10", 253));
setActionResult(_currentGenesis.WriteRegister("GENESISFLOW_DisplayUnits", 0));
setActionResult(_currentGenesis.WriteRegister("METROLOGYASST_FlowUnits", 1));
setActionResult(_currentGenesis.StoreAllApps());
setActionResult(_currentGenesis.WriteRegister("SENSUSRADIO_SYSTEMSTATE", 0xFF, true, false));
}
}
private void setActionResult(Boolean v)
{
if (!actionResult.HasValue)
{
actionResult = v;
}
if (!v)
{
actionResult = false;
}
}
private Boolean? actionResult = null;
private void FrmConfigurations_FormClosing(Object sender, FormClosingEventArgs e)
{
_meterBatch.Dispose();
}
}
}