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

323 lines
12 KiB
C#

using ByteArrayStyle;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore;
using Xylem.Common.Hardware.WaterMeter.Genesis.Registers;
using Xylem.Common.Hardware.WaterMeter.WaterMeterCore;
using Xylem.Common.Logic.ProductionOrderCore;
using Xylem.Common.Logic.SoftwareAccessHelper;
namespace Xylem.Common.Ui.GenesisToolBox
{
public partial class FrmParameterization : Form
{
private GenesisMeter _currentGenesis;
private MeterBatch _meterBatch = new MeterBatch();
public class CsdParameterResult
{
public Int32 Lvl { get; set; }
public Boolean IsValid { get; set; }
public Int32 SourceCsdId { get; set; }
public Int32 SourceProductId { get; set; }
public Int32 SourceGroupId { get; set; }
public Int32 Id { get; set; }
public String Name { get; set; }
public String ValueText { get; set; }
public Object Value { get; set; }
}
public FrmParameterization()
{
InitializeComponent();
}
private void label3_Click(Object sender, EventArgs e)
{
}
private List<RegisterWriteItem> RegistersGernerated = new List<RegisterWriteItem>();
private void btnGen_Click(Object sender, EventArgs e)
{
RegistersGernerated = new List<RegisterWriteItem>();
Int32 frnr = 0;
var viewRet = new Dictionary<Int32, List<ProgrammingParameters>>();
if (int.TryParse(txtFr.Text, out frnr))
{
var retStr = LocalWebRequest.GetRequest($"http://sla12iis01/MeterProcessState/api/FinalCheck/GetVakoPogramming?ProductionOrderNumber={frnr}");
var retListVako = JsonConvert.DeserializeObject<List<ProgrammingParameters>>(retStr);
viewRet.Add(0, retListVako);
// ResultList = new Controllers.CsdServiceController(Context).GetStampings(ParamCsdId, ParamGroupId, ParamProductIdent, tmpProductDn, false);
retStr = LocalWebRequest.GetRequest($"http://sla12iis01/csdcore/csdservice/getstampings?CsdIdent={txtRealCdsIdent.Text}&GroupId=1&ProductIdent={txtRealCdsProduct.Text}&ProductDn={txtRealCdsDn.Text}&ShowOnlyValidStampings=0");
var retListRealCsd = JsonConvert.DeserializeObject<List<CsdParameterResult>>(retStr);
if (retListRealCsd.Any())
{
viewRet.Add(1, new List<ProgrammingParameters>());
foreach (var csdItemToConvert in retListRealCsd)
{
if (csdItemToConvert.ValueText.Contains("-"))
{
viewRet[1].Add(new ProgrammingParameters(csdItemToConvert.Name, ByteStyler.Parse(csdItemToConvert.ValueText, false)/*, ProgrammingSource.Csd*/));
}
}
}
viewRet.Add(2, new List<ProgrammingParameters>());
foreach (var item in txtExportCdstext.Text.Split(new[] { Environment.NewLine }, StringSplitOptions.None))
{
if (item.Contains("="))
{
var splitRes = item.Split('=');
if (splitRes.Count() == 2)
{
if (splitRes[1].StartsWith("UI->"))
{
var uintValue = uint.Parse(splitRes[1].Replace("UI->", ""));
viewRet[2].Add(new ProgrammingParameters(splitRes[0], RegisterConverter.ValueToByteArray<UInt32>(uintValue)/*, ProgrammingSource.Csd*/));
}
else
{
viewRet[2].Add(new ProgrammingParameters(splitRes[0], ByteStyler.Parse(splitRes[1], false)/*, ProgrammingSource.Csd*/));
}
}
}
}
}
foreach (var mainItem in viewRet)
{
foreach (var subItem in mainItem.Value)
{
RegistersGernerated.Add(new RegisterWriteItem(mainItem.Key.ToString(), subItem.RegisterName, BitConverter.ToString(subItem.RegisterValue)));
}
}
dgvRegisterWrite.DataSource = RegistersGernerated;
foreach (DataGridViewRow row in dgvRegisterWrite.Rows)
{
String RowType = row.Cells[0].Value.ToString();
row.DefaultCellStyle.ForeColor = Color.Black;
switch (RowType)
{
case "0":
row.DefaultCellStyle.BackColor = Color.SkyBlue;
break;
case "1":
row.DefaultCellStyle.BackColor = Color.Lavender;
break;
case "2":
row.DefaultCellStyle.BackColor = Color.LightCoral;
break;
default:
row.DefaultCellStyle.BackColor = Color.White;
break;
}
}
}
private void btnConnectWrite_Click(Object sender, EventArgs e)
{
try
{
Int32 slotNR = 0;
if (!string.IsNullOrEmpty(cbSlot.SelectedItem.ToString()) &&
int.TryParse(cbSlot.SelectedItem.ToString(), out slotNR))
{
_meterBatch.RemoveAllMeters();
_currentGenesis = new GenesisMeter();
_currentGenesis.SetupFromConfigFile(slotNR);
_currentGenesis.EnableAutoLogon();
_meterBatch.AddMeter(_currentGenesis);
_meterBatch.MetersLogin();
var sorted = RegistersGernerated.OrderBy(x => x.Prio).ToList();
var success = true;
var text = "";
foreach (RegisterWriteItem row in sorted)
{
if (row.RegisterName != "CUSTOMER_AppArrangement")
{
var rowByteArray = ByteStyler.Parse(row.RegisterValue, true);
try
{
if (!_currentGenesis.WriteRegister(row.RegisterName, rowByteArray, true, true))
{
success = false;
text = $"{text}{Environment.NewLine}{row.Prio},{row.RegisterName},{row.RegisterValue},notStored";
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
success = false;
text = $"{text}{Environment.NewLine}{row.Prio},{row.RegisterName},{row.RegisterValue},{ex.Message}";
}
}
}
_currentGenesis.WriteRegister("SENSUSRADIO_SYSTEMSTATE", 0xFF, true, false);
_currentGenesis.StoreAllConfigurations();
if (success)
{
MessageBox.Show(@"success");
}
else
{
MessageBox.Show(@"wrong");
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
_currentGenesis.DisposeMeter();
}
}
private void FrmParameterization_FormClosed(Object sender, FormClosedEventArgs e)
{
_currentGenesis?.Dispose();
_meterBatch?.Dispose();
}
private void BtnConnectAndCheck_Click(Object sender, EventArgs e)
{
try
{
Int32 slotNR = 0;
if (!string.IsNullOrEmpty(cbSlot.SelectedItem.ToString()) &&
int.TryParse(cbSlot.SelectedItem.ToString(), out slotNR))
{
_meterBatch.RemoveAllMeters();
_currentGenesis = new GenesisMeter();
_currentGenesis.SetupFromConfigFile(slotNR);
_currentGenesis.EnableAutoLogon();
_meterBatch.AddMeter(_currentGenesis);
_meterBatch.MetersLogin();
var success = true;
foreach (RegisterWriteItem row in RegistersGernerated)
{
var rowByteArray = ByteStyler.Parse(row.RegisterValue, false);
try
{
var curentValue = _currentGenesis.ReadRegister(row.RegisterName).Reverse().ToArray();
row.Current = ByteStyler.ToString(curentValue);
var def = _currentGenesis.GetConfigRegistersDefinitions().GetRegisterDefinitionByName(row.RegisterName);
row.Min = def.Minimum?.ToString();
row.Max = def.Maximum?.ToString();
row.Default = def.Default?.ToString();
row.Type = def.DataType.ToString();
row.ShouldConverted = RegisterConverter.ConvertToText(rowByteArray, def.DataType);
row.CurrentConverted = RegisterConverter.ConvertToText(curentValue, def.DataType);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
success = false;
}
}
if (success)
{
MessageBox.Show(@"success");
}
else
{
MessageBox.Show(@"wrong");
}
dgvRegisterWrite.DataSource = RegistersGernerated;
foreach (DataGridViewRow row in dgvRegisterWrite.Rows)
{
String RowType = row.Cells[0].Value.ToString();
row.DefaultCellStyle.ForeColor = Color.Black;
switch (RowType)
{
case "0":
row.DefaultCellStyle.BackColor = Color.SkyBlue;
break;
case "1":
row.DefaultCellStyle.BackColor = Color.Lavender;
break;
case "2":
row.DefaultCellStyle.BackColor = Color.LightCoral;
break;
default:
row.DefaultCellStyle.BackColor = Color.White;
break;
}
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
_currentGenesis.DisposeMeter();
}
}
}
}