diff --git a/TBF/BenchControl/TestMethods/PulsesTest/WMPulsesForm.cs b/TBF/BenchControl/TestMethods/PulsesTest/WMPulsesForm.cs index cc202f065..accb830d3 100644 --- a/TBF/BenchControl/TestMethods/PulsesTest/WMPulsesForm.cs +++ b/TBF/BenchControl/TestMethods/PulsesTest/WMPulsesForm.cs @@ -82,12 +82,12 @@ namespace TBF.BenchControl.TestMethods.PulsesTest groupBox4.Text = Strings.Water_Meter + " 4"; groupBox5.Text = Strings.Water_Meter + " 5"; groupBox6.Text = Strings.Water_Meter + " 6"; - wmPulsesCountLabel1.Text = Strings.Pulses_; - wmPulsesCountLabel2.Text = Strings.Pulses_; - wmPulsesCountLabel3.Text = Strings.Pulses_; - wmPulsesCountLabel4.Text = Strings.Pulses_; - wmPulsesCountLabel5.Text = Strings.Pulses_; - wmPulsesCountLabel6.Text = Strings.Pulses_; + wmPulsesCountLabel1.Text = Strings.Pulses_count; + wmPulsesCountLabel2.Text = Strings.Pulses_count; + wmPulsesCountLabel3.Text = Strings.Pulses_count; + wmPulsesCountLabel4.Text = Strings.Pulses_count; + wmPulsesCountLabel5.Text = Strings.Pulses_count; + wmPulsesCountLabel6.Text = Strings.Pulses_count; } private void WMPulsesForm_Load(object sender, EventArgs e) diff --git a/TBF/BenchControl/TestMethods/PulsesTest/WMPulsesForm12.cs b/TBF/BenchControl/TestMethods/PulsesTest/WMPulsesForm12.cs index f32a95de6..49d38e6ac 100644 --- a/TBF/BenchControl/TestMethods/PulsesTest/WMPulsesForm12.cs +++ b/TBF/BenchControl/TestMethods/PulsesTest/WMPulsesForm12.cs @@ -135,7 +135,7 @@ namespace TBF.BenchControl.TestMethods.PulsesTest Text = Strings.Water_Meter_States; for (int i = 0; i < textBoxesCount; i++) { - labels[i].Text = string.Format("WM{0} {1}", i + 1, Strings.Pulses_); + labels[i].Text = string.Format("WM{0} {1}", i + 1, Strings.Pulses); } } diff --git a/TBF/BenchControl/TestMethods/PulsesTest/WMPulsesForm24.cs b/TBF/BenchControl/TestMethods/PulsesTest/WMPulsesForm24.cs index f7ec183ed..4b35b6283 100644 --- a/TBF/BenchControl/TestMethods/PulsesTest/WMPulsesForm24.cs +++ b/TBF/BenchControl/TestMethods/PulsesTest/WMPulsesForm24.cs @@ -145,7 +145,7 @@ namespace TBF.BenchControl.TestMethods.PulsesTest Text = Strings.Water_Meter_States; for (int i = 0; i < textBoxesCount; i++) { - labels[i].Text = string.Format("WM{0} {1}", i + 1, Strings.Pulses_); + labels[i].Text = string.Format("WM{0} {1}", i + 1, Strings.Pulses); } } diff --git a/TBF/MainWnd.Designer.cs b/TBF/MainWnd.Designer.cs index 5818cf7e9..d8a88cf00 100644 --- a/TBF/MainWnd.Designer.cs +++ b/TBF/MainWnd.Designer.cs @@ -684,7 +684,7 @@ namespace TBF private TBF.Screens.ProcessTabPageCtrl24 processTabPageCtrl; #elif SLM_50 private ControlComponent_Torino2015.UserControl1 ctrlBrdComponent; - private TBF.Screens.ProcessTabPageHeatMetersCtrl processTabPageCtrl; + private TBF.Screens.ProcessTabPageExCtrl processTabPageCtrl; #elif TURA_IPERL || IZRAEL_50 private ControlComponent_Torino2015.UserControl1 ctrlBrdComponent; private TBF.Screens.ProcessTabPageCtrl48 processTabPageCtrl; diff --git a/TBF/Resources/Strings.Designer.cs b/TBF/Resources/Strings.Designer.cs index 7cc49f97e..127f94c3b 100644 --- a/TBF/Resources/Strings.Designer.cs +++ b/TBF/Resources/Strings.Designer.cs @@ -864,9 +864,9 @@ namespace TBF.Resources { /// /// Looks up a localized string similar to Compound meter {0}. /// - internal static string Compound_meter_nr { + internal static string Compound_meter_0 { get { - return ResourceManager.GetString("Compound_meter_nr", resourceCulture); + return ResourceManager.GetString("Compound_meter_0", resourceCulture); } } @@ -3364,11 +3364,20 @@ namespace TBF.Resources { } /// - /// Looks up a localized string similar to Pulses:. + /// Looks up a localized string similar to Pulses. /// - internal static string Pulses_ { + internal static string Pulses { get { - return ResourceManager.GetString("Pulses_", resourceCulture); + return ResourceManager.GetString("Pulses", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Pulses count. + /// + internal static string Pulses_count { + get { + return ResourceManager.GetString("Pulses_count", resourceCulture); } } @@ -3652,11 +3661,20 @@ namespace TBF.Resources { } /// - /// Looks up a localized string similar to Ref.pulses:. + /// Looks up a localized string similar to Ref. pulses. /// - internal static string Ref_pulses_ { + internal static string Ref_pulses { get { - return ResourceManager.GetString("Ref_pulses_", resourceCulture); + return ResourceManager.GetString("Ref_pulses", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Ref. pulses count. + /// + internal static string Ref_pulses_count { + get { + return ResourceManager.GetString("Ref_pulses_count", resourceCulture); } } @@ -3706,11 +3724,11 @@ namespace TBF.Resources { } /// - /// Looks up a localized string similar to Reg. valve pos.:. + /// Looks up a localized string similar to Reg. valve pos.. /// - internal static string Reg_valve_pos_ { + internal static string Reg_valve_pos { get { - return ResourceManager.GetString("Reg_valve_pos_", resourceCulture); + return ResourceManager.GetString("Reg_valve_pos", resourceCulture); } } diff --git a/TBF/Resources/Strings.cs.resx b/TBF/Resources/Strings.cs.resx index c1cfb6b90..b2686cd8a 100644 --- a/TBF/Resources/Strings.cs.resx +++ b/TBF/Resources/Strings.cs.resx @@ -154,7 +154,7 @@ Okolní teplota - Neošetřená chyba + Nastala neošetřená chyba Schválení @@ -169,7 +169,7 @@ Schválení info. - Schváleno + Schválil Uspořádání testovaných měřidel @@ -205,22 +205,22 @@ Váha - Stolice + Stanice - Testovací stolice neběží, ale můžete změnit nastavení k vyřešení problému. + Testovací stanice neběží, ale můžete změnit nastavení k vyřešení problému. - Název testu stolice konflikt, použijte jiný název, prosím + Konflikt názvu stanice, použijte jiný název, prosím - Parametry stolice + Parametry stanice Datum sestavení {0} - Kalibrace Specialist + Specialista pro kalibraci Chyba kamery @@ -238,7 +238,7 @@ zavřít - Zavřít vyprazdňování ventil + Zavřít vyprazdňovací ventil Zavřít @@ -268,7 +268,7 @@ Konfigurovat - Konfigurace testovací stolice (vyžadováno heslo) + Konfigurace testovací stanice (vyžadováno heslo) Potvrzení @@ -769,7 +769,7 @@ Režim reakce - Odkaz + Etalon Reg. ventil @@ -1407,4 +1407,19 @@ Nesprávny smer počítania iPerlu + + Impulsy + + + Počet impulsů + + + Počet impulsů je OK + + + Impulsy etalonu + + + Počet imp. etalonu + \ No newline at end of file diff --git a/TBF/Resources/Strings.de.resx b/TBF/Resources/Strings.de.resx index 0ce37ede8..3e1040226 100644 --- a/TBF/Resources/Strings.de.resx +++ b/TBF/Resources/Strings.de.resx @@ -1014,7 +1014,7 @@ Umgebungstemperatur - + Verbundwasserzähler {0} @@ -1032,8 +1032,8 @@ Dr. ob. - - Impulse: + + Impulse Referenzfehler [%]: @@ -1044,14 +1044,14 @@ Ref.Frequenz [Hz]: - - Ref.Impulse: + + Ref.Impulse Ref.Volumen [l]: - - Reg.Ventilpos.: + + Reg.Ventilpos. Prüfdurchfluss Hi [m3/h]: diff --git a/TBF/Resources/Strings.it.resx b/TBF/Resources/Strings.it.resx index da55a770d..6bca68b4c 100644 --- a/TBF/Resources/Strings.it.resx +++ b/TBF/Resources/Strings.it.resx @@ -1209,7 +1209,7 @@ Temperatura dell'aria - + misuratore composto {0} @@ -1230,8 +1230,8 @@ Pr su - - impulsi: + + impulsi Riferimento errore [%]: @@ -1242,14 +1242,14 @@ riferimento frequenza [Hz]: - + riferimento impulsi riferimento volume [l]: - - posizionamento della valvola: + + posizionamento della valvola target flusso massimo [m3/h]: diff --git a/TBF/Resources/Strings.pl.resx b/TBF/Resources/Strings.pl.resx index 134b7d493..f54a8f7a3 100644 --- a/TBF/Resources/Strings.pl.resx +++ b/TBF/Resources/Strings.pl.resx @@ -1233,7 +1233,7 @@ Temperatura otoczenia - + Licznik sprzężony {0} @@ -1251,8 +1251,8 @@ Pr do góry - - Impulsy: + + Impulsy Zakres błedu [%] @@ -1263,14 +1263,14 @@ Zakres częstotliwości [Hz] - - Zakres impulsów: + + Zakres impulsów Zakres objętości [l] - - Położenie zawaoru regulacyjnego: + + Położenie zawaoru regulacyjnego Zadany przepływ max. [m3/h] diff --git a/TBF/Resources/Strings.resx b/TBF/Resources/Strings.resx index c43664b3f..05196f4ff 100644 --- a/TBF/Resources/Strings.resx +++ b/TBF/Resources/Strings.resx @@ -1210,7 +1210,7 @@ Air temperature - + Compound meter {0} @@ -1231,8 +1231,8 @@ Pr up - - Pulses: + + Pulses Ref. error [%]: @@ -1243,14 +1243,14 @@ Ref. freq. [Hz]: - - Ref.pulses: + + Ref. pulses Ref. volume [l]: - - Reg. valve pos.: + + Reg. valve pos. Target flow high [m3/h]: @@ -1963,4 +1963,10 @@ Wrong iPerl counting direction + + Pulses count + + + Ref. pulses count + \ No newline at end of file diff --git a/TBF/Resources/Strings.ru.resx b/TBF/Resources/Strings.ru.resx index c543ee8dc..e0a74c43a 100644 --- a/TBF/Resources/Strings.ru.resx +++ b/TBF/Resources/Strings.ru.resx @@ -1200,7 +1200,7 @@ Температура воздуха - + Комбинированный счетчик {0} @@ -1218,8 +1218,8 @@ Pr up - - Импульсы: + + Импульсы Эт. отклонение [%]: @@ -1230,14 +1230,14 @@ Эт.частота [Hz]: - - Эт.импульсы: + + Эт.импульсы Эт.объем [л]: - - Полож.рег.вент.: + + Полож.рег.вент. Заданный расход максимальный [м3/ч]: diff --git a/TBF/Screens/ProcessTabPageCtrl6.cs b/TBF/Screens/ProcessTabPageCtrl6.cs index 1a622559f..aa09afba3 100644 --- a/TBF/Screens/ProcessTabPageCtrl6.cs +++ b/TBF/Screens/ProcessTabPageCtrl6.cs @@ -143,8 +143,8 @@ namespace TBF.Screens tOutCapLabel.Text = string.Format("{0} [°C]:", Strings.T_out); tDivCapLabel.Text = string.Format("{0} [°C]:", Strings.T_div); - regValvePosCapLabel.Text = Strings.Reg_valve_pos_; - refPulsesCapLabel.Text = Strings.Ref_pulses_; + regValvePosCapLabel.Text = string.Format("{0}:", Strings.Reg_valve_pos); + refPulsesCapLabel.Text = string.Format("{0}:", Strings.Ref_pulses); refFreqCapLabel.Text = Strings.Ref_freq_Hz_; refFlowCapLabel.Text = Strings.Ref_flow_m3h_; refVolumeCapLabel.Text = Strings.Ref_volume_l_; @@ -158,13 +158,13 @@ namespace TBF.Screens for (int i = 0; i < groupBoxes.Length; i++) groupBoxes[i].Text = string.Format(string.Format("{0} {1}", Strings.Meter, i + 1)); sensor1CapLabel.Text = sensor2CapLabel.Text = sensor3CapLabel.Text = sensor4CapLabel.Text = sensor5CapLabel.Text = sensor6CapLabel.Text = Strings.Sensor; - pulses1CapLabel.Text = pulses2CapLabel.Text = pulses3CapLabel.Text = pulses4CapLabel.Text = pulses5CapLabel.Text = pulses6CapLabel.Text = Strings.Pulses_; - refPulses1CapLabel.Text = refPulses2CapLabel.Text = refPulses3CapLabel.Text = refPulses4CapLabel.Text = refPulses5CapLabel.Text = refPulses6CapLabel.Text = Strings.Ref_pulses_; + pulses1CapLabel.Text = pulses2CapLabel.Text = pulses3CapLabel.Text = pulses4CapLabel.Text = pulses5CapLabel.Text = pulses6CapLabel.Text = Strings.Pulses; + refPulses1CapLabel.Text = refPulses2CapLabel.Text = refPulses3CapLabel.Text = refPulses4CapLabel.Text = refPulses5CapLabel.Text = refPulses6CapLabel.Text = Strings.Ref_pulses; volume1CapLabel.Text = volume2CapLabel.Text = volume3CapLabel.Text = volume4CapLabel.Text = volume5CapLabel.Text = volume6CapLabel.Text = Strings.Volume + ":"; error1CapLabel.Text = error2CapLabel.Text = error3CapLabel.Text = error4CapLabel.Text = error5CapLabel.Text = error6CapLabel.Text = Strings.Error + ":"; GroupBox[] groupBoxesZ = new GroupBox[] { groupBox1z, groupBox2z, groupBox3z }; - for (int i = 0; i < groupBoxesZ.Length; i++) groupBoxesZ[i].Text = string.Format(Strings.Compound_meter_nr, i + 1); + for (int i = 0; i < groupBoxesZ.Length; i++) groupBoxesZ[i].Text = string.Format(Strings.Compound_meter_0, i + 1); volume1zCapLabel.Text = volume2zCapLabel.Text = volume3zCapLabel.Text = Strings.Volume + ":"; error1zCapLabel.Text = error2zCapLabel.Text = error3zCapLabel.Text = Strings.Error + ":"; diff --git a/TBF/Screens/ProcessTabPageHeatMetersCtrl.Designer.cs b/TBF/Screens/ProcessTabPageExCtrl.Designer.cs similarity index 99% rename from TBF/Screens/ProcessTabPageHeatMetersCtrl.Designer.cs rename to TBF/Screens/ProcessTabPageExCtrl.Designer.cs index 2f6cb904a..7495a7582 100644 --- a/TBF/Screens/ProcessTabPageHeatMetersCtrl.Designer.cs +++ b/TBF/Screens/ProcessTabPageExCtrl.Designer.cs @@ -3,7 +3,7 @@ /// namespace TBF.Screens { - partial class ProcessTabPageHeatMetersCtrl + partial class ProcessTabPageExCtrl { /// /// Required designer variable. @@ -31,7 +31,7 @@ namespace TBF.Screens /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ProcessTabPageHeatMetersCtrl)); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ProcessTabPageExCtrl)); this.splitContainer1 = new System.Windows.Forms.SplitContainer(); this.pumpPctTextBox = new System.Windows.Forms.TextBox(); this.pictureBox1 = new System.Windows.Forms.PictureBox(); diff --git a/TBF/Screens/ProcessTabPageExCtrl.cs b/TBF/Screens/ProcessTabPageExCtrl.cs new file mode 100644 index 000000000..9262af7dd --- /dev/null +++ b/TBF/Screens/ProcessTabPageExCtrl.cs @@ -0,0 +1,677 @@ +/// +/// Copyright (c) 2019 Sensus Slovensko a.s. +/// +using System; +using System.Drawing; +using System.Windows.Forms; +using log4net; +using Config.Entities; +using TBF.BenchControl.Sequences; +using TBF.UiBridge; +using TBF.Resources; + +#pragma warning disable 162 /// Disables 'Unreachable code detected' warning + +namespace TBF.Screens +{ + public partial class ProcessTabPageExCtrl : UserControl + { + static readonly ILog log = LogManager.GetLogger(typeof(ProcessTabPageExCtrl)); + + enum Columns + { + Meter = 0, + Sensor, + Pulses, + RefPulses, + Volume, + Error, + Result, + Energy, + EnergyError, + HeatMeterResult, + } + + MetersKind currentMetersKind; + + bool pumpOn = true; + bool diverterToTank = true; + + /// + /// Constructor, initializes anonymous event handlers + /// + public ProcessTabPageExCtrl() + { + currentMetersKind = MetersKind.Single; + + InitializeComponent(); + + Bridge.ProcedureSelectedHandler += delegate(object sndr, ProcedureSelectedEventArgs args) + { + try + { + if (InvokeRequired) Invoke(new EventHandler(OnProcedureSelected), sndr, args); + else OnProcedureSelected(sndr, args); + } + catch (Exception e) { log.ErrorFormat("ProcessTabPage24.OnProcedureSelected() failed: {0}", e.Message); } + }; + + Bridge.TestSelectedHandler += delegate(object sender, TestSelectedEventArgs args) + { + try + { + if (InvokeRequired) Invoke(new EventHandler(OnTestSelected), sender, args); + else OnTestSelected(sender, args); + } + catch (Exception e) { log.ErrorFormat("ProcessTabPage24.OnTestSelected() failed: {0}", e.Message); } + }; + + Bridge.ProcessDataHandler += delegate(object sender, ProcessDataEventArgs args) + { + try + { + if (InvokeRequired) Invoke(new EventHandler(OnProcessDataChanged), sender, args); + else OnProcessDataChanged(sender, args); + } + catch (Exception e) { log.ErrorFormat("ProcessTabPage24.OnProcessDataChanged() failed: {0}", e.Message); } + }; + + Bridge.TestCompletedHandler += delegate(object sender, TestCompletedEventArgs args) + { + try + { + if (InvokeRequired) Invoke(new EventHandler(OnTestCompleted), sender, args); + else OnTestCompleted(sender, args); + } + catch (Exception e) { log.ErrorFormat("ProcessTabPage24.OnTestCompleted() failed: {0}", e.Message); } + }; + + Bridge.ProcedureCompletedHandler += delegate(object sender, ProcedureCompletedEventArgs args) + { + try + { + if (InvokeRequired) Invoke(new EventHandler(OnProcedureCompleted), sender, args); + else OnProcedureCompleted(sender, args); + } + catch (Exception e) { log.ErrorFormat("ProcessTabPage24.OnProcedureCompleted() failed: {0}", e.Message); } + }; + } + + private void ProcessTabPageCtrl_Load(object sender, EventArgs e) + { + Once(); + ResetLabelsAndTargetVals(); + ResetReadings(); + + } + + void Once() + { + UpdateCurrentMetersKind(MetersKind.Single, true); + } + + /// + /// Update 'currentMetersKind' variable and visibility of UI items. + /// + /// New value + /// true = always update UI + void UpdateCurrentMetersKind(MetersKind metersKind, bool fromScratch = false) + { + if (currentMetersKind != metersKind || fromScratch) + { + currentMetersKind = metersKind; + + metersListView.Items.Clear(); + metersListView.Columns.Clear(); + + metersListView.Columns.Add(Strings.Meter, 100); + metersListView.Columns.Add(Strings.Sensor, 100); + metersListView.Columns.Add(Strings.Pulses_count, 120); + metersListView.Columns.Add(Strings.Ref_pulses_count, 120); + metersListView.Columns.Add(Strings.Volume, 100); + metersListView.Columns.Add(Strings.Error, 100); + metersListView.Columns.Add(Strings.Result, 100); + /// + if (metersKind == MetersKind.HeatMeter) + { + metersListView.Columns.Add(Strings.Energy, 100); + metersListView.Columns.Add(Strings.Error, 100); + metersListView.Columns.Add(Strings.Result, 100); + } + + if ((metersKind == MetersKind.Single) || (metersKind == MetersKind.HeatMeter)) + { + for (int i = 0; i < Config.Data.WMsCount; i++) + { + ListViewItem lvi = new ListViewItem(new string[] { (i + 1).ToString(), "---", "---", "---", "---", "---", "---" }); + if (metersKind == MetersKind.HeatMeter) + { + lvi.SubItems.Add("---"); /// energy + lvi.SubItems.Add("---"); /// energy error + lvi.SubItems.Add("---"); /// HeatMeter result + } + metersListView.Items.Add(lvi); + } + } + else if (metersKind == MetersKind.Combined) + { + for (int z = 0; z < Config.Data.CompoundWMsCount; z++) + { + ListViewItem lvi = new ListViewItem(string.Format("{0} {1}", Strings.Compound_meter_0, z + 1)); + lvi.SubItems.Add(string.Empty); /// sensor + lvi.SubItems.Add(string.Empty); /// pulses count + lvi.SubItems.Add("---"); /// ref. pulses count + lvi.SubItems.Add("---"); /// volume + lvi.SubItems.Add("---"); /// error + lvi.SubItems.Add("---"); /// result + metersListView.Items.Add(lvi); + + ListViewItem iMain = new ListViewItem(Strings.Main); + iMain.SubItems.Add("---"); /// sensor + iMain.SubItems.Add("---"); /// pulses count + iMain.SubItems.Add(string.Empty); /// ref. pulses count + iMain.SubItems.Add("---"); /// volume + iMain.SubItems.Add(string.Empty); /// error + iMain.SubItems.Add(string.Empty); /// result + metersListView.Items.Add(iMain); + + ListViewItem iAux = new ListViewItem(Strings.Aux); + iAux.SubItems.Add("---"); /// sensor + iAux.SubItems.Add("---"); /// pulses count + iAux.SubItems.Add(string.Empty); /// ref. pulses count + iAux.SubItems.Add("---"); /// volume + iAux.SubItems.Add(string.Empty); /// error + iAux.SubItems.Add(string.Empty); /// result + metersListView.Items.Add(iAux); + } + } + } + } + + + /// + /// Called when a new procedure is selected + /// + void ResetLabelsAndTargetVals() + { + /// Target values + targetFlowLowLabel.Text = "---"; + targetFlowHighLabel.Text = "---"; + targetVolumeLabel.Text = "---"; + targetRefCountLabel.Text = "---"; + estmtdTimeLabel.Text = "---"; + + // + refFlowCmpntLabel.Text = "---"; + regValveCmpntLabel.Text = "---"; + + /// Water pressure + prInCmpntLabel.Text = "---"; + prOutCmpntLabel.Text = "---"; + + /// Water temperature + tInCmpntLabel.Text = "---"; + tOutCmpntLabel.Text = "---"; + tDivCmpntLabel.Text = "---"; + + scaleCmpntLabel.Text = "---"; + + if ((currentMetersKind == MetersKind.Single) || (currentMetersKind == MetersKind.HeatMeter)) + { + for (int i = 0; i < metersListView.Items.Count; i++) + { + metersListView.Items[i].SubItems[(int)Columns.Sensor].Text = "---"; + } + } + else if (currentMetersKind == MetersKind.Combined) + { + for (int z = 0; z < Math.Min(Config.Data.CompoundWMsCount, metersListView.Items.Count / 3); z++) + { + metersListView.Items[3 * z + 1].SubItems[(int)Columns.Sensor].Text = "---"; + metersListView.Items[3 * z + 2].SubItems[(int)Columns.Sensor].Text = "---"; + } + } + } + + + /// + /// Called when a new procedure or a new test procedure is selected + /// + void ResetReadings() + { + /// Top part + airTempLabel.Text = "---"; + airPressLabel.Text = "---"; + airHumiLabel.Text = "---"; + + refPulsesLabel.Text = "---"; + refFreqLabel.Text = "---"; + refFlowLabel.Text = "---"; + refVolumeLabel.Text = "---"; + + regValvePosLabel.Text = "---"; + tDivLabel.Text = "---"; + + tInLabel.Text = "---"; + tOutLabel.Text = "---"; + prInLabel.Text = "---"; + prOutLabel.Text = "---"; + + massLabel.Text = "---"; + massDiffLabel.Text = "---"; + volumeCtvLabel.Text = "---"; + refErrorLabel.Text = "---"; + + + if (currentMetersKind == MetersKind.Single) + { + for (int i = 0; i < metersListView.Items.Count; i++) + { + metersListView.Items[i].SubItems[(int)Columns.Pulses].Text = "---"; + metersListView.Items[i].SubItems[(int)Columns.RefPulses].Text = "---"; + metersListView.Items[i].SubItems[(int)Columns.Volume].Text = "---"; + metersListView.Items[i].SubItems[(int)Columns.Error].Text = "---"; + metersListView.Items[i].SubItems[(int)Columns.Result].Text = "---"; + } + } + else if (currentMetersKind == MetersKind.HeatMeter) + { + for (int i = 0; i < metersListView.Items.Count; i++) + { + metersListView.Items[i].SubItems[(int)Columns.Pulses].Text = "---"; + metersListView.Items[i].SubItems[(int)Columns.RefPulses].Text = "---"; + metersListView.Items[i].SubItems[(int)Columns.Volume].Text = "---"; + metersListView.Items[i].SubItems[(int)Columns.Error].Text = "---"; + metersListView.Items[i].SubItems[(int)Columns.Result].Text = "---"; + metersListView.Items[i].SubItems[(int)Columns.Energy].Text = "---"; + metersListView.Items[i].SubItems[(int)Columns.EnergyError].Text = "---"; + metersListView.Items[i].SubItems[(int)Columns.HeatMeterResult].Text = "---"; + } + } + else if (currentMetersKind == MetersKind.Combined) + { + for (int z = 0; z < Math.Min(Config.Data.CompoundWMsCount, metersListView.Items.Count / 3); z++) + { + /// Compound + metersListView.Items[3 * z].SubItems[(int)Columns.RefPulses].Text = "---"; + metersListView.Items[3 * z].SubItems[(int)Columns.Volume].Text = "---"; + metersListView.Items[3 * z].SubItems[(int)Columns.Error].Text = "---"; + metersListView.Items[3 * z].SubItems[(int)Columns.Result].Text = "---"; + + /// Main + metersListView.Items[3 * z + 1].SubItems[(int)Columns.Pulses].Text = "---"; + metersListView.Items[3 * z + 1].SubItems[(int)Columns.Volume].Text = "---"; + + /// Aux + metersListView.Items[3 * z + 2].SubItems[(int)Columns.Pulses].Text = "---"; + metersListView.Items[3 * z + 2].SubItems[(int)Columns.Volume].Text = "---"; + } + } + } + + void OnProcedureSelected(object sender, ProcedureSelectedEventArgs args) + { + UpdateCurrentMetersKind(args.Procedure.MetersKind); + ResetLabelsAndTargetVals(); + ResetReadings(); + Invalidate(); + } + + void OnTestSelected(object sender, TestSelectedEventArgs args) + { + /// Readings and target values + ResetReadings(); + + /// Target values + targetFlowLowLabel.Text = args.Test.Qfrom.ToString("F3"); + targetFlowHighLabel.Text = args.Test.Qto.ToString("F3"); + targetVolumeLabel.Text = args.Test.Volume.ToString("F1"); + targetRefCountLabel.Text = args.TotalPulses.ToString(); + estmtdTimeLabel.Text = args.Test.TstTime.ToString("F1"); + + /// Names of virtual bench components + if (args.BenchPath.PressMtrUp != null) prInCmpntLabel.Text = args.BenchPath.PressMtrUp.Name; + if (args.BenchPath.PressMtrDown != null) prOutCmpntLabel.Text = args.BenchPath.PressMtrDown.Name; + if (args.BenchPath.TempMtrUp != null) tInCmpntLabel.Text = args.BenchPath.TempMtrUp.Name; + if (args.BenchPath.TempMtrDown != null) tOutCmpntLabel.Text = args.BenchPath.TempMtrDown.Name; + if (args.OutputPath.TempDiv != null) tDivCmpntLabel.Text = args.OutputPath.TempDiv.Name; + if (args.OutputPath.FlowMeter != null) refFlowCmpntLabel.Text = args.OutputPath.FlowMeter.Name; + if (args.OutputPath.RegulValve != null) regValveCmpntLabel.Text = args.OutputPath.RegulValve.Name; + if (args.OutputPath.Scale != null) scaleCmpntLabel.Text = args.OutputPath.Scale.Name; + + if ((currentMetersKind == MetersKind.Single) || (currentMetersKind == MetersKind.HeatMeter)) + { + for (int i = 0; i < metersListView.Items.Count; i++) + { + metersListView.Items[i].SubItems[(int)Columns.Sensor].Text = (args.MetersPath.RegisterReaders[i] != null) + ? args.MetersPath.RegisterReaders[i].Cfg.Name + : string.Empty; + } + } + else if (currentMetersKind == MetersKind.Combined) + { + for (int z = 0; z < Math.Min(Config.Data.CompoundWMsCount, metersListView.Items.Count / 3); z++) + { + metersListView.Items[3 * z + 1].SubItems[(int)Columns.Sensor].Text + = ((args.MetersPath.RegisterReaders != null) && (args.MetersPath.RegisterReaders.Length > 2 * z) && (args.MetersPath.RegisterReaders[2 * z] != null)) + ? args.MetersPath.RegisterReaders[2 * z].Cfg.Name + : string.Empty; + + metersListView.Items[3 * z + 2].SubItems[(int)Columns.Sensor].Text + = ((args.MetersPath.RegisterReaders != null) && (args.MetersPath.RegisterReaders.Length > 2 * z + 1) && (args.MetersPath.RegisterReaders[2 * z + 1] != null)) + ? args.MetersPath.RegisterReaders[2 * z + 1].Cfg.Name + : string.Empty; + } + } + + if (args.FeedingPath != null && (args.FeedingPath.Pump is BenchControl.GenericDevices.IPumpFM)) + { + pumpPctTextBox.Visible = true; + pumpPctTextBox.Text = (args.FeedingPath.Pump as BenchControl.GenericDevices.IPumpFM).Power.ToString("F0") + " %"; + } + else + { + pumpPctTextBox.Visible = false; + } + } + + void OnProcessDataChanged(object sender, ProcessDataEventArgs args) + { + /// + /// Always available + /// + airTempLabel.Text = ProcessData.AmbTemp.ToString(); + airPressLabel.Text = Config.Units.ConvertTo(Config.Unit.mbar, ProcessData.AmbPress.Val).ToString("F0"); + airHumiLabel.Text = ProcessData.AmbHumi.ToString(); + + tInLabel.Text = ProcessData.TempUp.ToString(); + tOutLabel.Text = ProcessData.TempDown.ToString(); + tDivLabel.Text = ProcessData.TempDiv.ToString(); + + prInLabel.Text = ProcessData.PressUp.ToString(); + prOutLabel.Text = ProcessData.PressDown.ToString(); + + massLabel.Text = ProcessData.Mass.ToString(); + + if (args.TestPhase == Config.Entities.Progress.FlowSetting || + args.TestPhase == Config.Entities.Progress.Test) + { + /// + /// Available when setting the flow and during a test + /// + refFreqLabel.Text = ProcessData.RefFreq.ToString(); + refFlowLabel.Text = Utils.DoubleToStr(ProcessData.RefFlow.Val, 4); + } + + if (args.TestPhase == Config.Entities.Progress.Test) + { + /// + /// Available only during a test + /// + refPulsesLabel.Text = ProcessData.RefPulses.ToString(); + double refVolume = ProcessData.LtrPerRefPulse * (double)ProcessData.RefPulses; + refVolumeLabel.Text = refVolume.ToString("F2"); + + double massDiff = ProcessData.Mass.Val - ProcessData.StartMass.Val; + massDiffLabel.Text = massDiff.ToString("F3"); + double volumeCtv = 1000 * Config.Formulas.Buoyancy() * massDiff + / Config.Formulas.WaterDensityFromTempPress((ProcessData.TempUp.Val + ProcessData.TempDown.Val) / 2, + (ProcessData.PressUp.Val + ProcessData.PressDown.Val) / 2, + Program.LocalSettings.RealDensity, + Program.LocalSettings.AtTemperature); /// [kg/m3] + volumeCtvLabel.Text = volumeCtv.ToString("F2"); + double refError = Config.Formulas.ErrorFromVolumes(refVolume, volumeCtv); + refErrorLabel.Text = refError.ToString("F3"); + + if (currentMetersKind == MetersKind.Single || currentMetersKind == MetersKind.HeatMeter) + { + for (int i = 0; i < Math.Min(metersListView.Items.Count, ProcessData.RegisterReaders.Length); i++) + { + ListViewItem lvi = metersListView.Items[i]; + BenchControl.GenericDevices.IRegisterReader rr = ProcessData.RegisterReaders[i]; + if (rr != null) + { + lvi.SubItems[(int)Columns.Pulses].Text = rr.WMPulses.ToString(); + lvi.SubItems[(int)Columns.RefPulses].Text = rr.WMRefPulses.ToString(); + lvi.SubItems[(int)Columns.Volume].Text = rr.WMVolume.ToString("F1"); + lvi.SubItems[(int)Columns.Error].Text = Config.Formulas.ErrorFromVolumes(rr.WMVolume, rr.WMRefPulses * ProcessData.LtrPerRefPulse).ToString("F1"); + } + + if (currentMetersKind == MetersKind.HeatMeter) + { + /// TODO: + lvi.SubItems[(int)Columns.Energy].Text = ProcessData.Energy.Last.ToString("F1"); + lvi.SubItems[(int)Columns.EnergyError].Text = Config.Formulas.ErrorFromVolumes(rr.WMVolume, rr.WMRefPulses * ProcessData.LtrPerRefPulse).ToString("F1"); + } + } + } + else if (currentMetersKind == MetersKind.Combined) + { + for (int z = 0; z < Math.Min(Config.Data.CompoundWMsCount, metersListView.Items.Count / 3); z++) + { + BenchControl.GenericDevices.IRegisterReader rrMain = (ProcessData.RegisterReaders.Length > 2 * z) ? ProcessData.RegisterReaders[2 * z] : null; + BenchControl.GenericDevices.IRegisterReader rrAux = (ProcessData.RegisterReaders.Length > 2 * z + 1) ? ProcessData.RegisterReaders[2 * z + 1] : null; + + Double compoundVolume = 0; + if (rrMain != null) compoundVolume += rrMain.WMVolume; + if (rrAux != null) compoundVolume += rrAux.WMVolume; + + /// Compound + metersListView.Items[3 * z].SubItems[(int)Columns.RefPulses].Text = ProcessData.RefPulses.ToString(); + metersListView.Items[3 * z].SubItems[(int)Columns.Volume].Text = compoundVolume.ToString("F1"); + metersListView.Items[3 * z].SubItems[(int)Columns.Error].Text = Config.Formulas.ErrorFromVolumes(compoundVolume, refVolume).ToString("F1"); ; + + /// Main + metersListView.Items[3 * z + 1].SubItems[(int)Columns.Pulses].Text = (rrMain != null) ? rrMain.WMPulses.ToString() : string.Empty; + metersListView.Items[3 * z + 1].SubItems[(int)Columns.Volume].Text = (rrMain != null) ? rrMain.WMVolume.ToString("F1") : string.Empty; + + /// Aux + metersListView.Items[3 * z + 2].SubItems[(int)Columns.Pulses].Text = (rrAux != null) ? rrMain.WMPulses.ToString() : string.Empty; + metersListView.Items[3 * z + 2].SubItems[(int)Columns.Volume].Text = (rrAux != null) ? rrMain.WMVolume.ToString("F1") : string.Empty; + } + } + } + + //if (pumpOn != args.PumpOn || diverterToTank != args.DivToTank) + //{ + // //if (pumpOn != args.PumpOn) + // //{ + // // if (pumpOn) pumpPictureBox.Image = System.Resources. + // // else pumpPictureBox.Image = System.Resources. + // //} + // pumpOn = args.PumpOn; + // diverterToTank = args.DivToTank; + // Invalidate(); + //} + } + + void OnTestCompleted(object sender, TestCompletedEventArgs args) + { + Results.Entities.TestRslt tRes = args.TestRslt; + if (tRes == null) return; + + airTempLabel.Text = tRes.AmbTempMean.ToString("F1"); + airPressLabel.Text = Config.Units.ConvertTo(Config.Unit.mbar, tRes.AmbPressMean).ToString("F0"); + airHumiLabel.Text = tRes.AmbHumiMean.ToString("F1"); + + tInLabel.Text = tRes.TempUpMean.ToString("F2"); + tOutLabel.Text = tRes.TempDownMean.ToString("F2"); + tDivLabel.Text = tRes.TempDivMean.ToString("F2"); + + prInLabel.Text = tRes.PressUpMean.ToString("F2"); + prOutLabel.Text = tRes.PressDownMean.ToString("F2"); + + massLabel.Text = ProcessData.Mass.ToString(); + massDiffLabel.Text = (tRes.MassEnd - tRes.MassStart).ToString("F3"); + + refPulsesLabel.Text = tRes.PulsesMaster.ToString("F0"); + refFreqLabel.Text = "---"; + refFlowLabel.Text = Utils.DoubleToStr(tRes.FlowVolume, 4); + + refVolumeLabel.Text = tRes.VolumeCTV.ToString("F2"); + //regValvePosLabel.Text = tstRslt. + + volumeCtvLabel.Text = tRes.VolumeCTV.ToString("F1"); + refErrorLabel.Text = (tRes.ErrorMaster == 0) ? "---" : tRes.ErrorMaster.ToString("F3"); + + if ((currentMetersKind == MetersKind.Single) && !tRes.Batch.Compound && !tRes.Batch.HeatMeter) + { + /// + /// Test results for single meters + /// + for (int i = 0; i < Math.Min(metersListView.Items.Count, ProcessData.BatchRslts.WaterMeters.Length); i++) + { + Results.Entities.WaterMeter wm = ProcessData.BatchRslts.WaterMeters[i]; + Results.Entities.MeterTestRslt mtr = (wm != null) ? wm.GetMeterTestRslt(args.TestName) : null; + + if (mtr != null) + { + metersListView.Items[i].SubItems[(int)Columns.Pulses].Text = mtr.PulsesMeter.ToString("F0"); + metersListView.Items[i].SubItems[(int)Columns.RefPulses].Text = mtr.PulsesMaster.ToString("F0"); + metersListView.Items[i].SubItems[(int)Columns.Volume].Text = mtr.VolumeMeter.ToString("F2"); + metersListView.Items[i].SubItems[(int)Columns.Error].Text = mtr.Error.ToString("F2"); + metersListView.Items[i].SubItems[(int)Columns.Result].Text = mtr.Passed ? Strings.Passed : Strings.Failed; + } + } + } + else if ((currentMetersKind == MetersKind.HeatMeter) && tRes.Batch.HeatMeter) + { + /// + /// Test results for heat meters + /// + for (int i = 0; i < Math.Min(metersListView.Items.Count, ProcessData.BatchRslts.WaterMeters.Length); i++) + { + Results.Entities.WaterMeter wm = ProcessData.BatchRslts.WaterMeters[i]; + if (wm == null) continue; + + Results.Entities.MeterTestRslt mtrVolume = wm.GetMeterTestRslt(args.TestName, CompoundMeterId.HeatMeterVolume); + Results.Entities.MeterTestRslt mtrEnergy = wm.GetMeterTestRslt(args.TestName, CompoundMeterId.HeatMeterEnergy); + + if (mtrVolume != null) + { + metersListView.Items[i].SubItems[(int)Columns.Pulses].Text = mtrVolume.PulsesMeter.ToString("F0"); + metersListView.Items[i].SubItems[(int)Columns.RefPulses].Text = mtrVolume.PulsesMaster.ToString("F0"); + metersListView.Items[i].SubItems[(int)Columns.Volume].Text = mtrVolume.VolumeMeter.ToString("F2"); + metersListView.Items[i].SubItems[(int)Columns.Error].Text = mtrVolume.Error.ToString("F2"); + metersListView.Items[i].SubItems[(int)Columns.Result].Text = mtrVolume.Passed ? Strings.Passed : Strings.Failed; + } + + if (mtrEnergy != null) + { + metersListView.Items[i].SubItems[(int)Columns.Energy].Text = mtrEnergy.VolumeMeter.ToString("F1"); ; + metersListView.Items[i].SubItems[(int)Columns.EnergyError].Text = mtrEnergy.Error.ToString("F2"); + metersListView.Items[i].SubItems[(int)Columns.HeatMeterResult].Text = mtrEnergy.Passed ? Strings.Passed : Strings.Failed; + } + } + } + else if ((currentMetersKind == MetersKind.Combined) && tRes.Batch.Compound) + { + /// + /// Test results for compond meters + /// + for (int z = 0; z < Math.Min(Config.Data.CompoundWMsCount, metersListView.Items.Count / 3); z++) + { + Results.Entities.WaterMeter wm = ProcessData.BatchRslts.WaterMeters[z]; + if (wm == null) continue; + + Results.Entities.MeterTestRslt mtrComp = wm.GetMeterTestRslt(args.TestName, CompoundMeterId.Compound); + Results.Entities.MeterTestRslt mtrMain = wm.GetMeterTestRslt(args.TestName, CompoundMeterId.CompoundMain); + Results.Entities.MeterTestRslt mtrAux = wm.GetMeterTestRslt(args.TestName, CompoundMeterId.CompoundAux); + + if (mtrComp != null) + { + metersListView.Items[3 * z].SubItems[(int)Columns.RefPulses].Text = mtrMain.PulsesMaster.ToString("F0"); + metersListView.Items[3 * z].SubItems[(int)Columns.Volume].Text = mtrComp.VolumeMeter.ToString("F2"); + metersListView.Items[3 * z].SubItems[(int)Columns.Error].Text = mtrComp.Error.ToString("F2"); + metersListView.Items[3 * z].SubItems[(int)Columns.Result].Text = mtrComp.Passed ? Strings.Passed : Strings.Failed; + } + + if (mtrMain != null) + { + metersListView.Items[3 * z + 1].SubItems[(int)Columns.Pulses].Text = mtrMain.PulsesMeter.ToString("F0"); + metersListView.Items[3 * z + 1].SubItems[(int)Columns.Volume].Text = mtrMain.VolumeMeter.ToString("F2"); + } + + if (mtrAux != null) + { + metersListView.Items[3 * z + 2].SubItems[(int)Columns.Pulses].Text = mtrAux.PulsesMeter.ToString("F0"); + metersListView.Items[2 * z + 2].SubItems[(int)Columns.Volume].Text = mtrAux.VolumeMeter.ToString("F2"); + } + } + } + else + { + /// Mismatch between Batch.Compound, Batch.HeatMeter and currentMetersKind + } + } + + void OnProcedureCompleted(object sender, ProcedureCompletedEventArgs args) + { + } + + private void ProcessTabPageCtrl_Paint(object sender, PaintEventArgs e) + { + System.Drawing.Graphics formGraphics = this.CreateGraphics(); + + System.Drawing.SolidBrush filledBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Blue); + System.Drawing.SolidBrush emptyBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Gray); + System.Drawing.SolidBrush benchBrush = (pumpOn ? filledBrush : emptyBrush); + + int diam = 14; // pipe diameter (pixels) + int left = 20; // left-most pipe x-coordinate + int top = 14; // top-most pipe y-coordinate + int topLeft = 876; + int topRight = 966; + int divTop = 40; + int bottom = 504; // bottom-most pipe y-coordinate + int benchTop = 378; // bench-pipe top y-coordinate + int pumpLeft = 779; + int pumpWdth = 38; + + /// Pipes + formGraphics.FillRectangle(filledBrush,new Rectangle(pumpLeft+pumpWdth, bottom-diam, 65, diam)); // tank -> pump + formGraphics.FillRectangle(benchBrush, new Rectangle(left, bottom-diam, pumpLeft-left, diam)); // pump ->bench horizontal + formGraphics.FillRectangle(benchBrush, new Rectangle(left, benchTop, diam, bottom-benchTop)); // ->bench vertical + formGraphics.FillRectangle(benchBrush, new Rectangle(left + diam, benchTop, topLeft-left, diam)); // bench horizontal + formGraphics.FillRectangle(benchBrush, new Rectangle(topLeft, top + diam, diam, benchTop-top-diam)); // bench -> top vertical + formGraphics.FillRectangle(benchBrush, new Rectangle(topLeft, top, topRight-topLeft, diam)); // top horizontal + formGraphics.FillRectangle(benchBrush, new Rectangle(topRight-diam, top+diam, diam, divTop-top-diam)); // top -> diverter vertical + + /// Diverter + int displacement = diverterToTank ? 25 : -25; + Point[] points = new Point[4]; + points[0].X = topRight - diam; + points[0].Y = divTop; + points[1].X = topRight; + points[1].Y = divTop; + points[2].X = topRight + displacement; + points[2].Y = divTop + 50; + points[3].X = topRight - diam + displacement; + points[3].Y = divTop + 50; + formGraphics.FillPolygon(benchBrush, points); + + /// Sink + formGraphics.FillEllipse(emptyBrush, topRight - diam / 2 - 45, divTop + 50, 40, 30); + formGraphics.DrawEllipse(Pens.Black, topRight - diam / 2 - 45, divTop + 50, 40, 30); + + /// Tank + formGraphics.DrawRectangle(Pens.Black, topRight - diam / 2, divTop + 51, 60, 80); + + + emptyBrush.Dispose(); + filledBrush.Dispose(); + formGraphics.Dispose(); + } + + private void PaintBypass(System.Drawing.Graphics formGraphics, System.Drawing.SolidBrush brush, int startX, int startY) + { + int w = 80; + int h = 43; + int diam = 10; // pipe diameter (pixels) + + formGraphics.FillRectangle(brush, new Rectangle(startX, startY, diam, h - diam)); + formGraphics.FillRectangle(brush, new Rectangle(startX, startY + h - diam, w, diam)); + formGraphics.FillRectangle(brush, new Rectangle(startX + w - diam, startY, diam, h)); + } + } +} diff --git a/TBF/Screens/ProcessTabPageHeatMetersCtrl.resx b/TBF/Screens/ProcessTabPageExCtrl.resx similarity index 100% rename from TBF/Screens/ProcessTabPageHeatMetersCtrl.resx rename to TBF/Screens/ProcessTabPageExCtrl.resx diff --git a/TBF/Screens/ProcessTabPageHeatMetersCtrl.cs b/TBF/Screens/ProcessTabPageHeatMetersCtrl.cs deleted file mode 100644 index 10569738f..000000000 --- a/TBF/Screens/ProcessTabPageHeatMetersCtrl.cs +++ /dev/null @@ -1,520 +0,0 @@ -/// -/// Copyright (c) 2019 Sensus Slovensko a.s. -/// -using System; -using System.Drawing; -using System.Windows.Forms; -using log4net; -using Config.Entities; -using TBF.BenchControl.Sequences; -using TBF.UiBridge; -using TBF.Resources; - -#pragma warning disable 162 /// Disables 'Unreachable code detected' warning - -namespace TBF.Screens -{ - public partial class ProcessTabPageHeatMetersCtrl : UserControl - { - static readonly ILog log = LogManager.GetLogger(typeof(ProcessTabPageHeatMetersCtrl)); - - MetersKind currentMetersKind; - - int textBoxesCount; - - Label[] meter; - Label[] sensor; - Label[] pulses; - Label[] refPulses; - Label[] volume; - Label[] error; - Label[] passed; - Label[] cmpndVolume; - Label[] cmpndError; - Label[] cmpndPassed; - - bool pumpOn = true; - bool diverterToTank = true; - - /// - /// Constructor, initializes anonymous event handlers - /// - public ProcessTabPageHeatMetersCtrl() - { - currentMetersKind = MetersKind.Single; - - InitializeComponent(); - - metersListView.Columns.Add(Strings.Meter, 120); - metersListView.Columns.Add(Strings.Sensor, 120); - metersListView.Columns.Add("Pulses count", 120); - metersListView.Columns.Add("Ref. pulses count", 120); - metersListView.Columns.Add(Strings.Volume, 120); - metersListView.Columns.Add(Strings.Error, 120); - metersListView.Columns.Add(Strings.Result, 120); - - textBoxesCount = 24; - - Bridge.ProcedureSelectedHandler += delegate(object sndr, ProcedureSelectedEventArgs args) - { - try - { - if (InvokeRequired) - Invoke(new EventHandler(OnProcedureSelected), sndr, args); - else - OnProcedureSelected(sndr, args); - } - catch (Exception e) { log.ErrorFormat("ProcessTabPage24.OnProcedureSelected() failed: {0}", e.Message); } - }; - - Bridge.TestSelectedHandler += delegate(object sender, TestSelectedEventArgs args) - { - try - { - if (InvokeRequired) - Invoke(new EventHandler(OnTestSelected), sender, args); - else - OnTestSelected(sender, args); - } - catch (Exception e) { log.ErrorFormat("ProcessTabPage24.OnTestSelected() failed: {0}", e.Message); } - }; - - Bridge.ProcessDataHandler += delegate(object sender, ProcessDataEventArgs args) - { - try - { - if (InvokeRequired) - Invoke(new EventHandler(OnProcessDataChanged), sender, args); - else - OnProcessDataChanged(sender, args); - } - catch (Exception e) { log.ErrorFormat("ProcessTabPage24.OnProcessDataChanged() failed: {0}", e.Message); } - }; - - Bridge.TestCompletedHandler += delegate(object sender, TestCompletedEventArgs args) - { - try - { - if (InvokeRequired) - Invoke(new EventHandler(OnTestCompleted), sender, args); - else - OnTestCompleted(sender, args); - } - catch (Exception e) { log.ErrorFormat("ProcessTabPage24.OnTestCompleted() failed: {0}", e.Message); } - }; - - Bridge.ProcedureCompletedHandler += delegate(object sender, ProcedureCompletedEventArgs args) - { - try - { - if (InvokeRequired) - Invoke(new EventHandler(OnProcedureCompleted), sender, args); - else - OnProcedureCompleted(sender, args); - } - catch (Exception e) { log.ErrorFormat("ProcessTabPage24.OnProcedureCompleted() failed: {0}", e.Message); } - }; - } - - private void ProcessTabPageCtrl_Load(object sender, EventArgs e) - { - Once(); - ResetLabelsAndTargetVals(); - ResetReadings(); - } - - void Once() - { - - } - - void UpdateVisibility(MetersKind metersKind) - { - bool visible = (metersKind == MetersKind.Single || metersKind == MetersKind.HeatMeter); - - for (int i = 2 * Config.Data.CompoundWMsCount; i < textBoxesCount; i++) - { - meter[i].Visible = visible; - sensor[i].Visible = visible; - pulses[i].Visible = visible; - refPulses[i].Visible = visible; - volume[i].Visible = visible; - error[i].Visible = visible; - passed[i].Visible = visible; - } - } - - - /// - /// Called when a new procedure is selected - /// - void ResetLabelsAndTargetVals() - { - /// Target values - targetFlowLowLabel.Text = "---"; - targetFlowHighLabel.Text = "---"; - targetVolumeLabel.Text = "---"; - targetRefCountLabel.Text = "---"; - estmtdTimeLabel.Text = "---"; - - // - refFlowCmpntLabel.Text = "---"; - regValveCmpntLabel.Text = "---"; - - /// Water pressure - prInCmpntLabel.Text = "---"; - prOutCmpntLabel.Text = "---"; - - /// Water temperature - tInCmpntLabel.Text = "---"; - tOutCmpntLabel.Text = "---"; - tDivCmpntLabel.Text = "---"; - - scaleCmpntLabel.Text = "---"; - - watermeterPictureBox2.Visible = true; - watermeterPictureBox3.Visible = true; - watermeterPictureBox4.Visible = true; - } - - /// - /// Called when a new procedure or a new test procedure is selected - /// - void ResetReadings() - { - /// Top part - airTempLabel.Text = "---"; - airPressLabel.Text = "---"; - airHumiLabel.Text = "---"; - - refPulsesLabel.Text = "---"; - refFreqLabel.Text = "---"; - refFlowLabel.Text = "---"; - refVolumeLabel.Text = "---"; - - regValvePosLabel.Text = "---"; - tDivLabel.Text = "---"; - - tInLabel.Text = "---"; - tOutLabel.Text = "---"; - prInLabel.Text = "---"; - prOutLabel.Text = "---"; - - massLabel.Text = "---"; - massDiffLabel.Text = "---"; - volumeCtvLabel.Text = "---"; - refErrorLabel.Text = "---"; - - //for (int i = 0; i < textBoxesCount; i++) - //{ - // pulses[i].Text = "---"; - // refPulses[i].Text = "---"; - // volume[i].Text = "---"; - // error[i].Text = "---"; - // passed[i].Text = "---"; - //} - } - - void OnProcedureSelected(object sender, ProcedureSelectedEventArgs args) - { - currentMetersKind = args.Procedure.MetersKind; - UpdateVisibility(currentMetersKind); - ResetLabelsAndTargetVals(); - ResetReadings(); - Invalidate(); - } - - void OnTestSelected(object sender, TestSelectedEventArgs args) - { - /// Readings and target values - ResetReadings(); - - /// Target values - targetFlowLowLabel.Text = args.Test.Qfrom.ToString("F3"); - targetFlowHighLabel.Text = args.Test.Qto.ToString("F3"); - targetVolumeLabel.Text = args.Test.Volume.ToString("F1"); - targetRefCountLabel.Text = args.TotalPulses.ToString(); - estmtdTimeLabel.Text = args.Test.TstTime.ToString("F1"); - - /// Names of virtual bench components - if (args.BenchPath.PressMtrUp != null) prInCmpntLabel.Text = args.BenchPath.PressMtrUp.Name; - if (args.BenchPath.PressMtrDown != null) prOutCmpntLabel.Text = args.BenchPath.PressMtrDown.Name; - if (args.BenchPath.TempMtrUp != null) tInCmpntLabel.Text = args.BenchPath.TempMtrUp.Name; - if (args.BenchPath.TempMtrDown != null) tOutCmpntLabel.Text = args.BenchPath.TempMtrDown.Name; - if (args.OutputPath.TempDiv != null) tDivCmpntLabel.Text = args.OutputPath.TempDiv.Name; - if (args.OutputPath.FlowMeter != null) refFlowCmpntLabel.Text = args.OutputPath.FlowMeter.Name; - if (args.OutputPath.RegulValve != null) regValveCmpntLabel.Text = args.OutputPath.RegulValve.Name; - if (args.OutputPath.Scale != null) scaleCmpntLabel.Text = args.OutputPath.Scale.Name; - - for (int i = 0; i < textBoxesCount; i++) - { - sensor[i].Text = (args.MetersPath.RegisterReaders[i] == null) ? "" : args.MetersPath.RegisterReaders[i].Cfg.Name; - } - - if (args.FeedingPath != null && (args.FeedingPath.Pump is BenchControl.GenericDevices.IPumpFM)) - { - pumpPctTextBox.Visible = true; - pumpPctTextBox.Text = (args.FeedingPath.Pump as BenchControl.GenericDevices.IPumpFM).Power.ToString("F0") + " %"; - } - else - { - pumpPctTextBox.Visible = false; - } - } - - void OnProcessDataChanged(object sender, ProcessDataEventArgs args) - { - /// - /// Always available - /// - airTempLabel.Text = ProcessData.AmbTemp.ToString(); - airPressLabel.Text = Config.Units.ConvertTo(Config.Unit.mbar, ProcessData.AmbPress.Val).ToString("F0"); - airHumiLabel.Text = ProcessData.AmbHumi.ToString(); - - tInLabel.Text = ProcessData.TempUp.ToString(); - tOutLabel.Text = ProcessData.TempDown.ToString(); - tDivLabel.Text = ProcessData.TempDiv.ToString(); - - prInLabel.Text = ProcessData.PressUp.ToString(); - prOutLabel.Text = ProcessData.PressDown.ToString(); - - massLabel.Text = ProcessData.Mass.ToString(); - - if (args.TestPhase == Config.Entities.Progress.FlowSetting || - args.TestPhase == Config.Entities.Progress.Test) - { - /// - /// Available when setting the flow and during a test - /// - refFreqLabel.Text = ProcessData.RefFreq.ToString(); - refFlowLabel.Text = Utils.DoubleToStr(ProcessData.RefFlow.Val, 4); - } - - if (args.TestPhase == Config.Entities.Progress.Test) - { - /// - /// Available only during a test - /// - refPulsesLabel.Text = ProcessData.RefPulses.ToString(); - double refVolume = ProcessData.LtrPerRefPulse * (double)ProcessData.RefPulses; - refVolumeLabel.Text = refVolume.ToString("F2"); - - double massDiff = ProcessData.Mass.Val - ProcessData.StartMass.Val; - massDiffLabel.Text = massDiff.ToString("F3"); - double volumeCtv = 1000 * Config.Formulas.Buoyancy() * massDiff / Config.Formulas.WaterDensityFromTempPress((ProcessData.TempUp.Val + ProcessData.TempDown.Val) / 2, - (ProcessData.PressUp.Val + ProcessData.PressDown.Val) / 2, - Program.LocalSettings.RealDensity, - Program.LocalSettings.AtTemperature); /// [kg/m3] - volumeCtvLabel.Text = volumeCtv.ToString("F2"); - double refError = Config.Formulas.ErrorFromVolumes(refVolume, volumeCtv); - refErrorLabel.Text = refError.ToString("F3"); - - if (currentMetersKind == MetersKind.Single || currentMetersKind == MetersKind.HeatMeter) - { - for (int i = 0; i < Math.Min(textBoxesCount, ProcessData.RegisterReaders.Length); i++) - { - BenchControl.GenericDevices.IRegisterReader rr = ProcessData.RegisterReaders[i]; - if (rr != null) - { - pulses[i].Text = rr.WMPulses.ToString(); - refPulses[i].Text = rr.WMRefPulses.ToString(); - volume[i].Text = rr.WMVolume.ToString("F1"); - error[i].Text = Config.Formulas.ErrorFromVolumes(rr.WMVolume, rr.WMRefPulses * ProcessData.LtrPerRefPulse).ToString("F1"); - } - } - } - else if (currentMetersKind == MetersKind.Combined) - { - for (int compMtr = 0; compMtr < Config.Data.CompoundWMsCount; compMtr++) - { - int end = Math.Min(2 * compMtr + 2, Math.Min(textBoxesCount, ProcessData.RegisterReaders.Length)); - - double compoundVolume = 0; - for (int i = 2 * compMtr; i < end; i++) - { - BenchControl.GenericDevices.IRegisterReader rr = ProcessData.RegisterReaders[i]; - if (rr != null) - { - pulses[i].Text = rr.WMPulses.ToString(); - refPulses[i].Text = rr.WMRefPulses.ToString(); - volume[i].Text = rr.WMVolume.ToString("F1"); - error[i].Text = Config.Formulas.ErrorFromVolumes(rr.WMVolume, rr.WMRefPulses * ProcessData.LtrPerRefPulse).ToString("F1"); - compoundVolume += rr.WMVolume; - } - } - - cmpndVolume[compMtr].Text = compoundVolume.ToString("F1"); - cmpndError[compMtr].Text = Config.Formulas.ErrorFromVolumes(compoundVolume, refVolume).ToString("F1"); - } - } - } - - //if (pumpOn != args.PumpOn || diverterToTank != args.DivToTank) - //{ - // //if (pumpOn != args.PumpOn) - // //{ - // // if (pumpOn) pumpPictureBox.Image = System.Resources. - // // else pumpPictureBox.Image = System.Resources. - // //} - // pumpOn = args.PumpOn; - // diverterToTank = args.DivToTank; - // Invalidate(); - //} - } - - void OnTestCompleted(object sender, TestCompletedEventArgs args) - { - Results.Entities.TestRslt tRes = args.TestRslt; - if (tRes == null) return; - - airTempLabel.Text = tRes.AmbTempMean.ToString("F1"); - airPressLabel.Text = Config.Units.ConvertTo(Config.Unit.mbar, tRes.AmbPressMean).ToString("F0"); - airHumiLabel.Text = tRes.AmbHumiMean.ToString("F1"); - - tInLabel.Text = tRes.TempUpMean.ToString("F2"); - tOutLabel.Text = tRes.TempDownMean.ToString("F2"); - tDivLabel.Text = tRes.TempDivMean.ToString("F2"); - - prInLabel.Text = tRes.PressUpMean.ToString("F2"); - prOutLabel.Text = tRes.PressDownMean.ToString("F2"); - - massLabel.Text = ProcessData.Mass.ToString(); - massDiffLabel.Text = (tRes.MassEnd - tRes.MassStart).ToString("F3"); - - refPulsesLabel.Text = tRes.PulsesMaster.ToString("F0"); - refFreqLabel.Text = "---"; - refFlowLabel.Text = Utils.DoubleToStr(tRes.FlowVolume, 4); - - refVolumeLabel.Text = tRes.VolumeCTV.ToString("F2"); - //regValvePosLabel.Text = tstRslt. - - volumeCtvLabel.Text = tRes.VolumeCTV.ToString("F1"); - refErrorLabel.Text = (tRes.ErrorMaster == 0) ? "---" : tRes.ErrorMaster.ToString("F3"); - - if (!tRes.Batch.Compound) - { - for (int i = 0; i < Math.Min(textBoxesCount, ProcessData.BatchRslts.WaterMeters.Length); i++) - { - Results.Entities.WaterMeter wm = ProcessData.BatchRslts.WaterMeters[i]; - Results.Entities.MeterTestRslt mtr = (wm != null) ? wm.GetMeterTestRslt(args.TestName) : null; - - if (mtr != null) - { - pulses[i].Text = mtr.PulsesMeter.ToString("F0"); - refPulses[i].Text = mtr.PulsesMaster.ToString("F0"); - volume[i].Text = mtr.VolumeMeter.ToString("F2"); - error[i].Text = mtr.Error.ToString("F2"); - passed[i].Text = mtr.Passed ? Strings.Passed : Strings.Failed; - } - } - } - else - { - for (int compMtr = 0; compMtr < Config.Data.CompoundWMsCount; compMtr++) - { - Results.Entities.WaterMeter wm = ProcessData.BatchRslts.WaterMeters[compMtr]; - if (wm == null) continue; - - int end = Math.Min(textBoxesCount, Config.Data.WMsCount); - - Results.Entities.MeterTestRslt mtrMain = wm.GetMeterTestRslt(args.TestName, CompoundMeterId.CompoundMain); - if ((mtrMain != null) && (2 * compMtr < end)) - { - pulses[2 * compMtr].Text = mtrMain.PulsesMeter.ToString("F0"); - refPulses[2 * compMtr].Text = mtrMain.PulsesMaster.ToString("F0"); - volume[2 * compMtr].Text = mtrMain.VolumeMeter.ToString("F2"); - error[2 * compMtr].Text = mtrMain.Error.ToString("F2"); - passed[2 * compMtr].Text = mtrMain.Passed ? Strings.Passed : Strings.Failed; - } - - Results.Entities.MeterTestRslt mtrAux = wm.GetMeterTestRslt(args.TestName, CompoundMeterId.CompoundAux); - if ((mtrAux != null) && (2 * compMtr + 1 < end)) - { - pulses[2 * compMtr + 1].Text = mtrAux.PulsesMeter.ToString("F0"); - refPulses[2 * compMtr + 1].Text = mtrAux.PulsesMaster.ToString("F0"); - volume[2 * compMtr + 1].Text = mtrAux.VolumeMeter.ToString("F2"); - error[2 * compMtr + 1].Text = mtrAux.Error.ToString("F2"); - passed[2 * compMtr + 1].Text = mtrAux.Passed ? Strings.Passed : Strings.Failed; - } - - Results.Entities.MeterTestRslt mtrComp = wm.GetMeterTestRslt(args.TestName, CompoundMeterId.Compound); - if (mtrComp != null) - { - cmpndVolume[compMtr].Text = mtrComp.VolumeMeter.ToString("F2"); - cmpndError[compMtr].Text = mtrComp.Error.ToString("F2"); - cmpndPassed[compMtr].Text = mtrComp.Passed ? Strings.Passed : Strings.Failed; - } - } - } - } - - void OnProcedureCompleted(object sender, ProcedureCompletedEventArgs args) - { - } - - private void ProcessTabPageCtrl_Paint(object sender, PaintEventArgs e) - { - System.Drawing.Graphics formGraphics = this.CreateGraphics(); - - System.Drawing.SolidBrush filledBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Blue); - System.Drawing.SolidBrush emptyBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Gray); - System.Drawing.SolidBrush benchBrush = (pumpOn ? filledBrush : emptyBrush); - - int diam = 14; // pipe diameter (pixels) - int left = 20; // left-most pipe x-coordinate - int top = 14; // top-most pipe y-coordinate - int topLeft = 876; - int topRight = 966; - int divTop = 40; - int bottom = 504; // bottom-most pipe y-coordinate - int benchTop = 378; // bench-pipe top y-coordinate - int pumpLeft = 779; - int pumpWdth = 38; - - /// Pipes - formGraphics.FillRectangle(filledBrush,new Rectangle(pumpLeft+pumpWdth, bottom-diam, 65, diam)); // tank -> pump - formGraphics.FillRectangle(benchBrush, new Rectangle(left, bottom-diam, pumpLeft-left, diam)); // pump ->bench horizontal - formGraphics.FillRectangle(benchBrush, new Rectangle(left, benchTop, diam, bottom-benchTop)); // ->bench vertical - formGraphics.FillRectangle(benchBrush, new Rectangle(left + diam, benchTop, topLeft-left, diam)); // bench horizontal - formGraphics.FillRectangle(benchBrush, new Rectangle(topLeft, top + diam, diam, benchTop-top-diam)); // bench -> top vertical - formGraphics.FillRectangle(benchBrush, new Rectangle(topLeft, top, topRight-topLeft, diam)); // top horizontal - formGraphics.FillRectangle(benchBrush, new Rectangle(topRight-diam, top+diam, diam, divTop-top-diam)); // top -> diverter vertical - - /// Diverter - int displacement = diverterToTank ? 25 : -25; - Point[] points = new Point[4]; - points[0].X = topRight - diam; - points[0].Y = divTop; - points[1].X = topRight; - points[1].Y = divTop; - points[2].X = topRight + displacement; - points[2].Y = divTop + 50; - points[3].X = topRight - diam + displacement; - points[3].Y = divTop + 50; - formGraphics.FillPolygon(benchBrush, points); - - /// Sink - formGraphics.FillEllipse(emptyBrush, topRight - diam / 2 - 45, divTop + 50, 40, 30); - formGraphics.DrawEllipse(Pens.Black, topRight - diam / 2 - 45, divTop + 50, 40, 30); - - /// Tank - formGraphics.DrawRectangle(Pens.Black, topRight - diam / 2, divTop + 51, 60, 80); - - - emptyBrush.Dispose(); - filledBrush.Dispose(); - formGraphics.Dispose(); - } - - private void PaintBypass(System.Drawing.Graphics formGraphics, System.Drawing.SolidBrush brush, int startX, int startY) - { - int w = 80; - int h = 43; - int diam = 10; // pipe diameter (pixels) - - formGraphics.FillRectangle(brush, new Rectangle(startX, startY, diam, h - diam)); - formGraphics.FillRectangle(brush, new Rectangle(startX, startY + h - diam, w, diam)); - formGraphics.FillRectangle(brush, new Rectangle(startX + w - diam, startY, diam, h)); - } - } -} diff --git a/TBF/TBF.csproj b/TBF/TBF.csproj index 4d3b3ecc1..43779c15a 100644 --- a/TBF/TBF.csproj +++ b/TBF/TBF.csproj @@ -1885,11 +1885,11 @@ ProcessTabPageCtrl48.cs - + UserControl - - ProcessTabPageHeatMetersCtrl.cs + + ProcessTabPageExCtrl.cs Form @@ -2951,8 +2951,8 @@ ProcessTabPageCtrl48.cs - - ProcessTabPageHeatMetersCtrl.cs + + ProcessTabPageExCtrl.cs SelectComponentClassDlg.cs