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 Logger = new Lazy(() => { 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(tr.ReadToEnd()); cblSlots.Items.Clear(); var listSlots = new List(); 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) { } } }