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