tbf/GenesisCordonelTester/UI/LaatzenAPI_GenesisToolBox/FrmConfigurations.cs

406 lines
15 KiB
C#
Raw Normal View History

using GenesisCordonelInterface.API;
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.Interfaces.Ports.PortCore;
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 GenesisCordonelInterface.UI.LaatzenAPI_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 static readonly NLog.ILogger Logger = NLog.LogManager.GetLogger("GenesisCordonelInterface");
private readonly InterfaceGCIToLaatzen interfaceToLaatzen = new InterfaceGCIToLaatzen();
private GenesisMeter _currentGenesis;
private String _currentPcbId;
private MeterBatch _meterBatch = new MeterBatch();
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.ByteArrayToValue<Boolean>(_currentGenesis.ReadRegister("GENESISFLOW_TriggerTest"));
try
{
PulseEvenDistributio = RegisterConverter.ByteArrayToValue<Boolean>(_currentGenesis.ReadRegister("METROLOGYASST_PulseEvenDistribution"));
PulseResolution = RegisterConverter.ByteArrayToValue<Byte>(_currentGenesis.ReadRegister("METROLOGYASST_PulseResolution"));
}
catch (Exception)
{
}
AdapterPresenceLimit = RegisterConverter.ByteArrayToValue<Byte>(_currentGenesis.ReadRegister("IRDA_AdapterPresenceLimit"));
PulseSequence = RegisterConverter.ByteArrayToValue<Byte>(_currentGenesis.ReadRegister("IRDA_PulseSequence"));
PulseLength = RegisterConverter.ByteArrayToValue<Int32>(_currentGenesis.ReadRegister("METROLOGYASST_PulseLength"));
PulseMode = RegisterConverter.ByteArrayToValue<Int32>(_currentGenesis.ReadRegister("METROLOGYASST_PulseMode"));
PulseWeight = RegisterConverter.ByteArrayToValue<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;
lblPulseWeightMl.Text = (PulseWeight * (Decimal)0.03125).ToString();
lblPulseWeightInternal.Text = PulseWeight.ToString();
cbPulseWiegth.SelectedText = getText(PulseWeight);
}
}
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 = getValue(cbPulseWiegth.SelectedText);
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.StoreAllConfigurations());
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)
{
}
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.StoreAllConfigurations());
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();
}
private void cbPulseWiegth_SelectedIndexChanged(Object sender, EventArgs e)
{
var PInternal = getValue(cbPulseWiegth.SelectedItem.ToString().Trim());
lblPulseWeightMl.Text = (PInternal * (Decimal)0.03125).ToString();
lblPulseWeightInternal.Text = (PInternal).ToString();
var PulseFQm3 = (PInternal * (Decimal)0.03125);
lblP2000PulseSetup.Text = (1000000 / PulseFQm3).ToString();
}
private String getText(UInt32 v)
{
String intHelper = "NA";
switch (v)
{
case 0x00007D00: intHelper = "1 l/Imp."; break;
case 0x0004E200: intHelper = "10 l/Imp."; break;
case 0x0030D400: intHelper = "100 l/Imp."; break;
case 0x01E84800: intHelper = "1.000 l/Imp."; break;
case 0x0001D92D: intHelper = "1 Gallons/Imp."; break;
case 0x00127BC3: intHelper = "10 Gallons/Imp."; break;
case 0x00B8D5A0: intHelper = "100 Gallons/Imp."; break;
case 0x07382500: intHelper = "1.000 Gallons/Imp."; break;
case 0x000DD399: intHelper = "1 Cub. Feet/Imp."; break;
case 0x008A4400: intHelper = "10 Cub. Feet/Imp."; break;
case 0x0566D000: intHelper = "100 Cub. Feet/Imp."; break;
case 0x36042000: intHelper = "1.000 Cub. Feet/Imp."; break;
case 0x004DA169: intHelper = "1 Barrel/Imp."; break;
case 0x03084E1E: intHelper = "10 Barrels/Imp."; break;
case 0x1E530D2F: intHelper = "100 Barrels/Imp."; break;
case 0xFFF0279D: intHelper = "1.000 Barrels/Imp."; break;
case 0x00000000: intHelper = "ohne"; break;
default: intHelper = "ohne"; break;
}
return intHelper;
}
private UInt32 getValue(String v)
{
UInt32 intHelper = 0;
switch (v.Replace(" ", ""))
{
case "1l/Imp.": intHelper = 0x00007D00; break;
case "10l/Imp.": intHelper = 0x0004E200; break;
case "100l/Imp.": intHelper = 0x0030D400; break;
case "1.000l/Imp.": intHelper = 0x01E84800; break;
case "1Gallons/Imp.": intHelper = 0x0001D92D; break;
case "10Gallons/Imp.": intHelper = 0x00127BC3; break;
case "100Gallons/Imp.": intHelper = 0x00B8D5A0; break;
case "1.000Gallons/Imp.": intHelper = 0x07382500; break;
case "1Cub.Feet/Imp.": intHelper = 0x000DD399; break;
case "10Cub.Feet/Imp.": intHelper = 0x008A4400; break;
case "100Cub.Feet/Imp.": intHelper = 0x0566D000; break;
case "1.000Cub.Feet/Imp.": intHelper = 0x36042000; break;
case "1Barrel/Imp.": intHelper = 0x004DA169; break;
case "10Barrels/Imp.": intHelper = 0x03084E1E; break;
case "100Barrels/Imp.": intHelper = 0x1E530D2F; break;
case "1.000Barrels/Imp.": intHelper = 0xFFF0279D; break;
case "ohne": intHelper = 0; break;
default: intHelper = 0; break;
}
return intHelper;
}
}
}