From 5f95737d561850b79b9ff0cfc74353c3ee6432e7 Mon Sep 17 00:00:00 2001 From: Milan Hanajik Date: Thu, 7 May 2015 21:16:59 +0200 Subject: [PATCH] MettlerToledo.Multi resolution added, Badger component updated --- .../MettlerToledo/Multi/BalanceCfg.cs | 2 + .../Multi/BalanceCfgCtrl.Designer.cs | 129 +++++++++++------- .../MettlerToledo/Multi/BalanceCfgCtrl.cs | 8 ++ .../MettlerToledo/Multi/BalanceDev.cs | 35 +++-- .../Badger-mala-trat/ControlComponent3U.dll | Bin 243200 -> 243712 bytes 5 files changed, 109 insertions(+), 65 deletions(-) diff --git a/TestBenchFramework/BenchControl/MettlerToledo/Multi/BalanceCfg.cs b/TestBenchFramework/BenchControl/MettlerToledo/Multi/BalanceCfg.cs index 37f894d58..082ee985a 100644 --- a/TestBenchFramework/BenchControl/MettlerToledo/Multi/BalanceCfg.cs +++ b/TestBenchFramework/BenchControl/MettlerToledo/Multi/BalanceCfg.cs @@ -20,6 +20,7 @@ namespace TBF.BenchControl.MettlerToledo.Multi /// public int IdNr; /// Identification number 1..3 public float Capacity; /// Max. water mass in 'kg' or volume in 'l' + public float Resolution; /// Resolution of the integer value in the serial protocol in 'kg' public float Empty; /// 'Empty' water mass in 'kg' or volume in 'l' public string Format; public int EmptyTimeSec; /// s @@ -39,6 +40,7 @@ namespace TBF.BenchControl.MettlerToledo.Multi IdNr = 1; Capacity = 200.0f; + Resolution = 0.001f; Empty = 20.0f; Format = "F3"; EmptyTimeSec = 180; diff --git a/TestBenchFramework/BenchControl/MettlerToledo/Multi/BalanceCfgCtrl.Designer.cs b/TestBenchFramework/BenchControl/MettlerToledo/Multi/BalanceCfgCtrl.Designer.cs index db1c471f1..d3ab733ff 100644 --- a/TestBenchFramework/BenchControl/MettlerToledo/Multi/BalanceCfgCtrl.Designer.cs +++ b/TestBenchFramework/BenchControl/MettlerToledo/Multi/BalanceCfgCtrl.Designer.cs @@ -59,39 +59,42 @@ namespace TBF.BenchControl.MettlerToledo.Multi this.formatLabel = new System.Windows.Forms.Label(); this.idNrTextBox = new System.Windows.Forms.TextBox(); this.idNrLabel = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.resolutionTextBox = new System.Windows.Forms.TextBox(); + this.resolutionLabel = new System.Windows.Forms.Label(); this.SuspendLayout(); // // handshakeComboBox // this.handshakeComboBox.Enabled = false; this.handshakeComboBox.FormattingEnabled = true; - this.handshakeComboBox.Location = new System.Drawing.Point(236, 216); + this.handshakeComboBox.Location = new System.Drawing.Point(236, 224); this.handshakeComboBox.Name = "handshakeComboBox"; this.handshakeComboBox.Size = new System.Drawing.Size(43, 21); - this.handshakeComboBox.TabIndex = 27; + this.handshakeComboBox.TabIndex = 30; // // stopBitsComboBox // this.stopBitsComboBox.Enabled = false; this.stopBitsComboBox.FormattingEnabled = true; - this.stopBitsComboBox.Location = new System.Drawing.Point(236, 193); + this.stopBitsComboBox.Location = new System.Drawing.Point(236, 203); this.stopBitsComboBox.Name = "stopBitsComboBox"; this.stopBitsComboBox.Size = new System.Drawing.Size(43, 21); - this.stopBitsComboBox.TabIndex = 25; + this.stopBitsComboBox.TabIndex = 28; // // parityComboBox // this.parityComboBox.Enabled = false; this.parityComboBox.FormattingEnabled = true; - this.parityComboBox.Location = new System.Drawing.Point(100, 216); + this.parityComboBox.Location = new System.Drawing.Point(100, 224); this.parityComboBox.Name = "parityComboBox"; this.parityComboBox.Size = new System.Drawing.Size(43, 21); - this.parityComboBox.TabIndex = 21; + this.parityComboBox.TabIndex = 24; // // nameTextBox // this.nameTextBox.Enabled = false; - this.nameTextBox.Location = new System.Drawing.Point(136, 27); + this.nameTextBox.Location = new System.Drawing.Point(136, 26); this.nameTextBox.Name = "nameTextBox"; this.nameTextBox.Size = new System.Drawing.Size(143, 20); this.nameTextBox.TabIndex = 2; @@ -99,7 +102,7 @@ namespace TBF.BenchControl.MettlerToledo.Multi // nameLabel // this.nameLabel.AutoSize = true; - this.nameLabel.Location = new System.Drawing.Point(26, 30); + this.nameLabel.Location = new System.Drawing.Point(26, 29); this.nameLabel.Name = "nameLabel"; this.nameLabel.Size = new System.Drawing.Size(35, 13); this.nameLabel.TabIndex = 1; @@ -117,85 +120,85 @@ namespace TBF.BenchControl.MettlerToledo.Multi // handshakeLabel // this.handshakeLabel.AutoSize = true; - this.handshakeLabel.Location = new System.Drawing.Point(162, 219); + this.handshakeLabel.Location = new System.Drawing.Point(162, 227); this.handshakeLabel.Name = "handshakeLabel"; this.handshakeLabel.Size = new System.Drawing.Size(62, 13); - this.handshakeLabel.TabIndex = 26; + this.handshakeLabel.TabIndex = 29; this.handshakeLabel.Text = "Handshake"; // // stopBitsLabel // this.stopBitsLabel.AutoSize = true; - this.stopBitsLabel.Location = new System.Drawing.Point(162, 196); + this.stopBitsLabel.Location = new System.Drawing.Point(162, 206); this.stopBitsLabel.Name = "stopBitsLabel"; this.stopBitsLabel.Size = new System.Drawing.Size(49, 13); - this.stopBitsLabel.TabIndex = 24; + this.stopBitsLabel.TabIndex = 27; this.stopBitsLabel.Text = "Stop Bits"; // // dataBitsTextBox // this.dataBitsTextBox.Enabled = false; - this.dataBitsTextBox.Location = new System.Drawing.Point(236, 170); + this.dataBitsTextBox.Location = new System.Drawing.Point(236, 181); this.dataBitsTextBox.Name = "dataBitsTextBox"; this.dataBitsTextBox.Size = new System.Drawing.Size(43, 20); - this.dataBitsTextBox.TabIndex = 23; + this.dataBitsTextBox.TabIndex = 26; // // dataBitsLabel // this.dataBitsLabel.AutoSize = true; - this.dataBitsLabel.Location = new System.Drawing.Point(162, 173); + this.dataBitsLabel.Location = new System.Drawing.Point(162, 184); this.dataBitsLabel.Name = "dataBitsLabel"; this.dataBitsLabel.Size = new System.Drawing.Size(50, 13); - this.dataBitsLabel.TabIndex = 22; + this.dataBitsLabel.TabIndex = 25; this.dataBitsLabel.Text = "Data Bits"; // // parityLabel // this.parityLabel.AutoSize = true; - this.parityLabel.Location = new System.Drawing.Point(26, 221); + this.parityLabel.Location = new System.Drawing.Point(26, 229); this.parityLabel.Name = "parityLabel"; this.parityLabel.Size = new System.Drawing.Size(33, 13); - this.parityLabel.TabIndex = 20; + this.parityLabel.TabIndex = 23; this.parityLabel.Text = "Parity"; // // baudRateTextBox // this.baudRateTextBox.Enabled = false; - this.baudRateTextBox.Location = new System.Drawing.Point(100, 193); + this.baudRateTextBox.Location = new System.Drawing.Point(100, 203); this.baudRateTextBox.Name = "baudRateTextBox"; this.baudRateTextBox.Size = new System.Drawing.Size(43, 20); - this.baudRateTextBox.TabIndex = 19; + this.baudRateTextBox.TabIndex = 22; // // baudRateLabel // this.baudRateLabel.AutoSize = true; - this.baudRateLabel.Location = new System.Drawing.Point(26, 196); + this.baudRateLabel.Location = new System.Drawing.Point(26, 206); this.baudRateLabel.Name = "baudRateLabel"; this.baudRateLabel.Size = new System.Drawing.Size(58, 13); - this.baudRateLabel.TabIndex = 18; + this.baudRateLabel.TabIndex = 21; this.baudRateLabel.Text = "Baud Rate"; // // comPortNrTextBox // this.comPortNrTextBox.Enabled = false; - this.comPortNrTextBox.Location = new System.Drawing.Point(100, 170); + this.comPortNrTextBox.Location = new System.Drawing.Point(100, 181); this.comPortNrTextBox.Name = "comPortNrTextBox"; this.comPortNrTextBox.Size = new System.Drawing.Size(43, 20); - this.comPortNrTextBox.TabIndex = 17; + this.comPortNrTextBox.TabIndex = 20; // // comPortNrLabel // this.comPortNrLabel.AutoSize = true; - this.comPortNrLabel.Location = new System.Drawing.Point(26, 173); + this.comPortNrLabel.Location = new System.Drawing.Point(26, 184); this.comPortNrLabel.Name = "comPortNrLabel"; this.comPortNrLabel.Size = new System.Drawing.Size(68, 13); - this.comPortNrLabel.TabIndex = 16; + this.comPortNrLabel.TabIndex = 19; this.comPortNrLabel.Text = "Serial Port #:"; // // capacityLabel // this.capacityLabel.AutoSize = true; - this.capacityLabel.Location = new System.Drawing.Point(26, 76); + this.capacityLabel.Location = new System.Drawing.Point(26, 71); this.capacityLabel.Name = "capacityLabel"; this.capacityLabel.Size = new System.Drawing.Size(76, 13); this.capacityLabel.TabIndex = 5; @@ -204,7 +207,7 @@ namespace TBF.BenchControl.MettlerToledo.Multi // capacityTextBox // this.capacityTextBox.Enabled = false; - this.capacityTextBox.Location = new System.Drawing.Point(137, 73); + this.capacityTextBox.Location = new System.Drawing.Point(137, 68); this.capacityTextBox.Name = "capacityTextBox"; this.capacityTextBox.Size = new System.Drawing.Size(43, 20); this.capacityTextBox.TabIndex = 6; @@ -212,7 +215,7 @@ namespace TBF.BenchControl.MettlerToledo.Multi // label2 // this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(186, 76); + this.label2.Location = new System.Drawing.Point(186, 71); this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(19, 13); this.label2.TabIndex = 7; @@ -221,76 +224,76 @@ namespace TBF.BenchControl.MettlerToledo.Multi // label3 // this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(186, 99); + this.label3.Location = new System.Drawing.Point(186, 113); this.label3.Name = "label3"; this.label3.Size = new System.Drawing.Size(19, 13); - this.label3.TabIndex = 10; + this.label3.TabIndex = 13; this.label3.Text = "kg"; // // emptyTextBox // this.emptyTextBox.Enabled = false; - this.emptyTextBox.Location = new System.Drawing.Point(137, 96); + this.emptyTextBox.Location = new System.Drawing.Point(137, 110); this.emptyTextBox.Name = "emptyTextBox"; this.emptyTextBox.Size = new System.Drawing.Size(43, 20); - this.emptyTextBox.TabIndex = 9; + this.emptyTextBox.TabIndex = 12; // // emptyLabel // this.emptyLabel.AutoSize = true; - this.emptyLabel.Location = new System.Drawing.Point(26, 99); + this.emptyLabel.Location = new System.Drawing.Point(26, 113); this.emptyLabel.Name = "emptyLabel"; this.emptyLabel.Size = new System.Drawing.Size(64, 13); - this.emptyLabel.TabIndex = 8; + this.emptyLabel.TabIndex = 11; this.emptyLabel.Text = "Tank Empty"; // // label4 // this.label4.AutoSize = true; - this.label4.Location = new System.Drawing.Point(186, 145); + this.label4.Location = new System.Drawing.Point(186, 155); this.label4.Name = "label4"; this.label4.Size = new System.Drawing.Size(24, 13); - this.label4.TabIndex = 15; + this.label4.TabIndex = 18; this.label4.Text = "sec"; // // emptyTimeTextBox // this.emptyTimeTextBox.Enabled = false; - this.emptyTimeTextBox.Location = new System.Drawing.Point(137, 142); + this.emptyTimeTextBox.Location = new System.Drawing.Point(137, 152); this.emptyTimeTextBox.Name = "emptyTimeTextBox"; this.emptyTimeTextBox.Size = new System.Drawing.Size(43, 20); - this.emptyTimeTextBox.TabIndex = 14; + this.emptyTimeTextBox.TabIndex = 17; // // label5 // this.label5.AutoSize = true; - this.label5.Location = new System.Drawing.Point(26, 145); + this.label5.Location = new System.Drawing.Point(26, 155); this.label5.Name = "label5"; this.label5.Size = new System.Drawing.Size(90, 13); - this.label5.TabIndex = 13; + this.label5.TabIndex = 16; this.label5.Text = "Tank Empty Time"; // // formatTextBox // this.formatTextBox.Enabled = false; - this.formatTextBox.Location = new System.Drawing.Point(137, 119); + this.formatTextBox.Location = new System.Drawing.Point(137, 131); this.formatTextBox.Name = "formatTextBox"; this.formatTextBox.Size = new System.Drawing.Size(43, 20); - this.formatTextBox.TabIndex = 12; + this.formatTextBox.TabIndex = 15; // // formatLabel // this.formatLabel.AutoSize = true; - this.formatLabel.Location = new System.Drawing.Point(26, 122); + this.formatLabel.Location = new System.Drawing.Point(26, 134); this.formatLabel.Name = "formatLabel"; this.formatLabel.Size = new System.Drawing.Size(76, 13); - this.formatLabel.TabIndex = 11; + this.formatLabel.TabIndex = 14; this.formatLabel.Text = "Decimal points"; // // idNrTextBox // this.idNrTextBox.Enabled = false; - this.idNrTextBox.Location = new System.Drawing.Point(137, 50); + this.idNrTextBox.Location = new System.Drawing.Point(137, 47); this.idNrTextBox.Name = "idNrTextBox"; this.idNrTextBox.Size = new System.Drawing.Size(43, 20); this.idNrTextBox.TabIndex = 4; @@ -299,16 +302,45 @@ namespace TBF.BenchControl.MettlerToledo.Multi // idNrLabel // this.idNrLabel.AutoSize = true; - this.idNrLabel.Location = new System.Drawing.Point(26, 53); + this.idNrLabel.Location = new System.Drawing.Point(26, 50); this.idNrLabel.Name = "idNrLabel"; this.idNrLabel.Size = new System.Drawing.Size(85, 13); this.idNrLabel.TabIndex = 3; this.idNrLabel.Text = "ID Number (1..3)"; // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(186, 92); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(19, 13); + this.label1.TabIndex = 10; + this.label1.Text = "kg"; + // + // resolutionTextBox + // + this.resolutionTextBox.Enabled = false; + this.resolutionTextBox.Location = new System.Drawing.Point(137, 89); + this.resolutionTextBox.Name = "resolutionTextBox"; + this.resolutionTextBox.Size = new System.Drawing.Size(43, 20); + this.resolutionTextBox.TabIndex = 9; + // + // resolutionLabel + // + this.resolutionLabel.AutoSize = true; + this.resolutionLabel.Location = new System.Drawing.Point(26, 92); + this.resolutionLabel.Name = "resolutionLabel"; + this.resolutionLabel.Size = new System.Drawing.Size(57, 13); + this.resolutionLabel.TabIndex = 8; + this.resolutionLabel.Text = "Resolution"; + // // BalanceCfgCtrl // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.label1); + this.Controls.Add(this.resolutionTextBox); + this.Controls.Add(this.resolutionLabel); this.Controls.Add(this.idNrTextBox); this.Controls.Add(this.idNrLabel); this.Controls.Add(this.formatTextBox); @@ -375,5 +407,8 @@ namespace TBF.BenchControl.MettlerToledo.Multi private System.Windows.Forms.Label formatLabel; private System.Windows.Forms.TextBox idNrTextBox; private System.Windows.Forms.Label idNrLabel; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox resolutionTextBox; + private System.Windows.Forms.Label resolutionLabel; } } diff --git a/TestBenchFramework/BenchControl/MettlerToledo/Multi/BalanceCfgCtrl.cs b/TestBenchFramework/BenchControl/MettlerToledo/Multi/BalanceCfgCtrl.cs index 1e402f8ae..766e6b3e3 100644 --- a/TestBenchFramework/BenchControl/MettlerToledo/Multi/BalanceCfgCtrl.cs +++ b/TestBenchFramework/BenchControl/MettlerToledo/Multi/BalanceCfgCtrl.cs @@ -110,6 +110,7 @@ namespace TBF.BenchControl.MettlerToledo.Multi nameTextBox.Text = config.Name; idNrTextBox.Text = config.IdNr.ToString(); capacityTextBox.Text = config.Capacity.ToString(); + resolutionTextBox.Text = config.Resolution.ToString(); emptyTextBox.Text = config.Empty.ToString(); formatTextBox.Text = (config.Format.Length > 1) ? config.Format.Substring(1) : config.Format; emptyTimeTextBox.Text = config.EmptyTimeSec.ToString(); @@ -128,6 +129,7 @@ namespace TBF.BenchControl.MettlerToledo.Multi idNrTextBox.Enabled = true; capacityTextBox.Enabled = true; + resolutionTextBox.Enabled = true; emptyTextBox.Enabled = true; formatTextBox.Enabled = true; emptyTimeTextBox.Enabled = true; @@ -157,6 +159,11 @@ namespace TBF.BenchControl.MettlerToledo.Multi flags |= CfgUpdateFlags.Error; message += Environment.NewLine + "'Tank Capacity' is not valid"; } + if (!Utils.TryParseUFloat(resolutionTextBox.Text, out mass) || mass <= 0) + { + flags |= CfgUpdateFlags.Error; + message += Environment.NewLine + "'Resolution' is not valid"; + } if (!Utils.TryParseUFloat(emptyTextBox.Text, out mass) || mass <= 0) { flags |= CfgUpdateFlags.Error; @@ -207,6 +214,7 @@ namespace TBF.BenchControl.MettlerToledo.Multi config.IdNr = int.Parse(idNrTextBox.Text); config.Capacity = Utils.ParseUFloat(capacityTextBox.Text); + config.Resolution = Utils.ParseUFloat(resolutionTextBox.Text); config.Empty = Utils.ParseUFloat(emptyTextBox.Text); config.Format = "F" + formatTextBox.Text; config.EmptyTimeSec = int.Parse(emptyTimeTextBox.Text); diff --git a/TestBenchFramework/BenchControl/MettlerToledo/Multi/BalanceDev.cs b/TestBenchFramework/BenchControl/MettlerToledo/Multi/BalanceDev.cs index 36b8962de..2d06e23b9 100644 --- a/TestBenchFramework/BenchControl/MettlerToledo/Multi/BalanceDev.cs +++ b/TestBenchFramework/BenchControl/MettlerToledo/Multi/BalanceDev.cs @@ -34,7 +34,6 @@ namespace TBF.BenchControl.MettlerToledo.Multi /// Enumeration of balances via static fields and methods /// static int nextBalanceIdx = 0; - static int currentBalanceIdx = 0; public static new void ResetStaticProperties() { nextBalanceIdx = 0; @@ -50,6 +49,7 @@ namespace TBF.BenchControl.MettlerToledo.Multi public int BalanceNr { get { return balanceNr; } } public float Capacity { get { return balanceCfg.Capacity; } } + public float Resolution { get { return balanceCfg.Resolution; } } public int EmptyTimeSec { get { return balanceCfg.EmptyTimeSec; } } /// The state of the mass measurement @@ -154,7 +154,7 @@ namespace TBF.BenchControl.MettlerToledo.Multi } string currentBuffer = stringBuilder.ToString(); - int eolPos = currentBuffer.IndexOf("\r\n"); + int eolPos = currentBuffer.IndexOf("\r"); if (eolPos >= 0) { msrmntTimeStamp = StateMachine.Time; @@ -185,30 +185,29 @@ namespace TBF.BenchControl.MettlerToledo.Multi } else if (fields.Length == 3) { - float tmpMass; - if (float.TryParse(fields[1], - NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingSign, - CultureInfo.InvariantCulture, - out tmpMass)) + int balanceIdNr = received[0]; + if (balanceIdNr >= 1 && balanceIdNr <= nextBalanceIdx) { - Masses[currentBalanceIdx] = tmpMass / 100.0f; - msrmntState = MsrmntState.Valid; - log.InfoFormat("Balance response = \"{0}\", Mass = {1}", received, tmpMass); - } + float tmpMass; + if (float.TryParse(fields[1], + NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingSign, + CultureInfo.InvariantCulture, + out tmpMass)) + { + Masses[balanceIdNr - 1] = tmpMass * Balances[balanceIdNr - 1].Resolution; + msrmntState = MsrmntState.Valid; + log.InfoFormat("Balance response = \"{0}\", Mass = {1}", received, tmpMass); + } - msrmntState = MsrmntState.Failed; - log.WarnFormat("Balance response = \"{0}\", Unexpected error !!!", received); + msrmntState = MsrmntState.Failed; + log.WarnFormat("Balance response = \"{0}\", Unexpected error !!!", received); + } } else { msrmntState = MsrmntState.Failed; log.WarnFormat("Balance response = \"{0}\", Unexpected error !!!", received); } - - if (++currentBalanceIdx >= nextBalanceIdx) - { - currentBalanceIdx = 0; - } } } diff --git a/packages/ControlBoard/Badger-mala-trat/ControlComponent3U.dll b/packages/ControlBoard/Badger-mala-trat/ControlComponent3U.dll index 3b891ffff319b098cc3ecbfd7ccdcb6393a5e3fd..20b0c39f4233ecbf818e86d2977993be1ebf2e0d 100644 GIT binary patch delta 21510 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 delta 21064 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