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

609 lines
19 KiB
C#

using Newtonsoft.Json;
using NLog;
using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.IO;
using System.Threading.Tasks;
using System.Windows.Forms;
using Xylem.Common.CommonCore.Consts;
using Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.EventArguments;
using Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.MeasurementRecords;
using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisConfig;
using Xylem.Common.Hardware.WaterMeter.WaterMeterCore;
using Xylem.Common.Metrology.Measurements;
using Xylem.Common.Utils.Logging;
using XylemCommonUiLegacyGenCtl;
namespace GenesisToolBox
{
public partial class FrmLegacyTestApp : Form
{
private static readonly Lazy<ILogger> Logger = new Lazy<ILogger>(() =>
{
return NLogHelper.CreateOrGetLogger("GenesisToolBox");
});
private MeterBatch mb = new MeterBatch();
private DataTable dt = new DataTable();
private DateTime? startTime = null;
private DateTime? endTime = null;
public Boolean isMeasurement { get; private set; }
public Boolean isSlotSelect { get; private set; }
public Boolean isInit { get; private set; }
public Boolean isConnected { get; private set; }
public Boolean isMeasurementStarted { get; private set; }
public Boolean isCalibrationCalculated { get; private set; }
public Boolean IsBusy { get; private set; }
#region bussy
private void setBussy(Boolean val, String action = "")
{
IsBusy = val;
if (IsBusy)
{
Invoke(new Action(() => { }));
}
else
{
Invoke(new Action(() => { }));
}
}
private void setProgress(String text)
{
Invoke(new Action(() => { }));
}
#endregion
private void stateChanged()
{
Invoke(new Action(() =>
{
//btnPrepareBatch.Enabled = isSlotSelect;
////btnLogin.Enabled = isInit;
//btnMeasurementPreparation.Enabled = isConnected;
//btnMeasurementStart.Enabled = isConnected && !isMeasurementStarted;
//btnMeasurementStop.Enabled = isMeasurementStarted;
//cblSlots.Enabled = !isInit;
////btnDisconnect.Enabled = isInit;
//rbFlowCalibration.Enabled = !isInit;
//rbMeasurement.Enabled = !isInit;
}));
}
public FrmLegacyTestApp()
{
InitializeComponent();
var configfile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), nameof(Xylem.Common.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());
cblSlots.Items.Clear();
var listSlots = new List<Int32>();
foreach (var item in meterConfigList)
{
cblSlots.Items.Add(item.Slot);
listSlots.Add(item.Slot);
}
//var ad = new ctlAutoDetect();
//ad.Init(listSlots.Count);
//this.Controls.Add(ad);
//ad.Location = new System.Drawing.Point(0, 200);
//this.Size = new Size(ad.Size.Width, ad.Size.Height + 300);
// ad.SerialNumberFound += delegate (Object sender, EventArgs args)
//{
// for (Int32 i = 1; i <= 6; i++)
// {
// MessageBox.Show($"Slot{i} {ad.GetSerialNumber(i)}");
// }
//};
}
private void TestForm_Load(Object sender, EventArgs e)
{
ctlAutoDetect1.Init(3);
}
private void btnInit_Click(Object sender, EventArgs e)
{
if (rbMeasurement.Checked)
{
isMeasurement = true;
}
else
{
isMeasurement = false;
}
setBussy(true, "Init");
Task.Factory.StartNew(() => { init(); }).ContinueWith(
delegate
{
Invoke(new Action(() =>
{
this.Controls.Add(controlBatch);
controlBatch.Location = new System.Drawing.Point(0, 200);
this.Size = new Size(controlBatch.Size.Width, controlBatch.Size.Height + 300);
setBussy(false);
isInit = true;
isCalibrationCalculated = false;
stateChanged();
}));
});
}
private void btnLogin_Click(Object sender, EventArgs e)
{
setBussy(true, "Connect");
Task.Factory.StartNew(() => { conntect(); }).ContinueWith(
delegate
{
Invoke(new Action(() =>
{
setBussy(false);
isConnected = true;
stateChanged();
}));
});
}
private void btnDisconnect_Click(Object sender, EventArgs e)
{
setBussy(true, "Disconnect");
Task.Factory.StartNew(() => { disconnect(); }).ContinueWith(
delegate
{
Invoke(new Action(() =>
{
setBussy(false);
isInit = false;
isCalibrationCalculated = false;
isConnected = false;
stateChanged();
}));
});
}
private void btnMeasurementPreparation_Click(Object sender, EventArgs e)
{
setBussy(true, "Preparation");
Task.Factory.StartNew(() => { Preparation(); }).ContinueWith(
delegate
{
Invoke(new Action(() =>
{
setBussy(false);
}));
});
}
private void btnMeasurementStart_Click(Object sender, EventArgs e)
{
if (isMeasurement)
{
setBussy(true, "Start Measurement");
}
else
{
setBussy(true, "Start Calibration");
}
startTime = DateTime.Now;
endTime = null;
Task.Factory.StartNew(() => { StartMeasurement(); }).ContinueWith(
delegate
{
Invoke(new Action(() =>
{
})); setBussy(false);
isMeasurementStarted = true;
stateChanged();
});
}
private void btnUpdate_Click(Object sender, EventArgs e)
{
var flowrateRef = 0.23;
if (!double.TryParse(textBox1.Text, out flowrateRef))
{
var rnd = new Random(1);
flowrateRef = flowrateRef + (rnd.NextDouble() / 100);
}
Double testTime = 0;
if (startTime.HasValue)
{
testTime = (DateTime.Now - startTime.Value).TotalSeconds;
}
controlBatch.SetBatchInfos(flowrateRef, testTime, 11, 5, 0, 20, "b");
}
private void btnMeasurementStop_Click(Object sender, EventArgs e)
{
if (isMeasurement)
{
setBussy(true, "Stop Measurement and wait for result");
}
else
{
setBussy(true, "Stop Calibration and wait for result");
}
endTime = DateTime.Now;
Task.Factory.StartNew(() => { StoptMeasurement(); })
.ContinueWith(
delegate
{
Invoke(new Action(() =>
{
setBussy(false);
isMeasurementStarted = false;
stateChanged();
if (endTime.HasValue && startTime.HasValue)
{
//foreach (var m in mb.ListOfMeters)
//{
// var mess = m.GetFinalMeasurementResult();
// MessageBox.Show($"mess Main {mess.Channel} {mess.TotalVolumeQm}");
// foreach (var cal in m.GetCalibrationResult())
// {
// MessageBox.Show($"mess call {cal.Channel} {cal.TotalVolumeQm}");
// }
//}
var timeMeasurement = (endTime.Value - startTime.Value);
MessageBox.Show($"MeasurementBuffered rund for {timeMeasurement}S");
}
}));
});
}
private void cblSlots_SelectedIndexChanged(Object sender, EventArgs e)
{
cblSlots.SetItemChecked(cblSlots.SelectedIndex, !cblSlots.GetItemChecked(cblSlots.SelectedIndex));
isSlotSelect = cblSlots.CheckedItems.Count >= 1;
stateChanged();
}
private void cblSlots_ItemCheck(Object sender, ItemCheckEventArgs e)
{
isSlotSelect = cblSlots.CheckedItems.Count >= 1;
stateChanged();
}
private ctlBatch controlBatch;
private PreAdjWr controlPreAdjWr;
private void init()
{
try
{
controlBatch = new ctlBatch();
// controlBatch.PrepareBatch(cbRequest.Checked, true, true);
//if (mb != null && mb.ListOfMeters.Any())
//{
// disconnect();
//}
//foreach (var item in cblSlots.CheckedItems)
//{
// int slotNr = 0;
// if (int.TryParse(item.ToString(), out slotNr))
// {
// var currentGenesis = new GenesisMeter();
// currentGenesis.SetupFromConfigFile(slotNr);
// mb.AddMeter(currentGenesis);
// currentGenesis.LogRawData(true);
// }
//}
}
catch (Exception ex)
{
Logger.Value.Error(ex, ex.Message);
}
}
private void conntect()
{
try
{
mb.MetersLogin();
}
catch (Exception ex)
{
Logger.Value.Error(ex, ex.Message);
}
}
private void disconnect()
{
try
{
mb.RemoveAllMeters();
}
catch (Exception ex)
{
Logger.Value.Error(ex, ex.Message);
}
}
private void Preparation()
{
try
{
if (rbMeasurement.Checked)
{
isMeasurement = true;
}
else
{
isMeasurement = false;
}
controlBatch.PrepareMeters("50", 12, 1, 60, 1.7, !isMeasurement, true);
}
catch (Exception ex)
{
Logger.Value.Error(ex, ex.Message);
}
}
private void StartMeasurement()
{
try
{
controlBatch.StartMeasurement();
}
catch (Exception ex)
{
Logger.Value.Error(ex, ex.Message);
}
}
private void StoptMeasurement()
{
try
{
controlBatch.StopMeasurement();
var rest = controlBatch.GetResults(1, 0, 10, 0);
}
catch (Exception ex)
{
Logger.Value.Error(ex, ex.Message);
}
}
private void button1_Click(Object sender, EventArgs e)
{
if (controlBatch == null)
{
controlBatch = new ctlBatch();
this.Controls.Add(controlBatch);
controlBatch.Location = new System.Drawing.Point(0, 200);
this.Size = new Size(controlBatch.Size.Width, controlBatch.Size.Height + 300);
controlBatch.MeterDn = "1";
controlBatch.RefPulseValence = 2;
controlBatch.PredictedQFlow = 3;
controlBatch.PredictedTs = 60;
controlBatch.RefError = 5;
controlBatch.CurrentPulse = 6;
controlBatch.CurrentRefVolume = 7;
controlBatch.RemainingPulse = 8;
controlBatch.Period = "9";
controlBatch.RefFlowUncorrected = 11.5;
}
}
private void btnStoreCal_Click(Object sender, EventArgs e)
{
var flowrateRef = 0.23;
if (!double.TryParse(textBox1.Text, out flowrateRef))
{
var rnd = new Random(1);
flowrateRef = flowrateRef + (rnd.NextDouble() / 100);
}
var CurrentRefVolume = 0.0;
if (startTime.HasValue && endTime.HasValue)
{
var testtime = (endTime.Value - startTime.Value).TotalSeconds;
CurrentRefVolume = (testtime / 3600.0) * flowrateRef;
controlBatch.StartStoreCalibration(CurrentRefVolume, testtime);
}
}
private void button2_Click(Object sender, EventArgs e)
{
foreach (var item in cblSlots.CheckedItems)
{
var slotNr = 0;
if (int.TryParse(item.ToString(), out slotNr))
{
controlBatch.AddMeter($"{slotNr}9991", slotNr);
}
}
}
private void btnshow_Click(Object sender, EventArgs e)
{
controlBatch.ShowTest();
}
private void button1_Click_1(Object sender, EventArgs e)
{
//MeterBatch mb = new MeterBatch();
//var meter = new GenesisMeter();
//meter.SetupFromConfigFile(1, false,false, true);
//meter.SyncStreamingBuffer(SyncMarkRecord.DecodeEveryPackage);
//meter.LogRawData(true);
//meter.StreamingProtocol.OnRecordIsDecoded += StreamingProtocolOnRecordIsDecoded1;
//var meter2 = new GenesisMeter();
//meter2.SetupFromConfigFile(10, false, false, true);
//meter2.SyncStreamingBuffer(SyncMarkRecord.DecodeEveryPackage);
//meter2.LogRawData(true);
//meter2.StreamingProtocol.OnRecordIsDecoded += StreamingProtocolOnRecordIsDecoded10;
if (controlBatch == null)
{
controlBatch = new ctlBatch();
this.Controls.Add(controlBatch);
controlBatch.Location = new System.Drawing.Point(0, 200);
this.Size = new Size(controlBatch.Size.Width, controlBatch.Size.Height + 300);
controlBatch.MeterDn = "1";
controlBatch.RefPulseValence = 2;
controlBatch.PredictedQFlow = 3;
controlBatch.PredictedTs = 60;
controlBatch.RefError = 5;
controlBatch.CurrentPulse = 6;
controlBatch.CurrentRefVolume = 7;
controlBatch.RemainingPulse = 8;
controlBatch.Period = "9";
controlBatch.RefFlowUncorrected = 11.5;
}
// controlBatch.PerformanceTest();
}
private void StreamingProtocolOnRecordIsDecoded(Object sender, BaseDataEventArgs e, String mETER)
{
var result = e.GetEventData();
if (result is IMeasurementRecord)
{
if (result is CalibrationRecord)
{
var cResult = ((CalibrationRecord)result);
Logger.Value.Info($"Meter{mETER}; Channel: {cResult.Channel} ; TemperatureDegC = {cResult.TemperatureDegC}");
}
}
}
private void StreamingProtocolOnRecordIsDecoded1(Object sender, BaseDataEventArgs e)
{
StreamingProtocolOnRecordIsDecoded(sender, e, "1");
}
private void StreamingProtocolOnRecordIsDecoded10(Object sender, BaseDataEventArgs e)
{
StreamingProtocolOnRecordIsDecoded(sender, e, "10");
}
private void btnPreadjustment_Click(Object sender, EventArgs e)
{
if (controlPreAdjWr == null)
{
controlPreAdjWr = new PreAdjWr();
this.Controls.Add(controlPreAdjWr);
controlPreAdjWr.Location = new System.Drawing.Point(0, 200);
this.Size = new Size(controlPreAdjWr.Size.Width, controlPreAdjWr.Size.Height + 300);
controlPreAdjWr.PrepareActionAuto(4, "de-DE");
controlPreAdjWr.EnableMeter(1, true, "srn 1");
var t = new Task(() =>
{
var continueRequesting = true;
while (continueRequesting)
{
switch (controlPreAdjWr.GetPollingAction())
{
case XylemCommonUiLegacyGenCtl.DataPackage.PollingAction.IsDone:
continueRequesting = false;
MessageBox.Show("isDone");
break;
case XylemCommonUiLegacyGenCtl.DataPackage.PollingAction.IsOnError:
continueRequesting = false;
MessageBox.Show("IsOnError");
break;
case XylemCommonUiLegacyGenCtl.DataPackage.PollingAction.DoFlush:
MessageBox.Show("Request flush");
controlPreAdjWr.SetFlushIsDone();
break;
default:
break;
}
}
}
);
t.Start();
controlPreAdjWr.StartAction();
}
}
private void groupBox1_Enter(Object sender, EventArgs e)
{
}
private void btnCheckAll_Click(Object sender, EventArgs e)
{
}
}
}