Screens.ProcessTabPageHeatmetersCtrl added, ver. 2.18.1148

This commit is contained in:
Milan Hanajik
2019-02-20 11:35:57 +01:00
parent a40b4ff606
commit fd7149e263
7 changed files with 4423 additions and 5 deletions
@@ -63,8 +63,8 @@ namespace TBF.BenchControl.Keithley.Multimeter_2010_RS232
} }
/// <summary> /// <summary>
/// Ambient temperature / humidity / pressure meter 'Greco' connected via serial interface (RS232) /// Keithley mulltimeter connected via serial interface (RS232)
/// Connection settings: 19200 Bd 8-bits No-parity 1-stop-bit Flow control: none or hardware. /// Connection settings: 9600Bd 8-bits no-parity 1-stop-bit flow control: none
/// </summary> /// </summary>
public Multimeter(Generic.IComponentCfg cfg) public Multimeter(Generic.IComponentCfg cfg)
: base(cfg) : base(cfg)
+4 -1
View File
@@ -679,9 +679,12 @@ namespace TBF
#elif TURA_SPECIAL || BADGER_MALA_TRAT || BADGER_STREDNA_TRAT || BADGER_VELKA_TRAT || SLM_END || WARSAW_END || RUM_MOB || SENTEC || CEVAK_200 #elif TURA_SPECIAL || BADGER_MALA_TRAT || BADGER_STREDNA_TRAT || BADGER_VELKA_TRAT || SLM_END || WARSAW_END || RUM_MOB || SENTEC || CEVAK_200
private ControlComponent_Torino2015.UserControl1 ctrlBrdComponent; private ControlComponent_Torino2015.UserControl1 ctrlBrdComponent;
private TBF.Screens.ProcessTabPageCtrl6 processTabPageCtrl; private TBF.Screens.ProcessTabPageCtrl6 processTabPageCtrl;
#elif TORINO_50 || TORUN_50 || CEVAK_40 || MURES_40 || FUZHOU_50 || MALTA_WSD25 || SLM_50 || PETERSBURG_50 || KEMPNO_50 || BAHRAIN_50 || KRAKOW_50 || JUZNA_AFRIKA_50 || IZRAEL_25 || ZAMBIA || ZODINO || FEWA_50 || FUZHOU_100 #elif TORINO_50 || TORUN_50 || CEVAK_40 || MURES_40 || FUZHOU_50 || MALTA_WSD25 || PETERSBURG_50 || KEMPNO_50 || BAHRAIN_50 || KRAKOW_50 || JUZNA_AFRIKA_50 || IZRAEL_25 || ZAMBIA || ZODINO || FEWA_50 || FUZHOU_100
private ControlComponent_Torino2015.UserControl1 ctrlBrdComponent; private ControlComponent_Torino2015.UserControl1 ctrlBrdComponent;
private TBF.Screens.ProcessTabPageCtrl24 processTabPageCtrl; private TBF.Screens.ProcessTabPageCtrl24 processTabPageCtrl;
#elif SLM_50
private ControlComponent_Torino2015.UserControl1 ctrlBrdComponent;
private TBF.Screens.ProcessTabPageHeatMetersCtrl processTabPageCtrl;
#elif TURA_IPERL || IZRAEL_50 #elif TURA_IPERL || IZRAEL_50
private ControlComponent_Torino2015.UserControl1 ctrlBrdComponent; private ControlComponent_Torino2015.UserControl1 ctrlBrdComponent;
private TBF.Screens.ProcessTabPageCtrl48 processTabPageCtrl; private TBF.Screens.ProcessTabPageCtrl48 processTabPageCtrl;
+2 -2
View File
@@ -29,5 +29,5 @@ using System.Runtime.InteropServices;
// Build Number // Build Number
// Revision // Revision
// //
[assembly: AssemblyVersion("2.18.1147.0")] [assembly: AssemblyVersion("2.18.1148.0")]
[assembly: AssemblyFileVersion("2.18.1147.0")] [assembly: AssemblyFileVersion("2.18.1148.0")]
File diff suppressed because it is too large Load Diff
+677
View File
@@ -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 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;
/// <summary>
/// Constructor, initializes anonymous event handlers
/// </summary>
public ProcessTabPageHeatMetersCtrl()
{
currentMetersKind = MetersKind.Single;
InitializeComponent();
textBoxesCount = 24;
meter = new Label[] {
meter1Label, meter2Label, meter3Label, meter4Label, meter5Label, meter6Label,
meter7Label, meter8Label, meter9Label, meter10Label, meter11Label, meter12Label,
meter13Label, meter14Label, meter15Label, meter16Label, meter17Label, meter18Label,
meter19Label, meter20Label, meter21Label, meter22Label, meter23Label, meter24Label,
};
sensor = new Label[] {
sensor1Label, sensor2Label, sensor3Label, sensor4Label, sensor5Label, sensor6Label,
sensor7Label, sensor8Label, sensor9Label, sensor10Label, sensor11Label, sensor12Label,
sensor13Label, sensor14Label, sensor15Label, sensor16Label, sensor17Label, sensor18Label,
sensor19Label, sensor20Label, sensor21Label, sensor22Label, sensor23Label, sensor24Label,
};
pulses = new Label[] {
pulses1Label, pulses2Label, pulses3Label, pulses4Label, pulses5Label, pulses6Label,
pulses7Label, pulses8Label, pulses9Label, pulses10Label, pulses11Label, pulses12Label,
pulses13Label, pulses14Label, pulses15Label, pulses16Label, pulses17Label, pulses18Label,
pulses19Label, pulses20Label, pulses21Label, pulses22Label, pulses23Label, pulses24Label,
};
refPulses = new Label[] {
refPulses1Label, refPulses2Label, refPulses3Label, refPulses4Label, refPulses5Label, refPulses6Label,
refPulses7Label, refPulses8Label, refPulses9Label, refPulses10Label, refPulses11Label, refPulses12Label,
refPulses13Label, refPulses14Label, refPulses15Label, refPulses16Label, refPulses17Label, refPulses18Label,
refPulses19Label, refPulses20Label, refPulses21Label, refPulses22Label, refPulses23Label, refPulses24Label,
};
volume = new Label[] {
volume1Label, volume2Label, volume3Label, volume4Label, volume5Label, volume6Label,
volume7Label, volume8Label, volume9Label, volume10Label, volume11Label, volume12Label,
volume13Label, volume14Label, volume15Label, volume16Label, volume17Label, volume18Label,
volume19Label, volume20Label, volume21Label, volume22Label, volume23Label, volume24Label,
};
error = new Label[] {
error1Label, error2Label, error3Label, error4Label, error5Label, error6Label,
error7Label, error8Label, error9Label, error10Label, error11Label, error12Label,
error13Label, error14Label, error15Label, error16Label, error17Label, error18Label,
error19Label, error20Label, error21Label, error22Label, error23Label, error24Label,
};
passed = new Label[] {
passed1Label, passed2Label, passed3Label, passed4Label, passed5Label, passed6Label,
passed7Label, passed8Label, passed9Label, passed10Label, passed11Label, passed12Label,
passed13Label, passed14Label, passed15Label, passed16Label, passed17Label, passed18Label,
passed19Label, passed20Label, passed21Label, passed22Label, passed23Label, passed24Label,
};
cmpndVolume = new Label[] { volume1zLabel, volume2zLabel, volume3zLabel };
cmpndError = new Label[] { error1zLabel, error2zLabel, error3zLabel };
cmpndPassed = new Label[] { passed1zLabel, passed2zLabel, passed3zLabel };
ShuffleLabels(Config.Data.WMsCount, Config.Data.LineSize);
Bridge.ProcedureSelectedHandler += delegate(object sndr, ProcedureSelectedEventArgs args)
{
try
{
if (InvokeRequired)
Invoke(new EventHandler<ProcedureSelectedEventArgs>(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<TestSelectedEventArgs>(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<ProcessDataEventArgs>(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<TestCompletedEventArgs>(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<ProcedureCompletedEventArgs>(OnProcedureCompleted), sender, args);
else
OnProcedureCompleted(sender, args);
}
catch (Exception e) { log.ErrorFormat("ProcessTabPage24.OnProcedureCompleted() failed: {0}", e.Message); }
};
}
/// <summary>
/// Make sure the layout of labels/text boxes on the screen
/// corresponds to the layout of watermeters of the test bench.
/// Enable only used labels.
/// </summary>
/// <param name="wmsCount">Number of watermeters</param>
/// <param name="lineSize">Number of watermeters in one line</param>
void ShuffleLabels(int wmsCount, int lineSize)
{
if (wmsCount < textBoxesCount && lineSize > 0)
{
int nrLines = (wmsCount + lineSize - 1) / lineSize;
int gap = (textBoxesCount - wmsCount) / nrLines;
int dest = 0;
for (int l = 0; l < nrLines; l++)
{
for (int i = 0; i < lineSize; i++)
{
meter[dest] = meter[l * lineSize + l * gap + i];
meter[dest].Visible = true;
meter[dest].Text = string.Format("Meter {0}", dest + 1);
sensor[dest] = sensor[l * lineSize + l * gap + i];
sensor[dest].Visible = true;
pulses[dest] = pulses[l * lineSize + l * gap + i];
pulses[dest].Visible = true;
refPulses[dest] = refPulses[l * lineSize + l * gap + i];
refPulses[dest].Visible = true;
volume[dest] = volume[l * lineSize + l * gap + i];
volume[dest].Visible = true;
error[dest] = error[l * lineSize + l * gap + i];
error[dest].Visible = true;
passed[dest] = passed[l * lineSize + l * gap + i];
passed[dest].Visible = true;
dest++;
}
}
textBoxesCount = wmsCount;
}
}
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;
}
groupBox1z.Visible = (metersKind == MetersKind.Combined) && (Config.Data.CompoundWMsCount >= 1);
groupBox2z.Visible = (metersKind == MetersKind.Combined) && (Config.Data.CompoundWMsCount >= 2);
groupBox3z.Visible = (metersKind == MetersKind.Combined) && (Config.Data.CompoundWMsCount >= 3);
}
/// <summary>
/// Called when a new procedure is selected
/// </summary>
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)
{
watermeterPictureBox1.Visible = true;
watermeterPictureBox2.Visible = true;
watermeterPictureBox3.Visible = true;
watermeterPictureBox4.Visible = true;
watermeterPictureBox5.Visible = true;
watermeterPictureBox6.Visible = true;
watermeterPictureBox1z.Visible = false;
watermeterPictureBox2z.Visible = false;
watermeterPictureBox3z.Visible = false;
groupBox1z.Visible = false;
groupBox2z.Visible = false;
groupBox3z.Visible = false;
sensor1Label.Text = "---";
for (int i = 0; i < textBoxesCount; i++)
{
sensor[i].Text = "---";
}
}
else if (currentMetersKind == MetersKind.Combined)
{
watermeterPictureBox1.Visible = false;
watermeterPictureBox2.Visible = true;
watermeterPictureBox3.Visible = false;
watermeterPictureBox4.Visible = false;
watermeterPictureBox5.Visible = false;
watermeterPictureBox6.Visible = false;
watermeterPictureBox1z.Visible = true;
watermeterPictureBox2z.Visible = false;
watermeterPictureBox3z.Visible = false;
groupBox1z.Visible = true;
groupBox2z.Visible = false;
groupBox3z.Visible = false;
sensor1Label.Visible = true;
sensor1Label.Text = "---";
sensor2Label.Visible = true;
sensor2Label.Text = "---";
}
}
/// <summary>
/// Called when a new procedure or a new test procedure is selected
/// </summary>
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 = "---";
/// Meters
pulses1Label.Text = "---";
refPulses1Label.Text = "---";
volume1Label.Text = "---";
error1Label.Text = "---";
passed1Label.Text = "---";
if (currentMetersKind == MetersKind.Single || currentMetersKind == MetersKind.HeatMeter)
{
for (int i = 0; i < textBoxesCount; i++)
{
pulses[i].Text = "---";
refPulses[i].Text = "---";
volume[i].Text = "---";
error[i].Text = "---";
passed[i].Text = "---";
}
}
else if (currentMetersKind == MetersKind.Combined)
{
for (int i = 0; i < 2; i++)
{
pulses[i].Text = "---";
refPulses[i].Text = "---";
volume[i].Text = "---";
error[i].Text = "---";
passed[i].Text = "---";
}
volume1zLabel.Text = "---";
error1zLabel.Text = "---";
passed1zLabel.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
/// Combined meters bypasses
if (watermeterPictureBox1z.Visible) PaintBypass(formGraphics, benchBrush, 186, benchTop + diam);
if (watermeterPictureBox2z.Visible) PaintBypass(formGraphics, benchBrush, 470, benchTop + diam);
if (watermeterPictureBox3z.Visible) PaintBypass(formGraphics, benchBrush, 754, benchTop + diam);
/// 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));
}
}
}
@@ -0,0 +1,327 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="reservoirPictureBox.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAI4AAABtCAYAAAB3LVkkAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADrwAAA68AZW8ckkAAAEuSURBVHhe7dIxDoAwEAQx/v/pQFJQBaRM7ZN8zbZzPTcg
mG/AAeGQCIdEOCTCIREOiXBIhEMiHBLhkAiHRDgkwiERDolwSIRDIhwS4ZAIh0Q4JMIhEQ6JcEiEQyIc
EuGQCIdEOCTCIREOiXBIhEMiHBLhkAiHRDgkwiERDolwSIRDIhwS4ZAIh0Q4JMIhEQ6JcEiEQyIcEuGQ
CIdEOCTCIREOiXBIhEMiHBLhkAiHRDgkwiERDolwSIRDIhwS4ZAIh0Q4JMIhEQ6JcEiEQyIcEuGQCIdE
OCTCIREOiXBIhEMiHJIVzm6AP8IhEQ6JcEiEQyIcEuGQCIdEOCTCIREOiXBIhEMiHBLhkKxw5tuN8EU4
JMIhEQ6JcEiEQyIcEuGQCIdEOCTCIXnDgRPXuAF1p5ji1T6jKwAAAABJRU5ErkJggg==
</value>
</data>
<data name="pumpPictureBox.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAACYAAAAmCAYAAACoPemuAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADrwAAA68AZW8ckkAAALTSURBVFhH7Ze9ajJBFIbXP0iRBAL+QMDa3hRqIbkAQSw1
iCRaWHgHuQBLwU7SpLBKaRmSXhOwScQmZW5AUqWb7Lt6ds7uHmMkO3x8kOKBXefMOw/O7jLHWq1W6jdE
IhFlWVYAqXYf9hbLZDIOXKJUKqlms+nCx+LxuFM/Ho/FvG38SGw6napGo+FZsN/v/4hqterOSaVSqtfr
iWv42SlWLBY9QoQkIcHFOMvlUlyP+FYsl8uJoUCSkNgmhi2W1iREsdFopMrlshtycmLZW2Cp62sdLElI
cLH7e0tdXOiMWCymKpVKYH0ginGp01NLKbXmt2KUc35uqcNDnTWfzwMOATG+fbe3OixMMfD+rrPwz/k9
PGL8Qef/FBGmGHh+1nl45haLRVAMnwQqwjPlDwFhiwFsK40PBoOgGP9O4UGXQkyIARoHATEaaLflycCU
GN5WqqnX6+Sjf4zFLPX0JE8GpsRALqezN+iboyN5EmFS7PFRZ2/QN9IEjkkxcHys8230jVTM+SdijYZc
zDEt9vGh823WF62WXMwxLQao1mZ98Se2A6q1WV/8ie2Aam30jVTIMS32f33HwM2NPIEwKYaD48GBzrfQ
80WjUecGx93PT3kiMCl2d6ezHXDEQDNKPzw8yBOBSTGqKRQKajKZ6PNYMpl0B3E+kiabEiuVdO5wOPQe
FNEh0yBaLCnAhNjbm85MJBKOi0fMudkUAJzF/SFhi728oAnRmbPZTBZD2w5rFOFFwJvCg8IWu7zUea1W
y/UAHjECfR5NQItFQWGJvb5a6upKZ7Xb7YCDKIa2nSYB2tYwxPBM8e0DkoMoBtC2838OnJ3pa0lCgovx
tw90Oh1xbbBVjECHzMMISUKCi3H8z5SfnWJo29Eh+4MlCQm/GF4u/vZtY6cYB80oLZDP51263a5Hho9l
s1mnHl90+nj+hL3EOOl02oFE/dB4rVYT53/PSn0BMb7xlEsaQlIAAAAASUVORK5CYII=
</value>
</data>
<data name="watermeterPictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAACYAAAAeCAYAAABAFGxuAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADrwAAA68AZW8ckkAAAIGSURBVFhH7de/SwJhGAfwtwJpUlBwaVIEcXDVxcUxQaS1
QdLVwTnQv0AcGgUdo9U1dNAWHVwiEQKFaAkCwZqq5el53rvT03v8cXqeDQ0fjXu97/PFO+w9MZlMYFO1
Wg2EEJbg8vX+iy3i8vW2KHaEznbkgm63C6PRiJ1DtijmQLCjMRLg8/mgUqmwsw5UTEN5UfD7/ZDL5eZm
mSqWz+cxyMpimhZS7r12uy1n4d/GG3O5Y8QFWyWCTpCcRy8lRK3XeUJcoJVGaFrsXj34V9hYrFrtQSj0
wa4Z2VgsGh1Dq9WS79z6PBuLkUbjQZZLJN7Y9ZkVxYrFgQzZl3j83TBz5oDFms02uN3fhrmKAxbzer8M
M2dWFNsH7R4Lh+mXnf+MwsZi6fSLLBUMfrLr82wsVio9ssd5NhYzZ1rsEhXVg4dA3ybN12CnSCQCRCkY
UP0gLmAfnpGQHfQM+zGlIO257hAXZLUMJJPJuQ6yx+KBfr+P/3CreAIVTOoC9uEK8Q8mS3ew5XIZYrEY
nuhCN2qQlQZIQL1eZ+ev3VoHAgFwOOjSXqNXNXRXSqlOp8POJBvt+Xu9ngwS4lQN3oVy+egJybLHt2w2
K0OFOFeHmJFByn5+2eXTM1WMDIdD8Hg8coAQtyquCKGfHVq/kOekUik2k2O6mKZQKOBAKrea0+nE7Y2b
zVhuAr/Ce2bVcGWw1gAAAABJRU5ErkJggg==
</value>
</data>
<data name="watermeterPictureBox2.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAACYAAAAeCAYAAABAFGxuAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADrwAAA68AZW8ckkAAAIGSURBVFhH7de/SwJhGAfwtwJpUlBwaVIEcXDVxcUxQaS1
QdLVwTnQv0AcGgUdo9U1dNAWHVwiEQKFaAkCwZqq5el53rvT03v8cXqeDQ0fjXu97/PFO+w9MZlMYFO1
Wg2EEJbg8vX+iy3i8vW2KHaEznbkgm63C6PRiJ1DtijmQLCjMRLg8/mgUqmwsw5UTEN5UfD7/ZDL5eZm
mSqWz+cxyMpimhZS7r12uy1n4d/GG3O5Y8QFWyWCTpCcRy8lRK3XeUJcoJVGaFrsXj34V9hYrFrtQSj0
wa4Z2VgsGh1Dq9WS79z6PBuLkUbjQZZLJN7Y9ZkVxYrFgQzZl3j83TBz5oDFms02uN3fhrmKAxbzer8M
M2dWFNsH7R4Lh+mXnf+MwsZi6fSLLBUMfrLr82wsVio9ssd5NhYzZ1rsEhXVg4dA3ybN12CnSCQCRCkY
UP0gLmAfnpGQHfQM+zGlIO257hAXZLUMJJPJuQ6yx+KBfr+P/3CreAIVTOoC9uEK8Q8mS3ew5XIZYrEY
nuhCN2qQlQZIQL1eZ+ev3VoHAgFwOOjSXqNXNXRXSqlOp8POJBvt+Xu9ngwS4lQN3oVy+egJybLHt2w2
K0OFOFeHmJFByn5+2eXTM1WMDIdD8Hg8coAQtyquCKGfHVq/kOekUik2k2O6mKZQKOBAKrea0+nE7Y2b
zVhuAr/Ce2bVcGWw1gAAAABJRU5ErkJggg==
</value>
</data>
<data name="watermeterPictureBox3.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAACYAAAAeCAYAAABAFGxuAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADrwAAA68AZW8ckkAAAIGSURBVFhH7de/SwJhGAfwtwJpUlBwaVIEcXDVxcUxQaS1
QdLVwTnQv0AcGgUdo9U1dNAWHVwiEQKFaAkCwZqq5el53rvT03v8cXqeDQ0fjXu97/PFO+w9MZlMYFO1
Wg2EEJbg8vX+iy3i8vW2KHaEznbkgm63C6PRiJ1DtijmQLCjMRLg8/mgUqmwsw5UTEN5UfD7/ZDL5eZm
mSqWz+cxyMpimhZS7r12uy1n4d/GG3O5Y8QFWyWCTpCcRy8lRK3XeUJcoJVGaFrsXj34V9hYrFrtQSj0
wa4Z2VgsGh1Dq9WS79z6PBuLkUbjQZZLJN7Y9ZkVxYrFgQzZl3j83TBz5oDFms02uN3fhrmKAxbzer8M
M2dWFNsH7R4Lh+mXnf+MwsZi6fSLLBUMfrLr82wsVio9ssd5NhYzZ1rsEhXVg4dA3ybN12CnSCQCRCkY
UP0gLmAfnpGQHfQM+zGlIO257hAXZLUMJJPJuQ6yx+KBfr+P/3CreAIVTOoC9uEK8Q8mS3ew5XIZYrEY
nuhCN2qQlQZIQL1eZ+ev3VoHAgFwOOjSXqNXNXRXSqlOp8POJBvt+Xu9ngwS4lQN3oVy+egJybLHt2w2
K0OFOFeHmJFByn5+2eXTM1WMDIdD8Hg8coAQtyquCKGfHVq/kOekUik2k2O6mKZQKOBAKrea0+nE7Y2b
zVhuAr/Ce2bVcGWw1gAAAABJRU5ErkJggg==
</value>
</data>
<data name="watermeterPictureBox4.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAACYAAAAeCAYAAABAFGxuAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADrwAAA68AZW8ckkAAAIGSURBVFhH7de/SwJhGAfwtwJpUlBwaVIEcXDVxcUxQaS1
QdLVwTnQv0AcGgUdo9U1dNAWHVwiEQKFaAkCwZqq5el53rvT03v8cXqeDQ0fjXu97/PFO+w9MZlMYFO1
Wg2EEJbg8vX+iy3i8vW2KHaEznbkgm63C6PRiJ1DtijmQLCjMRLg8/mgUqmwsw5UTEN5UfD7/ZDL5eZm
mSqWz+cxyMpimhZS7r12uy1n4d/GG3O5Y8QFWyWCTpCcRy8lRK3XeUJcoJVGaFrsXj34V9hYrFrtQSj0
wa4Z2VgsGh1Dq9WS79z6PBuLkUbjQZZLJN7Y9ZkVxYrFgQzZl3j83TBz5oDFms02uN3fhrmKAxbzer8M
M2dWFNsH7R4Lh+mXnf+MwsZi6fSLLBUMfrLr82wsVio9ssd5NhYzZ1rsEhXVg4dA3ybN12CnSCQCRCkY
UP0gLmAfnpGQHfQM+zGlIO257hAXZLUMJJPJuQ6yx+KBfr+P/3CreAIVTOoC9uEK8Q8mS3ew5XIZYrEY
nuhCN2qQlQZIQL1eZ+ev3VoHAgFwOOjSXqNXNXRXSqlOp8POJBvt+Xu9ngwS4lQN3oVy+egJybLHt2w2
K0OFOFeHmJFByn5+2eXTM1WMDIdD8Hg8coAQtyquCKGfHVq/kOekUik2k2O6mKZQKOBAKrea0+nE7Y2b
zVhuAr/Ce2bVcGWw1gAAAABJRU5ErkJggg==
</value>
</data>
<data name="watermeterPictureBox5.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAACYAAAAeCAYAAABAFGxuAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADrwAAA68AZW8ckkAAAIGSURBVFhH7de/SwJhGAfwtwJpUlBwaVIEcXDVxcUxQaS1
QdLVwTnQv0AcGgUdo9U1dNAWHVwiEQKFaAkCwZqq5el53rvT03v8cXqeDQ0fjXu97/PFO+w9MZlMYFO1
Wg2EEJbg8vX+iy3i8vW2KHaEznbkgm63C6PRiJ1DtijmQLCjMRLg8/mgUqmwsw5UTEN5UfD7/ZDL5eZm
mSqWz+cxyMpimhZS7r12uy1n4d/GG3O5Y8QFWyWCTpCcRy8lRK3XeUJcoJVGaFrsXj34V9hYrFrtQSj0
wa4Z2VgsGh1Dq9WS79z6PBuLkUbjQZZLJN7Y9ZkVxYrFgQzZl3j83TBz5oDFms02uN3fhrmKAxbzer8M
M2dWFNsH7R4Lh+mXnf+MwsZi6fSLLBUMfrLr82wsVio9ssd5NhYzZ1rsEhXVg4dA3ybN12CnSCQCRCkY
UP0gLmAfnpGQHfQM+zGlIO257hAXZLUMJJPJuQ6yx+KBfr+P/3CreAIVTOoC9uEK8Q8mS3ew5XIZYrEY
nuhCN2qQlQZIQL1eZ+ev3VoHAgFwOOjSXqNXNXRXSqlOp8POJBvt+Xu9ngwS4lQN3oVy+egJybLHt2w2
K0OFOFeHmJFByn5+2eXTM1WMDIdD8Hg8coAQtyquCKGfHVq/kOekUik2k2O6mKZQKOBAKrea0+nE7Y2b
zVhuAr/Ce2bVcGWw1gAAAABJRU5ErkJggg==
</value>
</data>
<data name="watermeterPictureBox6.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAACYAAAAeCAYAAABAFGxuAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADrwAAA68AZW8ckkAAAIGSURBVFhH7de/SwJhGAfwtwJpUlBwaVIEcXDVxcUxQaS1
QdLVwTnQv0AcGgUdo9U1dNAWHVwiEQKFaAkCwZqq5el53rvT03v8cXqeDQ0fjXu97/PFO+w9MZlMYFO1
Wg2EEJbg8vX+iy3i8vW2KHaEznbkgm63C6PRiJ1DtijmQLCjMRLg8/mgUqmwsw5UTEN5UfD7/ZDL5eZm
mSqWz+cxyMpimhZS7r12uy1n4d/GG3O5Y8QFWyWCTpCcRy8lRK3XeUJcoJVGaFrsXj34V9hYrFrtQSj0
wa4Z2VgsGh1Dq9WS79z6PBuLkUbjQZZLJN7Y9ZkVxYrFgQzZl3j83TBz5oDFms02uN3fhrmKAxbzer8M
M2dWFNsH7R4Lh+mXnf+MwsZi6fSLLBUMfrLr82wsVio9ssd5NhYzZ1rsEhXVg4dA3ybN12CnSCQCRCkY
UP0gLmAfnpGQHfQM+zGlIO257hAXZLUMJJPJuQ6yx+KBfr+P/3CreAIVTOoC9uEK8Q8mS3ew5XIZYrEY
nuhCN2qQlQZIQL1eZ+ev3VoHAgFwOOjSXqNXNXRXSqlOp8POJBvt+Xu9ngwS4lQN3oVy+egJybLHt2w2
K0OFOFeHmJFByn5+2eXTM1WMDIdD8Hg8coAQtyquCKGfHVq/kOekUik2k2O6mKZQKOBAKrea0+nE7Y2b
zVhuAr/Ce2bVcGWw1gAAAABJRU5ErkJggg==
</value>
</data>
<data name="flowMeterPictureBox.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAACYAAAAmCAYAAACoPemuAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADrwAAA68AZW8ckkAAAN+SURBVFhHtZi5SgRBEIbbW8QjkRXBKxPWEwRF1EjQSBDE
RFBxDdRdEDxBUDDyJXwBH8DAzNxQQdDIR9g3aOfv3emp6qkd5zL4PHqqqn/6qO5qVa1WdVwqlYpWSqVG
iumztrZm2NraqtlLRo3IW9j6+rphZGQkbO8aS3x8fOiDg4Owc0ImJib04+OjjYvR8Tk5OeH2VIBEuVzm
DqC9XauODq3u76MZH6/Zuf4en5+f+ufnx7Czs8O+tba2RgsbR2DiYNjb0+ruThbSCPj097M46ByiNjY2
WPvKyopZa6Kwl5cXY2AdOju1mp+XO03C7q5WU1NMiM/g4KD++vrSs7OzjYUxUZg2qZMsjI0xUT09PXZa
8T80hISFpu/8XA6ehclJ1kdLS0u0MLbQMVL/IWpxMeiD0Oktl+/vb6vFCkNKsIZYU1LQrFBRXV21NjKt
T09PYWEsT+Wx0F28HGbjg+vr4BtpDwmjH1nAPFhYCGJjpKgogIGofz87OwuEsV2InEOdsrK0FMT2dp9o
A3wbDytsYGCg1ogFf3srO6bB2X3q5ka2A9vb1s4Ks45xjpm4zM0FcbGZrq5kO5/9fWtfLBYdYZJDGpaX
g5i9vbKNRP1cLRQKWnV3d+crbHo6iAeSLI26sKamJvwmQSTjJHjnnI2FG8LFhWzXCH4TsX/IxnGhO7uv
T7b5C1HYzIxsHAc6UkCyiUOuI+ZeY5JOHyU3YXT3pZ0+ChWWOl3QPIWFLtkkpS7MpAsmDHcxycHFzeiX
l7JdEo6PtWpuNvGssC4crOgAiiUnCj37kDzzOsJI5n94eKgJGxoaCjqLOsTpLSHvO5sf18PMIn68vr4G
H1DNSI7u9P119iUBxUc9LgoRKwyYg9PvFNUMdaQ3T1xdom4JaSAz9vz8zIWhQrad47zznaTrcJ6cntr4
o6OjRgsTZv7xBQDPKPI6nAcofuo7Eby/v8vCULa3tbVxMUC6DmcFy4X0sedtOqqFCbONxMEgBc6C8x5S
KpXCGtwG9y3BgGmVOkgD1hSZPuBqAEwYfXVB2Y4KmQbIVNYhJQwPs3iHh4dMDMUKo+9TeODw21Eh02AG
FA7I1JIAytERy+gUd025GGGbm5vMCa8uvgHKdlTI9LsFR1gUzpQBpAS6+xqh7JunR4cX7O3tTTQEq6ur
rJOk+MkzDp59zYlOXyP+83GYU9W/sZE2jpG87/4AAAAASUVORK5CYII=
</value>
</data>
<data name="pictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAACYAAAAjCAYAAAD48HgdAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADrwAAA68AZW8ckkAAAN0SURBVFhHxZg5SDNBGIZHiTZBEA9UEESE2ARvxIMIVuJV
qY0iKoithSBok87CIFgZwUIQlEDEo7EQBRuJKNiYSsFSsDJaeRTf7zvLbvb4drObqH/xNNmZ93symWsj
UqkU6RkeHiYhxH9B72ERA1NTU2zH3+T29tbgwIqdnp7KxvPzgoh+j89PQUVFgmZnZy0OrBg4OzuTcuEw
H5orT0/KSE1OTrL1bcXAxcWF7Hxzw4fnAnILCwvZusBRDAQCARny9sYXyIbVVWcpkFEMBINBKijgi3hl
eVkZrYeHB7aWiisxdb5VVvLF3ILFhJyRkRG2jh5XYiAej8vQtTW+qBuqqwUNDQ2x+WZci4GlpSUpt7nJ
F7bj40NQcbGg/v5+NpfDkxhoaGiQcqkUL8GB9kofPpPDsxioqKiQhd7feRE9h4eC8vPz6erqSuu/sbFB
VVVVEp/Pp4mD7u5u2SYrsUQiIUP8fl5GZXtbKZZMJi0ZJycn37t+kZRWpe7u7rTnWYmBo6MjGeY03/C8
tbVV6zM3N0dtbW2aiMri4qL8svr8rMWAWiQWs0oFg4La29tpfHycxsbGDCItLS20srIin4XDYTY7JzFQ
X18vix0cpKUCAeOIgNHRUZqentb6mUfITM5ioLa2lpqarDJYJJ2dnWyfTGQthvsTMMuocH284Flsd3eX
SktLKS8vzyLz/CyorOwPxSYmJqirq8sigom7t7cnf8re3vQcwzN8xmW5xVZsZmZGHracTCQS0dph8vf0
pKUAFgLa4pk+0wsGMezIjY2NFpm+vj65tPVtQU1NDYVCRikVbCHou7W1ZennBoOYuvQBNkanm8Dx8bFs
hyOHEwN1dUoWNmMuwwmDWHNzM0WjUUMDDvV+lkjwQnpwbPn9fnp8fGSz7HA1+fXEYjEplUzyImZw0KM9
9jQuzw7PYpiD5eWCvr54EY54XJHDlYnL5PAk1tHR8T0P+eKZiEYVOYw4l23GtRjOOgRzRd0yMKDI7e/v
szX0uBI7Pz+XgevrfEEv4IUGWVwdPRnF7u/vZdDODl8oG3w+XIuCbD0VR7HLy0t5JuqvND/B66syaniZ
5uoCR7FQKCQDXl74ArkQiSjvAtfX12xtW7HBwUEqKfG2LXgFf9jgi2PDNtdnxRYWFmQHnHe/jd1isIip
b0B/Df4sTHuk6B/rrIep2LXHGgAAAABJRU5ErkJggg==
</value>
</data>
<data name="watermeterPictureBox1z.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAACYAAAAeCAYAAABAFGxuAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADrwAAA68AZW8ckkAAAIGSURBVFhH7de/SwJhGAfwtwJpUlBwaVIEcXDVxcUxQaS1
QdLVwTnQv0AcGgUdo9U1dNAWHVwiEQKFaAkCwZqq5el53rvT03v8cXqeDQ0fjXu97/PFO+w9MZlMYFO1
Wg2EEJbg8vX+iy3i8vW2KHaEznbkgm63C6PRiJ1DtijmQLCjMRLg8/mgUqmwsw5UTEN5UfD7/ZDL5eZm
mSqWz+cxyMpimhZS7r12uy1n4d/GG3O5Y8QFWyWCTpCcRy8lRK3XeUJcoJVGaFrsXj34V9hYrFrtQSj0
wa4Z2VgsGh1Dq9WS79z6PBuLkUbjQZZLJN7Y9ZkVxYrFgQzZl3j83TBz5oDFms02uN3fhrmKAxbzer8M
M2dWFNsH7R4Lh+mXnf+MwsZi6fSLLBUMfrLr82wsVio9ssd5NhYzZ1rsEhXVg4dA3ybN12CnSCQCRCkY
UP0gLmAfnpGQHfQM+zGlIO257hAXZLUMJJPJuQ6yx+KBfr+P/3CreAIVTOoC9uEK8Q8mS3ew5XIZYrEY
nuhCN2qQlQZIQL1eZ+ev3VoHAgFwOOjSXqNXNXRXSqlOp8POJBvt+Xu9ngwS4lQN3oVy+egJybLHt2w2
K0OFOFeHmJFByn5+2eXTM1WMDIdD8Hg8coAQtyquCKGfHVq/kOekUik2k2O6mKZQKOBAKrea0+nE7Y2b
zVhuAr/Ce2bVcGWw1gAAAABJRU5ErkJggg==
</value>
</data>
<data name="watermeterPictureBox2z.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAACYAAAAeCAYAAABAFGxuAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADrwAAA68AZW8ckkAAAIGSURBVFhH7de/SwJhGAfwtwJpUlBwaVIEcXDVxcUxQaS1
QdLVwTnQv0AcGgUdo9U1dNAWHVwiEQKFaAkCwZqq5el53rvT03v8cXqeDQ0fjXu97/PFO+w9MZlMYFO1
Wg2EEJbg8vX+iy3i8vW2KHaEznbkgm63C6PRiJ1DtijmQLCjMRLg8/mgUqmwsw5UTEN5UfD7/ZDL5eZm
mSqWz+cxyMpimhZS7r12uy1n4d/GG3O5Y8QFWyWCTpCcRy8lRK3XeUJcoJVGaFrsXj34V9hYrFrtQSj0
wa4Z2VgsGh1Dq9WS79z6PBuLkUbjQZZLJN7Y9ZkVxYrFgQzZl3j83TBz5oDFms02uN3fhrmKAxbzer8M
M2dWFNsH7R4Lh+mXnf+MwsZi6fSLLBUMfrLr82wsVio9ssd5NhYzZ1rsEhXVg4dA3ybN12CnSCQCRCkY
UP0gLmAfnpGQHfQM+zGlIO257hAXZLUMJJPJuQ6yx+KBfr+P/3CreAIVTOoC9uEK8Q8mS3ew5XIZYrEY
nuhCN2qQlQZIQL1eZ+ev3VoHAgFwOOjSXqNXNXRXSqlOp8POJBvt+Xu9ngwS4lQN3oVy+egJybLHt2w2
K0OFOFeHmJFByn5+2eXTM1WMDIdD8Hg8coAQtyquCKGfHVq/kOekUik2k2O6mKZQKOBAKrea0+nE7Y2b
zVhuAr/Ce2bVcGWw1gAAAABJRU5ErkJggg==
</value>
</data>
<data name="watermeterPictureBox3z.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAACYAAAAeCAYAAABAFGxuAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADrwAAA68AZW8ckkAAAIGSURBVFhH7de/SwJhGAfwtwJpUlBwaVIEcXDVxcUxQaS1
QdLVwTnQv0AcGgUdo9U1dNAWHVwiEQKFaAkCwZqq5el53rvT03v8cXqeDQ0fjXu97/PFO+w9MZlMYFO1
Wg2EEJbg8vX+iy3i8vW2KHaEznbkgm63C6PRiJ1DtijmQLCjMRLg8/mgUqmwsw5UTEN5UfD7/ZDL5eZm
mSqWz+cxyMpimhZS7r12uy1n4d/GG3O5Y8QFWyWCTpCcRy8lRK3XeUJcoJVGaFrsXj34V9hYrFrtQSj0
wa4Z2VgsGh1Dq9WS79z6PBuLkUbjQZZLJN7Y9ZkVxYrFgQzZl3j83TBz5oDFms02uN3fhrmKAxbzer8M
M2dWFNsH7R4Lh+mXnf+MwsZi6fSLLBUMfrLr82wsVio9ssd5NhYzZ1rsEhXVg4dA3ybN12CnSCQCRCkY
UP0gLmAfnpGQHfQM+zGlIO257hAXZLUMJJPJuQ6yx+KBfr+P/3CreAIVTOoC9uEK8Q8mS3ew5XIZYrEY
nuhCN2qQlQZIQL1eZ+ev3VoHAgFwOOjSXqNXNXRXSqlOp8POJBvt+Xu9ngwS4lQN3oVy+egJybLHt2w2
K0OFOFeHmJFByn5+2eXTM1WMDIdD8Hg8coAQtyquCKGfHVq/kOekUik2k2O6mKZQKOBAKrea0+nE7Y2b
zVhuAr/Ce2bVcGWw1gAAAABJRU5ErkJggg==
</value>
</data>
</root>
+7
View File
@@ -1879,6 +1879,10 @@
<Compile Include="Screens\ProcessTabPageCtrl48.Designer.cs"> <Compile Include="Screens\ProcessTabPageCtrl48.Designer.cs">
<DependentUpon>ProcessTabPageCtrl48.cs</DependentUpon> <DependentUpon>ProcessTabPageCtrl48.cs</DependentUpon>
</Compile> </Compile>
<Compile Include="Screens\ProcessTabPageHeatMetersCtrl.cs" />
<Compile Include="Screens\ProcessTabPageHeatMetersCtrl.Designer.cs">
<DependentUpon>ProcessTabPageHeatMetersCtrl.cs</DependentUpon>
</Compile>
<Compile Include="SelectComponentClassDlg.cs"> <Compile Include="SelectComponentClassDlg.cs">
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>
@@ -2936,6 +2940,9 @@
<EmbeddedResource Include="Screens\ProcessTabPageCtrl48.resx"> <EmbeddedResource Include="Screens\ProcessTabPageCtrl48.resx">
<DependentUpon>ProcessTabPageCtrl48.cs</DependentUpon> <DependentUpon>ProcessTabPageCtrl48.cs</DependentUpon>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="Screens\ProcessTabPageHeatMetersCtrl.resx">
<DependentUpon>ProcessTabPageHeatMetersCtrl.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="SelectComponentClassDlg.pl.resx"> <EmbeddedResource Include="SelectComponentClassDlg.pl.resx">
<DependentUpon>SelectComponentClassDlg.cs</DependentUpon> <DependentUpon>SelectComponentClassDlg.cs</DependentUpon>
</EmbeddedResource> </EmbeddedResource>