2264 lines
95 KiB
C#
2264 lines
95 KiB
C#
using Logic.ProductionToProductMapper.Cordonel;
|
|
using Newtonsoft.Json;
|
|
using NLog;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Net;
|
|
using System.Reflection;
|
|
using System.Text;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
using Xylem.Common.CommonCore.Configuration;
|
|
using Xylem.Common.CommonCore.Consts;
|
|
using Xylem.Common.Hardware.Interfaces.Ports.PortCore;
|
|
using Xylem.Common.Hardware.WaterMeter.Genesis.Applications.Const;
|
|
using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore;
|
|
using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore.Consts;
|
|
using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile;
|
|
using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisStatus;
|
|
using Xylem.Common.Hardware.WaterMeter.Genesis.Registers;
|
|
using Xylem.Common.Hardware.WaterMeter.WaterMeterCore;
|
|
using Xylem.Common.Logic.ProductionOrderCore.TestResults;
|
|
using Xylem.Common.Logic.ServiceCore;
|
|
using Xylem.Common.Logic.SoftwareAccessHelper;
|
|
using Xylem.Common.Utils.Logging;
|
|
using XylemCommonUiLegacyGenCtl;
|
|
using static Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore.GenesisMeter;
|
|
using Access = Xylem.Common.Hardware.WaterMeter.Genesis.Registers.Access;
|
|
|
|
namespace Xylem.Common.Ui.GenesisToolBox
|
|
{
|
|
public partial class FrmRegisterStore : Form
|
|
{
|
|
private static readonly Lazy<ILogger> Logger = new Lazy<ILogger>(() =>
|
|
{
|
|
return NLogHelper.CreateOrGetLogger("GenesisToolBox");
|
|
});
|
|
|
|
public Int32 Slot = 0;
|
|
private readonly DataTable _dataTable = new DataTable();
|
|
private GenesisMeter _currentGenesis;
|
|
private String _currentPcbId;
|
|
private MeterBatch _meterBatch = new MeterBatch();
|
|
private readonly ILogger logger = NLogHelper.CreateOrGetLogger("GenesisFwLogger");
|
|
|
|
public Boolean IsBusy
|
|
{
|
|
get; private set;
|
|
}
|
|
|
|
public FrmRegisterStore()
|
|
{
|
|
InitializeComponent();
|
|
|
|
//_dataTable = new DataTable();
|
|
_dataTable.Columns.Add("Name", typeof(String));
|
|
_dataTable.Columns.Add("Type", typeof(String));
|
|
|
|
_dataTable.Columns.Add("isChecked", typeof(Boolean));
|
|
_dataTable.Columns.Add("RawValue", typeof(String));
|
|
_dataTable.Columns.Add("RawValueFile", typeof(String));
|
|
_dataTable.Columns.Add("Value", typeof(String));
|
|
|
|
_dataTable.Columns.Add("Min", typeof(String));
|
|
_dataTable.Columns.Add("Max", typeof(String));
|
|
_dataTable.Columns.Add("Description", typeof(String));
|
|
|
|
|
|
_dataTable.Columns.Add("Version", typeof(String));
|
|
_dataTable.Columns.Add("IsAvailable", typeof(String));
|
|
|
|
_dataTable.Columns.Add("Privilege", typeof(String));
|
|
|
|
|
|
_dataTable.Columns.Add("btnHistoryText", typeof(String));
|
|
|
|
|
|
loadPreSet();
|
|
}
|
|
|
|
private void SetBusy(Boolean val, String action = "")
|
|
{
|
|
IsBusy = val;
|
|
if (IsBusy)
|
|
{
|
|
Invoke(new Action(() =>
|
|
{
|
|
pnlBussy.Visible = true;
|
|
timProgress.Enabled = true;
|
|
lblAction.Text = action;
|
|
}));
|
|
}
|
|
else
|
|
{
|
|
ProgreessTotal = null;
|
|
ProgreessCurrent = null;
|
|
Invoke(new Action(() =>
|
|
{
|
|
pnlBussy.Visible = false;
|
|
timProgress.Enabled = false;
|
|
lblAction.Text = action;
|
|
lblProgress.Text = "";
|
|
}));
|
|
}
|
|
}
|
|
|
|
private void SetProgreess(String text, Int32 total = 0, Int32 current = 0)
|
|
{
|
|
ProgreessTotal = total;
|
|
ProgreessCurrent = current;
|
|
Invoke(new Action(() => { lblProgress.Text = $"{text} ({current}/{total})"; }));
|
|
}
|
|
|
|
private Int32? ProgreessTotal;
|
|
private Int32? ProgreessCurrent;
|
|
|
|
private void TimeProgress_tick(Object sender, EventArgs e)
|
|
{
|
|
if (IsBusy)
|
|
{
|
|
if (ProgreessTotal.HasValue && ProgreessCurrent.HasValue && !ProgreessTotal.Value.Equals(0) &&
|
|
!ProgreessCurrent.Value.Equals(0))
|
|
{
|
|
try
|
|
{
|
|
probarBussy.Value =
|
|
(Int32)Math.Round(((Double)ProgreessCurrent.Value / (Double)ProgreessTotal.Value) * 100,
|
|
0);
|
|
}
|
|
catch (Exception exception)
|
|
{
|
|
//throw;
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
var current = probarBussy.Value;
|
|
if (current + 1 > 100)
|
|
{
|
|
current = 0;
|
|
}
|
|
|
|
probarBussy.Value = current + 1;
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
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))
|
|
{
|
|
SetBusy(true, "Connect");
|
|
Task.Factory.StartNew(() => { conntect(slotNR); }).ContinueWith(delegate
|
|
{
|
|
|
|
Invoke(new Action(() =>
|
|
{
|
|
var loggedinMeters = 0;
|
|
foreach (var me in _meterBatch.ListOfMeters)
|
|
{
|
|
if (me is GenesisMeter)
|
|
{
|
|
if (((GenesisMeter)me).IsLoggedOn)
|
|
{
|
|
loggedinMeters = loggedinMeters + 1;
|
|
_currentGenesis = ((GenesisMeter)me);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (loggedinMeters == _meterBatch.ListOfMeters.Count)
|
|
{
|
|
lblState.ForeColor = Color.Green;
|
|
lblState.Text = $"Connected to PCB {_currentPcbId}";
|
|
|
|
_dataTable.Rows.Clear();
|
|
|
|
|
|
var masterRegisters = new MeterRegisters();
|
|
|
|
foreach (var item in _currentGenesis.GetRegistersDic())
|
|
{
|
|
|
|
var row = _dataTable.NewRow();
|
|
row["Name"] = item.Key.GetIdent();
|
|
row["Type"] = item.Key.DataType.Name;
|
|
row["isChecked"] = false;
|
|
row["Value"] = "";
|
|
row["RawValue"] = item.Value;
|
|
row["RawValueFile"] = item.Value;
|
|
|
|
|
|
row["Min"] = item.Key.Minimum;
|
|
row["Max"] = item.Key.Maximum;
|
|
row["Description"] = item.Key.RegisterDetail.Description;
|
|
String From = item.Key.RegisterDetail.Version.First.HasValue
|
|
? item.Key.RegisterDetail.Version.First.Value.ToString()
|
|
: "-";
|
|
|
|
String To = item.Key.RegisterDetail.Version.Last.HasValue
|
|
? item.Key.RegisterDetail.Version.Last.Value.ToString()
|
|
: "-";
|
|
|
|
row["Version"] = $"from {From} to {To}";
|
|
row["IsAvailable"] = item.Key.IsAvailable;
|
|
|
|
|
|
|
|
|
|
row["Privilege"] = item.Key.RegisterDetail.Privilege.Lvl8.ToString();
|
|
row["btnHistoryText"] = "View History";
|
|
|
|
_dataTable.Rows.Add(row);
|
|
}
|
|
|
|
registerGridView.DataSource = _dataTable.DefaultView;
|
|
registerGridView.Columns["isChecked"].SortMode =
|
|
DataGridViewColumnSortMode.Automatic;
|
|
registerGridView.Sort(registerGridView.Columns["isChecked"],
|
|
ListSortDirection.Descending);
|
|
registerGridView.Columns["RawValueFile"].Visible = false;
|
|
registerGridView.Sort(registerGridView.Columns["Name"],
|
|
ListSortDirection.Ascending);
|
|
|
|
var btnHistory = new DataGridViewButtonColumn();
|
|
btnHistory.Name = "btnHistory";
|
|
|
|
|
|
btnHistory.DataPropertyName = "btnHistoryText";
|
|
registerGridView.Columns.AddRange(new DataGridViewColumn[] { btnHistory });
|
|
|
|
|
|
//foreach (DataGridViewRow row in registerGridView.Rows)
|
|
//{
|
|
// if (row.Cells["Type"].Value != null && row.Cells["Type"].Value.ToString().ToLower().Contains("string"))
|
|
// {
|
|
// row.ReadOnly = true;
|
|
// ((DataGridViewCheckBoxCell)row.Cells["isChecked"]).Value = false;
|
|
// ((DataGridViewCheckBoxCell)row.Cells["isChecked"]).FlatStyle = FlatStyle.Flat;
|
|
// ((DataGridViewCheckBoxCell)row.Cells["isChecked"]).Style.ForeColor = Color.DarkGray;
|
|
// ((DataGridViewCheckBoxCell)row.Cells["isChecked"]).ReadOnly = true;
|
|
// ((DataGridViewTextBoxCell)row.Cells["Value"]).Value = "String is not a supported data type";
|
|
// }
|
|
//}
|
|
}
|
|
else
|
|
{
|
|
lblState.ForeColor = Color.Red;
|
|
lblState.Text = $"Not Connected to PCB";
|
|
}
|
|
|
|
//lblState.Text = loggedinMeters.Equals(_meterBatch.ListOfMeters.Count) ? $"Connected to Pcb{_currentPcbId}" : $"Not Connected to Pcb";
|
|
})
|
|
|
|
);
|
|
SetBusy(false);
|
|
});
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
private void btnRead_Click(Object sender, EventArgs e)
|
|
{
|
|
SetBusy(true, "read Registers");
|
|
|
|
String hex = "4F793AF100000002";
|
|
UInt64 value = ulong.Parse(hex, System.Globalization.NumberStyles.HexNumber);
|
|
|
|
Console.WriteLine(value);
|
|
|
|
|
|
Task.Factory.StartNew(() => { read(); }).ContinueWith(delegate
|
|
{
|
|
SetBusy(false);
|
|
});
|
|
}
|
|
|
|
|
|
private void btnStore_Click(Object sender, EventArgs e)
|
|
{
|
|
SetBusy(true, "Store to file");
|
|
Task.Factory.StartNew(() => { store(); }).ContinueWith(delegate
|
|
{
|
|
SetBusy(false);
|
|
});
|
|
}
|
|
|
|
private void btnFileToMeter_Click(Object sender, EventArgs e)
|
|
{
|
|
|
|
var openFileDialog = new OpenFileDialog();
|
|
openFileDialog.Filter = "all JSON files (*.JSON)|*.JSON";
|
|
openFileDialog.Multiselect = false;
|
|
|
|
if (openFileDialog.ShowDialog() == DialogResult.OK)
|
|
{
|
|
SetBusy(true, "writing to meter");
|
|
|
|
var filename = openFileDialog.FileName;
|
|
|
|
Task.Factory.StartNew(() => { load(filename); }).ContinueWith(delegate
|
|
{
|
|
SetBusy(false);
|
|
});
|
|
}
|
|
}
|
|
|
|
|
|
private void registerGridView_CellEndEdit(Object sender, DataGridViewCellEventArgs e)
|
|
{
|
|
if (registerGridView.Columns[e.ColumnIndex].Name == "RawValue")
|
|
{
|
|
SetBusy(true, "writing register to meter");
|
|
|
|
Task.Factory.StartNew(() => { WriteRegister(e); }).ContinueWith(delegate
|
|
{
|
|
SetBusy(false);
|
|
});
|
|
|
|
}
|
|
}
|
|
|
|
private void WriteRegister(DataGridViewCellEventArgs e)
|
|
{
|
|
|
|
|
|
var inputValue = registerGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();
|
|
|
|
//byte[] newByteValue = new byte[inputValue.Count(s => s == '-')];
|
|
//int i = 0;
|
|
//foreach (var item in inputValue.Split('-'))
|
|
//{
|
|
// newByteValue[i] = 00;
|
|
//}
|
|
|
|
String[] arr = inputValue.Split('-');
|
|
Byte[] array = new Byte[arr.Length];
|
|
for (Int32 i = arr.Length - 1; i >= 0; i--)
|
|
{
|
|
array[i] = Convert.ToByte(arr[i], 16);
|
|
}
|
|
|
|
// currentGenesis.WriteRegister(Register.Genesisflow.LedMode, (Byte)Ledmode.FlowTestAndCalibData, checkRegister: true);
|
|
var reg = (String)registerGridView.Rows[e.RowIndex].Cells[0].Value;
|
|
var meterRegisters = _currentGenesis.GetConfigRegistersDefinitions();
|
|
var regDef = meterRegisters.GetRegisterDefinitionByName(reg);
|
|
|
|
if (regDef.DataType != typeof(String))
|
|
array = array.Reverse().ToArray();
|
|
_currentGenesis.WriteRegister(reg, array, checkRegister: true);
|
|
//_currentGenesis.Logout();
|
|
|
|
//var funkadresse = new List<byte>();
|
|
//funkadresse.AddRange((new Byte[] { 0x0E, 0x9F, 0xAC, 0xC6 }).ToArray());
|
|
//funkadresse.AddRange((new Byte[] { 0xA0, 0xE1, 0xEF, 0x1C }).ToArray());
|
|
//funkadresse.AddRange((new Byte[] { 0x3B, 0x27, 0xA4, 0x9B }).ToArray());
|
|
//funkadresse.AddRange((new Byte[] { 0xAC, 0x21, 0x65, 0x35 }).ToArray());
|
|
//_currentGenesis.WriteRegister("SENSUSRADIO_EncryptionKey", funkadresse.ToArray(), true, true);
|
|
|
|
|
|
|
|
//_currentGenesis.WriteRegister("SENSUSRADIO_StoreConfiguration", 1, false);
|
|
////funkadresse = new List<byte>();
|
|
////funkadresse.AddRange((new Byte[] { 0x0E, 0x9F, 0xAC, 0xC6 }).ToArray());
|
|
////funkadresse.AddRange((new Byte[] { 0xA0, 0xE1, 0xEF, 0x1C }).ToArray());
|
|
////funkadresse.AddRange((new Byte[] { 0x3B, 0x27, 0xA4, 0x9B }).ToArray());
|
|
////funkadresse.AddRange((new Byte[] { 0xAC, 0x21, 0x65, 0x35 }).ToArray());
|
|
////_currentGenesis.WriteRegister("SENSUSRADIO_EncryptionKey", funkadresse.ToArray().Reverse().ToArray(), true, true);
|
|
////_currentGenesis.WriteRegister("SENSUSRADIO_StoreConfiguration", 1, false);
|
|
|
|
////funkadresse = new List<byte>();
|
|
////funkadresse.AddRange((new Byte[] { 0x0E, 0x9F, 0xAC, 0xC6 }).ToArray().Reverse().ToArray());
|
|
////funkadresse.AddRange((new Byte[] { 0xA0, 0xE1, 0xEF, 0x1C }).ToArray().Reverse().ToArray());
|
|
////funkadresse.AddRange((new Byte[] { 0x3B, 0x27, 0xA4, 0x9B }).ToArray().Reverse().ToArray());
|
|
////funkadresse.AddRange((new Byte[] { 0xAC, 0x21, 0x65, 0x35 }).ToArray().Reverse().ToArray());
|
|
////_currentGenesis.WriteRegister("SENSUSRADIO_EncryptionKey", funkadresse.ToArray().Reverse().ToArray(), true, true);
|
|
////_currentGenesis.WriteRegister("SENSUSRADIO_StoreConfiguration", 1, false);
|
|
|
|
//funkadresse = new List<byte>();
|
|
//funkadresse.AddRange((new Byte[] { 0x00, 0x00, 0x00, 0x00 }).ToArray());
|
|
//funkadresse.AddRange((new Byte[] { 0x00, 0x00, 0x00, 0x00 }).ToArray());
|
|
//funkadresse.AddRange((new Byte[] { 0x00, 0x00, 0x00, 0x00 }).ToArray());
|
|
//funkadresse.AddRange((new Byte[] { 0x00, 0x00, 0x00, 0x00 }).ToArray());
|
|
//_currentGenesis.WriteRegister("SENSUSRADIO_EncryptionKey", funkadresse.ToArray(), true, true);
|
|
//_currentGenesis.WriteRegister("SENSUSRADIO_StoreConfiguration", 1, false);
|
|
|
|
//// var newValue = BitConverter.GetBytes(registerGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value)
|
|
////currentGenesis.WriteRegister()
|
|
|
|
}
|
|
|
|
private void button1_Click(Object sender, EventArgs e)
|
|
{
|
|
_currentGenesis.Logout();
|
|
}
|
|
|
|
private void frmRegisterStore_Load(Object sender, EventArgs e)
|
|
{
|
|
_meterBatch = new MeterBatch();
|
|
|
|
var configfile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), nameof(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 frmRegisterStore_FormClosing(Object sender, FormClosingEventArgs e)
|
|
{
|
|
_meterBatch.Dispose();
|
|
}
|
|
|
|
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.Value.Error(ex, $"Slot #{slotNR} failed: {ex.Message}");
|
|
}
|
|
_currentGenesis.Login();
|
|
_currentPcbId = _currentGenesis.PcbId;
|
|
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Logger.Value.Error(ex, ex.Message);
|
|
}
|
|
}
|
|
|
|
private void getPcbId(Int32 slotNR)
|
|
{
|
|
try
|
|
{
|
|
_meterBatch.RemoveAllMeters();
|
|
_currentGenesis = new GenesisMeter();
|
|
try
|
|
{
|
|
_currentGenesis.SetupFromConfigFile(slotNR);
|
|
_meterBatch.AddMeter(_currentGenesis);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Logger.Value.Error(ex, $"Slot #{slotNR} failed: {ex.Message}");
|
|
}
|
|
|
|
_currentPcbId = _currentGenesis.GetPcbId();
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Logger.Value.Error(ex, ex.Message);
|
|
}
|
|
}
|
|
|
|
private void selectPreset(String content)
|
|
{
|
|
foreach (var rowItem in _dataTable.Rows)
|
|
{
|
|
if (rowItem is DataRow)
|
|
{
|
|
((DataRow)rowItem)["isChecked"] = false;
|
|
}
|
|
}
|
|
|
|
|
|
switch (content)
|
|
{
|
|
case "All":
|
|
foreach (var rowItem in _dataTable.Rows)
|
|
{
|
|
if (rowItem is DataRow)
|
|
{
|
|
((DataRow)rowItem)["isChecked"] = true;
|
|
}
|
|
}
|
|
|
|
break;
|
|
case "Ampl. Test":
|
|
foreach (var rowItem in _dataTable.Rows)
|
|
{
|
|
if (rowItem is DataRow)
|
|
{
|
|
if (preSetAmplTest.Any(p => p.Equals(((DataRow)rowItem)["Name"].ToString())))
|
|
{
|
|
((DataRow)rowItem)["isChecked"] = true;
|
|
}
|
|
else
|
|
{
|
|
((DataRow)rowItem)["isChecked"] = false;
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
break;
|
|
case "Temp. Calibration":
|
|
foreach (var rowItem in _dataTable.Rows)
|
|
{
|
|
if (rowItem is DataRow)
|
|
{
|
|
if (preSetTempCal.Any(p => p.Equals(((DataRow)rowItem)["Name"].ToString())))
|
|
{
|
|
((DataRow)rowItem)["isChecked"] = true;
|
|
}
|
|
else
|
|
{
|
|
((DataRow)rowItem)["isChecked"] = false;
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
break;
|
|
case "Zero Flow":
|
|
foreach (var rowItem in _dataTable.Rows)
|
|
{
|
|
if (rowItem is DataRow)
|
|
{
|
|
if (preSetZeroFlow.Any(p => p.Equals(((DataRow)rowItem)["Name"].ToString())))
|
|
{
|
|
((DataRow)rowItem)["isChecked"] = true;
|
|
}
|
|
else
|
|
{
|
|
((DataRow)rowItem)["isChecked"] = false;
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
break;
|
|
case "Flow Calibration":
|
|
foreach (var rowItem in _dataTable.Rows)
|
|
{
|
|
if (rowItem is DataRow)
|
|
{
|
|
if (preSetFlowCalibration.Any(p => p.Equals(((DataRow)rowItem)["Name"].ToString())))
|
|
{
|
|
((DataRow)rowItem)["isChecked"] = true;
|
|
}
|
|
else
|
|
{
|
|
((DataRow)rowItem)["isChecked"] = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
break;
|
|
case "All Meteorological":
|
|
foreach (var rowItem in _dataTable.Rows)
|
|
{
|
|
if (rowItem is DataRow)
|
|
{
|
|
if (preSetAllMeteorological.Any(p => p.Equals(((DataRow)rowItem)["Name"].ToString())))
|
|
{
|
|
((DataRow)rowItem)["isChecked"] = true;
|
|
}
|
|
else
|
|
{
|
|
((DataRow)rowItem)["isChecked"] = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
break;
|
|
case "Own":
|
|
case "None":
|
|
foreach (var rowItem in _dataTable.Rows)
|
|
{
|
|
if (rowItem is DataRow)
|
|
{
|
|
((DataRow)rowItem)["isChecked"] = false;
|
|
}
|
|
}
|
|
|
|
break;
|
|
default:
|
|
|
|
//foreach (var info in typeof(Register).GetNestedTypes())
|
|
//{
|
|
// if (info.Name.Equals(content))
|
|
// {
|
|
// foreach (var childInfo in info.GetFields())
|
|
// {
|
|
// if (childInfo.FieldType != typeof(RegisterDefinition)) continue;
|
|
// var addReg = (RegisterDefinition)childInfo.GetValue(this);
|
|
// addReg.Name = info.Name + "_" + childInfo.Name;
|
|
// foreach (var rowItem in _dataTable.Rows)
|
|
// {
|
|
// if (rowItem is System.Data.DataRow)
|
|
// {
|
|
// p => p.Equals(((DataRow)rowItem)["Name"].ToString())))
|
|
|
|
// if (((RegisterDefinition)((DataRow)rowItem)["regDef"]).Name.Equals(addReg.Name))
|
|
// {
|
|
// ((DataRow)rowItem)["isChecked"] = true;
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
//}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
private void read()
|
|
{
|
|
regsToStore = new regStore()
|
|
{
|
|
PcbId = _currentPcbId, created = DateTimeOffset.Now, keyValues = new List<regDefValue>()
|
|
};
|
|
var total = 0;
|
|
foreach (var rowItem in _dataTable.Rows)
|
|
{
|
|
if (rowItem is DataRow)
|
|
{
|
|
if ((Boolean)((DataRow)rowItem)["isChecked"])
|
|
{
|
|
total = total + 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
var done = 0;
|
|
foreach (var rowItem in _dataTable.Rows)
|
|
{
|
|
if (rowItem is DataRow)
|
|
{
|
|
if ((Boolean)((DataRow)rowItem)["isChecked"])
|
|
{
|
|
|
|
var reg = ((DataRow)rowItem)["Name"].ToString();
|
|
|
|
var meterRegisters = _currentGenesis.GetConfigRegistersDefinitions();
|
|
var regDef = meterRegisters.GetRegisterDefinitionByName(reg);
|
|
SetProgreess($"Read Register {regDef.RegisterName}", total, done + 1);
|
|
if (regDef.RegisterDetail != null && (
|
|
regDef.RegisterDetail.Privilege.Lvl8 == Access.RO ||
|
|
regDef.RegisterDetail.Privilege.Lvl8 == Access.RW))
|
|
{
|
|
try
|
|
{
|
|
Byte[] rawRegister;
|
|
rawRegister = _currentGenesis.ReadRegister(reg);
|
|
|
|
//var temp = RegisterConverter.GetRegisterContent(regDef, rawRegister);
|
|
((DataRow)rowItem)["RawValue"] = RegisterConverter.GetRegisterRawText(regDef, rawRegister);
|
|
regsToStore.keyValues.Add(new regDefValue
|
|
{
|
|
def = regDef, value = BitConverter.ToString(rawRegister)
|
|
});
|
|
|
|
try
|
|
{
|
|
var result = RegisterConverter.ConvertToText(rawRegister, regDef.DataType);
|
|
((DataRow)rowItem)["Value"] = result;
|
|
}
|
|
catch (Exception)
|
|
{
|
|
((DataRow)rowItem)["Value"] = "not converted";
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
((DataRow)rowItem)["Value"] = "error";
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
((DataRow)rowItem)["RawValue"] = "No Access";
|
|
((DataRow)rowItem)["Value"] = "";
|
|
}
|
|
|
|
done = done + 1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private void CompareFile(String filename)
|
|
{
|
|
|
|
DataGridViewCellStyle styleDiff = new DataGridViewCellStyle();
|
|
styleDiff.BackColor = Color.Red;
|
|
styleDiff.ForeColor = Color.Black;
|
|
|
|
DataGridViewCellStyle styleEqual = new DataGridViewCellStyle();
|
|
styleEqual.BackColor = Color.Green;
|
|
styleEqual.ForeColor = Color.Black;
|
|
|
|
|
|
|
|
|
|
|
|
SetProgreess($"Read File {filename}");
|
|
var text = File.ReadAllText(filename);
|
|
var loadedRegStore = JsonConvert.DeserializeObject<regStore>(text);
|
|
|
|
|
|
var done = 1;
|
|
|
|
foreach (var rowItem in _dataTable.Rows)
|
|
{
|
|
if (rowItem is DataRow)
|
|
{
|
|
|
|
SetProgreess($"Read file", loadedRegStore.keyValues.Count, done);
|
|
|
|
var reg = ((DataRow)rowItem)["Name"].ToString();
|
|
var meterRegisters = _currentGenesis.GetConfigRegistersDefinitions();
|
|
var regDef = meterRegisters.GetRegisterDefinitionByName(reg);
|
|
|
|
var keyValue =
|
|
loadedRegStore.keyValues.FirstOrDefault(f => f.def.RegisterName.Equals(regDef.RegisterName));
|
|
if (keyValue != null)
|
|
{
|
|
((DataRow)rowItem)["RawValueFile"] = keyValue.value;
|
|
|
|
if (regDef.RegisterDetail.Privilege.Lvl8 == Access.RO ||
|
|
regDef.RegisterDetail.Privilege.Lvl8 == Access.RW)
|
|
{
|
|
Byte[] rawRegister;
|
|
rawRegister = _currentGenesis.ReadRegister(reg);
|
|
|
|
//var temp = RegisterConverter.GetRegisterContent(regDef, rawRegister);
|
|
((DataRow)rowItem)["RawValue"] = RegisterConverter.GetRegisterRawText(regDef, rawRegister);
|
|
regsToStore.keyValues.Add(new regDefValue
|
|
{
|
|
def = regDef, value = BitConverter.ToString(rawRegister)
|
|
});
|
|
|
|
try
|
|
{
|
|
var result = RegisterConverter.ConvertToText(rawRegister, regDef.DataType);
|
|
((DataRow)rowItem)["Value"] = result;
|
|
}
|
|
catch (Exception)
|
|
{
|
|
((DataRow)rowItem)["Value"] = "not converted";
|
|
}
|
|
|
|
|
|
DataGridViewCell meterCell = null;
|
|
DataGridViewCell fileCell = null;
|
|
foreach (DataGridViewRow row in registerGridView.Rows)
|
|
{
|
|
if (row.Cells["Name"].Value.Equals(regDef.RegisterName))
|
|
{
|
|
meterCell = row.Cells["RawValue"];
|
|
fileCell = row.Cells["RawValueFile"];
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (meterCell != null && fileCell != null)
|
|
{
|
|
if (BitConverter.ToString(rawRegister).Equals(keyValue.value))
|
|
{
|
|
|
|
meterCell.Style = styleEqual;
|
|
fileCell.Style = styleEqual;
|
|
}
|
|
else
|
|
{
|
|
meterCell.Style = styleDiff;
|
|
fileCell.Style = styleDiff;
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
else
|
|
{
|
|
((DataRow)rowItem)["RawValue"] = "No Access";
|
|
((DataRow)rowItem)["Value"] = "";
|
|
}
|
|
|
|
done = done + 1;
|
|
}
|
|
else
|
|
{
|
|
|
|
|
|
((DataRow)rowItem)["RawValueFile"] = "Not in File";
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
private void showFile(String filename)
|
|
{
|
|
|
|
SetProgreess($"Read File {filename}");
|
|
var text = File.ReadAllText(filename);
|
|
var loadedRegStore = JsonConvert.DeserializeObject<regStore>(text);
|
|
|
|
|
|
var done = 1;
|
|
|
|
foreach (var rowItem in _dataTable.Rows)
|
|
{
|
|
if (rowItem is DataRow)
|
|
{
|
|
|
|
SetProgreess($"Compare file", loadedRegStore.keyValues.Count, done);
|
|
var regDef = (RegisterDefinition)((DataRow)rowItem)["regDef"];
|
|
var keyValue =
|
|
loadedRegStore.keyValues.FirstOrDefault(f => f.def.RegisterName.Equals(regDef.RegisterName));
|
|
if (keyValue != null)
|
|
{
|
|
((DataRow)rowItem)["RawValueFile"] = keyValue.value;
|
|
|
|
}
|
|
else
|
|
{
|
|
((DataRow)rowItem)["RawValueFile"] = "Not in File";
|
|
}
|
|
|
|
done = done + 1;
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
private void load(String filename)
|
|
{
|
|
//SetProgreess($"Read File {filename}");
|
|
//var text = File.ReadAllText(filename);
|
|
//var loadedRegStore = Newtonsoft.Json.JsonConvert.DeserializeObject<regStore>(text);
|
|
//if (loadedRegStore.PcbId != _currentPcbId)
|
|
//{
|
|
// MessageBox.Show($"Please connect to PCB {loadedRegStore.PcbId}");
|
|
// return;
|
|
//}
|
|
|
|
//var done = 1;
|
|
//foreach (var keyValueToWrite in loadedRegStore.keyValues)
|
|
//{
|
|
// SetProgreess($"Write Register {keyValueToWrite.def.Name}", loadedRegStore.keyValues.Count, done);
|
|
// var valueToWrite = keyValueToWrite.value.Split('-').Select(b => Convert.ToByte(b, 16));
|
|
// valueToWrite.Reverse();
|
|
// _currentGenesis.WriteRegister(keyValueToWrite.def, valueToWrite.ToArray());
|
|
|
|
// done = done + 1;
|
|
//}
|
|
|
|
|
|
//read();
|
|
|
|
}
|
|
|
|
private regStore regsToStore;
|
|
|
|
private void store()
|
|
{
|
|
//read();
|
|
//var text = Newtonsoft.Json.JsonConvert.SerializeObject(regsToStore);
|
|
//SaveFileDialog saveFileDialog = new SaveFileDialog();
|
|
//saveFileDialog.FileName = $"storePcbId{regsToStore.PcbId}on{regsToStore.created.ToString("yyyyMMdd")}.json";
|
|
|
|
//Invoke(new Action(() =>
|
|
//{
|
|
|
|
// if (saveFileDialog.ShowDialog() == DialogResult.OK)
|
|
// File.WriteAllText(saveFileDialog.FileName, text);
|
|
|
|
//}));
|
|
|
|
//var done = 1;
|
|
//foreach (var keyValueToWrite in regsToStore.keyValues)
|
|
//{
|
|
// SetProgreess($"Write Register {keyValueToWrite.def.Name}", regsToStore.keyValues.Count, done);
|
|
// var valueToWrite = keyValueToWrite.value.Split('-').Select(b => Convert.ToByte(b, 16));
|
|
// valueToWrite.Reverse();
|
|
// _currentGenesis.WriteRegister(keyValueToWrite.def, valueToWrite.ToArray());
|
|
|
|
// done = done + 1;
|
|
//}
|
|
|
|
}
|
|
|
|
private void storeCsv()
|
|
{
|
|
read();
|
|
|
|
var csv = new StringBuilder();
|
|
SaveFileDialog saveFileDialog = new SaveFileDialog();
|
|
saveFileDialog.FileName = $"storePcbId{regsToStore.PcbId}on{regsToStore.created.ToString("yyyyMMdd")}.csv";
|
|
|
|
csv.AppendLine($"name;value");
|
|
foreach (var values in regsToStore.keyValues)
|
|
{
|
|
csv.AppendLine($"{values.def.RegisterName};{values.value}");
|
|
}
|
|
|
|
Invoke(new Action(() =>
|
|
{
|
|
|
|
if (saveFileDialog.ShowDialog() == DialogResult.OK)
|
|
{
|
|
File.WriteAllText(saveFileDialog.FileName, csv.ToString());
|
|
}
|
|
}));
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
private List<String> preSetAmplTest = new List<String>();
|
|
private List<String> preSetTempCal = new List<String>();
|
|
private List<String> preSetZeroFlow = new List<String>();
|
|
private List<String> preSetFlowCalibration = new List<String>();
|
|
private List<String> preSetAllMeteorological = new List<String>();
|
|
private List<String> preSetDefault = new List<String>();
|
|
|
|
private void loadPreSet()
|
|
{
|
|
#region defaults
|
|
|
|
#endregion
|
|
|
|
preSetDefault.Add(Register.Genesisflow.SampleRate);
|
|
preSetDefault.Add(Register.Genesisflow.LedMode);
|
|
preSetDefault.Add(Register.Genesisflow.MeterSize);
|
|
|
|
|
|
#region preSetAmplTest
|
|
|
|
preSetAmplTest.Add(Register.Genesisflow.FirstHitUpdatePeriod);
|
|
preSetAmplTest.Add(Register.Genesisflow.FirstHitShift);
|
|
preSetAmplTest.Add(Register.Genesisflow.FirstHitPercent1);
|
|
preSetAmplTest.Add(Register.Genesisflow.FirstHitPercent2);
|
|
preSetAmplTest.Add(Register.Genesisflow.FirstHitPercent3);
|
|
|
|
#endregion
|
|
|
|
#region preSetTempCal
|
|
|
|
preSetTempCal.Add(Register.Genesisflow.ToFTempCalibrate);
|
|
preSetTempCal.Add(Register.Genesisflow.ToFTempOffset1);
|
|
preSetTempCal.Add(Register.Genesisflow.ToFTempOffset2);
|
|
preSetTempCal.Add(Register.Genesisflow.ToFTempOffset3);
|
|
|
|
#endregion
|
|
|
|
#region preSetZeroFlow
|
|
|
|
preSetZeroFlow.Add(Register.Genesisflow.ZeroOffset1);
|
|
preSetZeroFlow.Add(Register.Genesisflow.ZeroOffset2);
|
|
preSetZeroFlow.Add(Register.Genesisflow.ZeroOffset3);
|
|
|
|
#endregion
|
|
|
|
#region preSetAllMeteorological
|
|
|
|
preSetFlowCalibration.Add(Register.Genesisflow.CalFactor1);
|
|
preSetFlowCalibration.Add(Register.Genesisflow.CalFactor2);
|
|
preSetFlowCalibration.Add(Register.Genesisflow.CalFactor3);
|
|
|
|
#endregion
|
|
|
|
|
|
#region preset All metro
|
|
|
|
preSetAllMeteorological.AddRange(preSetAmplTest);
|
|
preSetAllMeteorological.AddRange(preSetTempCal);
|
|
preSetAllMeteorological.AddRange(preSetZeroFlow);
|
|
preSetAllMeteorological.AddRange(preSetFlowCalibration);
|
|
|
|
#endregion
|
|
|
|
#region addDefaults
|
|
|
|
preSetAllMeteorological.AddRange(preSetDefault);
|
|
preSetZeroFlow.AddRange(preSetDefault);
|
|
preSetFlowCalibration.AddRange(preSetDefault);
|
|
preSetTempCal.AddRange(preSetDefault);
|
|
preSetAmplTest.AddRange(preSetDefault);
|
|
|
|
#endregion
|
|
}
|
|
|
|
public class regStore
|
|
{
|
|
public String PcbId;
|
|
public DateTimeOffset created;
|
|
public List<regDefValue> keyValues;
|
|
|
|
}
|
|
|
|
public class regDefValue
|
|
{
|
|
public RegisterDefinition def;
|
|
public String value;
|
|
}
|
|
|
|
private void btnGetPCbID_Click(Object sender, EventArgs e)
|
|
{
|
|
if (cbComSlot.SelectedItem != null) // && cbComSlot.SelectedValue is ListBoxItem)
|
|
{
|
|
Int32 slotNR = 0;
|
|
_currentPcbId = "";
|
|
if (!string.IsNullOrEmpty(cbComSlot.SelectedItem.ToString()) &&
|
|
int.TryParse(cbComSlot.SelectedItem.ToString(), out slotNR))
|
|
{
|
|
SetBusy(true, "GetPcbId");
|
|
Task.Factory.StartNew(() => { getPcbId(slotNR); }).ContinueWith(delegate
|
|
{
|
|
Invoke(new Action(() =>
|
|
{
|
|
MessageBox.Show(_currentPcbId);
|
|
SetBusy(false);
|
|
}));
|
|
});
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
private void button1_Click_1(Object sender, EventArgs e)
|
|
{
|
|
if (_currentGenesis != null)
|
|
{
|
|
_currentGenesis.ResetAlarm(Alarm.EMPTY_PIPE);
|
|
}
|
|
}
|
|
|
|
private void button2_Click(Object sender, EventArgs e)
|
|
{
|
|
if (_currentGenesis != null)
|
|
{
|
|
MessageBox.Show(
|
|
$@"Check alarm EMPTY_PIPE = {_currentGenesis.HasAlarms(Alarm.EMPTY_PIPE)}");
|
|
}
|
|
}
|
|
|
|
private void btnReadFwVersions_Click(Object sender, EventArgs e)
|
|
{
|
|
if (_currentGenesis != null)
|
|
{
|
|
var sb = new StringBuilder();
|
|
sb.AppendLine($"PCBID: {_currentGenesis.PcbId}");
|
|
sb.AppendLine($"Date: {DateTimeOffset.UtcNow}");
|
|
sb.AppendLine($"System Core Revision: {_currentGenesis.StrCoreRevision}");
|
|
foreach (var fm in _currentGenesis.MeterAppListVersion.OrderBy(o => o.AppId))
|
|
{
|
|
var versionString = fm.IsInstalled
|
|
? $"V: {fm.StrVersion} - CRC: 0x{fm.Crc:X4}" : "Not installed";
|
|
if (fm.Status == MeterAppState.Unknown)
|
|
versionString = "Communication error";
|
|
|
|
sb.AppendLine($"AppId: 0x{fm.AppId:X2} - {versionString} - AppName: {fm.AppName}");
|
|
}
|
|
|
|
MessageBox.Show(sb.ToString());
|
|
}
|
|
}
|
|
|
|
private void btnProgram_Click(Object sender, EventArgs e)
|
|
{
|
|
if (_currentGenesis != null)
|
|
{
|
|
|
|
|
|
var fa = new List<Byte>();
|
|
fa.AddRange((new Byte[] { 0x0E, 0x9F, 0xAC, 0xC6 }).ToArray());
|
|
fa.AddRange((new Byte[] { 0xA0, 0xE1, 0xEF, 0x1C }).ToArray());
|
|
fa.AddRange((new Byte[] { 0x3B, 0x27, 0xA4, 0x9B }).ToArray());
|
|
fa.AddRange((new Byte[] { 0xAC, 0x21, 0x65, 0x35 }).ToArray());
|
|
_currentGenesis.WriteRegister("SENSUSRADIO_EncryptionKey", fa.ToArray());
|
|
return;
|
|
//var before = _currentGenesis.ReadRegister("SYSTEM_CalendarSeconds");
|
|
|
|
//var tsa = DateTimeOffset.UtcNow - new DateTimeOffset(2000, 1, 1, 0, 0, 0, new TimeSpan(0));
|
|
//_currentGenesis.WriteRegister("SYSTEM_CalendarSeconds", Convert.ToInt32(tsa.TotalSeconds));
|
|
|
|
//var after = _currentGenesis.ReadRegister("SYSTEM_CalendarSeconds");
|
|
|
|
|
|
|
|
|
|
//#region fixparameter
|
|
|
|
//register final programming
|
|
|
|
//var overAllResult = new List<Tuple<String, Boolean>>();
|
|
////611.219.280
|
|
////
|
|
//var ts = DateTimeOffset.UtcNow - new DateTimeOffset(2000, 1, 1, 0, 0, 0, new TimeSpan(0));
|
|
|
|
|
|
|
|
|
|
////Alarms
|
|
//////_currentGenesis.WriteRegister("SENSUSRADIO_MainAlarmMask?
|
|
//////_currentGenesis.WriteRegister("SENSUSRADIO_ExtendedAlarmMask ?
|
|
////CUSTOMER_AlarmBroadcastMask?
|
|
////CUSTOMER_AlarmEnableMask ?
|
|
////CUSTOMER_AlarmVisualAutoClearMask?
|
|
////CUSTOMER_AlarmVisualMask ?
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("GENESISFLOW_SealDisplay",
|
|
// (new Byte[] { 0x00, 0x00, 0x00, 0x00 }).Reverse().ToArray(), true, true));
|
|
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("SYSTEM_CalendarSeconds",
|
|
// Convert.ToInt32(ts.TotalSeconds), true, true));
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("CUSTOMER_ExcessFlowTimeThreshold",
|
|
// (new Byte[] { 0x00, 0x00, 0x00, 0x05 }).Reverse().ToArray(), true, true));
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("CUSTOMER_ExcessFlowVolumeThreshold",
|
|
// (new Byte[] { 0x00, 0x00, 0x61, 0xA8 }).Reverse().ToArray(), true, true));
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("CUSTOMER_LeakFlowThreshold",
|
|
// (new Byte[] { 0x00, 0x00, 0x01, 0x77 }).Reverse().ToArray(), true, true));
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("CUSTOMER_LeakTimeThreshold",
|
|
// (new Byte[] { 0x00, 0x00, 0x4E, 0xC0 }).Reverse().ToArray(), true, true));
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("CUSTOMER_Locale",
|
|
// (new Byte[] { 0x00, 0x00, 0x01, 0x60 }).Reverse().ToArray(), true, true));
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("CUSTOMER_PressureHighDelay",
|
|
// (new Byte[] { 0x00, 0x00, 0x02, 0x58 }).Reverse().ToArray(), true, true));
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("CUSTOMER_PressureHighThreshold",
|
|
// (new Byte[] { 0x00, 0x0B, 0x71, 0xB0 }).Reverse().ToArray(), true, true));
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("CUSTOMER_PressureLowDelay",
|
|
// (new Byte[] { 0x00, 0x00, 0x02, 0x58 }).Reverse().ToArray(), true, true));
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("CUSTOMER_PressureLowThreshold",
|
|
// (new Byte[] { 0x00, 0x00, 0x75, 0x30 }).Reverse().ToArray(), true, true));
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("CUSTOMER_ReverseFlowTimeThreshold",
|
|
// (new Byte[] { 0x00, 0x00, 0x00, 0x78 }).Reverse().ToArray(), true, true));
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("CUSTOMER_TemperatureHighDelay",
|
|
// (new Byte[] { 0x00, 0x00, 0x01, 0x2C }).Reverse().ToArray(), true, true));
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("CUSTOMER_TemperatureHighThreshold",
|
|
// (new Byte[] { 0x00, 0x00, 0x01, 0xF4 }).Reverse().ToArray(), true, true));
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("CUSTOMER_TemperatureLowDelay",
|
|
// (new Byte[] { 0x00, 0x00, 0x01, 0x2C }).Reverse().ToArray(), true, true));
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("CUSTOMER_TemperatureLowThreshold",
|
|
// (new Byte[] { 0x00, 0x00, 0x00, 0x14 }).Reverse().ToArray(), true, true));
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("GENESISFLOW_ArrowThreshold",
|
|
// (new Byte[] { 0x00, 0x1E, 0x84, 0x80 }).Reverse().ToArray(), true, true));
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("GENESISFLOW_DisplayPow10",
|
|
// (new Byte[] { 0x00, 0x00, 0x00, 0xFD }).Reverse().ToArray(), true, true));
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("GENESISFLOW_DisplayUnits",
|
|
// (new Byte[] { 0x00, 0x00, 0x00, 0x00 }).Reverse().ToArray(), true, true));
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("GENESISFLOW_ForwardArrow",
|
|
// (new Byte[] { 0x00, 0x00, 0x00, 0x00 }).Reverse().ToArray(), true, true));
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("GENESISFLOW_HardErrorLimit",
|
|
// (new Byte[] { 0x00, 0x00, 0x00, 0x04 }).Reverse().ToArray(), true, true));
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("GENESISFLOW_LedMode",
|
|
// (new Byte[] { 0x00, 0x00, 0x00, 0x00 }).Reverse().ToArray(), true, true));
|
|
////overAllResult.Add(_currentGenesis_WriteRegister("GENESISFLOW_LowFlowMaxPeriod", (new Byte[] { 0x00, 0x00, 0x00, 0x3C }).Reverse().ToArray(), true, true));
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("GENESISFLOW_LowFlowMaxPeriod", 60 << 16, true, true));
|
|
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("GENESISFLOW_LowFlowThreshold",
|
|
// (new Byte[] { 0x00, 0x00, 0x00, 0xC8 }).Reverse().ToArray(), true, true));
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("GENESISFLOW_MeterSize",
|
|
// (new Byte[] { 0x00, 0x00, 0x00, 0x01 }).Reverse().ToArray(), true, true));
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("GENESISFLOW_PipeFillingDelay",
|
|
// (new Byte[] { 0x00, 0x00, 0x00, 0x1E }).Reverse().ToArray(), true, true));
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("GENESISFLOW_ResetAccumulators",
|
|
// (new Byte[] { 0x00, 0x00, 0x00, 0x01 }).Reverse().ToArray(), true, false));
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("GENESISFLOW_SampleRate",
|
|
// (new Byte[] { 0x00, 0x00, 0x00, 0x02 }).Reverse().ToArray(), true, true));
|
|
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("GENESISFLOW_UpdateThreshold",
|
|
// (new Byte[] { 0x00, 0x00, 0x00, 0x00 }).Reverse().ToArray(), true, true));
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("IRDA_AdapterPresenceLimit",
|
|
// (new Byte[] { 0x00, 0x00, 0x00, 0x60 }).Reverse().ToArray(), true, true));
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("IRDA_PulseReportRate",
|
|
// (new Byte[] { 0x00, 0x00, 0x00, 0x00 }).Reverse().ToArray(), true, true));
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("METROLOGYASST_FlowPoint",
|
|
// (new Byte[] { 0x00, 0x00, 0x00, 0x02 }).Reverse().ToArray(), true, true));
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("METROLOGYASST_FlowUnits",
|
|
// (new Byte[] { 0x00, 0x00, 0x00, 0x04 }).Reverse().ToArray(), true, true));
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("METROLOGYASST_PressureOffset",
|
|
// (new Byte[] { 0x00, 0x00, 0x03, 0xF5 }).Reverse().ToArray(), true, true));
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("METROLOGYASST_PressurePresent",
|
|
// (new Byte[] { 0x00, 0x00, 0x00, 0x00 }).Reverse().ToArray(), true, true));
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("METROLOGYASST_PressureRate",
|
|
// (new Byte[] { 0x00, 0x0D, 0xBB, 0xA0 }).Reverse().ToArray(), true, true));
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("METROLOGYASST_PressureUnits",
|
|
// (new Byte[] { 0x00, 0x00, 0x00, 0x00 }).Reverse().ToArray(), true, true));
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("METROLOGYASST_PulseLength",
|
|
// (new Byte[] { 0x00, 0x00, 0x00, 0x07 }).Reverse().ToArray(), true, true));
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("METROLOGYASST_PulseMode",
|
|
// (new Byte[] { 0x00, 0x00, 0x00, 0x01 }).Reverse().ToArray(), true, true));
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("METROLOGYASST_PulseWeight",
|
|
// (new Byte[] { 0x00, 0x00, 0x27, 0x10 }).Reverse().ToArray(), true, true));
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("METROLOGYASST_TemperatureUnits",
|
|
// (new Byte[] { 0x00, 0x00, 0x00, 0x00 }).Reverse().ToArray(), true, true));
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("PERIODICLOG_AverageFlowPeriod",
|
|
// (new Byte[] { 0x00, 0x00, 0x00, 0x05 }).Reverse().ToArray(), true, true));
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("PERIODICLOG_DataLogContents",
|
|
// (new Byte[] { 0x08, 0x00, 0x24, 0x03 }).Reverse().ToArray(), true, true));
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("PERIODICLOG_DataLogPeriod",
|
|
// (new Byte[] { 0x00, 0x00, 0x00, 0x3C }).Reverse().ToArray(), true, false));
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("PERIODICLOG_FixedDateDayOfMonth",
|
|
// (new Byte[] { 0x00, 0x00, 0x00, 0x01 }).Reverse().ToArray(), true, true));
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("PERIODICLOG_FixedDateReadingContents",
|
|
// (new Byte[] { 0x08, 0x00, 0x24, 0x03 }).Reverse().ToArray(), true, true));
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("PERIODICLOG_PeriodicLogLifeTimeCounter",
|
|
// (new Byte[] { 0x00, 0x00, 0x00, 0x0 }).Reverse().ToArray(), true, true));
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("PERIODICLOG_ResetCounter",
|
|
// (new Byte[] { 0x00, 0x00, 0x00, 0x0 }).Reverse().ToArray(), true, true));
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("POWERMON_BatterySelection",
|
|
// (new Byte[] { 0x00, 0x00, 0x00, 0x00 }).Reverse().ToArray(), true, false));
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("POWERMON_WarnFromClamp",
|
|
// (new Byte[] { 0x00, 0x01, 0x51, 0x80 }).Reverse().ToArray(), true, true));
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("SENSUSRADIO_WakeupInterval",
|
|
// (new Byte[] { 0x00, 0x00, 0x00, 0x03 }).Reverse().ToArray(), true, true));
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("SENSUSRADIO_MbusState",
|
|
// (new Byte[] { 0x00, 0x00, 0x00, 0x07 }).Reverse().ToArray(), true, true));
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("SENSUSRADIO_UtcTimeOffset",
|
|
// (new Byte[] { 0x00, 0x00, 0x00, 0x00 }).Reverse().ToArray(), true, true));
|
|
|
|
//// just read later //overAllResult.Add(_currentGenesis_WriteRegister("SENSUSRADIO_FrequencyIndicator}).Reverse(), true, true);
|
|
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("SENSUSRADIO_HistoricalAlarmsDays",
|
|
// (new Byte[] { 0x00, 0x00, 0x00, 0x1D }).Reverse().ToArray(), true, true));
|
|
|
|
|
|
////Original
|
|
////0x11, 0x12, 0x13, 0x14, 0x21, 0x22, 0x23, 0x24, 0x31, 0x32, 0x33, 0x34, 0x41, 0x42, 0x43, 0x44
|
|
////Write to register
|
|
////0x14, 0x13, 0x12, 0x11, 0x24, 0x23, 0x22, 0x21, 0x34, 0x33, 0x32, 0x31, 0x44, 0x43, 0x42, 0x41
|
|
|
|
|
|
////good one
|
|
////E6-C8-88-00-DE-B8-68-C0-D6-A8-48-80-CE-98-28-40
|
|
////0E-05-04-04-00-14-30-68-D0-14-0E-80-40-63-93-73-22
|
|
|
|
////&bad one
|
|
////0E-05-04-05-00-00-88-C8-E6-C0-68-B8-DE-80-48-A8-D6-40-28-98-CE
|
|
|
|
|
|
////0E-05-04-04-00-22-73-93-63-40-80-0E-14-D0-68-30-14
|
|
|
|
//var funkadresse = new List<Byte>();
|
|
//funkadresse.AddRange((new Byte[] { 0xE6, 0xC8, 0x88, 0x00 }).ToArray());
|
|
//funkadresse.AddRange((new Byte[] { 0xDE, 0xB8, 0x68, 0xC0 }).ToArray());
|
|
//funkadresse.AddRange((new Byte[] { 0xD6, 0xA8, 0x48, 0x80 }).ToArray());
|
|
//funkadresse.AddRange((new Byte[] { 0xCE, 0x98, 0x28, 0x40 }).ToArray());
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("SENSUSRADIO_EncryptionKey", funkadresse.ToArray(),
|
|
// true, true));
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("SENSUSRADIO_EncryptionKey",
|
|
// (new Byte[]
|
|
// {
|
|
// 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
|
// }).ToArray(), true, true));
|
|
////overAllResult.Add(_currentGenesis_WriteRegister("SENSUSRADIO_Authentification", (new Byte[] { 0x14, 0x30, 0x68, 0xD0, 0x14, 0x0E, 0x80, 0x40, 0x63, 0x93, 0x73, 0x22 }).ToArray(), true, true));
|
|
////overAllResult.Add(_currentGenesis_WriteRegister("SENSUSRADIO_Authentification", (new Byte[]
|
|
////{
|
|
//// 0xD0,0x68 , 0x30 ,0x14,
|
|
//// 0x40,0x80, 0x0E ,0x14,
|
|
//// 0x22, 0x73, 0x93,0x63
|
|
////}).ToArray(), true, true));
|
|
//////E6C88800DEB868C0D6A84880CE982840
|
|
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("SENSUSRADIO_CustomerText",
|
|
// (new Byte[] { 0x00, 0x00, 0x00, 0x00 }).Reverse().ToArray(), true, true));
|
|
|
|
//using (var dataacces =
|
|
// new SqlDataAccess(
|
|
// "Data Source=SLASQL01;;Initial Catalog=Auftrag;Persist Security Info=False;User ID=GenesisPasswordService;Password=PcbID;")
|
|
//)
|
|
//{
|
|
|
|
// var sb = new StringBuilder();
|
|
// sb.AppendLine(
|
|
// $" SELECT distinct [MapPcbIdToSerialNumber_SerialNumber],Adresse,FunkschluesselIndex,SENSUSRADIO_PowerLevel, SENSUSRADIO_PowerLevelOption, SENSUSRADIO_ImpedanceCodeNew,SENSUSRADIO_ImpedanceCodeOption ");
|
|
// sb.AppendLine($" FROM [Auftrag].[dbo].[MapPcbIdToSerialNumber] pcb ");
|
|
// sb.AppendLine(
|
|
// $" inner join tmpRadioConfig radio on radio.pcbID = pcb.MapPcbIdToSerialNumber_PcbId");
|
|
// sb.AppendLine(
|
|
// $" inner join Genesis_Meter meter on meter.Seriennummer = pcb.MapPcbIdToSerialNumber_SerialNumber");
|
|
// sb.AppendLine($" where [MapPcbIdToSerialNumber_PcbId] = '{_currentGenesis.GetPcbId()}'");
|
|
|
|
// var MapData = dataacces.ExecuteQuery(sb.ToString());
|
|
// if (MapData.Rows.Count != 1)
|
|
// {
|
|
// MessageBox.Show("Faild to get order data");
|
|
// return;
|
|
// }
|
|
|
|
// var SENSUSRADIO_RadioAddress = Convert.ToUInt32((Int64)MapData.Rows[0]["Adresse"] - 10000000000);
|
|
// var SENSUSRADIO_PowerLevel = Convert.ToUInt32(MapData.Rows[0]["SENSUSRADIO_PowerLevel"]);
|
|
// var SENSUSRADIO_PowerLevelOption =
|
|
// Convert.ToUInt32(MapData.Rows[0]["SENSUSRADIO_PowerLevelOption"]);
|
|
// var SENSUSRADIO_ImpedanceCodeNew =
|
|
// Convert.ToUInt32(MapData.Rows[0]["SENSUSRADIO_ImpedanceCodeNew"]);
|
|
// var SENSUSRADIO_ImpedanceCodeOption =
|
|
// Convert.ToUInt32(MapData.Rows[0]["SENSUSRADIO_ImpedanceCodeOption"]);
|
|
|
|
|
|
// overAllResult.Add(_currentGenesis_WriteRegister("SENSUSRADIO_RadioAddress",
|
|
// SENSUSRADIO_RadioAddress, true, true));
|
|
// overAllResult.Add(_currentGenesis_WriteRegister("SENSUSRADIO_PowerLevel", SENSUSRADIO_PowerLevel,
|
|
// true, true));
|
|
// overAllResult.Add(_currentGenesis_WriteRegister("SENSUSRADIO_PowerLevelOption",
|
|
// SENSUSRADIO_PowerLevelOption, true, true));
|
|
// overAllResult.Add(_currentGenesis_WriteRegister("SENSUSRADIO_ImpedanceCodeNew",
|
|
// SENSUSRADIO_ImpedanceCodeNew, true, true));
|
|
// overAllResult.Add(_currentGenesis_WriteRegister("SENSUSRADIO_ImpedanceCodeOption",
|
|
// SENSUSRADIO_ImpedanceCodeOption, true, true));
|
|
|
|
|
|
//}
|
|
|
|
////MapData.Rows[0]["Adresse"]
|
|
|
|
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("GENESISFLOW_SealDisplay",
|
|
// (new Byte[] { 0x00, 0x00, 0x00, 0x01 }).Reverse().ToArray(), true, true));
|
|
|
|
////radio end state!
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("SENSUSRADIO_SystemState",
|
|
// (new Byte[] { 0x00, 0x00, 0x00, 0xFF }).Reverse().ToArray(), true, false));
|
|
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("SENSUSRADIO_SystemState",
|
|
// (new Byte[] { 0x00, 0x00, 0x00, 0x02 }).Reverse().ToArray(), true, true));
|
|
|
|
//var sbR = new StringBuilder();
|
|
//if (overAllResult.Any(a => a.Item2 == false))
|
|
//{
|
|
|
|
// foreach (var failedIndex in overAllResult)
|
|
// {
|
|
// if (!failedIndex.Item2)
|
|
// {
|
|
// sbR.AppendLine($"Register={failedIndex.Item1} failed");
|
|
// }
|
|
|
|
// }
|
|
//}
|
|
//else
|
|
//{
|
|
// sbR.AppendLine($"done without errors");
|
|
//}
|
|
|
|
//_currentGenesis.Logout();
|
|
//MessageBox.Show("Result:" + sbR.ToString());
|
|
|
|
//#endregion
|
|
|
|
////radio
|
|
////storeconfig _all
|
|
////log out
|
|
////using (var dataacces = new SqlDataAccess(GlobalConfig.connectionString.Value))
|
|
////{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//var resultDic = new Dictionary<string, object>();
|
|
|
|
// resultDic.Add("SENSUSRADIO_RadioAddress", ra);
|
|
|
|
// //10412000966
|
|
|
|
|
|
|
|
|
|
//resultDic.Add("SENSUSRADIO_EncryptionKey", new Byte[] {0x40, 0x28, 0x98, 0xCE, 0x00});
|
|
|
|
//}
|
|
|
|
|
|
////radio
|
|
|
|
// //[Adresse]
|
|
|
|
|
|
|
|
// var listToCheckProgramm = new Dictionary<string, byte[]>();
|
|
|
|
//listToCheckProgramm.Add("", new byte[]{ 0x00, 0x00, 0x00, 0x00});
|
|
|
|
//listToCheckProgramm.Add("", new byte[] { 0x00, 0x00, 0x00, 0x00 });
|
|
|
|
//listToCheckProgramm.Add("", new byte[] { 0x00, 0x00, 0x00, 0x00 });
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
public Tuple<String, Boolean> _currentGenesis_WriteRegister<T>(String reg, T value, Boolean waitForResult = true,
|
|
Boolean checkRegister = false)
|
|
{
|
|
return new Tuple<String, Boolean>(reg,
|
|
_currentGenesis.WriteRegister(reg, value, waitForResult, checkRegister));
|
|
}
|
|
|
|
private void btnJsonCheck_Click(Object sender, EventArgs e)
|
|
{
|
|
if (_currentGenesis != null)
|
|
{
|
|
var allSucceed = true;
|
|
var List = _currentGenesis.GetRegistersDic().Keys.ToList();
|
|
foreach (var VARIABLE in List)
|
|
{
|
|
|
|
if ((VARIABLE.RegisterDetail.Privilege.Lvl8 == Access.RO
|
|
|| VARIABLE.RegisterDetail.Privilege.Lvl8 == Access.RW)
|
|
)
|
|
{
|
|
var a = _currentGenesis.ReadRegister(VARIABLE.GetIdent());
|
|
//String result = RegisterCheck.CheckRange(VARIABLE, a);
|
|
if (StatusReturn.Failed == RegisterCheck.CheckRange(VARIABLE, a, out var result))
|
|
{
|
|
MessageBox.Show(result);
|
|
allSucceed = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (allSucceed)
|
|
{
|
|
MessageBox.Show("Json Check Succeed!");
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show("Json Check Failed!");
|
|
}
|
|
}
|
|
}
|
|
|
|
private void btnReadyForTestBench_Click(Object sender, EventArgs e)
|
|
{
|
|
if (_currentGenesis != null)
|
|
{
|
|
|
|
|
|
//var rees1 = _currentGenesis.ReadRegister("SENSUSRADIO_EncryptionKey",32);
|
|
//var rees2 = _currentGenesis.ReadRegister("SENSUSRADIO_Authentification", 32);
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("SENSUSRADIO_EncryptionKey", (new Byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }).Reverse().ToArray(), true, true));
|
|
//overAllResult.Add(_currentGenesis_WriteRegister("SENSUSRADIO_Authentification", (new Byte[] { 0x14, 0x30, 0x68, 0xD0, 0x14, 0x0E, 0x80, 0x40, 0x63, 0x93, 0x73, 0x22 }).Reverse().ToArray(), true, true));
|
|
|
|
_currentGenesis_WriteRegister("GENESISFLOW_LowFlowMaxPeriod", 60 << 16, true, true);
|
|
|
|
|
|
_currentGenesis.ResetAlarm(Alarm.EMPTY_PIPE | Alarm.REBOOT);
|
|
//TODO set display unit
|
|
//TODO calculated overflow volume for display
|
|
_currentGenesis_WriteRegister("GENESISFLOW_SealDisplay",
|
|
(new Byte[] { 0x00, 0x00, 0x00, 0x00 }).Reverse().ToArray(), true, true);
|
|
|
|
_currentGenesis.WriteRegister<Byte>(Register.Genesisflow.SampleRate, 10, checkRegister: true);
|
|
_currentGenesis.WriteRegister(Register.Genesisflow.LedMode, 6, checkRegister: true);
|
|
_currentGenesis.WriteRegister("GENESISFLOW_TriggerActive", 1, true, false);
|
|
|
|
_currentGenesis_WriteRegister("GENESISFLOW_DisplayPow10",
|
|
(new Byte[] { 0x00, 0x00, 0x00, 0xFA }).Reverse().ToArray(), true, true);
|
|
|
|
|
|
}
|
|
}
|
|
|
|
private void button1_Click_2(Object sender, EventArgs e)
|
|
{
|
|
if (_currentGenesis != null)
|
|
{
|
|
_currentGenesis_WriteRegister("GENESISFLOW_SealDisplay",
|
|
(new Byte[] { 0x00, 0x00, 0x00, 0x00 }).Reverse().ToArray(), true, true);
|
|
|
|
_currentGenesis_WriteRegister("CUSTOMER_Locale",
|
|
(new Byte[] { 0x00, 0x00, 0x00, 0x24 }).Reverse().ToArray(), true, true);
|
|
|
|
|
|
_currentGenesis_WriteRegister("METROLOGYASST_PulseWeight", (new Byte[] { 0x00, 0x00, 0x0E, 0xC9 }).Reverse().ToArray(), true, true);
|
|
_currentGenesis_WriteRegister("METROLOGYASST_FlowPoint", (new Byte[] { 0x00, 0x00, 0x00, 0x00 }).Reverse().ToArray(), true, true);
|
|
_currentGenesis_WriteRegister("METROLOGYASST_TemperatureUnits", (new Byte[] { 0x00, 0x00, 0x00, 0x01 }).Reverse().ToArray(), true, true);
|
|
_currentGenesis_WriteRegister("METROLOGYASST_FlowUnits", (new Byte[] { 0x00, 0x00, 0x00, 0x06 }).Reverse().ToArray(), true, true);
|
|
_currentGenesis_WriteRegister("GENESISFLOW_DisplayUnits", (new Byte[] { 0x00, 0x00, 0x00, 0x02 }).Reverse().ToArray(), true, true);
|
|
|
|
|
|
_currentGenesis_WriteRegister("GENESISFLOW_SealDisplay",
|
|
(new Byte[] { 0x00, 0x00, 0x00, 0x01 }).Reverse().ToArray(), true, true);
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
private void button2_Click_1(Object sender, EventArgs e)
|
|
{
|
|
_currentGenesis_WriteRegister("GENESISFLOW_SealDisplay",
|
|
(new Byte[] { 0x00, 0x00, 0x00, 0x00 }).Reverse().ToArray(), true, true);
|
|
|
|
|
|
_currentGenesis_WriteRegister("CUSTOMER_Locale",
|
|
(new Byte[] { 0x00, 0x00, 0x00, 0xD0 }).Reverse().ToArray(), true, true);
|
|
|
|
_currentGenesis_WriteRegister("METROLOGYASST_PulseWeight", (new Byte[] { 0x00, 0x00, 0x03, 0xE8 }).Reverse().ToArray(), true, true);
|
|
_currentGenesis_WriteRegister("METROLOGYASST_FlowPoint", (new Byte[] { 0x00, 0x00, 0x00, 0x02 }).Reverse().ToArray(), true, true);
|
|
_currentGenesis_WriteRegister("METROLOGYASST_TemperatureUnits", (new Byte[] { 0x00, 0x00, 0x00, 0x00 }).Reverse().ToArray(), true, true);
|
|
_currentGenesis_WriteRegister("METROLOGYASST_FlowUnits", (new Byte[] { 0x00, 0x00, 0x00, 0x04 }).Reverse().ToArray(), true, true);
|
|
_currentGenesis_WriteRegister("GENESISFLOW_DisplayUnits", (new Byte[] { 0x00, 0x00, 0x00, 0x00 }).Reverse().ToArray(), true, true);
|
|
|
|
|
|
|
|
|
|
_currentGenesis_WriteRegister("GENESISFLOW_SealDisplay",
|
|
(new Byte[] { 0x00, 0x00, 0x00, 0x01 }).Reverse().ToArray(), true, true);
|
|
|
|
|
|
}
|
|
|
|
private void btn_MultiReadWrite_Click(Object sender, EventArgs e)
|
|
{
|
|
|
|
}
|
|
|
|
private void btnHistory_Click(Object sender, EventArgs e)
|
|
{
|
|
|
|
|
|
}
|
|
|
|
private void registerGridView_CellClick(Object sender, DataGridViewCellEventArgs e)
|
|
{
|
|
|
|
if (e.ColumnIndex > 0 && registerGridView.Columns[e.ColumnIndex] is DataGridViewButtonColumn historyColumn)
|
|
{
|
|
if (_currentGenesis != null && _currentGenesis.IsLoggedOn)
|
|
{
|
|
var regdef = (String)registerGridView.Rows[e.RowIndex].Cells[0].Value;
|
|
var keyvalueRegdef = _currentGenesis.GetRegistersDic().FirstOrDefault(f => f.Key.GetIdent() == regdef);
|
|
if (keyvalueRegdef.Key != null)
|
|
{
|
|
var frmDialog = new FrmRegisterHistory(_currentGenesis.PcbId, keyvalueRegdef.Key);
|
|
frmDialog.SetDesktopLocation(Cursor.Position.X, Cursor.Position.Y);
|
|
frmDialog.ShowDialog();
|
|
}
|
|
|
|
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
private String _preSelectReminder = "None";
|
|
private void lblState_Click(Object sender, EventArgs e)
|
|
{
|
|
if (_preSelectReminder.Contains("None"))
|
|
{
|
|
_preSelectReminder = "All";
|
|
selectPreset("All");
|
|
}
|
|
else
|
|
{
|
|
_preSelectReminder = "None";
|
|
selectPreset("None");
|
|
}
|
|
}
|
|
|
|
private void button1_Click_3(Object sender, EventArgs e)
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
private void button2_Click_2(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))
|
|
{
|
|
|
|
button2.BackColor = Color.Yellow;
|
|
try
|
|
{
|
|
conntect(slotNR);
|
|
foreach (var me in _meterBatch.ListOfMeters)
|
|
{
|
|
if (me is GenesisMeter)
|
|
{
|
|
if (((GenesisMeter)me).IsLoggedOn)
|
|
{
|
|
_currentGenesis = ((GenesisMeter)me);
|
|
|
|
_currentGenesis.WriteRegister("METROLOGYASST_PulseMode", 1);
|
|
|
|
_currentGenesis.WriteRegister("METROLOGYASST_PulseWeight", 32000);
|
|
|
|
_currentGenesis.WriteRegister("METROLOGYASST_PulseLength", 8);
|
|
_currentGenesis.WriteRegister("GENESISFLOW_SampleRate", 2);
|
|
_currentGenesis.WriteRegister("GENESISFLOW_LedMode", 0);
|
|
|
|
_currentGenesis.WriteRegister("GENESISFLOW_TriggerActive", 1);
|
|
|
|
button2.BackColor = Color.Green;
|
|
return;
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
|
|
MessageBox.Show(ex.Message);
|
|
}
|
|
|
|
button2.BackColor = Color.Red;
|
|
}
|
|
}
|
|
}
|
|
|
|
private void button1_Click_4(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))
|
|
{
|
|
|
|
button1.BackColor = Color.Yellow;
|
|
try
|
|
{
|
|
conntect(slotNR);
|
|
var ts = DateTimeOffset.UtcNow - new DateTimeOffset(2000, 1, 1, 0, 0, 0, new TimeSpan(0));
|
|
foreach (var me in _meterBatch.ListOfMeters)
|
|
{
|
|
if (me is GenesisMeter)
|
|
{
|
|
if (((GenesisMeter)me).IsLoggedOn)
|
|
{
|
|
_currentGenesis = ((GenesisMeter)me);
|
|
|
|
_currentGenesis.WriteRegister("GENESISFLOW_SealDisplay", 0);
|
|
_currentGenesis.WriteRegister("POWERMON_WarnFromClamp", (UInt32)473040000);
|
|
_currentGenesis.WriteRegister("SYSTEM_CalendarSeconds", Convert.ToInt32(ts.TotalSeconds));
|
|
var r = _currentGenesis.ReadRegister(Register.Genesisflow.TriggerIdle);
|
|
if (r[1] == 18)
|
|
{
|
|
|
|
|
|
Int32 newVal = (Int32)r[0] + (Int32)0x01;
|
|
var n = new Byte[] { (Byte)newVal, r[1], 0x00, 0x00 };
|
|
|
|
|
|
_currentGenesis.WriteRegister(Register.Genesisflow.TriggerIdle, n);
|
|
}
|
|
else
|
|
{
|
|
_currentGenesis.SetLcdText(false, new Byte[] { 0x12, 0x35 });
|
|
}
|
|
|
|
button1.BackColor = Color.Green;
|
|
return;
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
|
|
MessageBox.Show(ex.Message);
|
|
}
|
|
|
|
button1.BackColor = Color.Red;
|
|
}
|
|
}
|
|
}
|
|
|
|
private void label1_Click(Object sender, EventArgs e)
|
|
{
|
|
|
|
}
|
|
|
|
private void btnStoreAll_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))
|
|
{
|
|
|
|
btnStoreAll.BackColor = Color.Yellow;
|
|
try
|
|
{
|
|
foreach (var me in _meterBatch.ListOfMeters)
|
|
{
|
|
if (me is GenesisMeter)
|
|
{
|
|
if (((GenesisMeter)me).IsLoggedOn)
|
|
{
|
|
_currentGenesis = ((GenesisMeter)me);
|
|
|
|
var resultAll = _currentGenesis.StoreAllConfigurations();
|
|
if (resultAll)
|
|
{
|
|
btnStoreAll.BackColor = Color.Green;
|
|
return;
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
|
|
MessageBox.Show(ex.Message);
|
|
}
|
|
btnStoreAll.BackColor = Color.Red;
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
//private void btn0406_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))
|
|
// {
|
|
|
|
// btn0406.BackColor = Color.Yellow;
|
|
// try
|
|
// {
|
|
// foreach (var me in _meterBatch.ListOfMeters)
|
|
// {
|
|
// if (me is GenesisMeter)
|
|
// {
|
|
// if (((GenesisMeter)me).IsLoggedOn)
|
|
// {
|
|
// _currentGenesis = ((GenesisMeter)me);
|
|
|
|
|
|
|
|
// _currentGenesis.WriteRegister("CUSTOMER_StoreConfiguration", 1);
|
|
|
|
// var reboot = ByteArrayStyle.ByteStyler.ToString(_currentGenesis.ReadRegister("CUSTOMER_RebootCount"));
|
|
// var PERIODICLOG_ResetCounter = ByteArrayStyle.ByteStyler.ToString(_currentGenesis.ReadRegister("PERIODICLOG_ResetCounter"));
|
|
// var SENSUSRADIO_ResetCounter = ByteArrayStyle.ByteStyler.ToString(_currentGenesis.ReadRegister("SENSUSRADIO_ResetCounter"));
|
|
|
|
// var rebootSeconds = ByteArrayStyle.ByteStyler.ToString(_currentGenesis.ReadRegister("SYSTEM_MonotonicSeconds"));
|
|
// var Storeconfig = ByteArrayStyle.ByteStyler.ToString(_currentGenesis.ReadRegister("CUSTOMER_StoreConfiguration"));
|
|
// _currentGenesis.WriteLog($"#+#+#{_currentGenesis.PcbId};{Storeconfig};{reboot};{rebootSeconds};{cbProd.Checked};{txtTest.Text};{PERIODICLOG_ResetCounter};{SENSUSRADIO_ResetCounter}");
|
|
|
|
// btn0406.BackColor = Color.Green;
|
|
// btn0406.Text = Storeconfig;
|
|
// return;
|
|
// }
|
|
|
|
// }
|
|
// }
|
|
|
|
// }
|
|
// catch (Exception ex)
|
|
// {
|
|
// btn0406.BackColor = Color.Red;
|
|
// MessageBox.Show(ex.Message);
|
|
// }
|
|
|
|
|
|
// }
|
|
// }
|
|
//}
|
|
|
|
|
|
private void bn()
|
|
{
|
|
if (cbComSlot.SelectedItem != null) // && cbComSlot.SelectedValue is ListBoxItem)
|
|
{
|
|
Int32 slotNR = 0;
|
|
if (!string.IsNullOrEmpty(cbComSlot.SelectedItem.ToString()) &&
|
|
int.TryParse(cbComSlot.SelectedItem.ToString(), out slotNR))
|
|
{
|
|
timer1.Enabled = false;
|
|
button3.BackColor = Color.Yellow;
|
|
try
|
|
{
|
|
conntect(slotNR);
|
|
foreach (var me in _meterBatch.ListOfMeters)
|
|
{
|
|
if (me is GenesisMeter)
|
|
{
|
|
if (((GenesisMeter)me).IsLoggedOn)
|
|
{
|
|
_currentGenesis = ((GenesisMeter)me);
|
|
|
|
var reboot = _currentGenesis.ReadRegister("CUSTOMER_RebootCount");
|
|
|
|
_currentGenesis.ReadRegister("POWERMON_BatteryQuantity");
|
|
_currentGenesis.SetLcdText(false, new Byte[] { 0xAC, reboot[0] });
|
|
button3.BackColor = Color.Green;
|
|
timer1.Enabled = true;
|
|
return;
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
timer1.Enabled = true;
|
|
button3.BackColor = Color.Red;
|
|
return;
|
|
}
|
|
|
|
timer1.Enabled = true;
|
|
button3.BackColor = Color.Gray;
|
|
return;
|
|
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// Upload installed FW versions and core revision to DB.
|
|
/// </summary>
|
|
/// <remarks date="2021-Feb-12" author="Roland Drabesch">
|
|
/// - Initial
|
|
/// </remarks>
|
|
/// <remarks date="2021-Mar-10" author="Thomas Wiedebusch">
|
|
/// - Changed version from Uint32 to String
|
|
/// </remarks>
|
|
/// <remarks date="2022-Dec-02" author="Thomas Wiedebusch">
|
|
/// - Changed core revision from string to Int32?.
|
|
/// </remarks>
|
|
private void button3_Click(Object sender, EventArgs e)
|
|
{
|
|
var apps = new List<CordonelAppVersion>();
|
|
foreach (var item in _currentGenesis.MeterAppListVersion)
|
|
{
|
|
apps.Add(new CordonelAppVersion(item.AppId, item.StrVersion, item.AppId != 15));
|
|
}
|
|
|
|
apps.Add(new CordonelAppVersion(-1, _currentGenesis.StrCoreRevision, false));
|
|
|
|
var url = $"{ServiceUrls.MeterProcessStateUrl()}SetCordonelProgress?PcbId={_currentGenesis.PcbId}&ProgressName=toolbox&version={Assembly.GetExecutingAssembly().GetName().Version}";
|
|
var a = LocalWebRequest.PostRequestAsync(url, json: apps);
|
|
}
|
|
|
|
private void timer1_Tick(Object sender, EventArgs e)
|
|
{
|
|
bn();
|
|
}
|
|
|
|
private void button4_Click(Object sender, EventArgs e)
|
|
{
|
|
if (cbComSlot.SelectedItem != null) // && cbComSlot.SelectedValue is ListBoxItem)
|
|
{
|
|
Int32 slotNR = 0;
|
|
_currentPcbId = "";
|
|
if (!string.IsNullOrEmpty(cbComSlot.SelectedItem.ToString()) &&
|
|
int.TryParse(cbComSlot.SelectedItem.ToString(), out slotNR))
|
|
{
|
|
SetBusy(true, "GetPcbId");
|
|
Task.Factory.StartNew(() =>
|
|
{
|
|
getPcbId(slotNR);
|
|
|
|
var str = LocalWebRequest.GetRequest($"{ServiceUrls.GenesisFinalCheckServiceUrl()}GetPossibleRadioLengths?CheckPcbId={_currentPcbId}", 15000);
|
|
MessageBox.Show(str);
|
|
}).ContinueWith(delegate
|
|
{
|
|
|
|
Invoke(new Action(() =>
|
|
{
|
|
MessageBox.Show(_currentPcbId);
|
|
SetBusy(false);
|
|
}));
|
|
});
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
private void button6_Click(Object sender, EventArgs e)
|
|
{
|
|
//Seal Display test
|
|
_currentGenesis.WriteRegister("SYSTEM_ExitReason", 21, true, false);
|
|
var exitResult = RegisterConverter.ByteArrayToValue<Int16>(_currentGenesis.ReadRegister("SYSTEM_ExitReason"));
|
|
|
|
MessageBox.Show(exitResult.ToString());
|
|
|
|
var _meterResetPsu = new MeterResetPsu(_currentGenesis)
|
|
{
|
|
StoreConfigEnable = true
|
|
};
|
|
var rebootSucceeded = _meterResetPsu.MeterResetPsuExecute();
|
|
|
|
Thread.Sleep(16000);
|
|
if (!_currentGenesis.Login())
|
|
|
|
{
|
|
_currentGenesis.WriteLog("relogin first attempt Failed");
|
|
Thread.Sleep(5000);
|
|
if (!_currentGenesis.Login())
|
|
{
|
|
|
|
}
|
|
}
|
|
_currentGenesis.WriteRegister("SYSTEM_ExitReason", 21, true, false);
|
|
exitResult = RegisterConverter.ByteArrayToValue<Int16>(_currentGenesis.ReadRegister("SYSTEM_ExitReason"));
|
|
|
|
MessageBox.Show(exitResult.ToString());
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
private void btnUI1236Com_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))
|
|
{
|
|
try
|
|
{
|
|
conntect(slotNR);
|
|
foreach (var me in _meterBatch.ListOfMeters)
|
|
{
|
|
if (me is GenesisMeter)
|
|
{
|
|
if (((GenesisMeter)me).IsLoggedOn)
|
|
{
|
|
_currentGenesis = ((GenesisMeter)me);
|
|
_currentGenesis.SendUI1236Command(new Byte[] { 0x0d, 0x04, 0x08, 0x01, 0x00, 0x1a }, true, false);
|
|
|
|
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
|
|
return;
|
|
}
|
|
|
|
|
|
return;
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
private void btnBatLife_Click(Object sender, EventArgs e)
|
|
{
|
|
if (cbComSlot.SelectedItem == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (string.IsNullOrEmpty(cbComSlot.SelectedItem.ToString()) ||
|
|
!int.TryParse(cbComSlot.SelectedItem.ToString(), out var slotNR))
|
|
{
|
|
return;
|
|
}
|
|
|
|
try
|
|
{
|
|
conntect(slotNR);
|
|
foreach (var me in _meterBatch.ListOfMeters)
|
|
{
|
|
if (me is GenesisMeter)
|
|
{
|
|
if (((GenesisMeter)me).IsLoggedOn)
|
|
{
|
|
_currentGenesis = ((GenesisMeter)me);
|
|
|
|
|
|
|
|
|
|
|
|
var t = new JustageResults()
|
|
{
|
|
pcbId = _currentGenesis.PcbId,
|
|
p1Target = 0,
|
|
p1Value = RegisterConverter.ByteArrayToValue<ushort>(_currentGenesis.ReadRegister(Register.Genesisflow.CalFactor1)),
|
|
p2Target = 0,
|
|
p2Value = RegisterConverter.ByteArrayToValue<ushort>(_currentGenesis.ReadRegister(Register.Genesisflow.CalFactor2)),
|
|
p3Target = 0,
|
|
p3Value = RegisterConverter.ByteArrayToValue<ushort>(_currentGenesis.ReadRegister(Register.Genesisflow.CalFactor3)),
|
|
dt = DateTime.UtcNow
|
|
|
|
};
|
|
|
|
|
|
try
|
|
{
|
|
var tmpUrl = $"http://10.49.40.25/MeterProcessState/api/TestBench/SetCalibrationValues";
|
|
//ToDO: Update to service URl
|
|
|
|
Logic.SoftwareAccessHelper.LocalWebRequest.PostAsJson<JustageResults>(t, tmpUrl);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
var genesisStatus = new GenesisStatus();
|
|
if (GenesisStatusHandler.BuildLifeTimeInformation(_currentGenesis, genesisStatus, out _))
|
|
{
|
|
|
|
var sbMSG = new StringBuilder();
|
|
sbMSG.AppendLine($"Pcb = {_currentGenesis.PcbId}");
|
|
|
|
sbMSG.AppendLine($"POWERMON_TotalUsedSeconds = {genesisStatus.ExceededLifeTime_s}");
|
|
sbMSG.AppendLine($"POWERMON_TotalUsedCharge = {genesisStatus.DrainedBatteryLoad_uAs}");
|
|
sbMSG.AppendLine($"POWERMON_BatteryQuantity = {genesisStatus.BatteryQuantity}");
|
|
sbMSG.AppendLine($"POWERMON_BatteryMilliAHrRating = {genesisStatus.InitialBatteryLoad_mAh}");
|
|
sbMSG.AppendLine("");
|
|
sbMSG.AppendLine($"Remaining life time in years {genesisStatus.RemainingLifeTimeYears:F2}");
|
|
sbMSG.AppendLine($"Totally drained battery load in % {genesisStatus.DrainedBatteryLoadPercent:F2}");
|
|
|
|
|
|
|
|
|
|
MessageBox.Show(sbMSG.ToString(), $"Battery for {_currentGenesis.PcbId} has remaining life " +
|
|
$"time of {genesisStatus.RemainingLifeTimeYears:F2} years");
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show("Failed to get life time information");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show(ex.ToString());
|
|
}
|
|
}
|
|
|
|
private void btnRadioPressure_Click(Object sender, EventArgs e)
|
|
{
|
|
|
|
if (cbComSlot.SelectedItem == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (string.IsNullOrEmpty(cbComSlot.SelectedItem.ToString()) ||
|
|
!int.TryParse(cbComSlot.SelectedItem.ToString(), out var slotNR))
|
|
{
|
|
return;
|
|
}
|
|
|
|
try
|
|
{
|
|
var ret = "nicht geklappt";
|
|
conntect(slotNR);
|
|
foreach (var me in _meterBatch.ListOfMeters)
|
|
{
|
|
if (me is GenesisMeter Meter)
|
|
{
|
|
if (((GenesisMeter)me).IsLoggedOn)
|
|
{
|
|
|
|
//CUSTOMER_AlarmEnableMask - 00-00-80-53
|
|
//CUSTOMER_AlarmBroadcastMask - 00-00-1F-DC
|
|
//CUSTOMER_AlarmVisualMask - 00-00-1F-DC
|
|
//
|
|
|
|
Meter.WriteRegister("SENSUSRADIO_MainAlarmMask", new Byte[] { 0x00 }, true);
|
|
Meter.WriteRegister("SENSUSRADIO_ExtendedAlarmMask", new Byte[] { 0x00 }, true);
|
|
|
|
Meter.WriteRegister("CUSTOMER_AlarmEnableMask", new Byte[] { 0xD3, 0x9F, 0x00, 0x00 }, true);
|
|
Meter.WriteRegister("CUSTOMER_AlarmBroadcastMask", new Byte[] { 0xDC, 0x1F, 0x00, 0x00 }, true);
|
|
Meter.WriteRegister("CUSTOMER_AlarmVisualMask", new Byte[] { 0xDC, 0x1F, 0x00, 0x00 }, true);
|
|
|
|
Meter.WriteRegister("SENSUSRADIO_SystemState", 0xFF, true);
|
|
Meter.Logout();
|
|
Thread.Sleep(5000);
|
|
if (!Meter.Login())
|
|
{
|
|
Thread.Sleep(5000);
|
|
if (!Meter.Login())
|
|
{
|
|
|
|
}
|
|
}
|
|
|
|
var SENSUSRADIO_MainAlarmMask = Meter.ReadRegister("SENSUSRADIO_MainAlarmMask");
|
|
var SENSUSRADIO_ExtendedAlarmMask = Meter.ReadRegister("SENSUSRADIO_ExtendedAlarmMask");
|
|
|
|
//_currentGenesis = ((GenesisMeter)me);
|
|
//_currentGenesis.WriteRegister("POWERMON_BatteryQuantity", 2, true, true);
|
|
|
|
//var defEncryptionKey = new List<Byte>();
|
|
//defEncryptionKey.AddRange(new Byte[] { 0x0E, 0x9F, 0xAC, 0xC6 }.ToArray());
|
|
//defEncryptionKey.AddRange(new Byte[] { 0xA0, 0xE1, 0xEF, 0x1C }.ToArray());
|
|
//defEncryptionKey.AddRange(new Byte[] { 0x3B, 0x27, 0xA4, 0x9B }.ToArray());
|
|
//defEncryptionKey.AddRange(new Byte[] { 0xAC, 0x21, 0x65, 0x35 }.ToArray());
|
|
//_currentGenesis.WriteRegister("SENSUSRADIO_EncryptionKey", defEncryptionKey.ToArray(), true);
|
|
|
|
|
|
//var freq = RegisterConverter.ByteArrayToValue<UInt32>(_currentGenesis.ReadRegister("SENSUSRADIO_FrequencyIndicator"));
|
|
//var RadioAdress = RegisterConverter.ByteArrayToValue<UInt32>(_currentGenesis.ReadRegister("SENSUSRADIO_RadioAddress"));
|
|
//_currentGenesis.WriteRegister("SENSUSRADIO_SystemState", 0xFF, true);
|
|
|
|
//_currentGenesis.WriteRegister("SENSUSRADIO_WakeupInterval", 0, true);
|
|
//_currentGenesis.Logout();
|
|
//File.AppendAllLines("RadioActivation.log", new[] { $"{freq};{_currentGenesis.PcbId};{RadioAdress};{DateTime.Now}" });
|
|
//ret = $"{freq};{_currentGenesis.PcbId};{RadioAdress};{DateTime.Now}";
|
|
|
|
|
|
}
|
|
}
|
|
}
|
|
MessageBox.Show(ret);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show(ex.ToString());
|
|
}
|
|
|
|
}
|
|
|
|
private void btn_CalibrationRestore_Click(Object sender, EventArgs e)
|
|
{
|
|
string err;
|
|
foreach (var me in _meterBatch.ListOfMeters)
|
|
{
|
|
if (me is GenesisMeter Meter)
|
|
{
|
|
if (((GenesisMeter)me).IsLoggedOn)
|
|
{
|
|
var meterCalibrations = new CalibrationResults();
|
|
if (!GetCalibrationResultsFromDbperRun(_currentPcbId, meterCalibrations, out err))
|
|
{
|
|
MessageBox.Show(err);
|
|
}
|
|
else
|
|
{
|
|
Meter.WriteRegister(Register.Genesisflow.FirstHitPercent1, meterCalibrations.FirstHitPercent1, true);
|
|
Meter.WriteRegister(Register.Genesisflow.FirstHitPercent2, meterCalibrations.FirstHitPercent2, true);
|
|
Meter.WriteRegister(Register.Genesisflow.FirstHitPercent3, meterCalibrations.FirstHitPercent3, true);
|
|
Meter.WriteRegister(Register.Genesisflow.FirstHitShift, meterCalibrations.FirstHitShift, true);
|
|
Meter.WriteRegister(Register.Genesisflow.FirstHitUpdatePeriod, meterCalibrations.FirstHitUpdatePeriod, true);
|
|
Meter.WriteRegister(Register.Genesisflow.ToFTempOffset1, meterCalibrations.ToFTempOffset1, true);
|
|
Meter.WriteRegister(Register.Genesisflow.ToFTempOffset2, meterCalibrations.ToFTempOffset2, true);
|
|
Meter.WriteRegister(Register.Genesisflow.ToFTempOffset3, meterCalibrations.ToFTempOffset3, true);
|
|
Meter.WriteRegister(Register.Genesisflow.ZeroOffset1, meterCalibrations.ZeroOffset1, true);
|
|
Meter.WriteRegister(Register.Genesisflow.ZeroOffset2, meterCalibrations.ZeroOffset2, true);
|
|
Meter.WriteRegister(Register.Genesisflow.ZeroOffset3, meterCalibrations.ZeroOffset3, true);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static Boolean GetCalibrationResultsFromDbperRun(String RunId, CalibrationResults calibResults,
|
|
out String errorMsg)
|
|
{
|
|
errorMsg = "";
|
|
if (null == calibResults || string.IsNullOrEmpty(RunId))
|
|
{
|
|
return false;
|
|
}
|
|
|
|
try
|
|
{
|
|
var url = "http://sla12iis01.emea.sensus.net/MeterProcessState/api/FinalCheck/CalibrationResults/";
|
|
var requestResponse = LocalWebRequest.GetRequest(url, 30000, out var httpStatus);
|
|
if (httpStatus == HttpStatusCode.OK && !string.IsNullOrEmpty(requestResponse))
|
|
{
|
|
var calibRes = JsonConvert.DeserializeObject<CalibrationResults>(requestResponse);
|
|
// ClassAccess.CopyProperties(calibResults, calibRes);
|
|
var type = typeof(CalibrationResults);
|
|
foreach (var prop in type.GetProperties())
|
|
{
|
|
if (prop.CanWrite)
|
|
prop.SetValue(calibResults, prop.GetValue(calibRes, null), null);
|
|
}
|
|
return true;
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
errorMsg = e.Message;
|
|
return false;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
}
|
|
} |