ProcessTabPageCtrl : uses CB Activity, displays S/Ns, supports Flying start and compound meters, ver. 3.1.1907
This commit is contained in:
parent
e428897822
commit
19d54d4990
@ -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")]
|
||||
|
||||
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user