- PidCoef from OutputPath used in flow control, PidCoef regulValve parameter abandoned

- Part field (int) added to Test and TestResult, shown and processed in UI in ProcedureDlg
This commit is contained in:
Milan Hanajik 2015-01-04 23:21:12 +01:00
parent 035416b785
commit 580d4330e3
17 changed files with 402 additions and 274 deletions

View File

@ -20,7 +20,6 @@ Stare:
- process page je napisana iba pre jeden zdruzeny vodomer
- vyber vysledkov na obrazovke
- IDC100 kamera: Ako sa vysporiadat so sync. impulzami, casom startu a stopu?
- PID cisla pre kazdu regulacnu cestu zvlast
- Ked je WaterMeterStates dialog a dam Stop -> ide do Error
- Kvoli FixedStart testu a kameram by mal RegisterReader vracat 'double' (pripadne 'float') namiesto 'int' (???)
- 'zamykanie' hydraulickej schemy

View File

@ -50,7 +50,6 @@ namespace TBF.BenchControl.Elde.RegulValve
{
if (args.Command == CfgChangeCmd.CfgChange)
{
RegulValveCfg.PidCoef = tmpcfg.PidCoef; // TODO PID: Remove
RegulValveCfg.StableTimeMs = tmpcfg.StableTimeMs;
RegulValveCfg.FlowStableSec = tmpcfg.FlowStableSec;
}

View File

@ -17,7 +17,6 @@ namespace TBF.BenchControl.Elde.RegulValve
public int Idx1; /// 1..7
public int DacValueClosed; /// 0..1023
public int DacValueOpen; /// 0..1023
public int PidCoef; /// 1..100 // TODO PID: Remove
public int StableTimeMs; /// 200..1500 ms
public bool StoredPositionReuse; /// true = store and re-use previous regulation valve positions
public int FlowStableSec; /// 0..60 sec
@ -35,7 +34,6 @@ namespace TBF.BenchControl.Elde.RegulValve
Idx1 = 1;
DacValueClosed = 100;
DacValueOpen = 500;
PidCoef = 20; // TODO PID: Remove
StableTimeMs = 500;
StoredPositionReuse = false;
FlowStableSec = 5;
@ -49,13 +47,12 @@ namespace TBF.BenchControl.Elde.RegulValve
public string ToString(int i)
{
return string.Format("Name={0}, Parent={1}, Idx1={2}, ADC-Closed={3}, ADC-Open={4}, PID={5}, StabTm={6}ms, PosReuse={7}, FlowStable={8}s",
return string.Format("Name={0}, Parent={1}, Idx1={2}, ADC-Closed={3}, ADC-Open={4}, StabTm={5}ms, PosReuse={6}, FlowStable={7}s",
Name,
(string.IsNullOrEmpty(ParentName) ? "-" : ParentName),
Idx1,
DacValueClosed,
DacValueOpen,
PidCoef, // TODO PID: Remove
StableTimeMs,
StoredPositionReuse,
FlowStableSec);

View File

@ -39,8 +39,6 @@
this.dacOpenTextBox = new System.Windows.Forms.TextBox();
this.dacOpenLabel = new System.Windows.Forms.Label();
this.parentNameComboBox = new System.Windows.Forms.ComboBox();
this.pidCoefLabel = new System.Windows.Forms.Label();
this.pidCoefTextBox = new System.Windows.Forms.TextBox();
this.storedPosReuseCheckBox = new System.Windows.Forms.CheckBox();
this.stableTimeTextBox = new System.Windows.Forms.TextBox();
this.stableTimeLabel = new System.Windows.Forms.Label();
@ -71,7 +69,7 @@
// positionTextBox
//
this.positionTextBox.Enabled = false;
this.positionTextBox.Location = new System.Drawing.Point(138, 78);
this.positionTextBox.Location = new System.Drawing.Point(138, 89);
this.positionTextBox.Name = "positionTextBox";
this.positionTextBox.Size = new System.Drawing.Size(46, 20);
this.positionTextBox.TabIndex = 6;
@ -79,7 +77,7 @@
// positionLabel
//
this.positionLabel.AutoSize = true;
this.positionLabel.Location = new System.Drawing.Point(28, 81);
this.positionLabel.Location = new System.Drawing.Point(28, 92);
this.positionLabel.Name = "positionLabel";
this.positionLabel.Size = new System.Drawing.Size(18, 13);
this.positionLabel.TabIndex = 5;
@ -88,7 +86,7 @@
// parentNameLabel
//
this.parentNameLabel.AutoSize = true;
this.parentNameLabel.Location = new System.Drawing.Point(28, 57);
this.parentNameLabel.Location = new System.Drawing.Point(28, 68);
this.parentNameLabel.Name = "parentNameLabel";
this.parentNameLabel.Size = new System.Drawing.Size(69, 13);
this.parentNameLabel.TabIndex = 3;
@ -97,7 +95,7 @@
// nameTextBox
//
this.nameTextBox.Enabled = false;
this.nameTextBox.Location = new System.Drawing.Point(138, 30);
this.nameTextBox.Location = new System.Drawing.Point(138, 41);
this.nameTextBox.Name = "nameTextBox";
this.nameTextBox.Size = new System.Drawing.Size(130, 20);
this.nameTextBox.TabIndex = 2;
@ -105,7 +103,7 @@
// nameLabel
//
this.nameLabel.AutoSize = true;
this.nameLabel.Location = new System.Drawing.Point(28, 33);
this.nameLabel.Location = new System.Drawing.Point(28, 44);
this.nameLabel.Name = "nameLabel";
this.nameLabel.Size = new System.Drawing.Size(35, 13);
this.nameLabel.TabIndex = 1;
@ -114,7 +112,7 @@
// classNameLabel
//
this.classNameLabel.AutoSize = true;
this.classNameLabel.Location = new System.Drawing.Point(135, 9);
this.classNameLabel.Location = new System.Drawing.Point(135, 14);
this.classNameLabel.Name = "classNameLabel";
this.classNameLabel.Size = new System.Drawing.Size(89, 13);
this.classNameLabel.TabIndex = 0;
@ -123,7 +121,7 @@
// dacClosedLabel
//
this.dacClosedLabel.AutoSize = true;
this.dacClosedLabel.Location = new System.Drawing.Point(28, 104);
this.dacClosedLabel.Location = new System.Drawing.Point(28, 115);
this.dacClosedLabel.Name = "dacClosedLabel";
this.dacClosedLabel.Size = new System.Drawing.Size(93, 13);
this.dacClosedLabel.TabIndex = 7;
@ -132,7 +130,7 @@
// dacClosedTextBox
//
this.dacClosedTextBox.Enabled = false;
this.dacClosedTextBox.Location = new System.Drawing.Point(138, 101);
this.dacClosedTextBox.Location = new System.Drawing.Point(138, 112);
this.dacClosedTextBox.Name = "dacClosedTextBox";
this.dacClosedTextBox.Size = new System.Drawing.Size(46, 20);
this.dacClosedTextBox.TabIndex = 8;
@ -140,7 +138,7 @@
// dacOpenTextBox
//
this.dacOpenTextBox.Enabled = false;
this.dacOpenTextBox.Location = new System.Drawing.Point(138, 124);
this.dacOpenTextBox.Location = new System.Drawing.Point(138, 135);
this.dacOpenTextBox.Name = "dacOpenTextBox";
this.dacOpenTextBox.Size = new System.Drawing.Size(46, 20);
this.dacOpenTextBox.TabIndex = 10;
@ -148,7 +146,7 @@
// dacOpenLabel
//
this.dacOpenLabel.AutoSize = true;
this.dacOpenLabel.Location = new System.Drawing.Point(28, 127);
this.dacOpenLabel.Location = new System.Drawing.Point(28, 138);
this.dacOpenLabel.Name = "dacOpenLabel";
this.dacOpenLabel.Size = new System.Drawing.Size(87, 13);
this.dacOpenLabel.TabIndex = 9;
@ -158,33 +156,16 @@
//
this.parentNameComboBox.Enabled = false;
this.parentNameComboBox.FormattingEnabled = true;
this.parentNameComboBox.Location = new System.Drawing.Point(138, 54);
this.parentNameComboBox.Location = new System.Drawing.Point(138, 65);
this.parentNameComboBox.Name = "parentNameComboBox";
this.parentNameComboBox.Size = new System.Drawing.Size(130, 21);
this.parentNameComboBox.TabIndex = 4;
//
// pidCoefLabel
//
this.pidCoefLabel.AutoSize = true;
this.pidCoefLabel.Location = new System.Drawing.Point(28, 150);
this.pidCoefLabel.Name = "pidCoefLabel";
this.pidCoefLabel.Size = new System.Drawing.Size(78, 13);
this.pidCoefLabel.TabIndex = 11;
this.pidCoefLabel.Text = "PID Coefficient";
//
// pidCoefTextBox
//
this.pidCoefTextBox.Enabled = false;
this.pidCoefTextBox.Location = new System.Drawing.Point(138, 147);
this.pidCoefTextBox.Name = "pidCoefTextBox";
this.pidCoefTextBox.Size = new System.Drawing.Size(46, 20);
this.pidCoefTextBox.TabIndex = 12;
//
// storedPosReuseCheckBox
//
this.storedPosReuseCheckBox.AutoSize = true;
this.storedPosReuseCheckBox.Enabled = false;
this.storedPosReuseCheckBox.Location = new System.Drawing.Point(31, 196);
this.storedPosReuseCheckBox.Location = new System.Drawing.Point(31, 184);
this.storedPosReuseCheckBox.Name = "storedPosReuseCheckBox";
this.storedPosReuseCheckBox.Size = new System.Drawing.Size(162, 17);
this.storedPosReuseCheckBox.TabIndex = 13;
@ -194,7 +175,7 @@
// stableTimeTextBox
//
this.stableTimeTextBox.Enabled = false;
this.stableTimeTextBox.Location = new System.Drawing.Point(138, 170);
this.stableTimeTextBox.Location = new System.Drawing.Point(138, 158);
this.stableTimeTextBox.Name = "stableTimeTextBox";
this.stableTimeTextBox.Size = new System.Drawing.Size(46, 20);
this.stableTimeTextBox.TabIndex = 15;
@ -202,7 +183,7 @@
// stableTimeLabel
//
this.stableTimeLabel.AutoSize = true;
this.stableTimeLabel.Location = new System.Drawing.Point(28, 173);
this.stableTimeLabel.Location = new System.Drawing.Point(28, 161);
this.stableTimeLabel.Name = "stableTimeLabel";
this.stableTimeLabel.Size = new System.Drawing.Size(81, 13);
this.stableTimeLabel.TabIndex = 14;
@ -211,7 +192,7 @@
// flowStableSecTextBox
//
this.flowStableSecTextBox.Enabled = false;
this.flowStableSecTextBox.Location = new System.Drawing.Point(138, 219);
this.flowStableSecTextBox.Location = new System.Drawing.Point(138, 207);
this.flowStableSecTextBox.Name = "flowStableSecTextBox";
this.flowStableSecTextBox.Size = new System.Drawing.Size(46, 20);
this.flowStableSecTextBox.TabIndex = 17;
@ -219,7 +200,7 @@
// flowStableSecLabel
//
this.flowStableSecLabel.AutoSize = true;
this.flowStableSecLabel.Location = new System.Drawing.Point(28, 222);
this.flowStableSecLabel.Location = new System.Drawing.Point(28, 210);
this.flowStableSecLabel.Name = "flowStableSecLabel";
this.flowStableSecLabel.Size = new System.Drawing.Size(74, 13);
this.flowStableSecLabel.TabIndex = 16;
@ -402,8 +383,6 @@
this.Controls.Add(this.stableTimeTextBox);
this.Controls.Add(this.stableTimeLabel);
this.Controls.Add(this.storedPosReuseCheckBox);
this.Controls.Add(this.pidCoefTextBox);
this.Controls.Add(this.pidCoefLabel);
this.Controls.Add(this.parentNameComboBox);
this.Controls.Add(this.dacOpenTextBox);
this.Controls.Add(this.dacOpenLabel);
@ -441,8 +420,6 @@
private System.Windows.Forms.TextBox dacOpenTextBox;
private System.Windows.Forms.Label dacOpenLabel;
private System.Windows.Forms.ComboBox parentNameComboBox;
private System.Windows.Forms.Label pidCoefLabel;
private System.Windows.Forms.TextBox pidCoefTextBox;
private System.Windows.Forms.CheckBox storedPosReuseCheckBox;
private System.Windows.Forms.TextBox stableTimeTextBox;
private System.Windows.Forms.Label stableTimeLabel;

View File

@ -72,7 +72,6 @@ namespace TBF.BenchControl.Elde.RegulValve
positionTextBox.Text = config.Idx1.ToString();
dacClosedTextBox.Text = config.DacValueClosed.ToString();
dacOpenTextBox.Text = config.DacValueOpen.ToString();
pidCoefTextBox.Text = config.PidCoef.ToString(); // TODO PID: Remove
stableTimeTextBox.Text = config.StableTimeMs.ToString();
storedPosReuseCheckBox.Checked = config.StoredPositionReuse;
flowStableSecTextBox.Text = config.FlowStableSec.ToString();
@ -90,7 +89,6 @@ namespace TBF.BenchControl.Elde.RegulValve
positionTextBox.Enabled = true;
dacClosedTextBox.Enabled = true;
dacOpenTextBox.Enabled = true;
pidCoefTextBox.Enabled = true;
stableTimeTextBox.Enabled = true;
storedPosReuseCheckBox.Enabled = true;
flowStableSecTextBox.Enabled = true;
@ -121,11 +119,6 @@ namespace TBF.BenchControl.Elde.RegulValve
flags |= CfgUpdateFlags.Error;
message += Environment.NewLine + "'DAC when Open' should be between 0 and 1023";
}
if (!int.TryParse(pidCoefTextBox.Text, out dummy) || dummy < 0 || dummy > 100)
{
flags |= CfgUpdateFlags.Error;
message += Environment.NewLine + "'PID Coefficient' should be between 0 and 100";
}
if (!int.TryParse(stableTimeTextBox.Text, out dummy) || dummy < 200 || dummy > 1500 || (dummy % 50) != 0)
{
flags |= CfgUpdateFlags.Error;
@ -180,14 +173,6 @@ namespace TBF.BenchControl.Elde.RegulValve
flags |= (CfgUpdateFlags.RestartRqrd | CfgUpdateFlags.AnyChange);
}
// TODO PID: Remove
tmp = int.Parse(pidCoefTextBox.Text);
if (config.PidCoef != tmp)
{
config.PidCoef = tmp;
flags |= CfgUpdateFlags.AnyChange;
}
tmp = int.Parse(stableTimeTextBox.Text);
if (config.StableTimeMs != tmp)
{

View File

@ -178,9 +178,9 @@ namespace TBF.BenchControl.Elde.RegulValve
TestMethods tm = 0;
StopDevs sd = 0;
// TODO PID: Replace 'regulValve.RegulValveCfg.PidCoef' by operation parameter 'pidCoef'
// 'regulValve.RegulValveCfg.PidCoef' replaced by a casted operation parameter 'pidCoef'
controlBoard.SendCommand(Command.Start, flowMeterNr, controlBoard.Route, int.MaxValue, tm,
0.0f, regulValve.RegulValveCfg.PidCoef, 0, sd);
0.0f, (int)pidCoef, 0, sd);
}
/// <summary>Run this operation</summary>

View File

@ -27,7 +27,6 @@ namespace TBF.BenchControl
Name = name;
ValvesOpen = new List<IValve>();
ValvesClose = new List<IValve>();
PidCoef = 10.0f; /// TODO PID: remove
}
/// Constructor from data entity

