ProcessTabPageCtrl : uses CB Activity, displays S/Ns, supports Flying start and compound meters, ver. 3.1.1907

This commit is contained in:
Milan Hanajik 2022-05-06 14:14:11 +02:00
parent e428897822
commit 19d54d4990
2 changed files with 253 additions and 119 deletions

View File

@ -29,5 +29,5 @@ using System.Runtime.InteropServices;
// Build Number
// Revision
//
[assembly: AssemblyVersion("3.1.1903.0")]
[assembly: AssemblyFileVersion("3.1.1903.0")]
[assembly: AssemblyVersion("3.1.1907.0")]
[assembly: AssemblyFileVersion("3.1.1907.0")]

View File

@ -7,7 +7,6 @@ using System.Linq;
using System.Windows.Forms;
using log4net;
using Common;
using Config.Entities;
using SchematicDrawing;
using TBF.Resources;
using TBF.Rig.Sequences;
@ -43,14 +42,14 @@ namespace TBF.UI.Process
int volumeIx;
int refErrorIx;
MetersKind currentMetersKind;
MetersKind metersKind;
public ProcessTabPageCtrl()
{
InitializeComponent();
InitializeTestDataTable(testDataListView, null);
InitializeTableOfMeters(metersListView, TBF.Data.WMsCount);
InitializeDrawing();
InitializeTableOfMeters(metersListView, MetersKind.Single, TBF.Data.WMsCount);
InitializeDrawing(MetersKind.Single);
Bridge.ProcedureSelectedHandler += delegate(object sender, ProcedureSelectedEventArgs args)
{
@ -96,7 +95,7 @@ namespace TBF.UI.Process
/// metersListViewEx columns
var cols = ls.ProcMetersColWidths;
metersListView.Columns.Add(Strings.Nr, (cols != null && cols.Length > 0) ? cols[0] : 30 * MainWnd.Dpi / Constants.Dpi100pct);
metersListView.Columns.Add(Strings.Nr, (cols != null && cols.Length > 0) ? cols[0] : 40 * MainWnd.Dpi / Constants.Dpi100pct);
metersListView.Columns.Add(Strings.Error, (cols != null && cols.Length > 1) ? cols[1] : 50 * MainWnd.Dpi / Constants.Dpi100pct);
metersListView.Columns.Add(Strings.Volume, (cols != null && cols.Length > 2) ? cols[2] : 50 * MainWnd.Dpi / Constants.Dpi100pct);
metersListView.Columns.Add(Strings.Pulses, (cols != null && cols.Length > 3) ? cols[3] : 60 * MainWnd.Dpi / Constants.Dpi100pct);
@ -261,40 +260,74 @@ namespace TBF.UI.Process
/// <param name="listView">ListView control</param>
/// <param name="wmsCount">Water meters count</param>
/// <param name="waterMeters">Optional water meters to be used as list view item tags</param>
void InitializeTableOfMeters(ListView listView, int wmsCount, IList<Results.Entities.WaterMeter> waterMeters = null)
void InitializeTableOfMeters(ListView listView, MetersKind metersKind, int wmsCount,
IList<Results.Entities.WaterMeter> waterMeters = null)
{
splitContainer3.SplitterDistance = 45 + 17 * wmsCount;
int rowsCount = (metersKind == MetersKind.Combined) ? (2 * wmsCount) : wmsCount;
splitContainer3.SplitterDistance = 45 + 17 * rowsCount;
if (listView.Items.Count != wmsCount)
if (listView.Items.Count != rowsCount)
{
/// Executed when the number of water meters or register readers changes
/// Nr. of water meters has changed => All table rows are re-initialized
listView.Items.Clear();
for (int i = 0; i < wmsCount; i++)
{
listView.Items.Add(new ListViewItem((i + 1).ToString()));
if (metersKind == MetersKind.Combined)
{
listView.Items.Add(new ListViewItem(string.Format("{0} main", i + 1))); /// Compound - Main
listView.Items.Add(new ListViewItem(string.Format("{0} aux", i + 1))); /// Compound - Aux
}
else
{
listView.Items.Add(new ListViewItem(string.Format("{0}", i + 1))); /// Single
}
}
}
for (int i = 0; i < wmsCount; i++)
/// Add or Update subitems 1 .. (int)Column.Count
for (int i = 0; i < rowsCount; i++)
{
if (listView.Items[i].SubItems.Count == (int)Column.Count)
{
for (int j = 1; j < (int)Column.Count; j++) /// Column 1 .. Column.Count-1
{
listView.Items[i].SubItems[j].Text = ".";
}
for (int j = 1; j < (int)Column.Count; j++) listView.Items[i].SubItems[j].Text = ".";
}
else
{
for (int j = 1; j < (int)Column.Count; j++) /// Column 1 .. Column.Count-1
{
listView.Items[i].SubItems.Add(".");
}
for (int j = 1; j < (int)Column.Count; j++) listView.Items[i].SubItems.Add(".");
}
}
if (waterMeters != null && i < waterMeters.Count)
/// Update Tag-s of ListView items with references to water meters, display serial numbers
for (int i = 0; i < wmsCount; i++)
{
if (waterMeters != null && waterMeters[i] != null)
{
listView.Items[i].Tag = waterMeters[i];
if (metersKind == MetersKind.Combined)
{
/// Compound - Main
listView.Items[2 * i].Tag = waterMeters[i];
if (!string.IsNullOrEmpty(waterMeters[i].SerialNr))
{
listView.Items[2 * i].SubItems[(int)Column.SerialNr].Text = waterMeters[i].SerialNr;
}
/// Compound - Aux
listView.Items[2 * i + 1].Tag = waterMeters[i];
if (!string.IsNullOrEmpty(waterMeters[i].SerialNrAux))
{
listView.Items[2 * i + 1].SubItems[(int)Column.SerialNr].Text = waterMeters[i].SerialNrAux;
}
}
else
{
/// Single
listView.Items[i].Tag = waterMeters[i];
if (!string.IsNullOrEmpty(waterMeters[i].SerialNr))
{
listView.Items[i].SubItems[(int)Column.SerialNr].Text = waterMeters[i].SerialNr;
}
}
}
}
}
@ -321,7 +354,7 @@ namespace TBF.UI.Process
///
int scaleId, tankId, drainValveId, diverterId, regValveId, flowMeterId, startValveId;
int pumpId, tempInId, tempOutId, tempDivId, pressUpId, pressDownId;
int wm1Id, wm2Id, wmLastId, j1, j2, j3, j4, j5, j6, j7;
int wm1Id, wm2Id, wmLastId, j1, j2, j3, j4, j5, j6, j7, j8, j9, j10, j11;
///
int scaleMsrdIx, flowMeterMsrdIx, tempMtrUpMsrdIx, tempMtrDownMsrdIx, tempMtrDivMsrdIx;
int pressMtrUpMsrdIx, pressMtrDownMsrdIx;
@ -337,7 +370,7 @@ namespace TBF.UI.Process
/// Initialize hydraulical schematic drawing.
/// This should be called before initialization of handlers.
/// </summary>
void InitializeDrawing()
void InitializeDrawing(MetersKind mtrKind)
{
processDrawingCtrl.SupressRedraws = true;
@ -397,32 +430,61 @@ namespace TBF.UI.Process
MsrdValLimLo = -0.1, MsrdValLimHi = 25,
});
/// WM 1
processDrawingCtrl.AddItem(
wm1Cfg = new TBF.Rig.WaterMeters.WaterMeter.WaterMeterCfg(new TBF.Rig.WaterMeters.WaterMeter.WaterMeterFactory())
{
Id = (wm1Id = id++), Name = "WM1",
X = 120, Y = 360, Shape = Shape.WaterM, Sz = Sz.L, Orient = Orient.R, Flip = false,
LblX = 0, LblY = -24, LblOrient = Orient.R,
});
if (mtrKind == MetersKind.Combined)
{
/// WM 1 main
processDrawingCtrl.AddItem(
wm1Cfg = new TBF.Rig.WaterMeters.WaterMeter.WaterMeterCfg(new TBF.Rig.WaterMeters.WaterMeter.WaterMeterFactory())
{
Id = (wm1Id = id++), Name = "WM1 main",
X = 230, Y = 360, Shape = Shape.WaterM, Sz = Sz.L, Orient = Orient.R, Flip = false,
LblX = 0, LblY = -24, LblOrient = Orient.R,
});
/// WM 2
processDrawingCtrl.AddItem(
wm2Cfg = new TBF.Rig.WaterMeters.WaterMeter.WaterMeterCfg(new TBF.Rig.WaterMeters.WaterMeter.WaterMeterFactory())
{
Id = (wm2Id = id++), Name = "WM2",
X = 180, Y = 360, Shape = Shape.WaterM, Sz = Sz.L, Orient = Orient.R, Flip = false,
LblX = 0, LblY = -24, LblOrient = Orient.R,
});
/// WM 1 aux
processDrawingCtrl.AddItem(
wm2Cfg = new TBF.Rig.WaterMeters.WaterMeter.WaterMeterCfg(new TBF.Rig.WaterMeters.WaterMeter.WaterMeterFactory())
{
Id = (wm2Id = id++), Name = "WM1 aux",
X = 230, Y = 240, Shape = Shape.WaterM, Sz = Sz.L, Orient = Orient.R, Flip = false,
LblX = 0, LblY = -24, LblOrient = Orient.R,
});
/// WM last
processDrawingCtrl.AddItem(
wmLastCfg = new TBF.Rig.WaterMeters.WaterMeter.WaterMeterCfg(new TBF.Rig.WaterMeters.WaterMeter.WaterMeterFactory())
{
Id = (wmLastId = id++), Name = "WMn",
X = 310, Y = 360, Shape = Shape.WaterM, Sz = Sz.L, Orient = Orient.R, Flip = false,
LblX = 0, LblY = -24, LblOrient = Orient.R,
});
/// Junctions to connect Aux meter
processDrawingCtrl.AddItem(new Configuration("J3", new Factory()) { Id = (j3 = id++), Shape = Shape.Junction, X = 170, Y = 370, Sz = Sz.L, });
processDrawingCtrl.AddItem(new Configuration("J4", new Factory()) { Id = (j4 = id++), Shape = Shape.Junction, X = 170, Y = 250, Sz = Sz.L, });
processDrawingCtrl.AddItem(new Configuration("J5", new Factory()) { Id = (j5 = id++), Shape = Shape.Junction, X = 310, Y = 250, Sz = Sz.L, });
processDrawingCtrl.AddItem(new Configuration("J6", new Factory()) { Id = (j6 = id++), Shape = Shape.Junction, X = 310, Y = 370, Sz = Sz.L, });
}
else
{
/// WM 1
processDrawingCtrl.AddItem(
wm1Cfg = new TBF.Rig.WaterMeters.WaterMeter.WaterMeterCfg(new TBF.Rig.WaterMeters.WaterMeter.WaterMeterFactory())
{
Id = (wm1Id = id++), Name = "WM1",
X = 120, Y = 360, Shape = Shape.WaterM, Sz = Sz.L, Orient = Orient.R, Flip = false,
LblX = 0, LblY = -24, LblOrient = Orient.R,
});
/// WM 2
processDrawingCtrl.AddItem(
wm2Cfg = new TBF.Rig.WaterMeters.WaterMeter.WaterMeterCfg(new TBF.Rig.WaterMeters.WaterMeter.WaterMeterFactory())
{
Id = (wm2Id = id++), Name = "WM2",
X = 180, Y = 360, Shape = Shape.WaterM, Sz = Sz.L, Orient = Orient.R, Flip = false,
LblX = 0, LblY = -24, LblOrient = Orient.R,
});
/// WM last
processDrawingCtrl.AddItem(
wmLastCfg = new TBF.Rig.WaterMeters.WaterMeter.WaterMeterCfg(new TBF.Rig.WaterMeters.WaterMeter.WaterMeterFactory())
{
Id = (wmLastId = id++), Name = "WMn",
X = 310, Y = 360, Shape = Shape.WaterM, Sz = Sz.L, Orient = Orient.R, Flip = false,
LblX = 0, LblY = -24, LblOrient = Orient.R,
});
}
/// T down
tempMtrDownMsrdIx = msrdIx++;
@ -449,7 +511,7 @@ namespace TBF.UI.Process
});
/// Junction
processDrawingCtrl.AddItem(new Configuration("J3", new Factory()) { Id=(j3=id++), Shape=Shape.Junction, X=460, Y=370, Sz=Sz.L, });
processDrawingCtrl.AddItem(new Configuration("J7", new Factory()) { Id=(j7=id++), Shape=Shape.Junction, X=460, Y=370, Sz=Sz.L, });
/// Start valve
processDrawingCtrl.AddItem(
@ -485,8 +547,8 @@ namespace TBF.UI.Process
});
/// Junctions
processDrawingCtrl.AddItem(new Configuration("J4", new Factory()) { Id=(j4=id++), Shape=Shape.Junction, X=460, Y=80, Sz=Sz.L, });
processDrawingCtrl.AddItem(new Configuration("J5", new Factory()) { Id=(j5=id++), Shape=Shape.Junction, X=630, Y=40, Sz=Sz.L, });
processDrawingCtrl.AddItem(new Configuration("J8", new Factory()) { Id=(j8=id++), Shape=Shape.Junction, X=460, Y=80, Sz=Sz.L, });
processDrawingCtrl.AddItem(new Configuration("J9", new Factory()) { Id=(j9=id++), Shape=Shape.Junction, X=630, Y=40, Sz=Sz.L, });
/// T div
tempMtrDivMsrdIx = msrdIx++;
@ -535,8 +597,8 @@ namespace TBF.UI.Process
});
/// Junctions
processDrawingCtrl.AddItem(new Configuration("J6", new Factory()) { Id=(j6=id++), Shape=Shape.Junction, X=680, Y=390, Sz=Sz.None, });
processDrawingCtrl.AddItem(new Configuration("J7", new Factory()) { Id=(j7=id++), Shape=Shape.Junction, X=620, Y=390, Sz=Sz.None, });
processDrawingCtrl.AddItem(new Configuration("J10", new Factory()) { Id=(j10=id++), Shape=Shape.Junction, X=680, Y=390, Sz=Sz.None, });
processDrawingCtrl.AddItem(new Configuration("J11", new Factory()) { Id=(j11=id++), Shape=Shape.Junction, X=620, Y=390, Sz=Sz.None, });
processDrawingCtrl.MsrmntAvailableFlags = new bool[msrdIx];
processDrawingCtrl.MeasuredValues = new double[msrdIx];
@ -550,25 +612,54 @@ namespace TBF.UI.Process
processDrawingCtrl.PipesS = new string[0];
processDrawingCtrl.PipesM = new string[0];
processDrawingCtrl.PipesL = new string[]
if (mtrKind == MetersKind.Combined)
{
string.Format("{0}~0~{1}~0", tankId, pumpId),
string.Format("{0}~1~{1}~0", pumpId, j1),
string.Format("{0}~0~{1}~0", j1, j2),
string.Format("{0}~0~{1}~0", j2, wm1Id),
string.Format("{0}~1~{1}~0", wm1Id, wm2Id),
string.Format("{0}~1~{1}~0", wm2Id, wmLastId),
string.Format("{0}~1~{1}~0", wmLastId, j3),
string.Format("{0}~0~{1}~0", j3, startValveId),
string.Format("{0}~1~{1}~0", startValveId, flowMeterId),
string.Format("{0}~1~{1}~0", flowMeterId, regValveId),
string.Format("{0}~1~{1}~0", regValveId, j4),
string.Format("{0}~0~{1}~0", j4, j5),
string.Format("{0}~0~{1}~0", j5, diverterId),
string.Format("{0}~0~{1}~0", scaleId, drainValveId),
string.Format("{0}~1~{1}~0", drainValveId, j6),
string.Format("{0}~1~{1}~0", diverterId, j7)
};
processDrawingCtrl.PipesL = new string[]
{
string.Format("{0}~0~{1}~0", tankId, pumpId),
string.Format("{0}~1~{1}~0", pumpId, j1),
string.Format("{0}~0~{1}~0", j1, j2),
string.Format("{0}~0~{1}~0", j2, j3),
string.Format("{0}~0~{1}~0", j3, j4),
string.Format("{0}~0~{1}~0", j3, wm1Id),
string.Format("{0}~0~{1}~0", j4, wm2Id),
string.Format("{0}~1~{1}~0", wm2Id, j5),
string.Format("{0}~1~{1}~0", wm1Id, j6),
string.Format("{0}~0~{1}~0", j5, j6),
string.Format("{0}~0~{1}~0", j6, j7),
string.Format("{0}~0~{1}~0", j7, startValveId),
string.Format("{0}~1~{1}~0", startValveId, flowMeterId),
string.Format("{0}~1~{1}~0", flowMeterId, regValveId),
string.Format("{0}~1~{1}~0", regValveId, j8),
string.Format("{0}~0~{1}~0", j8, j9),
string.Format("{0}~0~{1}~0", j9, diverterId),
string.Format("{0}~0~{1}~0", scaleId, drainValveId),
string.Format("{0}~1~{1}~0", drainValveId, j10),
string.Format("{0}~1~{1}~0", diverterId, j11)
};
}
else
{
processDrawingCtrl.PipesL = new string[]
{
string.Format("{0}~0~{1}~0", tankId, pumpId),
string.Format("{0}~1~{1}~0", pumpId, j1),
string.Format("{0}~0~{1}~0", j1, j2),
string.Format("{0}~0~{1}~0", j2, wm1Id),
string.Format("{0}~1~{1}~0", wm1Id, wm2Id),
string.Format("{0}~1~{1}~0", wm2Id, wmLastId),
string.Format("{0}~1~{1}~0", wmLastId, j7),
string.Format("{0}~0~{1}~0", j7, startValveId),
string.Format("{0}~1~{1}~0", startValveId, flowMeterId),
string.Format("{0}~1~{1}~0", flowMeterId, regValveId),
string.Format("{0}~1~{1}~0", regValveId, j8),
string.Format("{0}~0~{1}~0", j8, j9),
string.Format("{0}~0~{1}~0", j9, diverterId),
string.Format("{0}~0~{1}~0", scaleId, drainValveId),
string.Format("{0}~1~{1}~0", drainValveId, j10),
string.Format("{0}~1~{1}~0", diverterId, j11)
};
}
processDrawingCtrl.PipesXL = new string[0];
processDrawingCtrl.Route = 0;
@ -579,16 +670,19 @@ namespace TBF.UI.Process
void OnProcedureSelected(object sender, ProcedureSelectedEventArgs args)
{
currentMetersKind = args.Procedure.MetersKind;
InitializeDrawing();
metersKind = args.Procedure.MetersKind;
InitializeDrawing(metersKind);
InitializeTestDataTable(testDataListView, null);
InitializeTableOfMeters(metersListView, TBF.Data.WMsCount);
InitializeTableOfMeters(metersListView, metersKind,
(metersKind == MetersKind.Combined) ? TBF.Data.CompoundWMsCount : TBF.Data.WMsCount);
}
void OnTestSelected(object sender, TestSelectedEventArgs args)
{
InitializeTestDataTable(testDataListView, args);
InitializeTableOfMeters(metersListView, ProcessData.WMsCount, ProcessData.BatchRslts.Batch.WaterMeters);
InitializeTableOfMeters(metersListView, metersKind,
(metersKind == MetersKind.Combined) ? TBF.Data.CompoundWMsCount : TBF.Data.WMsCount,
ProcessData.BatchRslts.Batch.WaterMeters);
processDrawingCtrl.SupressRedraws = true;
@ -646,7 +740,12 @@ namespace TBF.UI.Process
? args.OutputPath.Scale.DrainValve.Name : "n/a";
/// Meters path
if (args.MetersPath != null && args.MetersPath.RegisterReaders != null)
if (metersKind == MetersKind.Combined)
{
wm1Cfg.Name = "WM1 main";
wm2Cfg.Name = "WM1 aux";
}
else if (args.MetersPath != null && args.MetersPath.RegisterReaders != null)
{
var rrs = args.MetersPath.RegisterReaders;
int first = 0;
@ -762,33 +861,52 @@ namespace TBF.UI.Process
///
/// Update test data
///
double density = Formulas.WaterDensityFromTempPress((ProcessData.TempUp.Val + ProcessData.TempDown.Val) / 2,
(ProcessData.PressUp.Val + ProcessData.PressDown.Val) / 2);
double volumeCtv = 1000 * Formulas.Buoyancy() * (ProcessData.Mass - ProcessData.StartMass.Val) / density;
//double refVolume = cBrd.RefPulses * cBrd.Devices.FlowMeter.LtrPerPulse;
double refVolume = (ProcessData.Devices != null && ProcessData.Devices.FlowMeter != null)
? ProcessData.Devices.FlowMeter.LtrPerPulse * ProcessData.RefPulses : 0;
double refError = Formulas.ErrorFromVolumes(refVolume, volumeCtv);
if (refErrorIx != 0 && testDataListView.Items.Count > refErrorIx)
{
if (ProcessData.StartMass.Valid)
{
double converted = Units.ConvertTo(ProcessData.MassUnit, ProcessData.StartMass.Val);
testDataListView.Items[startMassIx].SubItems[1].Text = converted.ToString(Common.Utils.SignificantDigitsToFmt(converted, 6));
converted = Units.ConvertTo(ProcessData.MassUnit, ProcessData.Mass - ProcessData.StartMass.Val);
testDataListView.Items[massIx].SubItems[1].Text = converted.ToString(Common.Utils.SignificantDigitsToFmt(converted, 6));
converted = Units.ConvertTo(ProcessData.VolumeUnit, volumeCtv);
testDataListView.Items[volumeIx].SubItems[1].Text = converted.ToString(Common.Utils.SignificantDigitsToFmt(converted, 5));
testDataListView.Items[refErrorIx].SubItems[1].Text = refError.ToString(Common.Utils.SignificantDigitsToFmt(refError, 3));
}
else
{
testDataListView.Items[startMassIx].SubItems[1].Text = "---";
testDataListView.Items[massIx].SubItems[1].Text = "---";
}
if (TBF.Rig.StateMachine.ControlBoard.Activity == TBF.Rig.ControlBoard.Activity.FlyingStartStopTestWithDiverter)
{
double density = Formulas.WaterDensityFromTempPress((ProcessData.TempUp.Val + ProcessData.TempDown.Val) / 2,
(ProcessData.PressUp.Val + ProcessData.PressDown.Val) / 2);
double volumeCtv = 1000 * Formulas.Buoyancy() * (ProcessData.Mass - ProcessData.StartMass.Val) / density;
//double refVolume = cBrd.RefPulses * cBrd.Devices.FlowMeter.LtrPerPulse;
double refVolume = (ProcessData.Devices != null && ProcessData.Devices.FlowMeter != null)
? ProcessData.Devices.FlowMeter.LtrPerPulse * ProcessData.RefPulses : 0;
double refError = Formulas.ErrorFromVolumes(refVolume, volumeCtv);
double converted = Units.ConvertTo(ProcessData.VolumeUnit, volumeCtv);
testDataListView.Items[volumeIx].SubItems[1].Text = converted.ToString(Common.Utils.SignificantDigitsToFmt(converted, 5));
testDataListView.Items[refErrorIx].SubItems[1].Text = refError.ToString(Common.Utils.SignificantDigitsToFmt(refError, 3));
}
else if (TBF.Rig.StateMachine.ControlBoard.Activity == TBF.Rig.ControlBoard.Activity.FlyingStartStopTest)
{
double refVolume = (ProcessData.Devices != null && ProcessData.Devices.FlowMeter != null)
? ProcessData.Devices.FlowMeter.LtrPerPulse * ProcessData.RefPulses : 0;
double converted = Units.ConvertTo(ProcessData.VolumeUnit, refVolume);
testDataListView.Items[volumeIx].SubItems[1].Text = converted.ToString(Common.Utils.SignificantDigitsToFmt(converted, 5));
testDataListView.Items[refErrorIx].SubItems[1].Text = "---";
}
else if (TBF.Rig.StateMachine.ControlBoard.Activity == TBF.Rig.ControlBoard.Activity.StandingStartStopTest)
{
/// TODO: ???
//var converted = Units.ConvertTo(ProcessData.VolumeUnit, volumeCtv);
//testDataListView.Items[volumeIx].SubItems[1].Text = converted.ToString(Common.Utils.SignificantDigitsToFmt(converted, 5));
//testDataListView.Items[refErrorIx].SubItems[1].Text = "---";
}
else
{
testDataListView.Items[volumeIx].SubItems[1].Text = "---";
testDataListView.Items[refErrorIx].SubItems[1].Text = "---";
}
@ -797,18 +915,27 @@ namespace TBF.UI.Process
///
/// Update water meter states
///
if (ProcessData.Devices != null && ProcessData.Devices.FlowMeter != null && ProcessData.RegisterReaders != null)
if (ProcessData.Devices != null &&
ProcessData.Devices.FlowMeter != null &&
ProcessData.RegisterReaders != null &&
(TBF.Rig.StateMachine.ControlBoard.Activity == TBF.Rig.ControlBoard.Activity.FlyingStartStopTest ||
TBF.Rig.StateMachine.ControlBoard.Activity == TBF.Rig.ControlBoard.Activity.FlyingStartStopTestWithDiverter ||
TBF.Rig.StateMachine.ControlBoard.Activity == TBF.Rig.ControlBoard.Activity.StandingStartStopTest))
{
for (int i = 0; i < Math.Min(metersListView.Items.Count, ProcessData.RegisterReaders.Length); i++)
{
var lvi = metersListView.Items[i];
var rr = ProcessData.RegisterReaders[i];
if (rr != null && Math.Abs(rr.WMVolume) > float.Epsilon && refVolume > float.Epsilon)
if (rr != null && rr.WMPulses != 0 && rr.WMRefPulses != 0)
{
/// Update a list view item
lvi.SubItems[(int)Column.Error].Text = Formulas.ErrorFromVolumes(rr.WMVolume, refVolume).ToString("F1");
lvi.SubItems[(int)Column.Volume].Text = rr.WMVolume.ToString("F1");
double wmVolume = rr.WMPulses * rr.LtrsPerPulse;
double wmRefVolume = rr.WMRefPulses * ProcessData.Devices.FlowMeter.LtrPerPulse;
double error = Formulas.ErrorFromVolumes(wmVolume, wmRefVolume);
lvi.SubItems[(int)Column.Error].Text = error.ToString(Common.Utils.SignificantDigitsToFmt(error, 2));
double converted = Units.ConvertTo(ProcessData.VolumeUnit, wmVolume);
lvi.SubItems[(int)Column.Volume].Text = rr.WMVolume.ToString(Common.Utils.SignificantDigitsToFmt(converted, 5));
lvi.SubItems[(int)Column.Pulses].Text = rr.WMPulses.ToString();
lvi.SubItems[(int)Column.RefPulses].Text = rr.WMRefPulses.ToString();
lvi.SubItems[(int)Column.PulsesPerLtr].Text = rr.PulsesPerLtr.ToString();
@ -877,42 +1004,49 @@ namespace TBF.UI.Process
return;
}
int wmsCount = Math.Min(ProcessData.RegisterReaders.Length, ProcessData.BatchRslts.Batch.WaterMeters.Count);
/// TODO: ??? update mass
//double converted = Units.ConvertTo(ProcessData.VolumeUnit, args.TestRslt.MassEnd - args.TestRslt.MassStart);
//testDataListView.Items[volumeIx].SubItems[1].Text = converted.ToString(Common.Utils.SignificantDigitsToFmt(converted, 5));
if (metersListView.Items.Count != wmsCount)
double converted = Units.ConvertTo(ProcessData.VolumeUnit, args.TestRslt.VolumeCTV);
testDataListView.Items[volumeIx].SubItems[1].Text = converted.ToString(Common.Utils.SignificantDigitsToFmt(converted, 5));
testDataListView.Items[refErrorIx].SubItems[1].Text = args.TestRslt.ErrorMaster.ToString(Common.Utils.SignificantDigitsToFmt(args.TestRslt.ErrorMaster, 3));
int wmsCount = (metersKind == MetersKind.Combined) ? TBF.Data.CompoundWMsCount : TBF.Data.WMsCount;
int rowsCount = (metersKind == MetersKind.Combined) ? 2 * TBF.Data.CompoundWMsCount : TBF.Data.WMsCount;
if (metersListView.Items.Count != rowsCount)
{
/// Invoked only when the number of water meters or register readers changes
metersListView.Items.Clear();
for (int i = 0; i < wmsCount; i++)
{
var lvi = new ListViewItem((i + 1).ToString()); /// Column 0
for (Column c = (Column)1; c < Column.Count; c++) /// Column 1 .. Column.Count-1
{
lvi.SubItems.Add(".");
}
lvi.Tag = ProcessData.BatchRslts.Batch.WaterMeters[i];
metersListView.Items.Add(lvi);
}
InitializeTableOfMeters(metersListView, metersKind, wmsCount);
}
if (args.TestRslt != null)
{
for (int i = 0; i < wmsCount; i++)
{
var wm = metersListView.Items[i].Tag as Results.Entities.WaterMeter;
var wm = ProcessData.BatchRslts.Batch.WaterMeters[i];
if (wm != null && !wm.Disabled)
{
Results.Entities.MeterTestRslt mtr = wm.MeterTestRslts.FirstOrDefault(x => x.TestRslt == args.TestRslt);
if (mtr != null)
if (metersKind == MetersKind.Combined)
{
var lvi = metersListView.Items[i];
/// TODO: ???
}
else
{
Results.Entities.MeterTestRslt mtr = wm.MeterTestRslts.FirstOrDefault(x => x.TestRslt == args.TestRslt);
if (mtr != null)
{
var lvi = metersListView.Items[i];
/// Update a list view item
lvi.SubItems[(int)Column.Error].Text = mtr.Error.ToString("F1");
lvi.SubItems[(int)Column.Volume].Text = mtr.VolumeMeter.ToString("F1");
lvi.SubItems[(int)Column.Pulses].Text = mtr.PulsesMeter.ToString();
lvi.SubItems[(int)Column.RefPulses].Text = mtr.PulsesMaster.ToString();
lvi.SubItems[(int)Column.SerialNr].Text = mtr.SerialNr();
/// Update a list view item
lvi.SubItems[(int)Column.Error].Text = mtr.Error.ToString(Common.Utils.SignificantDigitsToFmt(mtr.Error, 3));
converted = Units.ConvertTo(ProcessData.VolumeUnit, mtr.VolumeMeter);
lvi.SubItems[(int)Column.Volume].Text = converted.ToString(Common.Utils.SignificantDigitsToFmt(converted, 5));
lvi.SubItems[(int)Column.Pulses].Text = mtr.PulsesMeter.ToString();
lvi.SubItems[(int)Column.RefPulses].Text = mtr.PulsesMaster.ToString();
if (!string.IsNullOrEmpty(mtr.SerialNr())) lvi.SubItems[(int)Column.SerialNr].Text = mtr.SerialNr();
}
}
}
}