diff --git a/TBF/UI/MainWnd.cs b/TBF/UI/MainWnd.cs
index 52cbf3a2b..d4b04d197 100644
--- a/TBF/UI/MainWnd.cs
+++ b/TBF/UI/MainWnd.cs
@@ -529,39 +529,48 @@ namespace TBF.UI
///
void OnStateMachineTick(object sender, StateMachineTickEventArgs args)
{
- drawingCtrl.SupressRedraws = true;
+ try
+ {
+ drawingCtrl.SupressRedraws = true;
- drawingCtrl.Route = args.Route;
+ drawingCtrl.Route = args.Route;
- /// Duplicate measurement available flags
- if (drawingCtrl.MsrmntAvailableFlags == null || drawingCtrl.MsrmntAvailableFlags.Length != args.MsrmntAvailableFlags.Length)
- {
- drawingCtrl.MsrmntAvailableFlags = new bool[args.MsrmntAvailableFlags.Length];
- }
- for (int i = 0; i < args.MsrmntAvailableFlags.Length; i++) drawingCtrl.MsrmntAvailableFlags[i] = args.MsrmntAvailableFlags[i];
+ /// Duplicate measurement available flags
+ if (drawingCtrl.MsrmntAvailableFlags == null || drawingCtrl.MsrmntAvailableFlags.Length != args.MsrmntAvailableFlags.Length)
+ {
+ drawingCtrl.MsrmntAvailableFlags = new bool[args.MsrmntAvailableFlags.Length];
+ }
+ for (int i = 0; i < args.MsrmntAvailableFlags.Length; i++) drawingCtrl.MsrmntAvailableFlags[i] = args.MsrmntAvailableFlags[i];
- /// Duplicate measured values
- if (drawingCtrl.MeasuredValues == null || drawingCtrl.MeasuredValues.Length != args.MeasuredValues.Length)
- {
- drawingCtrl.MeasuredValues = new double[args.MeasuredValues.Length];
- }
- for (int i = 0; i < args.MeasuredValues.Length; i++) drawingCtrl.MeasuredValues[i] = args.MeasuredValues[i];
+ /// Duplicate measured values
+ if (drawingCtrl.MeasuredValues == null || drawingCtrl.MeasuredValues.Length != args.MeasuredValues.Length)
+ {
+ drawingCtrl.MeasuredValues = new double[args.MeasuredValues.Length];
+ }
+ for (int i = 0; i < args.MeasuredValues.Length; i++) drawingCtrl.MeasuredValues[i] = args.MeasuredValues[i];
- /// Duplicate alternative strings
- if (drawingCtrl.AltStrings == null || drawingCtrl.AltStrings.Length != args.AltStrings.Length)
- {
- drawingCtrl.AltStrings = new string[args.AltStrings.Length];
- }
- for (int i = 0; i < args.AltStrings.Length; i++) drawingCtrl.AltStrings[i] = args.AltStrings[i];
+ /// Duplicate alternative strings
+ if (drawingCtrl.AltStrings == null || drawingCtrl.AltStrings.Length != args.AltStrings.Length)
+ {
+ drawingCtrl.AltStrings = new string[args.AltStrings.Length];
+ }
+ for (int i = 0; i < args.AltStrings.Length; i++) drawingCtrl.AltStrings[i] = args.AltStrings[i];
- /// Duplicate setpoints
- if (drawingCtrl.Setpoints == null || drawingCtrl.Setpoints.Length != args.Setpoints.Length)
- {
- drawingCtrl.Setpoints = new double[args.Setpoints.Length];
- }
- for (int i = 0; i < args.Setpoints.Length; i++) drawingCtrl.Setpoints[i] = args.Setpoints[i];
+ /// Duplicate setpoints
+ if (drawingCtrl.Setpoints == null || drawingCtrl.Setpoints.Length != args.Setpoints.Length)
+ {
+ drawingCtrl.Setpoints = new double[args.Setpoints.Length];
+ }
+ for (int i = 0; i < args.Setpoints.Length; i++) drawingCtrl.Setpoints[i] = args.Setpoints[i];
- drawingCtrl.SupressRedraws = false;
+ drawingCtrl.SupressRedraws = false;
+ }
+ catch (Exception e)
+ {
+ log.ErrorFormat("MainWnd.OnStateMachineTick() failed: {0}", e.Message);
+ if (e.InnerException != null) log.FatalFormat("InnerMessage : {0}", e.InnerException.Message);
+ log.FatalFormat("StackTrace : {0}{1}", Environment.NewLine, e.StackTrace);
+ }
}
void OnTestProgress(object sender, UiBridge.TestProgressEventArgs args)
diff --git a/TBF/UI/Process/ProcessTabPageCtrl.cs b/TBF/UI/Process/ProcessTabPageCtrl.cs
index e5c37535b..f39b92163 100644
--- a/TBF/UI/Process/ProcessTabPageCtrl.cs
+++ b/TBF/UI/Process/ProcessTabPageCtrl.cs
@@ -11,7 +11,9 @@ using Config.Entities;
using SchematicDrawing;
using TBF.Resources;
using TBF.Rig.Sequences;
+using TBF.Rig.Various.Drawing.Junction;
using TBF.UiBridge;
+using Dirichlet.Numerics;
namespace TBF.UI.Process
{
@@ -19,6 +21,11 @@ namespace TBF.UI.Process
{
static readonly ILog log = LogManager.GetLogger(typeof(ProcessTabPageCtrl));
+ const int DfltPumpBitNr = 124;
+ const int DfltStartValveBitNr = 125;
+ const int DfltDiverterBitNr = 126;
+ const int DfltDrainValveBitNr = 127;
+
enum Column
{
Nr,
@@ -35,6 +42,7 @@ namespace TBF.UI.Process
public ProcessTabPageCtrl()
{
InitializeComponent();
+ InitializeTableOfWatermeters(processListViewEx, ProcessData.WMsCount);
InitializeDrawing();
Bridge.ProcedureSelectedHandler += delegate(object sender, ProcedureSelectedEventArgs args)
@@ -55,13 +63,10 @@ namespace TBF.UI.Process
catch (Exception e) { log.ErrorFormat("ProcessTabPageCtrl.OnTestSelected() failed: {0}", e.Message); }
};
- Bridge.ProcessDataHandler += delegate(object sender, ProcessDataEventArgs args)
+ Bridge.StateMachineTickHandler += delegate(object sndr, UiBridge.StateMachineTickEventArgs args)
{
- try {
- if (InvokeRequired) Invoke(new EventHandler(OnProcessDataChanged), sender, args);
- else OnProcessDataChanged(sender, args);
- }
- catch (Exception e) { log.ErrorFormat("ProcessTabPageCtrl.OnProcessDataChanged() failed: {0}", e.Message); }
+ if (InvokeRequired) { Invoke(new EventHandler(OnStateMachineTick), sndr, args); }
+ else OnStateMachineTick(sndr, args);
};
Bridge.TestCompletedHandler += delegate(object sender, TestCompletedEventArgs args)
@@ -83,409 +88,6 @@ namespace TBF.UI.Process
};
}
- void InitializeDrawing()
- {
- ///
- /// Initialize hydraulical schematic drawing
- ///
- processDrawingCtrl.SupressRedraws = true;
- ///
- var scale = new TBF.Rig.MettlerToledo.Standard.BalanceCfg(new TBF.Rig.MettlerToledo.Standard.BalanceFactory())
- {
- Id = 2,
- Name = "WT",
- Shape = Shape.Scale,
- X = 640,
- Y = 150,
- Sz = Sz.M,
- Orient = Orient.R,
- Flip = false,
- LblX = 16,
- LblY = 40,
- LblOrient = Orient.R,
- MsrdX = 16,
- MsrdY = 64,
- MsrdOrient = Orient.R,
- MsrdFormat = "{0:F3}",
- MsrdUnit = Common.Unit.kg,
- };
-
- var diverter = new TBF.Rig.Uni.Diverter.DiverterCfg(new TBF.Rig.Uni.Diverter.Factory())
- {
- Id = 3,
- Name = "Div",
- DivNr1 = 1,
- BitNr = 0,
- Inverted = false,
- Shape = Shape.Div,
- X = 610,
- Y = 90,
- Sz = Sz.L,
- Orient = Orient.R,
- Flip = false,
- LblX = 50,
- LblY = -8,
- LblOrient = Orient.R,
- };
-
- var regValve = new TBF.Rig.Uni.RegValve.RegValveCfg("VR", new TBF.Rig.Uni.RegValve.Factory())
- {
- Id = 4,
- Shape = Shape.RegV,
- X = 450,
- Y = 140,
- Sz = Sz.L,
- Orient = Orient.Up,
- Flip = true,
- LblX = 46,
- LblY = 0,
- LblOrient = Orient.R,
- SetpX = 46,
- SetpY = 22,
- SetpOrient = Orient.R,
- };
-
- var flowmeter = new TBF.Rig.Uni.FlowMeter.FlowMeterCfg(new TBF.Rig.Uni.FlowMeter.Factory(), "I")
- {
- Id = 5,
- MsrdFormat = "{0:F3} m2/h",
- MsrdUnit = Common.Unit.m3ph,
- Shape = Shape.FlowM,
- X = 450,
- Y = 210,
- Sz = Sz.L,
- Orient = Orient.Up,
- Flip = true,
- LblX = 46,
- LblY = 0,
- LblOrient = Orient.R,
- MsrdX = 46,
- MsrdY = 22,
- MsrdOrient = Orient.R,
- };
-
- var startValve = new TBF.Rig.BuiltIn.Valve.ValveCfg(new TBF.Rig.BuiltIn.Valve.ValveFactory())
- {
- Id = 6,
- Name = "VI",
- BitNr = 0,
- Inverted = false,
- Shape = Shape.Valve,
- X = 450,
- Y = 280,
- Sz = Sz.L,
- Orient = Orient.Up,
- Flip = false,
- LblX = 48,
- LblY = 9,
- LblOrient = Orient.R,
- };
-
- var wm1 = new TBF.Rig.WaterMeters.WaterMeter.WaterMeterCfg(new TBF.Rig.WaterMeters.WaterMeter.WaterMeterFactory())
- {
- Id = 7,
- Name = "WM1",
- Shape = Shape.WaterM,
- X = 120,
- Y = 360,
- Sz = Sz.L,
- Orient = Orient.R,
- Flip = false,
- LblX = 0,
- LblY = -24,
- LblOrient = Orient.R,
- };
-
- var wm2 = new TBF.Rig.WaterMeters.WaterMeter.WaterMeterCfg(new TBF.Rig.WaterMeters.WaterMeter.WaterMeterFactory())
- {
- Id = 8,
- Name = "WM2",
- Shape = Shape.WaterM,
- X = 180,
- Y = 360,
- Sz = Sz.L,
- Orient = Orient.R,
- Flip = false,
- LblX = 0,
- LblY = -24,
- LblOrient = Orient.R,
- };
-
- var wm3 = new TBF.Rig.WaterMeters.WaterMeter.WaterMeterCfg(new TBF.Rig.WaterMeters.WaterMeter.WaterMeterFactory())
- {
- Id = 9,
- Name = "WM3",
- Shape = Shape.WaterM,
- X = 310,
- Y = 360,
- Sz = Sz.L,
- Orient = Orient.R,
- Flip = false,
- LblX = 0,
- LblY = -24,
- LblOrient = Orient.R,
- };
-
- var pump = new TBF.Rig.Modbus.PumpFM.DanfossVLT.PumpCfg(new TBF.Rig.Modbus.PumpFM.DanfossVLT.Factory())
- {
- Id = 10,
- Name = "P",
- BitNr = 0,
- Inverted = false,
- Shape = Shape.PumpFM,
- X = 450,
- Y = 480,
- Sz = Sz.L,
- Orient = Orient.L,
- Flip = false,
- LblX = 0,
- LblY = -46,
- LblOrient = Orient.R,
- SetpX = 0,
- SetpY = -24,
- SetpOrient = Orient.R,
- SetpFormat = "{0:F0} %",
- SetpUnit = Common.Unit.Pct,
- };
-
- var tank = new TBF.Rig.Various.Drawing.Tank.Configuration("Tank", new TBF.Rig.Various.Drawing.Tank.Factory())
- {
- Id = 11,
- Shape = Shape.Tank,
- X = 570,
- Y = 410,
- Sz = Sz.L,
- Orient = Orient.R,
- Flip = false,
- LblX = 33,
- LblY = 22,
- LblOrient = Orient.R,
- };
-
- var drainValve = new TBF.Rig.BuiltIn.Valve.ValveCfg(new TBF.Rig.BuiltIn.Valve.ValveFactory())
- {
- Id = 16,
- Name = "VB",
- BitNr = 0,
- Inverted = false,
- Shape = Shape.Valve,
- X = 660,
- Y = 270,
- Sz = Sz.M,
- Orient = Orient.Dn,
- Flip = false,
- LblX = 40,
- LblY = 5,
- LblOrient = Orient.R,
- };
-
- var j1 = new TBF.Rig.Various.Drawing.Junction.Configuration("J1", new TBF.Rig.Various.Drawing.Junction.Factory())
- {
- Id = 17,
- Shape = Shape.Junction,
- X = 50,
- Y = 490,
- Sz = Sz.L,
- };
-
- var j2 = new TBF.Rig.Various.Drawing.Junction.Configuration("J2", new TBF.Rig.Various.Drawing.Junction.Factory())
- {
- Id = 18,
- Shape = Shape.Junction,
- X = 50,
- Y = 370,
- Sz = Sz.L,
- };
-
- var j3 = new TBF.Rig.Various.Drawing.Junction.Configuration("J3", new TBF.Rig.Various.Drawing.Junction.Factory())
- {
- Id = 19,
- Shape = Shape.Junction,
- X = 460,
- Y = 370,
- Sz = Sz.L,
- };
-
- var j4 = new TBF.Rig.Various.Drawing.Junction.Configuration("J4", new TBF.Rig.Various.Drawing.Junction.Factory())
- {
- Id = 20,
- Shape = Shape.Junction,
- X = 460,
- Y = 80,
- Sz = Sz.L,
- };
-
- var j5 = new TBF.Rig.Various.Drawing.Junction.Configuration("J5", new TBF.Rig.Various.Drawing.Junction.Factory())
- {
- Id = 21,
- Shape = Shape.Junction,
- X = 630,
- Y = 40,
- Sz = Sz.L,
- };
-
- var j6 = new TBF.Rig.Various.Drawing.Junction.Configuration("J6", new TBF.Rig.Various.Drawing.Junction.Factory())
- {
- Id = 22,
- Shape = Shape.Junction,
- X = 680,
- Y = 390,
- Sz = Sz.None,
- };
-
- var j7 = new TBF.Rig.Various.Drawing.Junction.Configuration("J7", new TBF.Rig.Various.Drawing.Junction.Factory())
- {
- Id = 23,
- Shape = Shape.Junction,
- X = 620,
- Y = 390,
- Sz = Sz.None,
- };
-
- var t_in = new TBF.Rig.Modbus.TempMeter.Groch.TempMeterCfg(new TBF.Rig.Modbus.TempMeter.Groch.Factory())
- {
- Id = 25,
- Name = "T in",
- MsrdFormat = "{0:F1} °C",
- MsrdUnit = Common.Unit.C,
- MsrdValLimLo = 5,
- MsrdValLimHi = 95,
- Shape = Shape.TempM,
- X = 50,
- Y = 320,
- Sz = Sz.M,
- Orient = Orient.R,
- Flip = false,
- LblX = 0,
- LblY = 2,
- LblOrient = Orient.R,
- MsrdX = 0,
- MsrdY = 24,
- MsrdOrient = Orient.R,
- };
-
- var t_out = new TBF.Rig.Modbus.TempMeter.Groch.TempMeterCfg(new TBF.Rig.Modbus.TempMeter.Groch.Factory())
- {
- Id = 26,
- Name = "T out",
- MsrdFormat = "{0:F1} °C",
- MsrdUnit = Common.Unit.C,
- MsrdValLimLo = 5,
- MsrdValLimHi = 95,
- Shape = Shape.TempM,
- X = 370,
- Y = 320,
- Sz = Sz.M,
- Orient = Orient.R,
- Flip = false,
- LblX = 0,
- LblY = 2,
- LblOrient = Orient.R,
- MsrdX = 0,
- MsrdY = 24,
- MsrdOrient = Orient.R,
- };
-
- var t_div = new TBF.Rig.Modbus.TempMeter.Groch.TempMeterCfg(new TBF.Rig.Modbus.TempMeter.Groch.Factory())
- {
- Id = 27,
- Name = "T div",
- MsrdFormat = "{0:F1} °C",
- MsrdUnit = Common.Unit.C,
- MsrdValLimLo = 5,
- MsrdValLimHi = 95,
- Shape = Shape.TempM,
- X = 660,
- Y = 30,
- Sz = Sz.M,
- Orient = Orient.R,
- Flip = false,
- LblX = 0,
- LblY = 0,
- LblOrient = Orient.R,
- MsrdX = 0,
- MsrdY = 22,
- MsrdOrient = Orient.R,
- };
-
- var pr_up = new TBF.Rig.Modbus.PressureMeter.Meret.PressureMeterCfg(new TBF.Rig.Modbus.PressureMeter.Meret.Factory())
- {
- Id = 28,
- Name = "Pr up",
- MsrdFormat = "{0:F2} bar",
- MsrdUnit = Common.Unit.bar,
- MsrdValLimLo = -0.1,
- MsrdValLimHi = 25,
- Shape = Shape.PressM,
- X = 50,
- Y = 270,
- Sz = Sz.M,
- Orient = Orient.R,
- Flip = false,
- LblX = 0,
- LblY = 0,
- LblOrient = Orient.R,
- MsrdX = 0,
- MsrdY = 22,
- MsrdOrient = Orient.R,
- };
-
- var pr_dn = new TBF.Rig.Modbus.PressureMeter.Meret.PressureMeterCfg(new TBF.Rig.Modbus.PressureMeter.Meret.Factory())
- {
- Id = 29,
- Name = "Pr dn",
- MsrdFormat = "{0:F2} bar",
- MsrdUnit = Common.Unit.bar,
- MsrdValLimLo = -0.1,
- MsrdValLimHi = 25,
- Shape = Shape.PressM,
- X = 370,
- Y = 270,
- Sz = Sz.M,
- Orient = Orient.R,
- Flip = false,
- LblX = 0,
- LblY = 0,
- LblOrient = Orient.R,
- MsrdX = 0,
- MsrdY = 22,
- MsrdOrient = Orient.R,
- };
-
- processDrawingCtrl.AddItem(scale);
- processDrawingCtrl.AddItem(diverter);
- processDrawingCtrl.AddItem(regValve);
- processDrawingCtrl.AddItem(flowmeter);
- processDrawingCtrl.AddItem(startValve);
- processDrawingCtrl.AddItem(wm1);
- processDrawingCtrl.AddItem(wm2);
- processDrawingCtrl.AddItem(wm3);
- processDrawingCtrl.AddItem(pump);
- processDrawingCtrl.AddItem(tank);
- processDrawingCtrl.AddItem(drainValve);
- processDrawingCtrl.AddItem(j1);
- processDrawingCtrl.AddItem(j2);
- processDrawingCtrl.AddItem(j3);
- processDrawingCtrl.AddItem(j4);
- processDrawingCtrl.AddItem(j5);
- processDrawingCtrl.AddItem(j6);
- processDrawingCtrl.AddItem(j7);
- processDrawingCtrl.AddItem(t_in);
- processDrawingCtrl.AddItem(t_out);
- processDrawingCtrl.AddItem(t_div);
- processDrawingCtrl.AddItem(pr_up);
- processDrawingCtrl.AddItem(pr_dn);
-
- processDrawingCtrl.PipesS = new string[0];
- processDrawingCtrl.PipesM = new string[0];
- processDrawingCtrl.PipesL = new string[] {
- "11~0~10~0", "10~1~17~0", "17~0~18~0", "18~0~7~0", "7~1~8~0", "8~1~9~0", "9~1~19~0", "19~0~6~0",
- "6~1~5~0", "5~1~4~0", "4~1~20~0", "20~0~21~0", "21~0~3~0", "2~0~16~0", "16~1~22~0", "3~1~23~0" };
- processDrawingCtrl.PipesXL = new string[0];
- processDrawingCtrl.Route = 0;
-
- processDrawingCtrl.SupressRedraws = false; /// Invokes Dijkstra algoritm
- }
public void Settings2UI()
{
@@ -496,12 +98,12 @@ namespace TBF.UI.Process
splitContainer2.SplitterDistance = ls.ProcessSplitDist2;
/// ListViewEx columns
- processListViewEx.Columns.Add(Strings.Nr, (ls.ProcessColumnCount > 0) ? ls.ProcessColumnWidths[0] : 30 * MainWnd.Dpi / Constants.Dpi100pct);
- processListViewEx.Columns.Add(Strings.Error, (ls.ProcessColumnCount > 1) ? ls.ProcessColumnWidths[1] : 50 * MainWnd.Dpi / Constants.Dpi100pct);
- processListViewEx.Columns.Add(Strings.Volume, (ls.ProcessColumnCount > 2) ? ls.ProcessColumnWidths[2] : 50 * MainWnd.Dpi / Constants.Dpi100pct);
- processListViewEx.Columns.Add(Strings.Pulses, (ls.ProcessColumnCount > 3) ? ls.ProcessColumnWidths[3] : 60 * MainWnd.Dpi / Constants.Dpi100pct);
- processListViewEx.Columns.Add(Strings.Ref_pulses, (ls.ProcessColumnCount > 4) ? ls.ProcessColumnWidths[4] : 75 * MainWnd.Dpi / Constants.Dpi100pct);
- processListViewEx.Columns.Add(Strings.SerialNr, (ls.ProcessColumnCount > 5) ? ls.ProcessColumnWidths[5] : 100 * MainWnd.Dpi / Constants.Dpi100pct);
+ processListViewEx.Columns.Add(Strings.Nr, (ls.ProcessColumnCount > 0) ? ls.ProcessColumnWidths[0] : 30 * MainWnd.Dpi / Constants.Dpi100pct);
+ processListViewEx.Columns.Add(Strings.Error, (ls.ProcessColumnCount > 1) ? ls.ProcessColumnWidths[1] : 50 * MainWnd.Dpi / Constants.Dpi100pct);
+ processListViewEx.Columns.Add(Strings.Volume, (ls.ProcessColumnCount > 2) ? ls.ProcessColumnWidths[2] : 50 * MainWnd.Dpi / Constants.Dpi100pct);
+ processListViewEx.Columns.Add(Strings.Pulses, (ls.ProcessColumnCount > 3) ? ls.ProcessColumnWidths[3] : 60 * MainWnd.Dpi / Constants.Dpi100pct);
+ processListViewEx.Columns.Add(Strings.Ref_pulses, (ls.ProcessColumnCount > 4) ? ls.ProcessColumnWidths[4] : 75 * MainWnd.Dpi / Constants.Dpi100pct);
+ processListViewEx.Columns.Add(Strings.SerialNr, (ls.ProcessColumnCount > 5) ? ls.ProcessColumnWidths[5] : 100 * MainWnd.Dpi / Constants.Dpi100pct);
}
///
@@ -547,6 +149,300 @@ namespace TBF.UI.Process
}
+ ///
+ /// Initializes water meters table - ListView control.
+ /// Table is filled with dots "."
+ ///
+ /// ListView control
+ /// Water meters count
+ /// Optional water meters to be used as list view item tags
+ void InitializeTableOfWatermeters(ListView listView, int wmsCount, IList waterMeters = null)
+ {
+ if (listView.Items.Count != wmsCount)
+ {
+ /// Executed when the number of water meters or register readers changes
+ listView.Items.Clear();
+ for (int i = 0; i < wmsCount; i++)
+ {
+ listView.Items.Add(new ListViewItem((i + 1).ToString()));
+ }
+ }
+
+ for (int i = 0; i < wmsCount; 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 = ".";
+ }
+ }
+ else
+ {
+ for (int j = 1; j < (int)Column.Count; j++) /// Column 1 .. Column.Count-1
+ {
+ listView.Items[i].SubItems.Add(".");
+ }
+ }
+
+ if (waterMeters != null && i < waterMeters.Count)
+ {
+ listView.Items[i].Tag = waterMeters[i];
+ }
+ }
+ }
+
+ ///
+ /// Schematic drawing components
+ /// water
+ TBF.Rig.Various.Drawing.Tank.Configuration tankCfg; /// |
+ TBF.Rig.Modbus.PumpFM.DanfossVLT.PumpCfg pumpCfg; /// | setpoint, route based (initially bit nr. = 124)
+ TBF.Rig.Modbus.TempMeter.Groch.TempMeterCfg tempInCfg; /// | measured value
+ TBF.Rig.Modbus.PressureMeter.Meret.PressureMeterCfg pressUpCfg; /// | measured value
+ TBF.Rig.WaterMeters.WaterMeter.WaterMeterCfg wm1Cfg; /// |
+ TBF.Rig.WaterMeters.WaterMeter.WaterMeterCfg wm2Cfg; /// |
+ TBF.Rig.WaterMeters.WaterMeter.WaterMeterCfg wmLastCfg; /// |
+ TBF.Rig.Modbus.TempMeter.Groch.TempMeterCfg tempOutCfg; /// | measured value
+ TBF.Rig.Modbus.PressureMeter.Meret.PressureMeterCfg pressDnCfg; /// | measured value
+ TBF.Rig.BuiltIn.Valve.ValveCfg startValveCfg; /// | route based (initially bit nr. = 125)
+ TBF.Rig.Uni.FlowMeter.FlowMeterCfg flowMeterCfg; /// | measured value
+ TBF.Rig.Uni.RegValve.RegValveCfg regValveCfg; /// | setpoint
+ TBF.Rig.Modbus.TempMeter.Groch.TempMeterCfg tempDivCfg; /// | measured value
+ TBF.Rig.Uni.Diverter.DiverterCfg diverterCfg; /// | route based (initially bit nr. = 126)
+ TBF.Rig.Scales.MettlerToledo.ScaleCfg scaleCfg; /// | measured value
+ TBF.Rig.BuiltIn.Valve.ValveCfg drainValveCfg; /// v route based (initially bit nr. = 127)
+ ///
+ 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 scaleMsrdIx, flowMeterMsrdIx, tempMtrUpMsrdIx, tempMtrDownMsrdIx, tempMtrDivMsrdIx;
+ int pressMtrUpMsrdIx, pressMtrDownMsrdIx;
+ ///
+ int regValveSetpIx, pumpSetpIx;
+
+ IDrawingItCmpntWithMeasuredVal[] cmpntWithMeasuredVal;
+ IDrawingItCmpntWithSetpoint[] cmpntWithSetpoint;
+
+
+ ///
+ /// Initialize hydraulical schematic drawing.
+ /// This should be called before initialization of handlers.
+ ///
+ void InitializeDrawing()
+ {
+ processDrawingCtrl.SupressRedraws = true;
+
+ int id = 1;
+ int msrdIx = 0;
+ int setpIx = 0;
+
+ processDrawingCtrl.AddItem(
+ tankCfg = new TBF.Rig.Various.Drawing.Tank.Configuration("Tank", new TBF.Rig.Various.Drawing.Tank.Factory())
+ {
+ Id = (tankId = id++),
+ X = 570, Y = 410, Shape = Shape.Tank, Sz = Sz.L, Orient = Orient.R, Flip = false,
+ LblX = 33, LblY = 22, LblOrient = Orient.R,
+ });
+
+ pumpSetpIx = setpIx++;
+ processDrawingCtrl.AddItem(
+ pumpCfg = new TBF.Rig.Modbus.PumpFM.DanfossVLT.PumpCfg(new TBF.Rig.Modbus.PumpFM.DanfossVLT.Factory())
+ {
+ Id = (pumpId = id++), Name = "P",
+ X = 450, Y = 480, Shape = Shape.PumpFM, Sz = Sz.L, Orient = Orient.L, Flip = false,
+ LblX = 0, LblY = -46, LblOrient = Orient.R,
+ SetpX = 0, SetpY = -24, SetpOrient = Orient.R, SetpFormat = "{0:F0} %", SetpUnit = Common.Unit.Pct,
+ BitNr = DfltPumpBitNr,
+ Inverted = false,
+ });
+
+ tempMtrUpMsrdIx = msrdIx++;
+ processDrawingCtrl.AddItem(
+ tempInCfg = new TBF.Rig.Modbus.TempMeter.Groch.TempMeterCfg(new TBF.Rig.Modbus.TempMeter.Groch.Factory())
+ {
+ Id = (tempInId = id++), Name = "T in",
+ X = 50, Y = 320, Shape = Shape.TempM, Sz = Sz.M, Orient = Orient.R, Flip = false,
+ LblX = 0, LblY = 2, LblOrient = Orient.R,
+ MsrdX = 0, MsrdY = 24, MsrdOrient = Orient.R, MsrdFormat = "{0:F1} °C", MsrdUnit = Common.Unit.C,
+ MsrdValLimLo = 5, MsrdValLimHi = 95,
+ });
+
+ pressMtrUpMsrdIx = msrdIx++;
+ processDrawingCtrl.AddItem(
+ pressUpCfg = new TBF.Rig.Modbus.PressureMeter.Meret.PressureMeterCfg(new TBF.Rig.Modbus.PressureMeter.Meret.Factory())
+ {
+ Id = (pressUpId = id++), Name = "Pr up",
+ X = 50, Y = 270, Shape = Shape.PressM, Sz = Sz.M, Orient = Orient.R, Flip = false,
+ LblX = 0, LblY = 0, LblOrient = Orient.R,
+ MsrdX = 0, MsrdY = 22, MsrdOrient = Orient.R, MsrdFormat = "{0:F2} bar", MsrdUnit = Common.Unit.bar,
+ MsrdValLimLo = -0.1, MsrdValLimHi = 25,
+ });
+
+ 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,
+ });
+
+ 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,
+ });
+
+ processDrawingCtrl.AddItem(
+ wmLastCfg = new TBF.Rig.WaterMeters.WaterMeter.WaterMeterCfg(new TBF.Rig.WaterMeters.WaterMeter.WaterMeterFactory())
+ {
+ Id = (wmLastId = id++), Name = "WM3",
+ X = 310, Y = 360, Shape = Shape.WaterM, Sz = Sz.L, Orient = Orient.R, Flip = false,
+ LblX = 0, LblY = -24, LblOrient = Orient.R,
+ });
+
+ tempMtrDownMsrdIx = msrdIx++;
+ processDrawingCtrl.AddItem(
+ tempOutCfg = new TBF.Rig.Modbus.TempMeter.Groch.TempMeterCfg(new TBF.Rig.Modbus.TempMeter.Groch.Factory())
+ {
+ Id = (tempOutId = id++), Name = "T out",
+ X = 370, Y = 320, Shape = Shape.TempM, Sz = Sz.M, Orient = Orient.R, Flip = false,
+ LblX = 0, LblY = 2, LblOrient = Orient.R,
+ MsrdX = 0, MsrdY = 24, MsrdOrient = Orient.R, MsrdFormat = "{0:F1} °C", MsrdUnit = Common.Unit.C,
+ MsrdValLimLo = 5, MsrdValLimHi = 95,
+ });
+
+ pressMtrDownMsrdIx = msrdIx++;
+ processDrawingCtrl.AddItem(
+ pressDnCfg = new TBF.Rig.Modbus.PressureMeter.Meret.PressureMeterCfg(new TBF.Rig.Modbus.PressureMeter.Meret.Factory())
+ {
+ Id = (pressDownId = id++), Name = "Pr dn",
+ X = 370, Y = 270, Shape = Shape.PressM, Sz = Sz.M, Orient = Orient.R, Flip = false,
+ LblX = 0, LblY = 0, LblOrient = Orient.R,
+ MsrdX = 0, MsrdY = 22, MsrdOrient = Orient.R, MsrdFormat = "{0:F2} bar", MsrdUnit = Common.Unit.bar,
+ MsrdValLimLo = -0.1, MsrdValLimHi = 25,
+ });
+
+ processDrawingCtrl.AddItem(
+ startValveCfg = new TBF.Rig.BuiltIn.Valve.ValveCfg(new TBF.Rig.BuiltIn.Valve.ValveFactory())
+ {
+ Id = (startValveId = id++), Name = "VI",
+ X = 450, Y = 280, Shape = Shape.Valve, Sz = Sz.L, Orient = Orient.Up, Flip = false,
+ LblX = 48, LblY = 9, LblOrient = Orient.R,
+ BitNr = DfltStartValveBitNr,
+ Inverted = false,
+ });
+
+ flowMeterMsrdIx = msrdIx++;
+ processDrawingCtrl.AddItem(
+ flowMeterCfg = new TBF.Rig.Uni.FlowMeter.FlowMeterCfg(new TBF.Rig.Uni.FlowMeter.Factory(), "I")
+ {
+ Id = (flowMeterId = id++),
+ X = 450, Y = 210, Shape = Shape.FlowM, Sz = Sz.L, Orient = Orient.Up, Flip = true,
+ LblX = 46, LblY = 0, LblOrient = Orient.R,
+ MsrdX = 46, MsrdY = 22, MsrdOrient = Orient.R, MsrdFormat = "{0:F3} m2/h", MsrdUnit = Common.Unit.m3ph,
+ });
+
+ regValveSetpIx = setpIx++;
+ processDrawingCtrl.AddItem(
+ regValveCfg = new TBF.Rig.Uni.RegValve.RegValveCfg("VR", new TBF.Rig.Uni.RegValve.Factory())
+ {
+ Id = (regValveId = id++),
+ X = 450, Y = 140, Shape = Shape.RegV, Sz = Sz.L, Orient = Orient.Up, Flip = true,
+ LblX = 46, LblY = 0, LblOrient = Orient.R,
+ SetpX = 46, SetpY = 22, SetpOrient = Orient.R,
+ });
+
+ tempMtrDivMsrdIx = msrdIx++;
+ processDrawingCtrl.AddItem(
+ tempDivCfg = new TBF.Rig.Modbus.TempMeter.Groch.TempMeterCfg(new TBF.Rig.Modbus.TempMeter.Groch.Factory())
+ {
+ Id = (tempDivId = id++), Name = "T div",
+ X = 660, Y = 30, Shape = Shape.TempM, Sz = Sz.M, Orient = Orient.R, Flip = false,
+ LblX = 0, LblY = 0, LblOrient = Orient.R,
+ MsrdX = 0, MsrdY = 22, MsrdOrient = Orient.R, MsrdFormat = "{0:F1} °C", MsrdUnit = Common.Unit.C,
+ MsrdValLimLo = 5, MsrdValLimHi = 95,
+ });
+
+ processDrawingCtrl.AddItem(
+ diverterCfg = new TBF.Rig.Uni.Diverter.DiverterCfg(new TBF.Rig.Uni.Diverter.Factory())
+ {
+ Id = (diverterId = id++), Name = "Div",
+ X = 610, Y = 90, Shape = Shape.Div, Sz = Sz.L, Orient = Orient.R, Flip = false,
+ LblX = 50, LblY = -8, LblOrient = Orient.R,
+ DivNr1 = 1,
+ BitNr = DfltDiverterBitNr,
+ Inverted = false,
+ });
+
+ scaleMsrdIx = msrdIx++;
+ processDrawingCtrl.AddItem(
+ scaleCfg = new TBF.Rig.Scales.MettlerToledo.ScaleCfg("WT", new TBF.Rig.Scales.MettlerToledo.Factory())
+ {
+ Id = (scaleId = id++),
+ X = 640, Y = 150, Shape = Shape.Scale, Sz = Sz.M, Orient = Orient.R, Flip = false,
+ LblX = 16, LblY = 40, LblOrient = Orient.R,
+ MsrdX = 16, MsrdY = 64, MsrdOrient = Orient.R, MsrdFormat = "{0:F3}", MsrdUnit = Common.Unit.kg,
+ });
+
+ processDrawingCtrl.AddItem(
+ drainValveCfg = new TBF.Rig.BuiltIn.Valve.ValveCfg(new TBF.Rig.BuiltIn.Valve.ValveFactory())
+ {
+ Id = (drainValveId = id++), Name = "VB",
+ X = 660, Y = 270, Shape = Shape.Valve, Sz = Sz.M, Orient = Orient.Dn, Flip = false,
+ LblX = 40, LblY = 5, LblOrient = Orient.R,
+ BitNr = DfltDrainValveBitNr,
+ Inverted = false,
+ });
+
+ /// Junctions
+ processDrawingCtrl.AddItem(new Configuration("J1", new Factory()) { Id = (j1 = id++), Shape = Shape.Junction, X = 50, Y = 490, Sz = Sz.L, });
+ processDrawingCtrl.AddItem(new Configuration("J2", new Factory()) { Id = (j2 = id++), Shape = Shape.Junction, X = 50, Y = 370, Sz = Sz.L, });
+ processDrawingCtrl.AddItem(new Configuration("J3", new Factory()) { Id = (j3 = id++), Shape = Shape.Junction, X = 460, Y = 370, Sz = Sz.L, });
+ 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("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.MsrmntAvailableFlags = new bool[msrdIx];
+ processDrawingCtrl.MeasuredValues = new double[msrdIx];
+ processDrawingCtrl.AltStrings = new string[msrdIx];
+ processDrawingCtrl.Setpoints = new double[setpIx];
+ ///
+ cmpntWithMeasuredVal = new IDrawingItCmpntWithMeasuredVal[msrdIx];
+ cmpntWithSetpoint = new IDrawingItCmpntWithSetpoint[setpIx];
+
+ processDrawingCtrl.PipesS = new string[0];
+ processDrawingCtrl.PipesM = new string[0];
+ 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, 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.PipesXL = new string[0];
+
+ processDrawingCtrl.Route = 0;
+
+ processDrawingCtrl.SupressRedraws = false; /// Invokes Dijkstra algoritm
+ }
+
+
void OnProcedureSelected(object sender, ProcedureSelectedEventArgs args)
{
currentMetersKind = args.Procedure.MetersKind;
@@ -555,67 +451,203 @@ namespace TBF.UI.Process
void OnTestSelected(object sender, TestSelectedEventArgs args)
{
+ InitializeTableOfWatermeters(processListViewEx, ProcessData.WMsCount, ProcessData.BatchRslts.Batch.WaterMeters);
+
+ processDrawingCtrl.SupressRedraws = true;
+
+ /// Feeding path
+ pumpCfg.Name = (args.FeedingPath != null && args.FeedingPath.Pump != null) ? args.FeedingPath.Pump.Name : "n/a";
+
+ /// Bench path
+ tempInCfg.Name = (args.BenchPath != null && args.BenchPath.TempMtrUp != null) ? args.BenchPath.TempMtrUp.Name : "n/a";
+ tempOutCfg.Name = (args.BenchPath != null && args.BenchPath.TempMtrDown != null) ? args.BenchPath.TempMtrDown.Name : "n/a";
+ pressUpCfg.Name = (args.BenchPath != null && args.BenchPath.PressMtrUp != null) ? args.BenchPath.PressMtrUp.Name : "n/a";
+ pressDnCfg.Name = (args.BenchPath != null && args.BenchPath.PressMtrDown != null) ? args.BenchPath.PressMtrDown.Name : "n/a";
+
+ /// Output path
+ scaleCfg.Name = (args.OutputPath != null && args.OutputPath.Scale != null) ? args.OutputPath.Scale.Name : "n/a";
+ drainValveCfg.Name = (args.OutputPath != null && args.OutputPath.Scale != null && args.OutputPath.Scale.DrainValve != null) ? args.OutputPath.Scale.DrainValve.Name : "n/a";
+ diverterCfg.Name = (args.OutputPath != null && args.OutputPath.Diverter != null) ? args.OutputPath.Diverter.Name : "n/a";
+ regValveCfg.Name = (args.OutputPath != null && args.OutputPath.RegValve != null) ? args.OutputPath.RegValve.Name : "n/a";
+ flowMeterCfg.Name = (args.OutputPath != null && args.OutputPath.FlowMeter != null) ? args.OutputPath.FlowMeter.Name : "n/a";
+ startValveCfg.Name = (args.OutputPath != null && args.OutputPath.StartValve1 != null) ? args.OutputPath.StartValve1.Name : "n/a";
+ tempDivCfg.Name = (args.OutputPath != null && args.OutputPath.TempMtrDiv != null) ? args.OutputPath.TempMtrDiv.Name : "n/a";
+
+ /// Meters path
+ //wm1.Name = args.BenchPath;
+ //wm2.Name = args.BenchPath;
+ //wmLast.Name = args.BenchPath;
+
+ /// Route based - pump
+ if (args.FeedingPath != null && args.FeedingPath.Pump != null &&
+ args.FeedingPath.Pump.Cfg is TBF.Rig.BuiltIn.Pump.PumpCfg)
+ {
+ pumpCfg.BitNr = (args.FeedingPath.Pump.Cfg as TBF.Rig.BuiltIn.Pump.PumpCfg).BitNr;
+ pumpCfg.Inverted = (args.FeedingPath.Pump.Cfg as TBF.Rig.BuiltIn.Pump.PumpCfg).Inverted;
+ }
+ else if (args.FeedingPath != null && args.FeedingPath.Pump != null &&
+ args.FeedingPath.Pump.Cfg is TBF.Rig.Modbus.PumpFM.DanfossVLT.PumpCfg)
+ {
+ pumpCfg.BitNr = (args.FeedingPath.Pump.Cfg as TBF.Rig.Modbus.PumpFM.DanfossVLT.PumpCfg).BitNr;
+ pumpCfg.Inverted = (args.FeedingPath.Pump.Cfg as TBF.Rig.Modbus.PumpFM.DanfossVLT.PumpCfg).Inverted;
+ }
+ else
+ {
+ pumpCfg.BitNr = DfltPumpBitNr;
+ pumpCfg.Inverted = false;
+ }
+
+ /// Route based - start valve
+ if (args.OutputPath != null && args.OutputPath.StartValve1 != null &&
+ args.OutputPath.StartValve1.Cfg is TBF.Rig.BuiltIn.Valve.ValveCfg)
+ {
+ startValveCfg.BitNr = (args.OutputPath.StartValve1.Cfg as TBF.Rig.BuiltIn.Valve.ValveCfg).BitNr;
+ startValveCfg.Inverted = (args.OutputPath.StartValve1.Cfg as TBF.Rig.BuiltIn.Valve.ValveCfg).Inverted;
+ }
+ else if (args.OutputPath != null && args.OutputPath.StartValve1 != null &&
+ args.OutputPath.StartValve1.Cfg is TBF.Rig.BuiltIn.ValveEx.ValveCfg)
+ {
+ startValveCfg.BitNr = (args.OutputPath.StartValve1.Cfg as TBF.Rig.BuiltIn.ValveEx.ValveCfg).BitPosition;
+ startValveCfg.Inverted = false;
+ }
+ else
+ {
+ startValveCfg.BitNr = DfltStartValveBitNr;
+ startValveCfg.Inverted = false;
+ }
+
+ /// Route based - diverter
+ if (args.OutputPath != null && args.OutputPath.Diverter != null &&
+ args.OutputPath.Diverter.Cfg is TBF.Rig.Uni.Diverter.DiverterCfg)
+ {
+ diverterCfg.BitNr = (args.OutputPath.Diverter.Cfg as TBF.Rig.Uni.Diverter.DiverterCfg).BitNr;
+ diverterCfg.Inverted = (args.OutputPath.Diverter.Cfg as TBF.Rig.Uni.Diverter.DiverterCfg).Inverted;
+ }
+ else
+ {
+ diverterCfg.BitNr = DfltDiverterBitNr;
+ diverterCfg.Inverted = false;
+ }
+
+ /// Route based - drain valve
+ if (args.OutputPath != null && args.OutputPath.Scale != null && args.OutputPath.Scale.DrainValve != null &&
+ args.OutputPath.Scale.DrainValve.Cfg is TBF.Rig.BuiltIn.Valve.ValveCfg)
+ {
+ drainValveCfg.BitNr = (args.OutputPath.Scale.DrainValve.Cfg as TBF.Rig.BuiltIn.Valve.ValveCfg).BitNr;
+ drainValveCfg.Inverted = (args.OutputPath.Scale.DrainValve.Cfg as TBF.Rig.BuiltIn.Valve.ValveCfg).Inverted;
+ }
+ else
+ {
+ drainValveCfg.BitNr = DfltDrainValveBitNr;
+ drainValveCfg.Inverted = false;
+ }
+
+ cmpntWithMeasuredVal[scaleMsrdIx] = args.OutputPath.Scale as IDrawingItCmpntWithMeasuredVal;
+ cmpntWithMeasuredVal[flowMeterMsrdIx] = args.OutputPath.FlowMeter as IDrawingItCmpntWithMeasuredVal;
+ cmpntWithMeasuredVal[tempMtrUpMsrdIx] = args.BenchPath.TempMtrUp as IDrawingItCmpntWithMeasuredVal;
+ cmpntWithMeasuredVal[tempMtrDownMsrdIx] = args.BenchPath.TempMtrDown as IDrawingItCmpntWithMeasuredVal;
+ cmpntWithMeasuredVal[tempMtrDivMsrdIx] = args.OutputPath.TempMtrDiv as IDrawingItCmpntWithMeasuredVal;
+ cmpntWithMeasuredVal[pressMtrUpMsrdIx] = args.BenchPath.PressMtrUp as IDrawingItCmpntWithMeasuredVal;
+ cmpntWithMeasuredVal[pressMtrDownMsrdIx] = args.BenchPath.PressMtrDown as IDrawingItCmpntWithMeasuredVal;
+
+ cmpntWithSetpoint[regValveSetpIx] = args.OutputPath.RegValve as IDrawingItCmpntWithSetpoint;
+ cmpntWithSetpoint[pumpSetpIx] = args.FeedingPath.Pump as IDrawingItCmpntWithSetpoint;
+
+ UpdateRouteMsrdValuesAndSetpoints(TBF.Rig.StateMachine.ControlBoard != null ? TBF.Rig.StateMachine.ControlBoard.Route : 0);
+
+ processDrawingCtrl.SupressRedraws = false;
}
- void OnProcessDataChanged(object sender, ProcessDataEventArgs args)
+ ///
+ /// This function copies route and process values to the schematic drawing control.
+ /// Schematic drawing is then redrawn accordingly in the next OnPaint().
+ ///
+ ///
+ ///
+ void OnStateMachineTick(object sender, StateMachineTickEventArgs args)
{
- if (ProcessData.RegisterReaders == null || ProcessData.BatchRslts == null ||
- ProcessData.BatchRslts.Batch == null || ProcessData.BatchRslts.Batch.WaterMeters == null)
+ try
{
- return;
- }
+ /// Redraw schematic drawing
+ UpdateRouteMsrdValuesAndSetpoints(args.Route);
- int wmsCount = Math.Min(ProcessData.RegisterReaders.Length, ProcessData.BatchRslts.Batch.WaterMeters.Count);
+ //if (ProcessData.RegisterReaders == null || ProcessData.BatchRslts == null ||
+ // ProcessData.BatchRslts.Batch == null || ProcessData.BatchRslts.Batch.WaterMeters == null)
+ //{
+ // return;
+ //}
- if (processListViewEx.Items.Count != wmsCount)
- {
- /// Invoked only when the number of water meters or register readers changes
- processListViewEx.Items.Clear();
- for (int i = 0; i < wmsCount; i++)
+ ///
+ /// Update water meter states
+ ///
+ TBF.Rig.ControlBoard.IControlBoard cBrd = TBF.Rig.StateMachine.ControlBoard;
+ if (cBrd != null && cBrd.Devices != null && cBrd.Devices.FlowMeter != null && ProcessData.RegisterReaders != null)
{
- var lvi = new ListViewItem((i+1).ToString()); /// Column 0
- for (Column c = (Column)1; c < Column.Count; c++) /// Column 1 .. Column.Count-1
+ double refVolume = cBrd.RefPulses * cBrd.Devices.FlowMeter.LtrPerPulse;
+
+ for (int i = 0; i < Math.Min(processListViewEx.Items.Count, ProcessData.RegisterReaders.Length); i++)
{
- lvi.SubItems.Add(".");
+ var lvi = processListViewEx.Items[i];
+ var rr = ProcessData.RegisterReaders[i];
+
+ if (rr != null && Math.Abs(rr.WMVolume) > float.Epsilon && refVolume > float.Epsilon)
+ {
+ /// 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");
+ lvi.SubItems[(int)Column.Pulses].Text = rr.WMPulses.ToString();
+ lvi.SubItems[(int)Column.RefPulses].Text = rr.WMRefPulses.ToString();
+ }
+ else
+ {
+ lvi.SubItems[(int)Column.Error].Text = string.Empty;
+ lvi.SubItems[(int)Column.Volume].Text = string.Empty;
+ lvi.SubItems[(int)Column.Pulses].Text = string.Empty;
+ lvi.SubItems[(int)Column.RefPulses].Text = string.Empty;
+ }
+
+ if (rr is TBF.Rig.RegisterReaders.S640Stream.S640Stream)
+ {
+ lvi.SubItems[(int)Column.SerialNr].Text = (rr as TBF.Rig.RegisterReaders.S640Stream.S640Stream).PcbNumber.ToString();
+ }
}
- lvi.Tag = ProcessData.BatchRslts.Batch.WaterMeters[i];
- processListViewEx.Items.Add(lvi);
}
}
-
- TBF.Rig.ControlBoard.IControlBoard cBrd = TBF.Rig.StateMachine.ControlBoard;
- if (cBrd != null && cBrd.Devices != null && cBrd.Devices.FlowMeter != null)
+ catch (Exception e)
{
- double refVolume = cBrd.RefPulses * cBrd.Devices.FlowMeter.LtrPerPulse;
- for (int i = 0; i < wmsCount; i++)
- {
- var rr = ProcessData.RegisterReaders[i];
- var lvi = processListViewEx.Items[i];
-
- if (rr != null && Math.Abs(rr.WMVolume) > float.Epsilon && refVolume > float.Epsilon)
- {
- /// 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");
- lvi.SubItems[(int)Column.Pulses].Text = rr.WMPulses.ToString();
- lvi.SubItems[(int)Column.RefPulses].Text = rr.WMRefPulses.ToString();
- }
- else
- {
- lvi.SubItems[(int)Column.Error].Text = string.Empty;
- lvi.SubItems[(int)Column.Volume].Text = string.Empty;
- lvi.SubItems[(int)Column.Pulses].Text = string.Empty;
- lvi.SubItems[(int)Column.RefPulses].Text = string.Empty;
- }
-
- if (rr is TBF.Rig.RegisterReaders.S640Stream.S640Stream)
- {
- lvi.SubItems[(int)Column.SerialNr].Text = (rr as TBF.Rig.RegisterReaders.S640Stream.S640Stream).PcbNumber.ToString();
- }
- }
+ log.ErrorFormat("ProcessTabPageCtrl.OnStateMachineTick() failed: {0}", e.Message);
+ if (e.InnerException != null) log.FatalFormat("InnerMessage : {0}", e.InnerException.Message);
+ log.FatalFormat("StackTrace : {0}{1}", Environment.NewLine, e.StackTrace);
}
}
+ void UpdateRouteMsrdValuesAndSetpoints(UInt128 route)
+ {
+ processDrawingCtrl.Route = route;
+
+ for (int i = 0; i < cmpntWithMeasuredVal.Length; i++)
+ {
+ if (cmpntWithMeasuredVal[i] != null)
+ {
+ processDrawingCtrl.MsrmntAvailableFlags[i] = cmpntWithMeasuredVal[i].MsrmntAvailable;
+ processDrawingCtrl.MeasuredValues[i] = cmpntWithMeasuredVal[i].MeasuredVal;
+ processDrawingCtrl.AltStrings[i] = cmpntWithMeasuredVal[i].AltString;
+ }
+ else
+ {
+ processDrawingCtrl.MsrmntAvailableFlags[i] = false;
+ processDrawingCtrl.MeasuredValues[i] = 0;
+ processDrawingCtrl.AltStrings[i] = string.Empty;
+ }
+ }
+
+ for (int i = 0; i < cmpntWithSetpoint.Length; i++)
+ {
+ processDrawingCtrl.Setpoints[0] = (cmpntWithSetpoint[i] != null) ? cmpntWithSetpoint[i].SetpointVal : 0;
+ }
+ }
+
+
void OnTestCompleted(object sender, TestCompletedEventArgs args)
{
if (ProcessData.RegisterReaders == null || ProcessData.BatchRslts == null ||
@@ -673,7 +705,6 @@ namespace TBF.UI.Process
private void ProcessTabPageCtrl_Paint(object sender, PaintEventArgs e)
{
System.Drawing.Graphics formGraphics = this.CreateGraphics();
-
}
}
}
diff --git a/TBF/UiBridge/Bridge.cs b/TBF/UiBridge/Bridge.cs
index 92334bb45..010cba4ce 100644
--- a/TBF/UiBridge/Bridge.cs
+++ b/TBF/UiBridge/Bridge.cs
@@ -166,9 +166,7 @@ namespace TBF.UiBridge
///
public static void OnStateMachineTick(object sender, StateMachineTickEventArgs args)
{
- if (StateMachineTickHandler == null) return;
- try { StateMachineTickHandler(sender, args); }
- catch (Exception e) { string s = e.ToString(); }
+ if (StateMachineTickHandler != null) StateMachineTickHandler(sender, args);
}
public static event EventHandler StateMachineTickHandler;