- Tank emptying on start-up implemented, EmptyTimeSec parameter added to Balances
- added events Event.TimerBusy, Event.ValvesBusy, etc. - fixed bug in SetValvesOp - preparing a virtual bench drawing on the Process screen - partly done
This commit is contained in:
parent
6aada39d97
commit
415adba8cf
@ -23,7 +23,7 @@ namespace TBF.BenchControl.Elde.Valve
|
||||
public SwitchPoint(int time, IList<IValve> vOpen, IList<IValve> vClose)
|
||||
{
|
||||
this.TimeSec = time;
|
||||
this.VOpen = (vOpen == null) ? new List<IValve>() : vOpen;
|
||||
this.VOpen = (vOpen == null) ? new List<IValve>() : vOpen;
|
||||
this.VClose = (vClose == null) ? new List<IValve>() : vClose;
|
||||
}
|
||||
|
||||
@ -78,7 +78,7 @@ namespace TBF.BenchControl.Elde.Valve
|
||||
foreach (var valve in StateMachine.CoupledValves)
|
||||
{
|
||||
if ((!valve.InvertCouple && valvesOpen.Contains(valve.CoupledTo)) ||
|
||||
(valve.InvertCouple && valvesClose.Contains(valve.CoupledTo)))
|
||||
(valve.InvertCouple && valvesClose.Contains(valve.CoupledTo)))
|
||||
{
|
||||
/// The coupled valve 'valve' is opening
|
||||
int time = valve.LagOpening;
|
||||
@ -92,7 +92,7 @@ namespace TBF.BenchControl.Elde.Valve
|
||||
}
|
||||
}
|
||||
else if ((!valve.InvertCouple && valvesClose.Contains(valve.CoupledTo)) ||
|
||||
(valve.InvertCouple && valvesOpen.Contains(valve.CoupledTo)))
|
||||
(valve.InvertCouple && valvesOpen.Contains(valve.CoupledTo)))
|
||||
{
|
||||
/// The coupled valve 'valve' is closing
|
||||
int time = valve.LagClosing;
|
||||
@ -175,8 +175,8 @@ namespace TBF.BenchControl.Elde.Valve
|
||||
if (controlBoard == null) throw new ArgumentNullException("ctrlBoard");
|
||||
this.controlBoard = controlBoard;
|
||||
|
||||
if (valvesOpen == null) valvesOpen = new List<IValve>();
|
||||
if (valvesClose == null) valvesOpen = new List<IValve>();
|
||||
if (valvesOpen == null) valvesOpen = new List<IValve>();
|
||||
if (valvesClose == null) valvesClose = new List<IValve>();
|
||||
|
||||
switchPointsRaw = CollectSwitchPoints(valvesOpen, valvesClose);
|
||||
switchPoints = SortAndMergeSwitchPoints(switchPointsRaw);
|
||||
@ -215,7 +215,7 @@ namespace TBF.BenchControl.Elde.Valve
|
||||
if (nextIx >= switchPoints.Count)
|
||||
{
|
||||
if (StateMachine.Time >= swStartTime + maxDelayTime) return Event.ValvesSet;
|
||||
else return Event.None;
|
||||
else return Event.ValvesBusy;
|
||||
}
|
||||
|
||||
if (StateMachine.Time >= swStartTime + switchPoints[nextIx].TimeSec)
|
||||
@ -231,7 +231,7 @@ namespace TBF.BenchControl.Elde.Valve
|
||||
nextIx++;
|
||||
}
|
||||
|
||||
return Event.None;
|
||||
return Event.ValvesBusy;
|
||||
}
|
||||
|
||||
/// <summary>Start this operation</summary>
|
||||
|
||||
@ -36,9 +36,14 @@
|
||||
public enum Event
|
||||
{
|
||||
None = 0,
|
||||
Done,
|
||||
Busy, /// Useful when waiting in state until at least one is busy (all are done)
|
||||
Done, /// Useful when waiting in state until the first is done, the rest miht still be busy
|
||||
///
|
||||
ModelessFormClosed,
|
||||
|
||||
ValvesBusy,
|
||||
ValvesSet,
|
||||
|
||||
AmbientDone,
|
||||
BalanceDone,
|
||||
BalanceOverload,
|
||||
@ -107,5 +112,6 @@
|
||||
No,
|
||||
Next, /// To move to the next state when debugging
|
||||
OK,
|
||||
TimerBusy,
|
||||
}
|
||||
}
|
||||
|
||||
@ -10,7 +10,7 @@ namespace TBF.BenchControl.GenericDevices
|
||||
public interface IBalance : IDevice, IComponent
|
||||
{
|
||||
/// <summary>
|
||||
/// Camera number: 0-based index required for communication with the Elde component
|
||||
/// Balance number: 0-based index required for communication with the Elde component
|
||||
/// </summary>
|
||||
int BalanceNr { get; }
|
||||
|
||||
@ -24,6 +24,12 @@ namespace TBF.BenchControl.GenericDevices
|
||||
/// </summary>
|
||||
bool IsEmpty(float mass);
|
||||
|
||||
/// <summary>
|
||||
/// Time in seconds to empty the tank completely when it is full
|
||||
/// </summary>
|
||||
int EmptyTimeSec { get; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Measurement correction table
|
||||
/// </summary>
|
||||
|
||||
@ -15,15 +15,17 @@ namespace TBF.BenchControl.MettlerToledo
|
||||
public Handshake Handshake;
|
||||
public float Capacity; /// Max. water mass in 'kg' or volume in 'l'
|
||||
public float Empty; /// 'Empty' water mass in 'kg' or volume in 'l'
|
||||
public int EmptyTimeSec;
|
||||
|
||||
/// Parameterless constructor
|
||||
public BalanceCfg()
|
||||
{
|
||||
Empty = 20.0f;
|
||||
EmptyTimeSec = 180;
|
||||
}
|
||||
|
||||
/// Constructor
|
||||
public BalanceCfg(IComponentFactory factory, string name, int comPortNr, int baudRate, Parity parity, int dataBits, StopBits stopBits, Handshake handshake, float capacity, float empty)
|
||||
public BalanceCfg(IComponentFactory factory, string name, int comPortNr, int baudRate, Parity parity, int dataBits, StopBits stopBits, Handshake handshake, float capacity, float empty, int emptyTimeSec)
|
||||
: base(factory, name)
|
||||
{
|
||||
this.ComPortNr = comPortNr;
|
||||
@ -34,16 +36,18 @@ namespace TBF.BenchControl.MettlerToledo
|
||||
this.Handshake = handshake;
|
||||
this.Capacity = capacity;
|
||||
this.Empty = empty;
|
||||
this.EmptyTimeSec = emptyTimeSec;
|
||||
}
|
||||
|
||||
public IComponentCfg Clone()
|
||||
{
|
||||
return new BalanceCfg(Factory, Name, ComPortNr, BaudRate, Parity, DataBits, StopBits, Handshake, Capacity, Empty);
|
||||
return new BalanceCfg(Factory, Name, ComPortNr, BaudRate, Parity, DataBits, StopBits, Handshake, Capacity, Empty, EmptyTimeSec);
|
||||
}
|
||||
|
||||
public string ToString(int i)
|
||||
{
|
||||
return string.Format("COM{0}, {1}Bd, {2}bits, parity={3}, stopBits={4}, {5}, capacity={6}kg", ComPortNr, BaudRate, DataBits, Parity, StopBits, Handshake, Capacity);
|
||||
return string.Format("COM{0}, {1}Bd, {2}bits, parity={3}, stopBits={4}, {5}, capacity={6}kg, empty={7}kg, emptyTime={8}s",
|
||||
ComPortNr, BaudRate, DataBits, Parity, StopBits, Handshake, Capacity, Empty, EmptyTimeSec);
|
||||
}
|
||||
|
||||
public TBF.Entities.Component CreateDbEntity()
|
||||
|
||||
@ -49,13 +49,16 @@
|
||||
this.label3 = new System.Windows.Forms.Label();
|
||||
this.emptyTextBox = new System.Windows.Forms.TextBox();
|
||||
this.emptyLabel = new System.Windows.Forms.Label();
|
||||
this.label4 = new System.Windows.Forms.Label();
|
||||
this.emptyTimeTextBox = new System.Windows.Forms.TextBox();
|
||||
this.label5 = new System.Windows.Forms.Label();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// handshakeComboBox
|
||||
//
|
||||
this.handshakeComboBox.Enabled = false;
|
||||
this.handshakeComboBox.FormattingEnabled = true;
|
||||
this.handshakeComboBox.Location = new System.Drawing.Point(136, 173);
|
||||
this.handshakeComboBox.Location = new System.Drawing.Point(136, 159);
|
||||
this.handshakeComboBox.Name = "handshakeComboBox";
|
||||
this.handshakeComboBox.Size = new System.Drawing.Size(130, 21);
|
||||
this.handshakeComboBox.TabIndex = 14;
|
||||
@ -64,7 +67,7 @@
|
||||
//
|
||||
this.stopBitsComboBox.Enabled = false;
|
||||
this.stopBitsComboBox.FormattingEnabled = true;
|
||||
this.stopBitsComboBox.Location = new System.Drawing.Point(136, 149);
|
||||
this.stopBitsComboBox.Location = new System.Drawing.Point(136, 137);
|
||||
this.stopBitsComboBox.Name = "stopBitsComboBox";
|
||||
this.stopBitsComboBox.Size = new System.Drawing.Size(130, 21);
|
||||
this.stopBitsComboBox.TabIndex = 12;
|
||||
@ -73,7 +76,7 @@
|
||||
//
|
||||
this.parityComboBox.Enabled = false;
|
||||
this.parityComboBox.FormattingEnabled = true;
|
||||
this.parityComboBox.Location = new System.Drawing.Point(136, 101);
|
||||
this.parityComboBox.Location = new System.Drawing.Point(136, 93);
|
||||
this.parityComboBox.Name = "parityComboBox";
|
||||
this.parityComboBox.Size = new System.Drawing.Size(130, 21);
|
||||
this.parityComboBox.TabIndex = 8;
|
||||
@ -81,7 +84,7 @@
|
||||
// nameTextBox
|
||||
//
|
||||
this.nameTextBox.Enabled = false;
|
||||
this.nameTextBox.Location = new System.Drawing.Point(136, 29);
|
||||
this.nameTextBox.Location = new System.Drawing.Point(136, 27);
|
||||
this.nameTextBox.Name = "nameTextBox";
|
||||
this.nameTextBox.Size = new System.Drawing.Size(130, 20);
|
||||
this.nameTextBox.TabIndex = 2;
|
||||
@ -89,7 +92,7 @@
|
||||
// nameLabel
|
||||
//
|
||||
this.nameLabel.AutoSize = true;
|
||||
this.nameLabel.Location = new System.Drawing.Point(26, 32);
|
||||
this.nameLabel.Location = new System.Drawing.Point(26, 30);
|
||||
this.nameLabel.Name = "nameLabel";
|
||||
this.nameLabel.Size = new System.Drawing.Size(35, 13);
|
||||
this.nameLabel.TabIndex = 1;
|
||||
@ -98,7 +101,7 @@
|
||||
// classNameLabel
|
||||
//
|
||||
this.classNameLabel.AutoSize = true;
|
||||
this.classNameLabel.Location = new System.Drawing.Point(133, 8);
|
||||
this.classNameLabel.Location = new System.Drawing.Point(133, 7);
|
||||
this.classNameLabel.Name = "classNameLabel";
|
||||
this.classNameLabel.Size = new System.Drawing.Size(83, 13);
|
||||
this.classNameLabel.TabIndex = 0;
|
||||
@ -107,7 +110,7 @@
|
||||
// handshakeLabel
|
||||
//
|
||||
this.handshakeLabel.AutoSize = true;
|
||||
this.handshakeLabel.Location = new System.Drawing.Point(25, 176);
|
||||
this.handshakeLabel.Location = new System.Drawing.Point(25, 162);
|
||||
this.handshakeLabel.Name = "handshakeLabel";
|
||||
this.handshakeLabel.Size = new System.Drawing.Size(62, 13);
|
||||
this.handshakeLabel.TabIndex = 13;
|
||||
@ -116,7 +119,7 @@
|
||||
// stopBitsLabel
|
||||
//
|
||||
this.stopBitsLabel.AutoSize = true;
|
||||
this.stopBitsLabel.Location = new System.Drawing.Point(25, 152);
|
||||
this.stopBitsLabel.Location = new System.Drawing.Point(25, 140);
|
||||
this.stopBitsLabel.Name = "stopBitsLabel";
|
||||
this.stopBitsLabel.Size = new System.Drawing.Size(49, 13);
|
||||
this.stopBitsLabel.TabIndex = 11;
|
||||
@ -125,7 +128,7 @@
|
||||
// dataBitsTextBox
|
||||
//
|
||||
this.dataBitsTextBox.Enabled = false;
|
||||
this.dataBitsTextBox.Location = new System.Drawing.Point(136, 125);
|
||||
this.dataBitsTextBox.Location = new System.Drawing.Point(136, 115);
|
||||
this.dataBitsTextBox.Name = "dataBitsTextBox";
|
||||
this.dataBitsTextBox.Size = new System.Drawing.Size(43, 20);
|
||||
this.dataBitsTextBox.TabIndex = 10;
|
||||
@ -133,7 +136,7 @@
|
||||
// dataBitsLabel
|
||||
//
|
||||
this.dataBitsLabel.AutoSize = true;
|
||||
this.dataBitsLabel.Location = new System.Drawing.Point(25, 128);
|
||||
this.dataBitsLabel.Location = new System.Drawing.Point(25, 118);
|
||||
this.dataBitsLabel.Name = "dataBitsLabel";
|
||||
this.dataBitsLabel.Size = new System.Drawing.Size(50, 13);
|
||||
this.dataBitsLabel.TabIndex = 9;
|
||||
@ -142,7 +145,7 @@
|
||||
// partityLabel
|
||||
//
|
||||
this.partityLabel.AutoSize = true;
|
||||
this.partityLabel.Location = new System.Drawing.Point(25, 104);
|
||||
this.partityLabel.Location = new System.Drawing.Point(25, 98);
|
||||
this.partityLabel.Name = "partityLabel";
|
||||
this.partityLabel.Size = new System.Drawing.Size(33, 13);
|
||||
this.partityLabel.TabIndex = 7;
|
||||
@ -151,7 +154,7 @@
|
||||
// baudRateTextBox
|
||||
//
|
||||
this.baudRateTextBox.Enabled = false;
|
||||
this.baudRateTextBox.Location = new System.Drawing.Point(136, 77);
|
||||
this.baudRateTextBox.Location = new System.Drawing.Point(136, 71);
|
||||
this.baudRateTextBox.Name = "baudRateTextBox";
|
||||
this.baudRateTextBox.Size = new System.Drawing.Size(130, 20);
|
||||
this.baudRateTextBox.TabIndex = 6;
|
||||
@ -159,7 +162,7 @@
|
||||
// baudRateLabel
|
||||
//
|
||||
this.baudRateLabel.AutoSize = true;
|
||||
this.baudRateLabel.Location = new System.Drawing.Point(25, 80);
|
||||
this.baudRateLabel.Location = new System.Drawing.Point(25, 74);
|
||||
this.baudRateLabel.Name = "baudRateLabel";
|
||||
this.baudRateLabel.Size = new System.Drawing.Size(58, 13);
|
||||
this.baudRateLabel.TabIndex = 5;
|
||||
@ -168,7 +171,7 @@
|
||||
// comPortNrTextBox
|
||||
//
|
||||
this.comPortNrTextBox.Enabled = false;
|
||||
this.comPortNrTextBox.Location = new System.Drawing.Point(136, 53);
|
||||
this.comPortNrTextBox.Location = new System.Drawing.Point(136, 49);
|
||||
this.comPortNrTextBox.Name = "comPortNrTextBox";
|
||||
this.comPortNrTextBox.Size = new System.Drawing.Size(43, 20);
|
||||
this.comPortNrTextBox.TabIndex = 4;
|
||||
@ -176,7 +179,7 @@
|
||||
// label1
|
||||
//
|
||||
this.label1.AutoSize = true;
|
||||
this.label1.Location = new System.Drawing.Point(25, 56);
|
||||
this.label1.Location = new System.Drawing.Point(25, 52);
|
||||
this.label1.Name = "label1";
|
||||
this.label1.Size = new System.Drawing.Size(98, 13);
|
||||
this.label1.TabIndex = 3;
|
||||
@ -185,7 +188,7 @@
|
||||
// capacityLabel
|
||||
//
|
||||
this.capacityLabel.AutoSize = true;
|
||||
this.capacityLabel.Location = new System.Drawing.Point(25, 201);
|
||||
this.capacityLabel.Location = new System.Drawing.Point(25, 185);
|
||||
this.capacityLabel.Name = "capacityLabel";
|
||||
this.capacityLabel.Size = new System.Drawing.Size(76, 13);
|
||||
this.capacityLabel.TabIndex = 15;
|
||||
@ -194,7 +197,7 @@
|
||||
// capacityTextBox
|
||||
//
|
||||
this.capacityTextBox.Enabled = false;
|
||||
this.capacityTextBox.Location = new System.Drawing.Point(136, 198);
|
||||
this.capacityTextBox.Location = new System.Drawing.Point(136, 182);
|
||||
this.capacityTextBox.Name = "capacityTextBox";
|
||||
this.capacityTextBox.Size = new System.Drawing.Size(43, 20);
|
||||
this.capacityTextBox.TabIndex = 16;
|
||||
@ -202,7 +205,7 @@
|
||||
// label2
|
||||
//
|
||||
this.label2.AutoSize = true;
|
||||
this.label2.Location = new System.Drawing.Point(185, 201);
|
||||
this.label2.Location = new System.Drawing.Point(185, 185);
|
||||
this.label2.Name = "label2";
|
||||
this.label2.Size = new System.Drawing.Size(19, 13);
|
||||
this.label2.TabIndex = 17;
|
||||
@ -211,7 +214,7 @@
|
||||
// label3
|
||||
//
|
||||
this.label3.AutoSize = true;
|
||||
this.label3.Location = new System.Drawing.Point(185, 225);
|
||||
this.label3.Location = new System.Drawing.Point(185, 207);
|
||||
this.label3.Name = "label3";
|
||||
this.label3.Size = new System.Drawing.Size(19, 13);
|
||||
this.label3.TabIndex = 20;
|
||||
@ -220,7 +223,7 @@
|
||||
// emptyTextBox
|
||||
//
|
||||
this.emptyTextBox.Enabled = false;
|
||||
this.emptyTextBox.Location = new System.Drawing.Point(136, 222);
|
||||
this.emptyTextBox.Location = new System.Drawing.Point(136, 204);
|
||||
this.emptyTextBox.Name = "emptyTextBox";
|
||||
this.emptyTextBox.Size = new System.Drawing.Size(43, 20);
|
||||
this.emptyTextBox.TabIndex = 19;
|
||||
@ -228,16 +231,45 @@
|
||||
// emptyLabel
|
||||
//
|
||||
this.emptyLabel.AutoSize = true;
|
||||
this.emptyLabel.Location = new System.Drawing.Point(25, 225);
|
||||
this.emptyLabel.Location = new System.Drawing.Point(25, 207);
|
||||
this.emptyLabel.Name = "emptyLabel";
|
||||
this.emptyLabel.Size = new System.Drawing.Size(64, 13);
|
||||
this.emptyLabel.TabIndex = 18;
|
||||
this.emptyLabel.Text = "Tank Empty";
|
||||
//
|
||||
// label4
|
||||
//
|
||||
this.label4.AutoSize = true;
|
||||
this.label4.Location = new System.Drawing.Point(185, 229);
|
||||
this.label4.Name = "label4";
|
||||
this.label4.Size = new System.Drawing.Size(24, 13);
|
||||
this.label4.TabIndex = 23;
|
||||
this.label4.Text = "sec";
|
||||
//
|
||||
// emptyTimeTextBox
|
||||
//
|
||||
this.emptyTimeTextBox.Enabled = false;
|
||||
this.emptyTimeTextBox.Location = new System.Drawing.Point(136, 226);
|
||||
this.emptyTimeTextBox.Name = "emptyTimeTextBox";
|
||||
this.emptyTimeTextBox.Size = new System.Drawing.Size(43, 20);
|
||||
this.emptyTimeTextBox.TabIndex = 22;
|
||||
//
|
||||
// label5
|
||||
//
|
||||
this.label5.AutoSize = true;
|
||||
this.label5.Location = new System.Drawing.Point(25, 229);
|
||||
this.label5.Name = "label5";
|
||||
this.label5.Size = new System.Drawing.Size(90, 13);
|
||||
this.label5.TabIndex = 21;
|
||||
this.label5.Text = "Tank Empty Time";
|
||||
//
|
||||
// BalanceCfgCtrl
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.Controls.Add(this.label4);
|
||||
this.Controls.Add(this.emptyTimeTextBox);
|
||||
this.Controls.Add(this.label5);
|
||||
this.Controls.Add(this.label3);
|
||||
this.Controls.Add(this.emptyTextBox);
|
||||
this.Controls.Add(this.emptyLabel);
|
||||
@ -290,5 +322,8 @@
|
||||
private System.Windows.Forms.Label label3;
|
||||
private System.Windows.Forms.TextBox emptyTextBox;
|
||||
private System.Windows.Forms.Label emptyLabel;
|
||||
private System.Windows.Forms.Label label4;
|
||||
private System.Windows.Forms.TextBox emptyTimeTextBox;
|
||||
private System.Windows.Forms.Label label5;
|
||||
}
|
||||
}
|
||||
|
||||
@ -104,6 +104,7 @@ namespace TBF.BenchControl.MettlerToledo
|
||||
handshakeComboBox.Text = config.Handshake.ToString();
|
||||
capacityTextBox.Text = config.Capacity.ToString();
|
||||
emptyTextBox.Text = config.Empty.ToString();
|
||||
emptyTimeTextBox.Text = config.EmptyTimeSec.ToString();
|
||||
}
|
||||
|
||||
public void Unlock()
|
||||
@ -117,6 +118,7 @@ namespace TBF.BenchControl.MettlerToledo
|
||||
handshakeComboBox.Enabled = true;
|
||||
capacityTextBox.Enabled = true;
|
||||
emptyTextBox.Enabled = true;
|
||||
emptyTimeTextBox.Enabled = true;
|
||||
}
|
||||
|
||||
public CfgVerifyFlags VerifyCfg(ref string message)
|
||||
@ -150,6 +152,11 @@ namespace TBF.BenchControl.MettlerToledo
|
||||
flags |= CfgVerifyFlags.Error;
|
||||
message += Environment.NewLine + "'Tank Empty' is not valid";
|
||||
}
|
||||
if (!int.TryParse(emptyTimeTextBox.Text, out dummy) || dummy < 1 || dummy > 999)
|
||||
{
|
||||
flags |= CfgVerifyFlags.Error;
|
||||
message += Environment.NewLine + "'Tank Empty Time' should be between 1 and 999 sec";
|
||||
}
|
||||
|
||||
return flags;
|
||||
}
|
||||
@ -167,6 +174,7 @@ namespace TBF.BenchControl.MettlerToledo
|
||||
config.Handshake = GetHandshake(handshakeComboBox.SelectedItem.ToString());
|
||||
config.Capacity = Utils.ParseUFloat(capacityTextBox.Text);
|
||||
config.Empty = Utils.ParseUFloat(emptyTextBox.Text);
|
||||
config.EmptyTimeSec = int.Parse(emptyTimeTextBox.Text);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -44,7 +44,8 @@ namespace TBF.BenchControl.MettlerToledo
|
||||
public string Name { get { return balanceCfg.Name; } }
|
||||
public int BalanceNr { get { return balanceNr; } }
|
||||
public float Capacity { get { return balanceCfg.Capacity; } }
|
||||
public IList<Entities.MeasurementCorrection> Corrections { get { return balanceCfg.Corrections; } }
|
||||
public int EmptyTimeSec { get { return balanceCfg.EmptyTimeSec; } }
|
||||
public IList<Entities.MeasurementCorrection> Corrections { get { return balanceCfg.Corrections; } }
|
||||
|
||||
/// <summary>The state of the mass measurement</summary>
|
||||
public MsrmntState MsrmntState
|
||||
|
||||
@ -18,7 +18,7 @@ namespace TBF.BenchControl.MettlerToledo
|
||||
{
|
||||
return new BalanceCfg(this, "Balance1", 3, 2400, System.IO.Ports.Parity.Even, 7,
|
||||
System.IO.Ports.StopBits.One, System.IO.Ports.Handshake.XOnXOff,
|
||||
200.0f, 20.0f); // kg
|
||||
200.0f, 20.0f, 180); // kg, kg, s
|
||||
}
|
||||
|
||||
public IComponentCfgCtrl CreateCfgCtrl()
|
||||
|
||||
@ -18,7 +18,7 @@ namespace TBF.BenchControl.MettlerToledo
|
||||
{
|
||||
return new BalanceCfg(this, "Balance1", 3, 2400, System.IO.Ports.Parity.Even, 7,
|
||||
System.IO.Ports.StopBits.One, System.IO.Ports.Handshake.XOnXOff,
|
||||
200.0f, 20.0f); // kg
|
||||
200.0f, 20.0f, 180); // kg, kg, s
|
||||
}
|
||||
|
||||
public IComponentCfgCtrl CreateCfgCtrl()
|
||||
|
||||
@ -47,7 +47,7 @@ namespace TBF.BenchControl.MettlerToledo
|
||||
{
|
||||
if (done) return Event.BalanceDone; /// Taring has been done already
|
||||
|
||||
if (balanceDev.MsrmntState == MsrmntState.Busy) return Event.None;
|
||||
if (balanceDev.MsrmntState == MsrmntState.Busy) return Event.Busy;
|
||||
|
||||
if (balanceDev.MsrmntState == MsrmntState.Overload)
|
||||
{
|
||||
@ -64,7 +64,7 @@ namespace TBF.BenchControl.MettlerToledo
|
||||
}
|
||||
|
||||
balanceDev.Taring(); /// Failed -> repeat taring
|
||||
return Event.None;
|
||||
return Event.Busy;
|
||||
}
|
||||
|
||||
/// <summary>Stop this operation</summary>
|
||||
|
||||
@ -59,7 +59,7 @@ namespace TBF.BenchControl.Operations
|
||||
}
|
||||
else
|
||||
{
|
||||
return Event.None;
|
||||
return Event.TimerBusy;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -42,26 +42,20 @@ namespace TBF.BenchControl.Sequences
|
||||
|
||||
Bridge.Bench2UI(ButtonsEtc.StopBtnEn);
|
||||
|
||||
//------------------------------------------------
|
||||
Bridge.OnActivity(this, Strings.Measuring_the_weight);
|
||||
//------------------------------------------------
|
||||
State.Create("MainSeq : Setting valves to the default state")
|
||||
.AddOperation(new MettlerToledo.ReadMassesOp())
|
||||
.AddOperation(StateMachine.ControlBoard.SetValvesOp(StateMachine.DefaultValvesOpen,
|
||||
StateMachine.DefaultValvesClose))
|
||||
.EnterState();
|
||||
//--------------------------------------------------------------------------------------------
|
||||
Bridge.OnActivity(this, Strings.Starting_system);
|
||||
State.Create("MainSeq : Setting valves to default positions")
|
||||
.AddOperation(StateMachine.ControlBoard.SetValvesOp(StateMachine.DefaultValvesOpen, StateMachine.DefaultValvesClose))
|
||||
.EnterState();
|
||||
do
|
||||
{
|
||||
e = StateMachine.WaitRunDevsRunOps();
|
||||
if (e.Contains(Event.Error)) goto error;
|
||||
if (e.Contains(Event.UiCmdStop)) goto stop;
|
||||
}
|
||||
while (!(e.Contains(Event.ValvesSet) && e.Contains(Event.BalanceDone)));
|
||||
while (e.Contains(Event.ValvesBusy));
|
||||
|
||||
//------------------------------------------------
|
||||
Bridge.OnActivity(this, Strings.Starting_the_cameras);
|
||||
//------------------------------------------------
|
||||
State startNew = State.Create("MainSeq : Starting the cameras")
|
||||
//--------------------------------------------------------------------------------------------
|
||||
Bridge.OnActivity(this, Strings.Emptying_tank);
|
||||
State startNew = State.Create("MainSeq : Emptying tanks, Starting cameras")
|
||||
.AddOperation(checkUiOp);
|
||||
foreach (var cmpnt in StateMachine.Components)
|
||||
{
|
||||
@ -71,18 +65,94 @@ namespace TBF.BenchControl.Sequences
|
||||
startNew.AddOperation(camera.StartNewOp());
|
||||
}
|
||||
}
|
||||
startNew.EnterState();
|
||||
|
||||
IList<IValve> allEmptyingValves = new List<IValve>();
|
||||
if (StateMachine.EmptyTankValve1 != null) allEmptyingValves.Add(StateMachine.EmptyTankValve1);
|
||||
if (StateMachine.EmptyTankValve2 != null) allEmptyingValves.Add(StateMachine.EmptyTankValve2);
|
||||
if (StateMachine.EmptyTankValve3 != null) allEmptyingValves.Add(StateMachine.EmptyTankValve3);
|
||||
|
||||
// Determine the tank emptying time (the maximum for all balances)
|
||||
int balanceEmptyTime = 0;
|
||||
if (StateMachine.Balance1 != null && StateMachine.Balance1.EmptyTimeSec > balanceEmptyTime)
|
||||
{
|
||||
balanceEmptyTime = StateMachine.Balance1.EmptyTimeSec;
|
||||
}
|
||||
if (StateMachine.Balance2 != null && StateMachine.Balance2.EmptyTimeSec > balanceEmptyTime)
|
||||
{
|
||||
balanceEmptyTime = StateMachine.Balance2.EmptyTimeSec;
|
||||
}
|
||||
if (StateMachine.Balance3 != null && StateMachine.Balance3.EmptyTimeSec > balanceEmptyTime)
|
||||
{
|
||||
balanceEmptyTime = StateMachine.Balance3.EmptyTimeSec;
|
||||
}
|
||||
if (balanceEmptyTime > 0)
|
||||
{
|
||||
startNew.AddOperation(new TimerOp(balanceEmptyTime))
|
||||
.AddOperation(StateMachine.ControlBoard.SetValvesOp(allEmptyingValves, null));
|
||||
}
|
||||
|
||||
startNew.EnterState();
|
||||
do
|
||||
{
|
||||
e = StateMachine.WaitRunDevsRunOps();
|
||||
if (e.Contains(Event.Error)) goto error;
|
||||
if (e.Contains(Event.UiCmdStop)) goto stop;
|
||||
if (e.Contains(Event.UiCmdStop) &&
|
||||
!e.Contains(Event.ValvesBusy) &&
|
||||
!e.Contains(Event.CameraBusy))
|
||||
{
|
||||
goto stop_emptying;
|
||||
}
|
||||
}
|
||||
while (e.Contains(Event.CameraBusy));
|
||||
while (e.Contains(Event.TimerBusy) ||
|
||||
e.Contains(Event.CameraBusy) ||
|
||||
e.Contains(Event.ValvesBusy));
|
||||
|
||||
if (e.Contains(Event.CameraOpFailed)) goto error; /// TODO: resolve in some other way
|
||||
|
||||
//--------------------------------------------------------------------------------------------
|
||||
//--------------------------------------------------------------------------------------------
|
||||
stop_emptying:
|
||||
State stopEmptying = State.Create("MainSeq : Stop emptying of water tanks")
|
||||
.AddOperation(checkUiOp)
|
||||
.AddOperation(StateMachine.ControlBoard.SetValvesOp(null, allEmptyingValves))
|
||||
.EnterState();
|
||||
do
|
||||
{
|
||||
e = StateMachine.WaitRunDevsRunOps();
|
||||
if (e.Contains(Event.Error)) goto error;
|
||||
if (e.Contains(Event.UiCmdStop)) goto stop;
|
||||
}
|
||||
while (e.Contains(Event.ValvesBusy));
|
||||
|
||||
//--------------------------------------------------------------------------------------------
|
||||
State taraAll = State.Create("MainSeq : Reset all balances").AddOperation(checkUiOp);
|
||||
FloatBox tara = new FloatBox(0);
|
||||
if (StateMachine.Balance1 != null) taraAll.AddOperation(StateMachine.Balance1.TaringOp(ref tara));
|
||||
if (StateMachine.Balance2 != null) taraAll.AddOperation(StateMachine.Balance2.TaringOp(ref tara));
|
||||
if (StateMachine.Balance3 != null) taraAll.AddOperation(StateMachine.Balance3.TaringOp(ref tara));
|
||||
taraAll.EnterState();
|
||||
do
|
||||
{
|
||||
e = StateMachine.WaitRunDevsRunOps();
|
||||
if (e.Contains(Event.Error)) goto error;
|
||||
if (e.Contains(Event.UiCmdStop)) goto stop;
|
||||
}
|
||||
while (e.Contains(Event.Busy));
|
||||
|
||||
//--------------------------------------------------------------------------------------------
|
||||
Bridge.OnActivity(this, Strings.Measuring_the_weight);
|
||||
State.Create("MainSeq : Mesuring the weight for the 1st time")
|
||||
.AddOperation(checkUiOp)
|
||||
.AddOperation(new MettlerToledo.ReadMassesOp())
|
||||
.EnterState();
|
||||
do
|
||||
{
|
||||
e = StateMachine.WaitRunDevsRunOps();
|
||||
if (e.Contains(Event.Error)) goto error;
|
||||
if (e.Contains(Event.UiCmdStop)) goto stop;
|
||||
}
|
||||
while (!e.Contains(Event.BalanceDone));
|
||||
|
||||
//--------------------------------------------------------------------------------------------
|
||||
select_procedure:
|
||||
selection = MakeSelection(MKSelContext.ProcedureNotSelected);
|
||||
|
||||
|
||||
9
TestBenchFramework/Resources/Strings.Designer.cs
generated
9
TestBenchFramework/Resources/Strings.Designer.cs
generated
@ -1635,6 +1635,15 @@ namespace TBF.Resources {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Starting the system.
|
||||
/// </summary>
|
||||
internal static string Starting_system {
|
||||
get {
|
||||
return ResourceManager.GetString("Starting_system", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Starting the cameras.
|
||||
/// </summary>
|
||||
|
||||
@ -762,4 +762,7 @@
|
||||
<data name="StartValve" xml:space="preserve">
|
||||
<value>Startventil</value>
|
||||
</data>
|
||||
<data name="Starting_system" xml:space="preserve">
|
||||
<value>Prüfstand starten</value>
|
||||
</data>
|
||||
</root>
|
||||
@ -850,4 +850,7 @@
|
||||
<data name="Camera_error" xml:space="preserve">
|
||||
<value>Camera error</value>
|
||||
</data>
|
||||
<data name="Starting_system" xml:space="preserve">
|
||||
<value>Starting the system</value>
|
||||
</data>
|
||||
</root>
|
||||
@ -1506,6 +1506,7 @@
|
||||
this.Name = "ProcessTabPageCtrl";
|
||||
this.Size = new System.Drawing.Size(1097, 498);
|
||||
this.Load += new System.EventHandler(this.ProcessTabPageCtrl_Load);
|
||||
this.Paint += new System.Windows.Forms.PaintEventHandler(this.ProcessTabPageCtrl_Paint);
|
||||
this.groupBox1.ResumeLayout(false);
|
||||
this.groupBox1.PerformLayout();
|
||||
this.groupBox2.ResumeLayout(false);
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using System.Drawing;
|
||||
using System.Windows.Forms;
|
||||
using log4net;
|
||||
using TBF.UiBridge;
|
||||
@ -425,5 +426,26 @@ namespace TBF.Screens
|
||||
void OnProcedureCompleted(object sender, ProcedureCompletedEventArgs args)
|
||||
{
|
||||
}
|
||||
|
||||
private void ProcessTabPageCtrl_Paint(object sender, PaintEventArgs e)
|
||||
{
|
||||
System.Drawing.SolidBrush filledBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Blue);
|
||||
System.Drawing.SolidBrush benchBrush = new System.Drawing.SolidBrush(System.Drawing.Color.LightBlue);
|
||||
|
||||
System.Drawing.Graphics formGraphics = this.CreateGraphics();
|
||||
|
||||
formGraphics.FillRectangle(filledBrush, new Rectangle(861, 470, 63, 14)); // tank -> pump
|
||||
formGraphics.FillRectangle(benchBrush, new Rectangle(34, 470, 789, 14)); // pump ->bench horizontal
|
||||
formGraphics.FillRectangle(benchBrush, new Rectangle(20, 378, 14, 106)); // pump ->bench vertical
|
||||
formGraphics.FillRectangle(benchBrush, new Rectangle(34, 378, 825, 14)); // pump ->bench horizontal
|
||||
//formGraphics.FillRectangle(myBrush, new Rectangle(104, 378, 106, 14)); // WM1-WM2
|
||||
//formGraphics.FillRectangle(myBrush, new Rectangle(174, 378, 106, 14)); // WM2-WM3
|
||||
//formGraphics.FillRectangle(myBrush, new Rectangle(244, 378, 106, 14)); // WM3-WM4
|
||||
//formGraphics.FillRectangle(myBrush, new Rectangle(314, 378, 106, 14)); // WM4-WM5
|
||||
//formGraphics.FillRectangle(myBrush, new Rectangle(384, 378, 106, 14)); // WM5-WM6
|
||||
|
||||
filledBrush.Dispose();
|
||||
formGraphics.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user