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

103 lines
3.0 KiB
C#

using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore;
using Xylem.Common.Hardware.WaterMeter.Genesis.Registers;
namespace Xylem.Common.Ui.GenesisToolBox
{
public partial class FrmMultiWrite : Form
{
public FrmMultiWrite(GenesisMeter _currentGenesis, ConcurrentDictionary<RegisterDefinition, Byte[]> listOfRegister = null)
{
InitializeComponent();
if (listOfRegister == null)
{
listOfRegister = _currentGenesis.GetRegistersDic();
}
ListOfRegister = listOfRegister;
CurrentMeter = _currentGenesis;
cbxRegister.Items.Clear();
foreach (var item in listOfRegister.OrderBy(o => o.Key.GetIdent()))
{
cbxRegister.Items.Add(item.Key.GetIdent());
}
cbxRegister.SelectedIndex = 0;
}
public ConcurrentDictionary<RegisterDefinition, Byte[]> ListOfRegister { get; internal set; }
public GenesisMeter CurrentMeter { get; internal set; }
private void button1_Click(Object sender, EventArgs e)
{
CurrentMeter.ReadRegister(Register.System.MonotonicSeconds);
var nrOfReads = (Int32)numericUpDown1.Value;
var r = CurrentMeter.ReadRegister(((String)cbxRegister.SelectedItem), nrOfReads * 4);
if (r != null)
{
r.Reverse();
txtResult.Text = BitConverter.ToString(r);
}
else
{
txtResult.Text = "None";
}
}
private void btnWrite_Click(Object sender, EventArgs e)
{
String[] arr = txtResult.Text.Split('-');
Byte[] array = new Byte[arr.Length];
for (Int32 i = arr.Length - 1; i >= 0; i--) array[i] = Convert.ToByte(arr[i], 16);
array = array.Reverse().ToArray();
var res = CurrentMeter.WriteRegister(((String)cbxRegister.SelectedItem), array);
if (res)
{
MessageBox.Show(@"success");
}
else
{
MessageBox.Show(@"error");
}
}
private void txtResult_TextChanged(Object sender, EventArgs e)
{
try
{
String[] arr = txtResult.Text.Split('-');
Byte[] array = new Byte[arr.Length];
for (Int32 i = arr.Length - 1; i >= 0; i--) array[i] = Convert.ToByte(arr[i], 16);
array = array.Reverse().ToArray();
lblNrOFWirtes.Text = Math.Ceiling((Double)array.Length / 4).ToString();
}
catch (Exception)
{
lblNrOFWirtes.Text = "NA";
}
}
}
}