686 lines
27 KiB
C#
686 lines
27 KiB
C#
///
|
|
/// Copyright (c) 2015 Sensus Metering Systems
|
|
/// Author: Milan Hanajík
|
|
///
|
|
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 ProcessTabPageCtrl48 : UserControl
|
|
{
|
|
static readonly ILog log = LogManager.GetLogger(typeof(ProcessTabPageCtrl48));
|
|
|
|
MetersKind currentMetersKind;
|
|
|
|
int textBoxesCount;
|
|
|
|
Label[] meter;
|
|
Label[] sensor;
|
|
Label[] pulses;
|
|
Label[] refPulses;
|
|
Label[] volume;
|
|
Label[] error;
|
|
Label[] passed;
|
|
|
|
bool pumpOn = true;
|
|
bool diverterToTank = true;
|
|
|
|
/// <summary>
|
|
/// Constructor, initializes anonymous event handlers
|
|
/// </summary>
|
|
public ProcessTabPageCtrl48()
|
|
{
|
|
currentMetersKind = MetersKind.Single;
|
|
|
|
InitializeComponent();
|
|
|
|
textBoxesCount = 40;
|
|
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, meter25Label,
|
|
meter26Label, meter27Label, meter28Label, meter29Label, meter30Label,
|
|
meter31Label, meter32Label, meter33Label, meter34Label, meter35Label,
|
|
meter36Label, meter37Label, meter38Label, meter39Label, meter40Label,
|
|
};
|
|
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, sensor25Label,
|
|
sensor26Label, sensor27Label, sensor28Label, sensor29Label, sensor30Label,
|
|
sensor31Label, sensor32Label, sensor33Label, sensor34Label, sensor35Label,
|
|
sensor36Label, sensor37Label, sensor38Label, sensor39Label, sensor40Label,
|
|
};
|
|
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, pulses25Label,
|
|
pulses26Label, pulses27Label, pulses28Label, pulses29Label, pulses30Label,
|
|
pulses31Label, pulses32Label, pulses33Label, pulses34Label, pulses35Label,
|
|
pulses36Label, pulses37Label, pulses38Label, pulses39Label, pulses40Label,
|
|
};
|
|
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, refPulses25Label,
|
|
refPulses26Label, refPulses27Label, refPulses28Label, refPulses29Label, refPulses30Label,
|
|
refPulses31Label, refPulses32Label, refPulses33Label, refPulses34Label, refPulses35Label,
|
|
refPulses36Label, refPulses37Label, refPulses38Label, refPulses39Label, refPulses40Label,
|
|
};
|
|
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, volume25Label,
|
|
volume26Label, volume27Label, volume28Label, volume29Label, volume30Label,
|
|
volume31Label, volume32Label, volume33Label, volume34Label, volume35Label,
|
|
volume36Label, volume37Label, volume38Label, volume39Label, volume40Label,
|
|
};
|
|
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, error25Label,
|
|
error26Label, error27Label, error28Label, error29Label, error30Label,
|
|
error31Label, error32Label, error33Label, error34Label, error35Label,
|
|
error36Label, error37Label, error38Label, error39Label, error40Label,
|
|
};
|
|
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, passed25Label,
|
|
passed26Label, passed27Label, passed28Label, passed29Label, passed30Label,
|
|
passed31Label, passed32Label, passed33Label, passed34Label, passed35Label,
|
|
passed36Label, passed37Label, passed38Label, passed39Label, passed40Label,
|
|
};
|
|
ShuffleLabels(Config.Data.WMsCount, Config.Data.LineSize);
|
|
|
|
Bridge.ProcedureSelectedHandler += delegate(object sndr, ProcedureSelectedEventArgs args)
|
|
{
|
|
if (InvokeRequired)
|
|
Invoke(new EventHandler<ProcedureSelectedEventArgs>(OnProcedureSelected), sndr, args);
|
|
else
|
|
OnProcedureSelected(sndr, args);
|
|
};
|
|
Bridge.TestSelectedHandler += delegate(object sender, TestSelectedEventArgs args)
|
|
{
|
|
if (InvokeRequired)
|
|
Invoke(new EventHandler<TestSelectedEventArgs>(OnTestSelected), sender, args);
|
|
else
|
|
OnTestSelected(sender, args);
|
|
};
|
|
Bridge.ProcessDataHandler += delegate(object sender, ProcessDataEventArgs args)
|
|
{
|
|
if (InvokeRequired)
|
|
Invoke(new EventHandler<ProcessDataEventArgs>(OnProcessDataChanged), sender, args);
|
|
else
|
|
OnProcessDataChanged(sender, args);
|
|
};
|
|
Bridge.TestCompletedHandler += delegate(object sender, TestCompletedEventArgs args)
|
|
{
|
|
if (InvokeRequired)
|
|
Invoke(new EventHandler<TestCompletedEventArgs>(OnTestCompleted), sender, args);
|
|
else
|
|
OnTestCompleted(sender, args);
|
|
};
|
|
Bridge.ProcedureCompletedHandler += delegate(object sender, ProcedureCompletedEventArgs args)
|
|
{
|
|
if (InvokeRequired)
|
|
Invoke(new EventHandler<ProcedureCompletedEventArgs>(OnProcedureCompleted), sender, args);
|
|
else
|
|
OnProcedureCompleted(sender, args);
|
|
};
|
|
}
|
|
|
|
/// <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);
|
|
|
|
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)
|
|
{
|
|
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)
|
|
{
|
|
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.PressIn != null) prInCmpntLabel.Text = args.BenchPath.PressIn.Name;
|
|
if (args.BenchPath.PressOut != null) prOutCmpntLabel.Text = args.BenchPath.PressOut.Name;
|
|
if (args.BenchPath.TempIn != null) tInCmpntLabel.Text = args.BenchPath.TempIn.Name;
|
|
if (args.BenchPath.TempOut != null) tOutCmpntLabel.Text = args.BenchPath.TempOut.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.Balance != null) scaleCmpntLabel.Text = args.OutputPath.Balance.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.AmbientTemp.ToString();
|
|
airPressLabel.Text = ProcessData.AmbientPressure.ToString();
|
|
airHumiLabel.Text = ProcessData.AmbientHumidity.ToString();
|
|
|
|
tInLabel.Text = ProcessData.TempIn.ToString();
|
|
tOutLabel.Text = ProcessData.TempOut.ToString();
|
|
tDivLabel.Text = ProcessData.TempDiv.ToString();
|
|
|
|
prInLabel.Text = ProcessData.PressureUp.ToString();
|
|
prOutLabel.Text = ProcessData.PressureDown.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.FloatToStr(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");
|
|
|
|
float massDiff = ProcessData.Mass.Val - ProcessData.StartMass.Val;
|
|
massDiffLabel.Text = massDiff.ToString("F3");
|
|
float volumeCtv = 1001.03f * massDiff / (float)TBF.BenchControl.Formulas.WaterDensityFromTemp(ProcessData.TempOut.Val);
|
|
volumeCtvLabel.Text = volumeCtv.ToString("F2");
|
|
double refError = TBF.BenchControl.Formulas.ErrorFromVolumes(refVolume, volumeCtv);
|
|
refErrorLabel.Text = refError.ToString("F3");
|
|
|
|
if (currentMetersKind == MetersKind.Single)
|
|
{
|
|
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 = BenchControl.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 = BenchControl.Formulas.ErrorFromVolumes(rr.WMVolume, rr.WMRefPulses * ProcessData.LtrPerRefPulse).ToString("F1");
|
|
compoundVolume += rr.WMVolume;
|
|
}
|
|
}
|
|
|
|
volume1zLabel.Text = compoundVolume.ToString("F1");
|
|
error1zLabel.Text = BenchControl.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;
|
|
|
|
airTempLabel.Text = tRes.AmbientTempAve.ToString("F1");
|
|
airPressLabel.Text = tRes.AmbientPressAve.ToString("F1");
|
|
airHumiLabel.Text = tRes.AmbientHumiAve.ToString("F1");
|
|
|
|
tInLabel.Text = tRes.TempInAvrg.ToString("F2");
|
|
tOutLabel.Text = tRes.TempOutAvrg.ToString("F2");
|
|
tDivLabel.Text = tRes.TempDivAvrg.ToString("F2");
|
|
|
|
prInLabel.Text = tRes.PressUpAvrg.ToString("F1");
|
|
prOutLabel.Text = tRes.PressDownAvrg.ToString("F1");
|
|
|
|
massLabel.Text = ProcessData.Mass.ToString();
|
|
massDiffLabel.Text = (tRes.MassEnd - tRes.MassStart).ToString("F3");
|
|
|
|
refPulsesLabel.Text = tRes.PulsesMaster.ToString("F0");
|
|
refFreqLabel.Text = "---";
|
|
refFlowLabel.Text = Utils.FloatToStr((float)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 < textBoxesCount; 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)
|
|
{
|
|
switch (compMtr)
|
|
{
|
|
case 0:
|
|
volume1zLabel.Text = mtrComp.VolumeMeter.ToString("F2");
|
|
error1zLabel.Text = mtrComp.Error.ToString("F2");
|
|
passed1zLabel.Text = mtrComp.Passed ? Strings.Passed : Strings.Failed;
|
|
break;
|
|
case 1:
|
|
volume2zLabel.Text = mtrComp.VolumeMeter.ToString("F2");
|
|
error2zLabel.Text = mtrComp.Error.ToString("F2");
|
|
passed2zLabel.Text = mtrComp.Passed ? Strings.Passed : Strings.Failed;
|
|
break;
|
|
case 2:
|
|
volume3zLabel.Text = mtrComp.VolumeMeter.ToString("F2");
|
|
error3zLabel.Text = mtrComp.Error.ToString("F2");
|
|
passed3zLabel.Text = mtrComp.Passed ? Strings.Passed : Strings.Failed;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
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));
|
|
}
|
|
}
|
|
}
|