Various.TankWithLevelMsrmnt can use a calibration table loaded from a CSV file.

This commit is contained in:
Milan Hanajik
2018-10-25 15:34:46 +02:00
parent ac2ac82187
commit 3725e238fc
4 changed files with 158 additions and 29 deletions
@@ -2,9 +2,13 @@
/// Copyright (c) 2018 Sensus Slovensko a.s. /// Copyright (c) 2018 Sensus Slovensko a.s.
/// ///
using System; using System;
using System.Globalization;
using System.IO;
using System.Text;
using log4net; using log4net;
using TBF.Boxes; using TBF.Boxes;
using TBF.BenchControl.Generic; using TBF.BenchControl.Generic;
using System.Collections.Generic;
namespace TBF.BenchControl.Various.TankWithLevelMsrmnt namespace TBF.BenchControl.Various.TankWithLevelMsrmnt
{ {
@@ -17,8 +21,11 @@ namespace TBF.BenchControl.Various.TankWithLevelMsrmnt
private static readonly ILog log = LogManager.GetLogger(typeof(Tank)); private static readonly ILog log = LogManager.GetLogger(typeof(Tank));
public override string ToString() { return string.Format("TankWithLevelMsrmnt({0})", Cfg.ToString(1)); } public override string ToString() { return string.Format("TankWithLevelMsrmnt({0})", Cfg.ToString(1)); }
protected readonly TankCfg tankCfg; readonly TankCfg tankCfg;
bool useCalibTable;
double[] calibHeight;
double[] calibVolume;
public enum CurrentOp public enum CurrentOp
{ {
@@ -89,7 +96,11 @@ namespace TBF.BenchControl.Various.TankWithLevelMsrmnt
/// ///
/// IDevice interface (required to call base and initialize 'DrainValve') /// IDevice interface (required to call base and initialize 'DrainValve')
/// ///
public void Initialize() { base.Initalize(); } public void Initialize()
{
base.Initalize();
useCalibTable = LoadCalibrationTable(tankCfg.CalibrationTable);
}
public void RunDeviceBefore() { } public void RunDeviceBefore() { }
public void RunDeviceAfter() { } public void RunDeviceAfter() { }
public void StopDevice() { } public void StopDevice() { }
@@ -101,9 +112,70 @@ namespace TBF.BenchControl.Various.TankWithLevelMsrmnt
return false; return false;
} }
/// <summary>
/// Loads a calibration table in CSV format (column1 = height[mm], column2 = volume[l]).
/// </summary>
/// <param name="pathName">Path name of the CSV file</param>
/// <returns>true when loaded successfully</returns>
bool LoadCalibrationTable(string pathName)
{
try
{
IList<double> heights = new List<double>();
IList<double> volumes = new List<double>();
using (TextReader reader = new StreamReader(pathName))
{
while (true)
{
double h, v;
string line = reader.ReadLine();
if (line == null) break;
string[] columns = line.Split(new char[] { ';' });
if (columns.Length != 2 ||
!double.TryParse(columns[0], NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out h) ||
!double.TryParse(columns[1], NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out v))
{
break;
}
if (heights.Count > 0 && h <= heights[heights.Count - 1])
{
throw new Exception("Calibration file content error: height is not monotonically increasing");
}
heights.Add(h);
volumes.Add(v);
}
}
if ((heights.Count == 0) || (heights.Count != volumes.Count))
{
throw new Exception("No data in the calibration file");
}
calibHeight = new double[heights.Count];
calibVolume = new double[heights.Count];
for (int i = 0; i < heights.Count; i++)
{
calibHeight[i] = heights[i];
calibVolume[i] = volumes[i];
}
log.WarnFormat("calibration table {0} was successfully loaded.", pathName);
return true;
}
catch (Exception)
{
log.Warn("calibration table was NOT loaded.");
return false;
}
}
/// <summary> /// <summary>
/// Converts water level height to volume. /// Converts water level to volume.
/// Tank capcacity is used o distinguish bettween existing tanks: /// Tank capcacity is used o distinguish bettween existing tanks:
/// CEVAL small tank: Capacity = 2000 .. 2220 /// CEVAL small tank: Capacity = 2000 .. 2220
/// CEVAL large tank: Capacity = 10000 .. 10850 /// CEVAL large tank: Capacity = 10000 .. 10850
@@ -112,7 +184,11 @@ namespace TBF.BenchControl.Various.TankWithLevelMsrmnt
/// <returns>Volume in l</returns> /// <returns>Volume in l</returns>
double Level2Volume(double h) double Level2Volume(double h)
{ {
if (Capacity >= 2000 && Capacity <= 2220) if (useCalibTable)
{
return Level2VolumeTable(h);
}
else if (Capacity >= 2000 && Capacity <= 2220)
{ {
return Level2VolumeCevakSmall(h); return Level2VolumeCevakSmall(h);
} }
@@ -127,7 +203,32 @@ namespace TBF.BenchControl.Various.TankWithLevelMsrmnt
} }
/// <summary> /// <summary>
/// Converts water level height to volume. /// Converts water level to volume using calibration table.
/// </summary>
/// <param name="h">Height in mm</param>
/// <returns>Volume in l</returns>
double Level2VolumeTable(double h)
{
if (h <= calibHeight[0]) return calibVolume[0];
for (int i = 1; i < calibHeight.Length; i++)
{
if (h <= calibHeight[i])
{
double h1 = calibHeight[i - 1];
double h2 = calibHeight[i];
double v1 = calibVolume[i - 1];
double v2 = calibVolume[i];
return v1 + (v2 - v1) * (h - h1) / (h2 - h1);
}
}
return calibVolume[calibHeight.Length - 1];
}
/// <summary>
/// Converts water level to volume for 2000 liter water tank in CEVAK Ceske Budejovice.
/// </summary> /// </summary>
/// <param name="h">Height in mm</param> /// <param name="h">Height in mm</param>
/// <returns>Volume in l</returns> /// <returns>Volume in l</returns>
@@ -148,7 +249,7 @@ namespace TBF.BenchControl.Various.TankWithLevelMsrmnt
} }
/// <summary> /// <summary>
/// Converts water level height to volume. /// Converts water level to volume for 10000 liter water tank in CEVAK Ceske Budejovice.
/// </summary> /// </summary>
/// <param name="h">Height in mm</param> /// <param name="h">Height in mm</param>
/// <returns>Volume in l</returns> /// <returns>Volume in l</returns>
@@ -32,8 +32,9 @@ namespace TBF.BenchControl.Various.TankWithLevelMsrmnt
private int drainTimeSec; private int drainTimeSec;
public int DrainTimeSec { get { return drainTimeSec; } set { drainTimeSec = value; } } public int DrainTimeSec { get { return drainTimeSec; } set { drainTimeSec = value; } }
public string LevelMeasurement; public string LevelMeasurement; /// Name of a level measurement component, 'Various.ManualLevelMsrmnt' is used when left empty.
public string CalibrationTable; /// Path name of a calibration table in CSV format (column1 = height[mm], column2 = volume[l])
/// Volume calculation using formulas for std. tanks in Level2Volume() is used when left empty.
/// Private parameterless constructor invoked by all other (public) constructors /// Private parameterless constructor invoked by all other (public) constructors
TankCfg() TankCfg()
@@ -58,12 +59,13 @@ namespace TBF.BenchControl.Various.TankWithLevelMsrmnt
DrainValve = "VB1"; DrainValve = "VB1";
DrainTimeSec = 180; DrainTimeSec = 180;
LevelMeasurement = string.Empty; LevelMeasurement = string.Empty;
CalibrationTable = string.Empty;
} }
public string ToString(int i) public string ToString(int i)
{ {
return string.Format("Name={0}, {1}l, empty={2}l, drainVlv={3}, drainTm={4}s", return string.Format("Capacity={0}l, empty={1}l, drainValve={2}, drainTime={3}s, levelMsrmnt={4}, cal.table={5}",
Name, Capacity, Empty, DrainValve, DrainTimeSec); Capacity, Empty, DrainValve, DrainTimeSec, LevelMeasurement, CalibrationTable);
} }
} }
} }
@@ -76,7 +76,8 @@ namespace TBF.BenchControl.Various.TankWithLevelMsrmnt
drainValveComboBox.Text = string.IsNullOrEmpty(config.DrainValve) ? "---" : config.DrainValve; drainValveComboBox.Text = string.IsNullOrEmpty(config.DrainValve) ? "---" : config.DrainValve;
drainTimeTextBox.Text = config.DrainTimeSec.ToString(); drainTimeTextBox.Text = config.DrainTimeSec.ToString();
levelMeasurementComboBox.Text = string.IsNullOrEmpty(config.LevelMeasurement) ? "---" : config.LevelMeasurement; levelMeasurementComboBox.Text = string.IsNullOrEmpty(config.LevelMeasurement) ? "---" : config.LevelMeasurement;
} calibrationTableTextBox.Text = config.CalibrationTable;
}
public void Unlock() public void Unlock()
{ {
@@ -86,7 +87,8 @@ namespace TBF.BenchControl.Various.TankWithLevelMsrmnt
drainValveComboBox.Enabled = true; drainValveComboBox.Enabled = true;
drainTimeTextBox.Enabled = true; drainTimeTextBox.Enabled = true;
levelMeasurementComboBox.Enabled = true; levelMeasurementComboBox.Enabled = true;
} calibrationTableTextBox.Enabled = true;
}
public CfgUpdateFlags VerifyCfg(ref string message) public CfgUpdateFlags VerifyCfg(ref string message)
{ {
@@ -135,6 +137,7 @@ namespace TBF.BenchControl.Various.TankWithLevelMsrmnt
config.DrainTimeSec = int.Parse(drainTimeTextBox.Text); config.DrainTimeSec = int.Parse(drainTimeTextBox.Text);
config.DrainValve = drainValveComboBox.Text.Equals("---") ? string.Empty : drainValveComboBox.Text; config.DrainValve = drainValveComboBox.Text.Equals("---") ? string.Empty : drainValveComboBox.Text;
config.LevelMeasurement = levelMeasurementComboBox.Text.Equals("---") ? string.Empty : drainValveComboBox.Text; config.LevelMeasurement = levelMeasurementComboBox.Text.Equals("---") ? string.Empty : drainValveComboBox.Text;
config.CalibrationTable = calibrationTableTextBox.Text;
return flags; return flags;
} }
@@ -47,12 +47,14 @@ namespace TBF.BenchControl.Various.TankWithLevelMsrmnt
this.drainValveLabel = new System.Windows.Forms.Label(); this.drainValveLabel = new System.Windows.Forms.Label();
this.levelMeasurementComboBox = new System.Windows.Forms.ComboBox(); this.levelMeasurementComboBox = new System.Windows.Forms.ComboBox();
this.levelMeasurementLabel = new System.Windows.Forms.Label(); this.levelMeasurementLabel = new System.Windows.Forms.Label();
this.calibrationTableTextBox = new System.Windows.Forms.TextBox();
this.calibrationTableLabel = new System.Windows.Forms.Label();
this.SuspendLayout(); this.SuspendLayout();
// //
// nameTextBox // nameTextBox
// //
this.nameTextBox.Enabled = false; this.nameTextBox.Enabled = false;
this.nameTextBox.Location = new System.Drawing.Point(137, 37); this.nameTextBox.Location = new System.Drawing.Point(127, 33);
this.nameTextBox.Name = "nameTextBox"; this.nameTextBox.Name = "nameTextBox";
this.nameTextBox.Size = new System.Drawing.Size(142, 20); this.nameTextBox.Size = new System.Drawing.Size(142, 20);
this.nameTextBox.TabIndex = 2; this.nameTextBox.TabIndex = 2;
@@ -60,7 +62,7 @@ namespace TBF.BenchControl.Various.TankWithLevelMsrmnt
// nameLabel // nameLabel
// //
this.nameLabel.AutoSize = true; this.nameLabel.AutoSize = true;
this.nameLabel.Location = new System.Drawing.Point(26, 40); this.nameLabel.Location = new System.Drawing.Point(16, 36);
this.nameLabel.Name = "nameLabel"; this.nameLabel.Name = "nameLabel";
this.nameLabel.Size = new System.Drawing.Size(35, 13); this.nameLabel.Size = new System.Drawing.Size(35, 13);
this.nameLabel.TabIndex = 1; this.nameLabel.TabIndex = 1;
@@ -69,7 +71,7 @@ namespace TBF.BenchControl.Various.TankWithLevelMsrmnt
// classNameLabel // classNameLabel
// //
this.classNameLabel.AutoSize = true; this.classNameLabel.AutoSize = true;
this.classNameLabel.Location = new System.Drawing.Point(134, 16); this.classNameLabel.Location = new System.Drawing.Point(124, 12);
this.classNameLabel.Name = "classNameLabel"; this.classNameLabel.Name = "classNameLabel";
this.classNameLabel.Size = new System.Drawing.Size(89, 13); this.classNameLabel.Size = new System.Drawing.Size(89, 13);
this.classNameLabel.TabIndex = 0; this.classNameLabel.TabIndex = 0;
@@ -78,7 +80,7 @@ namespace TBF.BenchControl.Various.TankWithLevelMsrmnt
// capacityLabel // capacityLabel
// //
this.capacityLabel.AutoSize = true; this.capacityLabel.AutoSize = true;
this.capacityLabel.Location = new System.Drawing.Point(26, 76); this.capacityLabel.Location = new System.Drawing.Point(16, 72);
this.capacityLabel.Name = "capacityLabel"; this.capacityLabel.Name = "capacityLabel";
this.capacityLabel.Size = new System.Drawing.Size(75, 13); this.capacityLabel.Size = new System.Drawing.Size(75, 13);
this.capacityLabel.TabIndex = 5; this.capacityLabel.TabIndex = 5;
@@ -87,7 +89,7 @@ namespace TBF.BenchControl.Various.TankWithLevelMsrmnt
// capacityTextBox // capacityTextBox
// //
this.capacityTextBox.Enabled = false; this.capacityTextBox.Enabled = false;
this.capacityTextBox.Location = new System.Drawing.Point(137, 73); this.capacityTextBox.Location = new System.Drawing.Point(127, 69);
this.capacityTextBox.Name = "capacityTextBox"; this.capacityTextBox.Name = "capacityTextBox";
this.capacityTextBox.Size = new System.Drawing.Size(43, 20); this.capacityTextBox.Size = new System.Drawing.Size(43, 20);
this.capacityTextBox.TabIndex = 6; this.capacityTextBox.TabIndex = 6;
@@ -95,7 +97,7 @@ namespace TBF.BenchControl.Various.TankWithLevelMsrmnt
// label2 // label2
// //
this.label2.AutoSize = true; this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(183, 76); this.label2.Location = new System.Drawing.Point(173, 72);
this.label2.Name = "label2"; this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(23, 13); this.label2.Size = new System.Drawing.Size(23, 13);
this.label2.TabIndex = 7; this.label2.TabIndex = 7;
@@ -104,7 +106,7 @@ namespace TBF.BenchControl.Various.TankWithLevelMsrmnt
// label3 // label3
// //
this.label3.AutoSize = true; this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(183, 98); this.label3.Location = new System.Drawing.Point(173, 94);
this.label3.Name = "label3"; this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(23, 13); this.label3.Size = new System.Drawing.Size(23, 13);
this.label3.TabIndex = 10; this.label3.TabIndex = 10;
@@ -113,7 +115,7 @@ namespace TBF.BenchControl.Various.TankWithLevelMsrmnt
// emptyTextBox // emptyTextBox
// //
this.emptyTextBox.Enabled = false; this.emptyTextBox.Enabled = false;
this.emptyTextBox.Location = new System.Drawing.Point(137, 95); this.emptyTextBox.Location = new System.Drawing.Point(127, 91);
this.emptyTextBox.Name = "emptyTextBox"; this.emptyTextBox.Name = "emptyTextBox";
this.emptyTextBox.Size = new System.Drawing.Size(43, 20); this.emptyTextBox.Size = new System.Drawing.Size(43, 20);
this.emptyTextBox.TabIndex = 9; this.emptyTextBox.TabIndex = 9;
@@ -121,7 +123,7 @@ namespace TBF.BenchControl.Various.TankWithLevelMsrmnt
// emptyLabel // emptyLabel
// //
this.emptyLabel.AutoSize = true; this.emptyLabel.AutoSize = true;
this.emptyLabel.Location = new System.Drawing.Point(26, 98); this.emptyLabel.Location = new System.Drawing.Point(16, 94);
this.emptyLabel.Name = "emptyLabel"; this.emptyLabel.Name = "emptyLabel";
this.emptyLabel.Size = new System.Drawing.Size(109, 13); this.emptyLabel.Size = new System.Drawing.Size(109, 13);
this.emptyLabel.TabIndex = 8; this.emptyLabel.TabIndex = 8;
@@ -130,7 +132,7 @@ namespace TBF.BenchControl.Various.TankWithLevelMsrmnt
// label4 // label4
// //
this.label4.AutoSize = true; this.label4.AutoSize = true;
this.label4.Location = new System.Drawing.Point(186, 143); this.label4.Location = new System.Drawing.Point(176, 139);
this.label4.Name = "label4"; this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(24, 13); this.label4.Size = new System.Drawing.Size(24, 13);
this.label4.TabIndex = 17; this.label4.TabIndex = 17;
@@ -139,7 +141,7 @@ namespace TBF.BenchControl.Various.TankWithLevelMsrmnt
// drainTimeTextBox // drainTimeTextBox
// //
this.drainTimeTextBox.Enabled = false; this.drainTimeTextBox.Enabled = false;
this.drainTimeTextBox.Location = new System.Drawing.Point(137, 140); this.drainTimeTextBox.Location = new System.Drawing.Point(127, 136);
this.drainTimeTextBox.Name = "drainTimeTextBox"; this.drainTimeTextBox.Name = "drainTimeTextBox";
this.drainTimeTextBox.Size = new System.Drawing.Size(43, 20); this.drainTimeTextBox.Size = new System.Drawing.Size(43, 20);
this.drainTimeTextBox.TabIndex = 16; this.drainTimeTextBox.TabIndex = 16;
@@ -147,7 +149,7 @@ namespace TBF.BenchControl.Various.TankWithLevelMsrmnt
// label5 // label5
// //
this.label5.AutoSize = true; this.label5.AutoSize = true;
this.label5.Location = new System.Drawing.Point(26, 143); this.label5.Location = new System.Drawing.Point(16, 139);
this.label5.Name = "label5"; this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(54, 13); this.label5.Size = new System.Drawing.Size(54, 13);
this.label5.TabIndex = 15; this.label5.TabIndex = 15;
@@ -157,7 +159,7 @@ namespace TBF.BenchControl.Various.TankWithLevelMsrmnt
// //
this.drainValveComboBox.Enabled = false; this.drainValveComboBox.Enabled = false;
this.drainValveComboBox.FormattingEnabled = true; this.drainValveComboBox.FormattingEnabled = true;
this.drainValveComboBox.Location = new System.Drawing.Point(137, 117); this.drainValveComboBox.Location = new System.Drawing.Point(127, 113);
this.drainValveComboBox.Name = "drainValveComboBox"; this.drainValveComboBox.Name = "drainValveComboBox";
this.drainValveComboBox.Size = new System.Drawing.Size(143, 21); this.drainValveComboBox.Size = new System.Drawing.Size(143, 21);
this.drainValveComboBox.TabIndex = 14; this.drainValveComboBox.TabIndex = 14;
@@ -165,7 +167,7 @@ namespace TBF.BenchControl.Various.TankWithLevelMsrmnt
// drainValveLabel // drainValveLabel
// //
this.drainValveLabel.AutoSize = true; this.drainValveLabel.AutoSize = true;
this.drainValveLabel.Location = new System.Drawing.Point(26, 120); this.drainValveLabel.Location = new System.Drawing.Point(16, 116);
this.drainValveLabel.Name = "drainValveLabel"; this.drainValveLabel.Name = "drainValveLabel";
this.drainValveLabel.Size = new System.Drawing.Size(61, 13); this.drainValveLabel.Size = new System.Drawing.Size(61, 13);
this.drainValveLabel.TabIndex = 13; this.drainValveLabel.TabIndex = 13;
@@ -175,7 +177,7 @@ namespace TBF.BenchControl.Various.TankWithLevelMsrmnt
// //
this.levelMeasurementComboBox.Enabled = false; this.levelMeasurementComboBox.Enabled = false;
this.levelMeasurementComboBox.FormattingEnabled = true; this.levelMeasurementComboBox.FormattingEnabled = true;
this.levelMeasurementComboBox.Location = new System.Drawing.Point(137, 176); this.levelMeasurementComboBox.Location = new System.Drawing.Point(127, 172);
this.levelMeasurementComboBox.Name = "levelMeasurementComboBox"; this.levelMeasurementComboBox.Name = "levelMeasurementComboBox";
this.levelMeasurementComboBox.Size = new System.Drawing.Size(143, 21); this.levelMeasurementComboBox.Size = new System.Drawing.Size(143, 21);
this.levelMeasurementComboBox.TabIndex = 32; this.levelMeasurementComboBox.TabIndex = 32;
@@ -183,16 +185,35 @@ namespace TBF.BenchControl.Various.TankWithLevelMsrmnt
// levelMeasurementLabel // levelMeasurementLabel
// //
this.levelMeasurementLabel.AutoSize = true; this.levelMeasurementLabel.AutoSize = true;
this.levelMeasurementLabel.Location = new System.Drawing.Point(26, 179); this.levelMeasurementLabel.Location = new System.Drawing.Point(16, 175);
this.levelMeasurementLabel.Name = "levelMeasurementLabel"; this.levelMeasurementLabel.Name = "levelMeasurementLabel";
this.levelMeasurementLabel.Size = new System.Drawing.Size(99, 13); this.levelMeasurementLabel.Size = new System.Drawing.Size(99, 13);
this.levelMeasurementLabel.TabIndex = 31; this.levelMeasurementLabel.TabIndex = 31;
this.levelMeasurementLabel.Text = "Level measurement"; this.levelMeasurementLabel.Text = "Level measurement";
// //
// calibrationTableTextBox
//
this.calibrationTableTextBox.Enabled = false;
this.calibrationTableTextBox.Location = new System.Drawing.Point(127, 207);
this.calibrationTableTextBox.Name = "calibrationTableTextBox";
this.calibrationTableTextBox.Size = new System.Drawing.Size(244, 20);
this.calibrationTableTextBox.TabIndex = 34;
//
// calibrationTableLabel
//
this.calibrationTableLabel.AutoSize = true;
this.calibrationTableLabel.Location = new System.Drawing.Point(16, 210);
this.calibrationTableLabel.Name = "calibrationTableLabel";
this.calibrationTableLabel.Size = new System.Drawing.Size(82, 13);
this.calibrationTableLabel.TabIndex = 33;
this.calibrationTableLabel.Text = "Calibration table";
//
// TankCfgCtrl // TankCfgCtrl
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.calibrationTableTextBox);
this.Controls.Add(this.calibrationTableLabel);
this.Controls.Add(this.levelMeasurementComboBox); this.Controls.Add(this.levelMeasurementComboBox);
this.Controls.Add(this.levelMeasurementLabel); this.Controls.Add(this.levelMeasurementLabel);
this.Controls.Add(this.drainValveComboBox); this.Controls.Add(this.drainValveComboBox);
@@ -210,7 +231,7 @@ namespace TBF.BenchControl.Various.TankWithLevelMsrmnt
this.Controls.Add(this.nameLabel); this.Controls.Add(this.nameLabel);
this.Controls.Add(this.classNameLabel); this.Controls.Add(this.classNameLabel);
this.Name = "TankCfgCtrl"; this.Name = "TankCfgCtrl";
this.Size = new System.Drawing.Size(327, 250); this.Size = new System.Drawing.Size(415, 250);
this.Load += new System.EventHandler(this.BalanceCfgCtrl_Load); this.Load += new System.EventHandler(this.BalanceCfgCtrl_Load);
this.ResumeLayout(false); this.ResumeLayout(false);
this.PerformLayout(); this.PerformLayout();
@@ -235,5 +256,7 @@ namespace TBF.BenchControl.Various.TankWithLevelMsrmnt
private System.Windows.Forms.Label drainValveLabel; private System.Windows.Forms.Label drainValveLabel;
private System.Windows.Forms.ComboBox levelMeasurementComboBox; private System.Windows.Forms.ComboBox levelMeasurementComboBox;
private System.Windows.Forms.Label levelMeasurementLabel; private System.Windows.Forms.Label levelMeasurementLabel;
private System.Windows.Forms.TextBox calibrationTableTextBox;
private System.Windows.Forms.Label calibrationTableLabel;
} }
} }