View File

@ -27,7 +27,6 @@ namespace TBF.Entities
public OutputPath()
{
PidCoef = 10.0f; /// TODO PID: remove
}
public OutputPath(string name, int itemNr)

View File

@ -10,8 +10,10 @@ namespace TBF.Entities
{
public virtual int Id { get; protected set; }
public virtual int ItemNr { get; set; }
public virtual string Name { get; set; }
public virtual float Qfrom { get; set; } /// Water flow low limit in [m3/h]
public virtual string Name { get; set; }
public virtual int Part { get; set; } /// Part=0 ... test of all WM-s
/// Part>0 ... part of a set of tests with the same Name: subset of WM-s is given by MetersPath
public virtual float Qfrom { get; set; } /// Water flow low limit in [m3/h]
public virtual float Qto { get; set; } /// Water flow high limit in [m3/h]
public virtual float Volume { get; set; } /// Test volume (target) in [l]
public virtual float TstTime { get; set; } /// Test time (estimate) in [s]
@ -55,6 +57,7 @@ namespace TBF.Entities
{
Test result = new Test(Name, ItemNr, Procedure);
result.Part = Part;
result.Qfrom = Qfrom;
result.Qto = Qto;
result.Volume = Volume;

View File

@ -16,6 +16,7 @@ namespace TBF.Entities
/// Values copied from the test (Entities.Test)
public virtual int TestId { get; set; } /// Test entity ID to distinguish between tests with the same name
public virtual string TestName { get; set; }
public virtual int Part { get; set; }
public virtual bool DoNotEvaluate { get; set; } /// Not mapped to the database
public virtual bool DoNotPublish { get; set; } /// Not mapped to the database
public virtual float Qfrom { get; set; } /// Water flow low limit in [m3/h]
@ -130,6 +131,7 @@ namespace TBF.Entities
/// Copy test parameters from Entities.Test object
TestId = test.Id;
TestName = test.Name;
Part = test.Part;
Qfrom = test.Qfrom;
Qto = test.Qto;
Volume = test.Volume;

View File

@ -14,7 +14,7 @@ namespace TBF.Mappings
Map(x => x.Qto);
Map(x => x.RegulValve);
Map(x => x.FlowMeter);
//Map(x => x.PID); /// TODO PID: enable
Map(x => x.PidCoef);
Map(x => x.StartValve);
Map(x => x.Diverter);
Map(x => x.TempDiv);

View File

@ -10,6 +10,7 @@ namespace TBF.Mappings
Id(x => x.Id);
Map(x => x.ItemNr);
Map(x => x.Name);
Map(x => x.Part);
Map(x => x.Qfrom);
Map(x => x.Qto);
Map(x => x.Volume);

View File

@ -19,6 +19,7 @@ namespace TBF.Mappings
Map(x => x.TestId);
Map(x => x.TestName);
Map(x => x.Part);
Map(x => x.Qfrom);
Map(x => x.Qto);
Map(x => x.Volume);

View File

@ -330,38 +330,137 @@ namespace TBF
#region Metrology12 and Process
Control[] metrology1Editors;
Control[] metrology2Editors;
void PrepareMetrology12AndProcessTabs()
{
PrepareMetrology1Tab();
PrepareMetrology2Tab();
PrepareProcess();
}
Control[] metrology1Editors;
public enum MtrlgyClmn
{
Name,
Part,
Qfrom,
Qto,
Volume,
TestTime,
Repeats,
Emptying,
Time2Mass,
Method,
MtrlgyClmnCount
}
void PrepareMetrology1Tab()
{
metrology1ListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Test_chdr, Width = 70 });
metrology1ListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Part, Width = 40 });
metrology1ListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Q_from_m3h, Width = 80 });
metrology1ListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Q_to_m3h, Width = 80 });
metrology1ListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Volume_ltr_chdr, Width = 70 });
metrology1ListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Test_time_s_chdr, Width = 70 });
metrology1ListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Repeats_nr_chdr, Width = 80 });
metrology1ListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Emptying_chdr, Width = 60 });
//metrology1ListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Zeroing_chdr, Width = 50 });
metrology1ListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Time2MassMsrmt_chdr, Width = 70 });
metrology1ListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Method_chdr, Width = 150 });
ComboBox yesNo1CBox = new ComboBox(); /// control for Emptying
yesNo1CBox.Items.Add(Strings.yes);
yesNo1CBox.Items.Add(Strings.no);
methodCBox = new ComboBox();
foreach (var m in TestMethods) methodCBox.Items.Add(m.Cfg.Name);
metrology1Editors = new Control[]
{
new TextBox(), /// Name
new TextBox(), /// Part
new TextBox(), /// Qfrom
new TextBox(), /// Qto
new TextBox(), /// Volume
new TextBox(), /// Test time
new TextBox(), /// Repeats #
yesNo1CBox, /// Emptying
new TextBox(), /// Time2MassMsrmt
methodCBox, /// Method
};
foreach (var ctrl in metrology1Editors)
{
metrology1TabPage.Controls.Add(ctrl);
}
}
public enum Mtrlgy2Clmn
{
Name,
Part,
Qfrom,
Qto,
ErrLimLo,
ErrLimHi,
Filter,
Mtrlgy2ClmnCount
}
Control[] metrology2Editors;
void PrepareMetrology2Tab()
{
metrology2ListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Test_chdr, Width = 70 });
metrology2ListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Part, Width = 40 });
metrology2ListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Q_from_m3h, Width = 80 });
metrology2ListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Q_to_m3h, Width = 80 });
metrology2ListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Err_limit_neg_pct_chdr, Width = 100 });
metrology2ListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Err_limit_pos_pct_chdr, Width = 100 });
metrology2ListViewEx.Columns.Add(new ColumnHeader { Text = "Filter", Width = 80 }); /// Strings.Tol_red_pct_chdr
//metrology2ListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Red_type_chdr, Width = 80 });
//metrology2ListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Err_cor_neg_pct_chdr, Width = 90 });
//metrology2ListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Err_cor_pos_pct_chdr, Width = 90 });
metrology2Editors = new Control[]
{
new TextBox(), /// Name
new TextBox(), /// Part
new TextBox(), /// Qfrom
new TextBox(), /// Qto
new TextBox(), /// Err.Lim. -
new TextBox(), /// Err.Lim. +
new TextBox(), /// Filter
};
foreach (var ctrl in metrology2Editors)
{
metrology2TabPage.Controls.Add(ctrl);
}
}
public enum ProcessClmn
{
Name,
Part,
Qfrom,
Qto,
Feeding,
Bench,
Output,
Sensor,
TrnStart,
TrnStop,
ProcessClmnCount
}
Control[] processEditors;
void PrepareMetrology12AndProcessTabs()
void PrepareProcess()
{
metrology1ListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Test_chdr, Width = 70 });
metrology1ListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Q_from_m3h, Width = 80 });
metrology1ListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Q_to_m3h, Width = 80 });
metrology1ListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Volume_ltr_chdr, Width = 70 });
metrology1ListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Test_time_s_chdr, Width = 70 });
metrology1ListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Repeats_nr_chdr, Width = 80 });
metrology1ListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Emptying_chdr, Width = 60 });
//metrology1ListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Zeroing_chdr, Width = 50 });
metrology1ListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Time2MassMsrmt_chdr, Width = 70 });
metrology1ListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Method_chdr, Width = 150 });
//metrology1ListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Q_set_method_chdr, Width = 100 });
//metrology1ListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Method1_chdr, Width = 100 });
//metrology1ListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Method2_chdr, Width = 110 });
metrology2ListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Test_chdr, Width = 70 });
metrology2ListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Q_from_m3h, Width = 80 });
metrology2ListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Q_to_m3h, Width = 80 });
metrology2ListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Err_limit_neg_pct_chdr, Width = 100 });
metrology2ListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Err_limit_pos_pct_chdr, Width = 100 });
metrology2ListViewEx.Columns.Add(new ColumnHeader { Text = "Filter", Width = 80 }); /// Strings.Tol_red_pct_chdr
metrology2ListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Red_type_chdr, Width = 80 });
metrology2ListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Err_cor_neg_pct_chdr, Width = 90 });
metrology2ListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Err_cor_pos_pct_chdr, Width = 90 });
processListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Test_chdr, Width = 70 });
processListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Q_from_m3h, Width = 80 });
processListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Part, Width = 40 });
processListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Q_from_m3h, Width = 80 });
processListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Q_to_m3h, Width = 80 });
processListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Feeding_chdr, Width = 90 });
processListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Bench_chdr, Width = 90 });
@ -370,76 +469,36 @@ namespace TBF
processListViewEx.Columns.Add(new ColumnHeader { Text = Strings.TransitionStart_chdr, Width = 100 });
processListViewEx.Columns.Add(new ColumnHeader { Text = Strings.TransitionEnd_chdr, Width = 100 });
ComboBox yesNo1CBox = new ComboBox(); /// control for Emptying
yesNo1CBox.Items.Add(Strings.yes);
yesNo1CBox.Items.Add(Strings.no);
ComboBox yesNo2CBox = new ComboBox(); /// control for Zeroing
yesNo2CBox.Items.Add(Strings.yes);
yesNo2CBox.Items.Add(Strings.no);
methodCBox = new ComboBox();
foreach (var m in TestMethods) methodCBox.Items.Add(m.Cfg.Name);
//ComboBox qmethod = new ComboBox();
//for (Entities.QSetMethod method = 0; method < Entities.QSetMethod.Count; method++) qmethod.Items.Add(method.ToString());
//ComboBox method1 = new ComboBox();
//for (Entities.TestMethod method = 0; method < Entities.TestMethod.Count; method++) method1.Items.Add(method.ToString());
//ComboBox method2 = new ComboBox();
//for (Entities.TestMethod2 method = 0; method < Entities.TestMethod2.Count; method++) method2.Items.Add(method.ToString());
metrology1Editors = new Control[]
processEditors = new Control[]
{
new TextBox(), /// 0 test name
new TextBox(), /// 1 Qfrom
new TextBox(), /// 2 Qto
new TextBox(), /// 3 Volume
new TextBox(), /// 4 Test time
new TextBox(), /// 5 Repeats #
yesNo1CBox, /// 6 Emptying
new TextBox(), /// 7 Time2MassMsrmt
methodCBox,
new TextBox(), /// Name
new TextBox(), /// Part
new TextBox(), /// Qfrom
new TextBox(), /// Qto
new ComboBox(), /// Feeding
new ComboBox(), /// Table
new ComboBox(), /// Output
new ComboBox(), /// Meters
new ComboBox(), /// TransitionStart
new ComboBox(), /// TransitionEnd
};
metrology2Editors = new Control[]
{
new TextBox(), /// 0 test name
new TextBox(), /// 1 Qfrom
new TextBox(), /// 2 Qto
new TextBox(), /// 3 Err.Lim. -
new TextBox(), /// 4 Err.Lim. +
new TextBox(), /// 5 Tol.Red.
new ComboBox(), /// 6 Red.Type
};
foreach (var path in feedingPaths) ((ComboBox)processEditors[(int)ProcessClmn.Feeding]).Items.Add(path.Name);
foreach (var path in benchPaths) ((ComboBox)processEditors[(int)ProcessClmn.Bench]).Items.Add(path.Name);
foreach (var path in outputPaths) ((ComboBox)processEditors[(int)ProcessClmn.Output]).Items.Add(path.Name);
foreach (var path in metersPaths) ((ComboBox)processEditors[(int)ProcessClmn.Sensor]).Items.Add(path.Name);
processEditors = new Control[]
{
new TextBox(), /// 0 test name
new TextBox(), /// 1 Qfrom
new TextBox(), /// 2 Qto
new ComboBox(), /// 3 Feeding
new ComboBox(), /// 4 Table
new ComboBox(), /// 5 Output
new ComboBox(), /// 6 Meters
new ComboBox(), /// 7 TransitionStart
new ComboBox(), /// 8 TransitionEnd
};
foreach (var ctrl in metrology1Editors) metrology1TabPage.Controls.Add(ctrl);
foreach (var ctrl in metrology2Editors) metrology2TabPage.Controls.Add(ctrl);
foreach (var ctrl in processEditors) processTabPage.Controls.Add(ctrl);
foreach (var path in feedingPaths) ((ComboBox)processEditors[3]).Items.Add(path.Name);
foreach (var path in benchPaths) ((ComboBox)processEditors[4]).Items.Add(path.Name);
foreach (var path in outputPaths) ((ComboBox)processEditors[5]).Items.Add(path.Name);
foreach (var path in metersPaths) ((ComboBox)processEditors[6]).Items.Add(path.Name);
((ComboBox)processEditors[7]).Items.Add("---");
((ComboBox)processEditors[8]).Items.Add("---");
((ComboBox)processEditors[(int)ProcessClmn.TrnStart]).Items.Add("---");
((ComboBox)processEditors[(int)ProcessClmn.TrnStop]).Items.Add("---");
foreach (var trans in transitionSequences)
{
((ComboBox)processEditors[7]).Items.Add(trans.Name);
((ComboBox)processEditors[8]).Items.Add(trans.Name);
((ComboBox)processEditors[(int)ProcessClmn.TrnStart]).Items.Add(trans.Name);
((ComboBox)processEditors[(int)ProcessClmn.TrnStop]).Items.Add(trans.Name);
}
foreach (var ctrl in processEditors)
{
processTabPage.Controls.Add(ctrl);
}
}
@ -455,43 +514,61 @@ namespace TBF
void AddToMetrology12AndProcessTab(Test test)
{
///
/// Common subitems
///
ListViewItem lviMetrlg1 = new ListViewItem(test.Name); ///
ListViewItem lviMetrlg2 = new ListViewItem(test.Name); /// SubItem 0
ListViewItem lviMetrlg2 = new ListViewItem(test.Name); /// Name
ListViewItem lviProcess = new ListViewItem(test.Name); ///
lviMetrlg1.Tag = test;
lviMetrlg2.Tag = test;
lviProcess.Tag = test;
lviMetrlg1.SubItems.Add((test.Part == 0) ? "-" : test.Part.ToString()); ///
lviMetrlg2.SubItems.Add((test.Part == 0) ? "-" : test.Part.ToString()); /// Part
lviProcess.SubItems.Add((test.Part == 0) ? "-" : test.Part.ToString()); ///
lviMetrlg1.SubItems.Add(test.Qfrom.ToString()); ///
lviMetrlg2.SubItems.Add(test.Qfrom.ToString()); /// SubItem 1
lviMetrlg2.SubItems.Add(test.Qfrom.ToString()); /// Q_from
lviProcess.SubItems.Add(test.Qfrom.ToString()); ///
lviMetrlg1.SubItems.Add(test.Qto.ToString()); ///
lviMetrlg2.SubItems.Add(test.Qto.ToString()); /// SubItem 2
lviMetrlg2.SubItems.Add(test.Qto.ToString()); /// Q_to
lviProcess.SubItems.Add(test.Qto.ToString()); ///
lviMetrlg1.SubItems.Add(test.Volume.ToString()); /// SubItem 3
lviMetrlg1.SubItems.Add(test.TstTime.ToString()); /// SubItem 4
lviMetrlg1.SubItems.Add(test.Repeats.ToString()); /// SubItem 5
lviMetrlg1.SubItems.Add(test.Emptying ? Strings.yes : Strings.no); /// SubItem 6
//lviMetrlg1.SubItems.Add(test.Zeroing ? Strings.yes : Strings.no); /// SubItem 7
lviMetrlg1.SubItems.Add(test.Time2MassMsrmt.ToString()); /// SubItem 7
lviMetrlg1.SubItems.Add((test.Method != null) ? test.Method.ToString() : string.Empty); /// SubItem 8
///
/// Metrology 1 subitems Volume, ...
///
lviMetrlg1.SubItems.Add(test.Volume.ToString());
lviMetrlg1.SubItems.Add(test.TstTime.ToString());
lviMetrlg1.SubItems.Add(test.Repeats.ToString());
lviMetrlg1.SubItems.Add(test.Emptying ? Strings.yes : Strings.no);
//lviMetrlg1.SubItems.Add(test.Zeroing ? Strings.yes : Strings.no);
lviMetrlg1.SubItems.Add(test.Time2MassMsrmt.ToString());
lviMetrlg1.SubItems.Add((test.Method != null) ? test.Method.ToString() : string.Empty);
lviMetrlg2.SubItems.Add(test.ErrLimLo.ToString()); /// SubItem 3
lviMetrlg2.SubItems.Add(test.ErrLimHi.ToString()); /// SubItem 4
lviMetrlg2.SubItems.Add(test.TolerRed.ToString()); /// SubItem 5
lviMetrlg2.SubItems.Add(test.RedType.ToString()); /// SubItem 6
metrology1ListViewEx.Items.Add(lviMetrlg1);
lviProcess.SubItems.Add(test.FeedingPath); /// SubItem 3
lviProcess.SubItems.Add(test.BenchPath); /// SubItem 4
lviProcess.SubItems.Add(test.OutputPath); /// SubItem 5
lviProcess.SubItems.Add(test.MetersPath); /// SubItem 6
lviProcess.SubItems.Add(string.IsNullOrEmpty(test.TransitionStart) ? "---" : test.TransitionStart); /// SubItem 7
lviProcess.SubItems.Add(string.IsNullOrEmpty(test.TransitionEnd) ? "---" : test.TransitionEnd); /// SubItem 8
///
/// Metrology 2 subitems ErrLimLo, ...
///
lviMetrlg2.SubItems.Add(test.ErrLimLo.ToString());
lviMetrlg2.SubItems.Add(test.ErrLimHi.ToString());
lviMetrlg2.SubItems.Add(test.TolerRed.ToString());
lviMetrlg2.SubItems.Add(test.RedType.ToString());
metrology2ListViewEx.Items.Add(lviMetrlg2);
///
/// Process subitems FeedingPath, ...
///
lviProcess.SubItems.Add(test.FeedingPath);
lviProcess.SubItems.Add(test.BenchPath);
lviProcess.SubItems.Add(test.OutputPath);
lviProcess.SubItems.Add(test.MetersPath);
lviProcess.SubItems.Add(string.IsNullOrEmpty(test.TransitionStart) ? "---" : test.TransitionStart);
lviProcess.SubItems.Add(string.IsNullOrEmpty(test.TransitionEnd) ? "---" : test.TransitionEnd);
metrology1ListViewEx.Items.Add(lviMetrlg1);
metrology2ListViewEx.Items.Add(lviMetrlg2);
processListViewEx.Items.Add(lviProcess);
}
@ -501,41 +578,36 @@ namespace TBF
{
ListViewItem lvi = metrology1ListViewEx.Items[i];
Entities.Test entity = (Entities.Test)lvi.Tag;
entity.Name = lvi.Text;
float Qfrom;
bool allOk = Utils.TryParseUFloat(lvi.SubItems[1].Text, out Qfrom);
entity.Qfrom = Qfrom;
float Qto;
allOk &= Utils.TryParseUFloat(lvi.SubItems[2].Text, out Qto);
entity.Qto = Qto;
float volume;
allOk &= Utils.TryParseUFloat(lvi.SubItems[3].Text, out volume);
entity.Volume = volume;
float testTime;
allOk &= Utils.TryParseUFloat(lvi.SubItems[4].Text, out testTime);
entity.TstTime = testTime;
int repeats;
allOk &= int.TryParse(lvi.SubItems[5].Text, out repeats);
entity.Repeats = repeats;
if (lvi.SubItems[6].Text.Equals(Strings.yes)) entity.Emptying = true;
else if (lvi.SubItems[6].Text.Equals(Strings.no)) entity.Emptying = false;
//if (lvi.SubItems[7].Text.Equals(Strings.yes)) entity.Zeroing = true;
//else if (lvi.SubItems[7].Text.Equals(Strings.no)) entity.Zeroing = false;
int time2MassMsrmt;
allOk &= int.TryParse(lvi.SubItems[7].Text, out time2MassMsrmt);
entity.Time2MassMsrmt = time2MassMsrmt;
if (methodCBox.Items.Contains(lvi.SubItems[8].Text))
int part = entity.Part;
if (lvi.SubItems[(int)MtrlgyClmn.Part].Text.Equals("-"))
{
entity.Method = lvi.SubItems[8].Text;
entity.Part = 0;
}
else if (int.TryParse(lvi.SubItems[(int)MtrlgyClmn.Part].Text, out part))
{
entity.Part = part;
}
float tmp;
if (Utils.TryParseUFloat(lvi.SubItems[(int)MtrlgyClmn.Qfrom].Text, out tmp)) entity.Qfrom = tmp;
if (Utils.TryParseUFloat(lvi.SubItems[(int)MtrlgyClmn.Qto].Text, out tmp)) entity.Qto = tmp;
if (Utils.TryParseUFloat(lvi.SubItems[(int)MtrlgyClmn.Volume].Text, out tmp)) entity.Volume = tmp;
if (Utils.TryParseUFloat(lvi.SubItems[(int)MtrlgyClmn.TestTime].Text,out tmp)) entity.TstTime = tmp;
int itmp;
if (int.TryParse(lvi.SubItems[(int)MtrlgyClmn.Repeats].Text, out itmp)) entity.Repeats = itmp;
if (int.TryParse(lvi.SubItems[(int)MtrlgyClmn.Time2Mass].Text, out itmp)) entity.Time2MassMsrmt = itmp;
if (lvi.SubItems[(int)MtrlgyClmn.Emptying].Text.Equals(Strings.yes)) entity.Emptying = true;
else if (lvi.SubItems[(int)MtrlgyClmn.Emptying].Text.Equals(Strings.no)) entity.Emptying = false;
if (methodCBox.Items.Contains(lvi.SubItems[(int)MtrlgyClmn.Method].Text))
{
entity.Method = lvi.SubItems[(int)MtrlgyClmn.Method].Text;
}
}
}
@ -546,27 +618,23 @@ namespace TBF
{
ListViewItem lvi = metrology2ListViewEx.Items[i];
Entities.Test entity = (Entities.Test)lvi.Tag;
entity.Name = lvi.Text;
float Qfrom;
bool allOk = Utils.TryParseUFloat(lvi.SubItems[1].Text, out Qfrom);
entity.Qfrom = Qfrom;
int part = entity.Part;
if (lvi.SubItems[(int)MtrlgyClmn.Part].Text.Equals("-"))
{
entity.Part = 0;
}
else if (int.TryParse(lvi.SubItems[(int)MtrlgyClmn.Part].Text, out part))
{
entity.Part = part;
}
float Qto;
allOk &= Utils.TryParseUFloat(lvi.SubItems[2].Text, out Qto);
entity.Qto = Qto;
float errLimLo;
allOk &= Utils.TryParseSFloat(lvi.SubItems[3].Text, out errLimLo);
entity.ErrLimLo = errLimLo;
float errLimHi;
allOk &= Utils.TryParseSFloat(lvi.SubItems[4].Text, out errLimHi);
entity.ErrLimHi = errLimHi;
float filter;
allOk &= Utils.TryParseUFloat(lvi.SubItems[5].Text, out filter);
entity.TolerRed = (double)filter;
float tmp;
if (Utils.TryParseSFloat(lvi.SubItems[(int)Mtrlgy2Clmn.ErrLimLo].Text, out tmp)) entity.ErrLimLo = tmp;
if (Utils.TryParseSFloat(lvi.SubItems[(int)Mtrlgy2Clmn.ErrLimHi].Text, out tmp)) entity.ErrLimHi = tmp;
if (Utils.TryParseUFloat(lvi.SubItems[(int)Mtrlgy2Clmn.Filter].Text, out tmp)) entity.TolerRed = (double)tmp;
}
}
@ -576,40 +644,89 @@ namespace TBF
{
ListViewItem lvi = processListViewEx.Items[i];
Entities.Test entity = (Entities.Test)lvi.Tag;
entity.Name = lvi.Text;
float Qfrom;
bool allOk = Utils.TryParseUFloat(lvi.SubItems[1].Text, out Qfrom);
entity.Qfrom = Qfrom;
int part = entity.Part;
if (lvi.SubItems[(int)MtrlgyClmn.Part].Text.Equals("-"))
{
entity.Part = 0;
}
else if (int.TryParse(lvi.SubItems[(int)MtrlgyClmn.Part].Text, out part))
{
entity.Part = part;
}
float Qto;
allOk &= Utils.TryParseUFloat(lvi.SubItems[2].Text, out Qto);
entity.Qto = Qto;
if ((processEditors[3] as ComboBox).Items.Contains(lvi.SubItems[3].Text)) entity.FeedingPath= lvi.SubItems[3].Text;
if ((processEditors[4] as ComboBox).Items.Contains(lvi.SubItems[4].Text)) entity.BenchPath = lvi.SubItems[4].Text;
if ((processEditors[5] as ComboBox).Items.Contains(lvi.SubItems[5].Text)) entity.OutputPath = lvi.SubItems[5].Text;
if ((processEditors[6] as ComboBox).Items.Contains(lvi.SubItems[6].Text)) entity.MetersPath = lvi.SubItems[6].Text;
if ((processEditors[7] as ComboBox).Items.Contains(lvi.SubItems[7].Text))
if ((processEditors[(int)ProcessClmn.Feeding] as ComboBox).Items.Contains(lvi.SubItems[(int)ProcessClmn.Feeding].Text))
{
entity.FeedingPath = lvi.SubItems[(int)ProcessClmn.Feeding].Text;
}
if ((processEditors[(int)ProcessClmn.Bench] as ComboBox).Items.Contains(lvi.SubItems[(int)ProcessClmn.Bench].Text))
{
entity.BenchPath = lvi.SubItems[(int)ProcessClmn.Bench].Text;
}
if ((processEditors[(int)ProcessClmn.Output] as ComboBox).Items.Contains(lvi.SubItems[(int)ProcessClmn.Output].Text))
{
entity.OutputPath = lvi.SubItems[(int)ProcessClmn.Output].Text;
}
if ((processEditors[(int)ProcessClmn.Sensor] as ComboBox).Items.Contains(lvi.SubItems[(int)ProcessClmn.Sensor].Text))
{
entity.MetersPath = lvi.SubItems[(int)ProcessClmn.Sensor].Text;
}
if ((processEditors[(int)ProcessClmn.TrnStart] as ComboBox).Items.Contains(lvi.SubItems[(int)ProcessClmn.TrnStart].Text))
{
entity.TransitionStart = lvi.SubItems[7].Text.Equals("---") ? string.Empty : lvi.SubItems[7].Text;
entity.TransitionStart = lvi.SubItems[(int)ProcessClmn.TrnStart].Text.Equals("---") ? string.Empty : lvi.SubItems[(int)ProcessClmn.TrnStart].Text;
}
if ((processEditors[8] as ComboBox).Items.Contains(lvi.SubItems[8].Text))
if ((processEditors[(int)ProcessClmn.TrnStop] as ComboBox).Items.Contains(lvi.SubItems[(int)ProcessClmn.TrnStop].Text))
{
entity.TransitionEnd = lvi.SubItems[8].Text.Equals("---") ? string.Empty : lvi.SubItems[8].Text;
entity.TransitionEnd = lvi.SubItems[(int)ProcessClmn.TrnStop].Text.Equals("---") ? string.Empty : lvi.SubItems[(int)ProcessClmn.TrnStop].Text;
}
}
}
private void metrology1ListViewEx_SubItemClicked(object sender, SubItemEventArgs e)
{
if (!unlocked || e.SubItem >= metrology1Editors.Length) return;
metrology1ListViewEx.StartEditing(metrology1Editors[e.SubItem], e.Item, e.SubItem);
if (unlocked && (e.SubItem < (int)MtrlgyClmn.MtrlgyClmnCount))
{
metrology1ListViewEx.StartEditing(metrology1Editors[e.SubItem], e.Item, e.SubItem);
}
}
private void metrology1ListViewEx_SubItemEndEditing(object sender, SubItemEndEditingEventArgs e)
{
if (e.SubItem != 1 && e.SubItem != 2 && e.SubItem != 3 && e.SubItem != 4) return;
int dummy;
if (e.SubItem == (int)MtrlgyClmn.Part)
{
if (e.DisplayText.Equals("-")) return; /// OK
if (!int.TryParse(e.DisplayText, out dummy) || dummy < 1 || dummy > 3)
{
e.DisplayText = e.Item.SubItems[e.SubItem].Text;
e.Cancel = true;
return; /// NOK
}
}
if ((e.SubItem == (int)MtrlgyClmn.Repeats) && !int.TryParse(e.DisplayText, out dummy))
{
e.DisplayText = e.Item.SubItems[e.SubItem].Text;
e.Cancel = true;
return;
}
if ((e.SubItem == (int)MtrlgyClmn.Emptying) && !(processEditors[(int)MtrlgyClmn.Emptying] as ComboBox).Items.Contains(e.DisplayText))
{
e.DisplayText = e.Item.SubItems[e.SubItem].Text;
e.Cancel = true;
return;
}
if ((e.SubItem != (int)MtrlgyClmn.Qfrom) &&
(e.SubItem != (int)MtrlgyClmn.Qto) &&
(e.SubItem != (int)MtrlgyClmn.Volume) &&
(e.SubItem != (int)MtrlgyClmn.TestTime))
{
return;
}
float Qfrom = 1.0f;
float Qto = 1.0f;
@ -620,28 +737,28 @@ namespace TBF
bool calculateTime = false;
bool allOk = true;
if (e.SubItem == 1 && Utils.TryParseUFloat(e.DisplayText, out Qfrom))
if ((e.SubItem == (int)MtrlgyClmn.Qfrom) && Utils.TryParseUFloat(e.DisplayText, out Qfrom))
{
allOk &= Utils.TryParseUFloat(e.Item.SubItems[2].Text, out Qto);
allOk &= Utils.TryParseUFloat(e.Item.SubItems[3].Text, out volume);
allOk &= Utils.TryParseUFloat(e.Item.SubItems[(int)MtrlgyClmn.Qto].Text, out Qto);
allOk &= Utils.TryParseUFloat(e.Item.SubItems[(int)MtrlgyClmn.Volume].Text, out volume);
if (allOk) calculateTime = true;
}
else if (e.SubItem == 2 && Utils.TryParseUFloat(e.DisplayText, out Qto))
else if ((e.SubItem == (int)MtrlgyClmn.Qto) && Utils.TryParseUFloat(e.DisplayText, out Qto))
{
allOk &= Utils.TryParseUFloat(e.Item.SubItems[1].Text, out Qfrom);
allOk &= Utils.TryParseUFloat(e.Item.SubItems[3].Text, out volume);
allOk &= Utils.TryParseUFloat(e.Item.SubItems[(int)MtrlgyClmn.Qfrom].Text, out Qfrom);
allOk &= Utils.TryParseUFloat(e.Item.SubItems[(int)MtrlgyClmn.Volume].Text, out volume);
if (allOk) calculateTime = true;
}
else if (e.SubItem == 3 && Utils.TryParseUFloat(e.DisplayText, out volume))
else if ((e.SubItem == (int)MtrlgyClmn.Volume) && Utils.TryParseUFloat(e.DisplayText, out volume))
{
allOk &= Utils.TryParseUFloat(e.Item.SubItems[1].Text, out Qfrom);
allOk &= Utils.TryParseUFloat(e.Item.SubItems[2].Text, out Qto);
allOk &= Utils.TryParseUFloat(e.Item.SubItems[(int)MtrlgyClmn.Qfrom].Text, out Qfrom);
allOk &= Utils.TryParseUFloat(e.Item.SubItems[(int)MtrlgyClmn.Qto].Text, out Qto);
if (allOk) calculateTime = true;
}
else if (e.SubItem == 4 && Utils.TryParseUFloat(e.DisplayText, out testTime))
else if ((e.SubItem == (int)MtrlgyClmn.TestTime) && Utils.TryParseUFloat(e.DisplayText, out testTime))
{
allOk &= Utils.TryParseUFloat(e.Item.SubItems[1].Text, out Qfrom);
allOk &= Utils.TryParseUFloat(e.Item.SubItems[2].Text, out Qto);
allOk &= Utils.TryParseUFloat(e.Item.SubItems[(int)MtrlgyClmn.Qfrom].Text, out Qfrom);
allOk &= Utils.TryParseUFloat(e.Item.SubItems[(int)MtrlgyClmn.Qto].Text, out Qto);
if (allOk) calculateVolume = true;
}
@ -649,12 +766,12 @@ namespace TBF
if (calculateTime)
{
testTime = volume / Qave_lps;
e.Item.SubItems[4].Text = testTime.ToString();
e.Item.SubItems[(int)MtrlgyClmn.TestTime].Text = testTime.ToString();
}
else if (calculateVolume)
{
volume = testTime * Qave_lps;
e.Item.SubItems[3].Text = volume.ToString();
e.Item.SubItems[(int)MtrlgyClmn.Volume].Text = volume.ToString();
}
else
{
@ -665,28 +782,62 @@ namespace TBF
private void metrology2ListViewEx_SubItemClicked(object sender, SubItemEventArgs e)
{
if (!unlocked || e.SubItem >= metrology2Editors.Length) return;
metrology2ListViewEx.StartEditing(metrology2Editors[e.SubItem], e.Item, e.SubItem);
if (unlocked &&
e.SubItem != (int)Mtrlgy2Clmn.Qfrom &&
e.SubItem != (int)Mtrlgy2Clmn.Qto &&
e.SubItem < (int)Mtrlgy2Clmn.Mtrlgy2ClmnCount)
{
metrology2ListViewEx.StartEditing(metrology2Editors[e.SubItem], e.Item, e.SubItem);
}
}
private void metrology2ListViewEx_SubItemEndEditing(object sender, SubItemEndEditingEventArgs e)
{
}
int dummy;
if (e.SubItem == (int)MtrlgyClmn.Part)
{
if (e.DisplayText.Equals("-")) return; /// OK
if (!int.TryParse(e.DisplayText, out dummy) || dummy < 1 || dummy > 3)
{
e.DisplayText = e.Item.SubItems[e.SubItem].Text;
e.Cancel = true;
return; /// NOK
}
}
}
private void processListViewEx_SubItemClicked(object sender, SubItemEventArgs e)
{
if (!unlocked || e.SubItem >= processEditors.Length) return;
processListViewEx.StartEditing(processEditors[e.SubItem], e.Item, e.SubItem);
if (unlocked &&
e.SubItem != (int)ProcessClmn.Qfrom &&
e.SubItem != (int)ProcessClmn.Qto &&
e.SubItem < (int)ProcessClmn.ProcessClmnCount)
{
processListViewEx.StartEditing(processEditors[e.SubItem], e.Item, e.SubItem);
}
}
private void processListViewEx_SubItemEndEditing(object sender, SubItemEndEditingEventArgs e)
{
if ((e.SubItem == 3 && !(processEditors[3] as ComboBox).Items.Contains(e.DisplayText)) ||
(e.SubItem == 4 && !(processEditors[4] as ComboBox).Items.Contains(e.DisplayText)) ||
(e.SubItem == 5 && !(processEditors[5] as ComboBox).Items.Contains(e.DisplayText)) ||
(e.SubItem == 6 && !(processEditors[6] as ComboBox).Items.Contains(e.DisplayText)) ||
(e.SubItem == 7 && !(processEditors[7] as ComboBox).Items.Contains(e.DisplayText)) ||
(e.SubItem == 8 && !(processEditors[8] as ComboBox).Items.Contains(e.DisplayText)))
int dummy;
if (e.SubItem == (int)MtrlgyClmn.Part)
{
if (e.DisplayText.Equals("-")) return; /// OK
if (!int.TryParse(e.DisplayText, out dummy) || dummy < 1 || dummy > 3)
{
e.DisplayText = e.Item.SubItems[e.SubItem].Text;
e.Cancel = true;
return; /// NOK
}
}
if (((e.SubItem == (int)ProcessClmn.Feeding) && !(processEditors[(int)ProcessClmn.Feeding] as ComboBox).Items.Contains(e.DisplayText)) ||
((e.SubItem == (int)ProcessClmn.Bench) && !(processEditors[(int)ProcessClmn.Bench] as ComboBox).Items.Contains(e.DisplayText)) ||
((e.SubItem == (int)ProcessClmn.Output) && !(processEditors[(int)ProcessClmn.Output] as ComboBox).Items.Contains(e.DisplayText)) ||
((e.SubItem == (int)ProcessClmn.Sensor) && !(processEditors[(int)ProcessClmn.Sensor] as ComboBox).Items.Contains(e.DisplayText)) ||
((e.SubItem == (int)ProcessClmn.TrnStart)&& !(processEditors[(int)ProcessClmn.TrnStart]as ComboBox).Items.Contains(e.DisplayText)) ||
((e.SubItem == (int)ProcessClmn.TrnStop) && !(processEditors[(int)ProcessClmn.TrnStop] as ComboBox).Items.Contains(e.DisplayText)))
{
e.DisplayText = e.Item.SubItems[e.SubItem].Text;
e.Cancel = true;

View File

@ -1194,6 +1194,15 @@ namespace TBF.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Part.
/// </summary>
internal static string Part {
get {
return ResourceManager.GetString("Part", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to OK.
/// </summary>

View File

@ -783,4 +783,7 @@
<data name="Flowmeter" xml:space="preserve">
<value>Durchflussmesser</value>
</data>
<data name="Part" xml:space="preserve">
<value>Teil</value>
</data>
</root>

View File

@ -880,4 +880,7 @@
<data name="Flowmeter" xml:space="preserve">
<value>Flowmeter</value>
</data>
<data name="Part" xml:space="preserve">
<value>Part</value>
</data>
</root>