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