Files
laatzen/Common/Ui/GenesisToolBox/frmRegisterStore.cs
T

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;
}
}
}