323 lines
12 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|
|
}
|