diff --git a/TestBenchFramework/BenchControl/Elde/ControlBoardDev.cs b/TestBenchFramework/BenchControl/Elde/ControlBoardDev.cs
index d64c51dc6..173ba2625 100644
--- a/TestBenchFramework/BenchControl/Elde/ControlBoardDev.cs
+++ b/TestBenchFramework/BenchControl/Elde/ControlBoardDev.cs
@@ -303,10 +303,18 @@ namespace TBF.BenchControl.Elde
sendCommandFlag = true;
}
- public void SetValves(ulong valvesToOpen, ulong valvesToClose)
+ ///
+ /// Set valves to new positions.
+ ///
+ /// 'ulong' with bits of valves to open set to '1'
+ /// 'ulong' with bits of valves to close set to '1'
+ /// 'ulong' with bits of valves that have changed set to '1'
+ public ulong SetValves(ulong valvesToOpen, ulong valvesToClose)
{
+ ulong oldRoute = route;
route = (((route ^ valvesToInvert) | valvesToOpen) & (~valvesToClose)) ^ valvesToInvert;
sendCommandFlag = true;
+ return oldRoute ^ route;
}
///
diff --git a/TestBenchFramework/BenchControl/Elde/Valve/SetValvesOp.cs b/TestBenchFramework/BenchControl/Elde/Valve/SetValvesOp.cs
index 7f2fa187d..80286b512 100644
--- a/TestBenchFramework/BenchControl/Elde/Valve/SetValvesOp.cs
+++ b/TestBenchFramework/BenchControl/Elde/Valve/SetValvesOp.cs
@@ -27,16 +27,33 @@ namespace TBF.BenchControl.Elde.Valve
this.VClose = (vClose == null) ? new List() : vClose;
}
- /// Max. delay in [s] of all valves to be opened or closed
- public int MaxDelay
+ ///
+ /// Max. delay of all valves that were opened or closed
+ ///
+ /// 'ulong' with bits of valves that were actually changed set ot '1'
+ /// Delay in [s]
+ public int MaxDelay(ulong changed)
{
- get
+ int max = 0;
+ foreach (var vlv in VOpen)
{
- int max = 0;
- foreach (var vlv in VOpen) if ((vlv != null) && (vlv.Delay > max)) max = vlv.Delay;
- foreach (var vlv in VClose) if ((vlv != null) && (vlv.Delay > max)) max = vlv.Delay;
- return max;
+ /// Skip the delay evaluation and update in case the valve/pump have not changed
+ if (vlv is Valve && ((vlv as Valve).Mask & changed) == 0) continue;
+ if (vlv is Pump.Pump && ((vlv as Pump.Pump).Mask & changed) == 0) continue;
+ if (vlv is PumpWithFM.Pump && ((vlv as PumpWithFM.Pump).Mask & changed) == 0) continue;
+
+ if ((vlv != null) && (vlv.Delay > max)) max = vlv.Delay;
}
+ foreach (var vlv in VClose)
+ {
+ /// Skip the delay evaluation and update in case the valve/pump have not changed
+ if (vlv is Valve && ((vlv as Valve).Mask & changed) == 0) continue;
+ if (vlv is Pump.Pump && ((vlv as Pump.Pump).Mask & changed) == 0) continue;
+ if (vlv is PumpWithFM.Pump && ((vlv as PumpWithFM.Pump).Mask & changed) == 0) continue;
+
+ if ((vlv != null) && (vlv.Delay > max)) max = vlv.Delay;
+ }
+ return max;
}
}
@@ -183,9 +200,9 @@ namespace TBF.BenchControl.Elde.Valve
/// Start this operation
public void Start()
{
- controlBoard.SetValves(switchPoints[0].MasksOpen, switchPoints[0].MasksClose);
+ ulong changed = controlBoard.SetValves(switchPoints[0].MasksOpen, switchPoints[0].MasksClose);
swStartTime = StateMachine.Time;
- maxDelayTime = switchPoints[0].MaxDelay;
+ maxDelayTime = switchPoints[0].MaxDelay(changed);
nextIx = 1;
}
@@ -203,11 +220,14 @@ namespace TBF.BenchControl.Elde.Valve
if (StateMachine.Time >= swStartTime + switchPoints[nextIx].TimeSec)
{
- if (switchPoints[nextIx].TimeSec + switchPoints[nextIx].MaxDelay > maxDelayTime)
+ ulong changed = controlBoard.SetValves(switchPoints[nextIx].MasksOpen, switchPoints[nextIx].MasksClose);
+
+ int nextDelay = switchPoints[nextIx].MaxDelay(changed);
+ if (switchPoints[nextIx].TimeSec + nextDelay > maxDelayTime)
{
- maxDelayTime = switchPoints[nextIx].TimeSec + switchPoints[nextIx].MaxDelay;
+ maxDelayTime = switchPoints[nextIx].TimeSec + nextDelay;
}
- controlBoard.SetValves(switchPoints[nextIx].MasksOpen, switchPoints[nextIx].MasksClose);
+
nextIx++;
}
diff --git a/TestBenchFramework/Screens/ProcessTabPageCtrl.Designer.cs b/TestBenchFramework/Screens/ProcessTabPageCtrl.Designer.cs
index 5faa46959..b902eddd9 100644
--- a/TestBenchFramework/Screens/ProcessTabPageCtrl.Designer.cs
+++ b/TestBenchFramework/Screens/ProcessTabPageCtrl.Designer.cs
@@ -708,7 +708,7 @@
// regValveCmpntLabel
//
this.regValveCmpntLabel.AutoSize = true;
- this.regValveCmpntLabel.Location = new System.Drawing.Point(987, 58);
+ this.regValveCmpntLabel.Location = new System.Drawing.Point(1014, 58);
this.regValveCmpntLabel.Name = "regValveCmpntLabel";
this.regValveCmpntLabel.Size = new System.Drawing.Size(79, 13);
this.regValveCmpntLabel.TabIndex = 34;
@@ -717,7 +717,7 @@
// regValvePosLabel
//
this.regValvePosLabel.AutoSize = true;
- this.regValvePosLabel.Location = new System.Drawing.Point(987, 78);
+ this.regValvePosLabel.Location = new System.Drawing.Point(1014, 78);
this.regValvePosLabel.Name = "regValvePosLabel";
this.regValvePosLabel.Size = new System.Drawing.Size(67, 13);
this.regValvePosLabel.TabIndex = 35;
@@ -726,7 +726,7 @@
// label21
//
this.label21.AutoSize = true;
- this.label21.Location = new System.Drawing.Point(898, 78);
+ this.label21.Location = new System.Drawing.Point(925, 78);
this.label21.Name = "label21";
this.label21.Size = new System.Drawing.Size(85, 13);
this.label21.TabIndex = 36;
@@ -735,7 +735,7 @@
// tDivCmpntLabel
//
this.tDivCmpntLabel.AutoSize = true;
- this.tDivCmpntLabel.Location = new System.Drawing.Point(987, 129);
+ this.tDivCmpntLabel.Location = new System.Drawing.Point(1014, 129);
this.tDivCmpntLabel.Name = "tDivCmpntLabel";
this.tDivCmpntLabel.Size = new System.Drawing.Size(56, 13);
this.tDivCmpntLabel.TabIndex = 39;
@@ -744,7 +744,7 @@
// tDivLabel
//
this.tDivLabel.AutoSize = true;
- this.tDivLabel.Location = new System.Drawing.Point(987, 148);
+ this.tDivLabel.Location = new System.Drawing.Point(1014, 148);
this.tDivLabel.Name = "tDivLabel";
this.tDivLabel.Size = new System.Drawing.Size(26, 13);
this.tDivLabel.TabIndex = 38;
@@ -753,7 +753,7 @@
// label24
//
this.label24.AutoSize = true;
- this.label24.Location = new System.Drawing.Point(929, 148);
+ this.label24.Location = new System.Drawing.Point(956, 148);
this.label24.Name = "label24";
this.label24.Size = new System.Drawing.Size(54, 13);
this.label24.TabIndex = 37;
@@ -762,7 +762,7 @@
// scaleCmpntLabel
//
this.scaleCmpntLabel.AutoSize = true;
- this.scaleCmpntLabel.Location = new System.Drawing.Point(987, 209);
+ this.scaleCmpntLabel.Location = new System.Drawing.Point(1014, 209);
this.scaleCmpntLabel.Name = "scaleCmpntLabel";
this.scaleCmpntLabel.Size = new System.Drawing.Size(62, 13);
this.scaleCmpntLabel.TabIndex = 40;
@@ -771,7 +771,7 @@
// label22
//
this.label22.AutoSize = true;
- this.label22.Location = new System.Drawing.Point(927, 230);
+ this.label22.Location = new System.Drawing.Point(954, 230);
this.label22.Name = "label22";
this.label22.Size = new System.Drawing.Size(56, 13);
this.label22.TabIndex = 41;
@@ -780,7 +780,7 @@
// massLabel
//
this.massLabel.AutoSize = true;
- this.massLabel.Location = new System.Drawing.Point(987, 230);
+ this.massLabel.Location = new System.Drawing.Point(1014, 230);
this.massLabel.Name = "massLabel";
this.massLabel.Size = new System.Drawing.Size(31, 13);
this.massLabel.TabIndex = 42;
@@ -789,7 +789,7 @@
// label23
//
this.label23.AutoSize = true;
- this.label23.Location = new System.Drawing.Point(907, 250);
+ this.label23.Location = new System.Drawing.Point(934, 250);
this.label23.Name = "label23";
this.label23.Size = new System.Drawing.Size(76, 13);
this.label23.TabIndex = 43;
@@ -798,7 +798,7 @@
// massDiffLabel
//
this.massDiffLabel.AutoSize = true;
- this.massDiffLabel.Location = new System.Drawing.Point(987, 250);
+ this.massDiffLabel.Location = new System.Drawing.Point(1014, 250);
this.massDiffLabel.Name = "massDiffLabel";
this.massDiffLabel.Size = new System.Drawing.Size(47, 13);
this.massDiffLabel.TabIndex = 44;
@@ -825,7 +825,7 @@
// label26
//
this.label26.AutoSize = true;
- this.label26.Location = new System.Drawing.Point(927, 271);
+ this.label26.Location = new System.Drawing.Point(954, 271);
this.label26.Name = "label26";
this.label26.Size = new System.Drawing.Size(56, 13);
this.label26.TabIndex = 47;
@@ -834,7 +834,7 @@
// volumeCtvLabel
//
this.volumeCtvLabel.AutoSize = true;
- this.volumeCtvLabel.Location = new System.Drawing.Point(987, 271);
+ this.volumeCtvLabel.Location = new System.Drawing.Point(1014, 271);
this.volumeCtvLabel.Name = "volumeCtvLabel";
this.volumeCtvLabel.Size = new System.Drawing.Size(57, 13);
this.volumeCtvLabel.TabIndex = 48;
@@ -843,7 +843,7 @@
// label27
//
this.label27.AutoSize = true;
- this.label27.Location = new System.Drawing.Point(912, 293);
+ this.label27.Location = new System.Drawing.Point(939, 293);
this.label27.Name = "label27";
this.label27.Size = new System.Drawing.Size(71, 13);
this.label27.TabIndex = 49;
@@ -852,7 +852,7 @@
// refErrorLabel
//
this.refErrorLabel.AutoSize = true;
- this.refErrorLabel.Location = new System.Drawing.Point(987, 293);
+ this.refErrorLabel.Location = new System.Drawing.Point(1014, 293);
this.refErrorLabel.Name = "refErrorLabel";
this.refErrorLabel.Size = new System.Drawing.Size(41, 13);
this.refErrorLabel.TabIndex = 50;
@@ -1005,7 +1005,7 @@
// reservoirPictureBox
//
this.reservoirPictureBox.Image = ((System.Drawing.Image)(resources.GetObject("reservoirPictureBox.Image")));
- this.reservoirPictureBox.Location = new System.Drawing.Point(922, 386);
+ this.reservoirPictureBox.Location = new System.Drawing.Point(949, 386);
this.reservoirPictureBox.Name = "reservoirPictureBox";
this.reservoirPictureBox.Size = new System.Drawing.Size(142, 109);
this.reservoirPictureBox.TabIndex = 67;
@@ -1504,7 +1504,7 @@
this.Controls.Add(this.groupBox1);
this.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
this.Name = "ProcessTabPageCtrl";
- this.Size = new System.Drawing.Size(1071, 498);
+ this.Size = new System.Drawing.Size(1097, 498);
this.Load += new System.EventHandler(this.ProcessTabPageCtrl_Load);
this.groupBox1.ResumeLayout(false);
this.groupBox1.PerformLayout();
diff --git a/TestBenchFramework/Screens/ProcessTabPageCtrl.cs b/TestBenchFramework/Screens/ProcessTabPageCtrl.cs
index 58d81528c..b70634dc9 100644
--- a/TestBenchFramework/Screens/ProcessTabPageCtrl.cs
+++ b/TestBenchFramework/Screens/ProcessTabPageCtrl.cs
@@ -275,10 +275,10 @@ namespace TBF.Screens
if (Program.WMsCount >= 6)
{
- pulses5Label.Text = args.WmPulses[5].ToString();
- refPulses5Label.Text = args.WmRefPulses[5].ToString();
- volume5Label.Text = args.WmVolume[5].ToString();
- error5Label.Text = args.WmErrPct[5].ToString();
+ pulses6Label.Text = args.WmPulses[5].ToString();
+ refPulses6Label.Text = args.WmRefPulses[5].ToString();
+ volume6Label.Text = args.WmVolume[5].ToString();
+ error6Label.Text = args.WmErrPct[5].ToString();
}
tInLabel.Text = args.Tin.ToString();
@@ -339,10 +339,10 @@ namespace TBF.Screens
if (Program.WMsCount >= 6)
{
- pulses5Label.Text = tRes.Meters[5].PulsesMeter.ToString("F0");
- refPulses5Label.Text = tRes.Meters[5].PulsesMaster.ToString("F0");
- volume5Label.Text = tRes.Meters[5].VolumeMeter.ToString("F2");
- error5Label.Text = tRes.Meters[5].VolumeErrorPct.ToString("F2");
+ pulses6Label.Text = tRes.Meters[5].PulsesMeter.ToString("F0");
+ refPulses6Label.Text = tRes.Meters[5].PulsesMaster.ToString("F0");
+ volume6Label.Text = tRes.Meters[5].VolumeMeter.ToString("F2");
+ error6Label.Text = tRes.Meters[5].VolumeErrorPct.ToString("F2");
}
tInLabel.Text = tRes.TempInAvrg.ToString("F2");
@@ -366,6 +366,8 @@ namespace TBF.Screens
}
else if (tRes.MetersKind == Entities.MetersKind.Combined)
{
+ /// TODO: Rewrite for an arbitrary number of watermeters
+ ///
pulses1Label.Text = tRes.Meters[0].PulsesMeter.ToString("F0");
pulses2Label.Text = tRes.Meters[1].PulsesMeter.ToString("F0");
pulses3Label.Text = tRes.CombinedMeters[0].PulsesMeter.ToString("F0");
diff --git a/TestBenchFramework/Screens/ProcessTabPageCtrl.resx b/TestBenchFramework/Screens/ProcessTabPageCtrl.resx
index fe68dfd74..e9600dce4 100644
--- a/TestBenchFramework/Screens/ProcessTabPageCtrl.resx
+++ b/TestBenchFramework/Screens/ProcessTabPageCtrl.resx
@@ -121,7 +121,7 @@
iVBORw0KGgoAAAANSUhEUgAAAI4AAABtCAYAAAB3LVkkAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- YQUAAAAJcEhZcwAADr4AAA6+AepCscAAAAEuSURBVHhe7dIxDoAwEAQx/v/pQFJQBaRM7ZN8zbZzPTcg
+ YQUAAAAJcEhZcwAADr0AAA69AUf7kK0AAAEuSURBVHhe7dIxDoAwEAQx/v/pQFJQBaRM7ZN8zbZzPTcg
mG/AAeGQCIdEOCTCIREOiXBIhEMiHBLhkAiHRDgkwiERDolwSIRDIhwS4ZAIh0Q4JMIhEQ6JcEiEQyIc
EuGQCIdEOCTCIREOiXBIhEMiHBLhkAiHRDgkwiERDolwSIRDIhwS4ZAIh0Q4JMIhEQ6JcEiEQyIcEuGQ
CIdEOCTCIREOiXBIhEMiHBLhkAiHRDgkwiERDolwSIRDIhwS4ZAIh0Q4JMIhEQ6JcEiEQyIcEuGQCIdE
@@ -132,7 +132,7 @@
iVBORw0KGgoAAAANSUhEUgAAACYAAAAmCAYAAACoPemuAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- YQUAAAAJcEhZcwAADr4AAA6+AepCscAAAALTSURBVFhH7Ze9ajJBFIZXjZAiCQT8gYC1vSnUQnIBglhq
+ YQUAAAAJcEhZcwAADr0AAA69AUf7kK0AAALTSURBVFhH7Ze9ajJBFIZXjZAiCQT8gYC1vSnUQnIBglhq
EEm0sPAOcgGWgp2kSWGV0jIkvSZgk4hNGiF3kCrdZN/Vs3N29xiV7PDxQYoHdp0z7zw4u8sca7lcqt8Q
iUSUZVkBpNp92FssnU47cIlisagajYYLHzs4OHDqR6ORmLeJncQmk4mq1+ueBXu93k5UKhV3TjKZVN1u
V1zDz1axQqHgESIkCQkuxlksFuJ6xI9i2WxWDAWShMQmMWyxtCYhig2HQ1UqldyQ01PL3gJL3dzoYElC
@@ -150,7 +150,7 @@
iVBORw0KGgoAAAANSUhEUgAAACYAAAAeCAYAAABAFGxuAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- YQUAAAAJcEhZcwAADr4AAA6+AepCscAAAAIfSURBVFhH7dexS2pRHAfw0wukyUChpUkRoqFVF5fGApHW
+ YQUAAAAJcEhZcwAADr0AAA69AUf7kK0AAAIfSURBVFhH7dexS2pRHAfw0wukyUChpUkRoqFVF5fGApHW
N8TL1cE50L9AHBoFHaPVNWrQFh1cHk+CBwqXtzwIgmqqll/fc+65eo/3p2Xee23owMfi/s79/b54L3Wv
sCyLPqrZbJIQwhdcf7fvYNO4/m6fCLYG20vapF6vR6PRiJ0jfSJYBGhJ9yAokUhQvV5nZ60omEP2y1Ay
maRisWjMWihYqVRCIz+DOdpg33udTkfNwu/eG3O2H8A19ksa1kHNkx9VkKnf8we4hn4awTjYpT74VYQY
@@ -165,7 +165,7 @@
iVBORw0KGgoAAAANSUhEUgAAACYAAAAeCAYAAABAFGxuAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- YQUAAAAJcEhZcwAADr4AAA6+AepCscAAAAIfSURBVFhH7dexS2pRHAfw0wukyUChpUkRoqFVF5fGApHW
+ YQUAAAAJcEhZcwAADr0AAA69AUf7kK0AAAIfSURBVFhH7dexS2pRHAfw0wukyUChpUkRoqFVF5fGApHW
N8TL1cE50L9AHBoFHaPVNWrQFh1cHk+CBwqXtzwIgmqqll/fc+65eo/3p2Xee23owMfi/s79/b54L3Wv
sCyLPqrZbJIQwhdcf7fvYNO4/m6fCLYG20vapF6vR6PRiJ0jfSJYBGhJ9yAokUhQvV5nZ60omEP2y1Ay
maRisWjMWihYqVRCIz+DOdpg33udTkfNwu/eG3O2H8A19ksa1kHNkx9VkKnf8we4hn4awTjYpT74VYQY
@@ -180,7 +180,7 @@
iVBORw0KGgoAAAANSUhEUgAAACYAAAAeCAYAAABAFGxuAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- YQUAAAAJcEhZcwAADr4AAA6+AepCscAAAAIfSURBVFhH7dexS2pRHAfw0wukyUChpUkRoqFVF5fGApHW
+ YQUAAAAJcEhZcwAADr0AAA69AUf7kK0AAAIfSURBVFhH7dexS2pRHAfw0wukyUChpUkRoqFVF5fGApHW
N8TL1cE50L9AHBoFHaPVNWrQFh1cHk+CBwqXtzwIgmqqll/fc+65eo/3p2Xee23owMfi/s79/b54L3Wv
sCyLPqrZbJIQwhdcf7fvYNO4/m6fCLYG20vapF6vR6PRiJ0jfSJYBGhJ9yAokUhQvV5nZ60omEP2y1Ay
maRisWjMWihYqVRCIz+DOdpg33udTkfNwu/eG3O2H8A19ksa1kHNkx9VkKnf8we4hn4awTjYpT74VYQY
@@ -195,7 +195,7 @@
iVBORw0KGgoAAAANSUhEUgAAACYAAAAeCAYAAABAFGxuAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- YQUAAAAJcEhZcwAADr0AAA69AUf7kK0AAAIfSURBVFhH7dexS2pRHAfw0wukyUChpUkRoqFVF5fGApHW
+ YQUAAAAJcEhZcwAADrwAAA68AZW8ckkAAAIfSURBVFhH7dexS2pRHAfw0wukyUChpUkRoqFVF5fGApHW
N8TL1cE50L9AHBoFHaPVNWrQFh1cHk+CBwqXtzwIgmqqll/fc+65eo/3p2Xee23owMfi/s79/b54L3Wv
sCyLPqrZbJIQwhdcf7fvYNO4/m6fCLYG20vapF6vR6PRiJ0jfSJYBGhJ9yAokUhQvV5nZ60omEP2y1Ay
maRisWjMWihYqVRCIz+DOdpg33udTkfNwu/eG3O2H8A19ksa1kHNkx9VkKnf8we4hn4awTjYpT74VYQY
@@ -210,7 +210,7 @@
iVBORw0KGgoAAAANSUhEUgAAACYAAAAeCAYAAABAFGxuAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- YQUAAAAJcEhZcwAADr0AAA69AUf7kK0AAAIfSURBVFhH7dexS2pRHAfw0wukyUChpUkRoqFVF5fGApHW
+ YQUAAAAJcEhZcwAADrwAAA68AZW8ckkAAAIfSURBVFhH7dexS2pRHAfw0wukyUChpUkRoqFVF5fGApHW
N8TL1cE50L9AHBoFHaPVNWrQFh1cHk+CBwqXtzwIgmqqll/fc+65eo/3p2Xee23owMfi/s79/b54L3Wv
sCyLPqrZbJIQwhdcf7fvYNO4/m6fCLYG20vapF6vR6PRiJ0jfSJYBGhJ9yAokUhQvV5nZ60omEP2y1Ay
maRisWjMWihYqVRCIz+DOdpg33udTkfNwu/eG3O2H8A19ksa1kHNkx9VkKnf8we4hn4awTjYpT74VYQY