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 RegistersGernerated = new List(); private void btnGen_Click(Object sender, EventArgs e) { RegistersGernerated = new List(); Int32 frnr = 0; var viewRet = new Dictionary>(); if (int.TryParse(txtFr.Text, out frnr)) { var retStr = LocalWebRequest.GetRequest($"http://sla12iis01/MeterProcessState/api/FinalCheck/GetVakoPogramming?ProductionOrderNumber={frnr}"); var retListVako = JsonConvert.DeserializeObject>(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>(retStr); if (retListRealCsd.Any()) { viewRet.Add(1, new List()); 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()); 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(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(); } } } }