MettlerToledo.Standard.BalanceDev/Old/NewDev clean-up, units (oz), 1st after draining, etc.

This commit is contained in:
Milan Hanajik
2021-02-16 11:40:14 +01:00
parent a33e4de467
commit fea9b01922
8 changed files with 211 additions and 149 deletions
@@ -1,5 +1,5 @@
///
/// Copyright (c) 2013-2018 Sensus Slovensko a.s.
/// Copyright (c) 2013-2021 Sensus Slovensko a.s.
///
using System;
using System.Collections.Generic;
@@ -265,21 +265,11 @@ namespace TBF.BenchControl.MettlerToledo.Standard
serialPort.Write("SI\r\n");
}
/// <summary>Units for SetUnits() argument</summary>
public enum Units
{
g,
kg,
t,
lb,
oz
}
/// <summary>
/// Get the serial number
/// </summary>
/// <remarks>After a successful SetUnits(kg) mass is still sent in g. MH 15.10.2013</remarks>
public void SendSetUnitsCmd(Units unit)
public void SendSetUnitsCmd(Config.Unit unit)
{
if (balanceCfg.DebugLevel == DebugMode.Simulate) return;
@@ -293,27 +283,28 @@ namespace TBF.BenchControl.MettlerToledo.Standard
stringBuilder.Clear();
switch (unit)
{
case Units.g:
case Config.Unit.g:
log.InfoFormat("{0} - SetUnits({1}) - \"U g\\r\\n\"", Name, unit);
serialPort.Write("U g\r\n");
break;
case Units.kg:
log.InfoFormat("{0} - SetUnits({1}) - \"U kg\\r\\n\"", Name, unit);
serialPort.Write("U kg\r\n");
break;
case Units.t:
case Config.Unit.t:
log.InfoFormat("{0} - SetUnits({1}) - \"U t\\r\\n\"", Name, unit);
serialPort.Write("U t\r\n");
break;
case Units.lb:
case Config.Unit.lb:
log.InfoFormat("{0} - SetUnits({1}) - \"U lb\\r\\n\"", Name, unit);
serialPort.Write("U lb\r\n");
break;
case Units.oz:
case Config.Unit.oz:
log.InfoFormat("{0} - SetUnits({1}) - \"U oz\\r\\n\"", Name, unit);
serialPort.Write("U oz\r\n");
break;
}
case Config.Unit.kg:
default:
log.InfoFormat("{0} - SetUnits({1}) - \"U kg\\r\\n\"", Name, unit);
serialPort.Write("U kg\r\n");
break;
}
}
/// <summary>
@@ -376,9 +367,9 @@ namespace TBF.BenchControl.MettlerToledo.Standard
received = tmp;
}
string[] fields = received.Split(new char[] { ' ' });
string[] field = received.Split(new char[] { ' ' });
if (fields.Length == 1 && fields[0].Equals("ZA")) /// Zero when stable
if (field.Length == 1 && field[0] == "ZA") /// Zero when stable
{
mass = 0;
Masses[balanceNr] = mass;
@@ -386,16 +377,16 @@ namespace TBF.BenchControl.MettlerToledo.Standard
log.InfoFormat("{0} - Balance response = \"{1}<cr><lf>\"", Name, received);
return;
}
else if (fields.Length < 2)
else if (field.Length < 2)
{
msrmntState = MsrmntState.Failed;
log.WarnFormat("{0} - Balance response = \"{1}<cr><lf>\", Unexpected error !!!", Name, received);
return;
}
if (fields[0].Equals("Z")) /// Zero when stable
if (field[0] == "Z") /// Zero when stable
{
if (fields.Length == 2 && fields[1].Equals("A"))
if (field.Length == 2 && field[1] == "A")
{
mass = 0;
Masses[balanceNr] = mass;
@@ -409,33 +400,31 @@ namespace TBF.BenchControl.MettlerToledo.Standard
log.WarnFormat("{0} - Balance response = \"{1}<cr><lf>\", error !!!", Name, received);
}
}
else if (fields[0].Equals("S")) /// Stable mass: field[1] = <mass> field[2] = "kg"
else if (field[0] == "S") /// Stable mass: field[1] = <mass> field[2] = "kg"
{
if (fields.Length == 3 &&
double.TryParse(fields[1],
if (field.Length == 3 &&
double.TryParse(field[1],
NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingSign,
CultureInfo.InvariantCulture,
out mass))
{
if (fields[2].Equals("g")) mass /= 1000.0f;
if (fields[2].Equals("t")) mass *= 1000.0f;
mass = Config.Units.ConvertFrom(ParseUnit(field[2]), mass);
Masses[balanceNr] = mass;
msrmntState = MsrmntState.Valid;
log.InfoFormat("{0} - Balance response = \"{1}<cr><lf>\", Mass = {2}", Name, received, mass);
}
else if (fields.Length == 4 && (fields[1].Equals("S") || fields[1].Equals("D")) &&
double.TryParse(fields[2],
else if (field.Length == 4 && (field[1] == "S" || field[1] == "D") &&
double.TryParse(field[2],
NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingSign,
CultureInfo.InvariantCulture,
out mass))
{
if (fields[3].Equals("g")) mass /= 1000.0f;
if (fields[3].Equals("t")) mass *= 1000.0f;
mass = Config.Units.ConvertFrom(ParseUnit(field[3]), mass);
Masses[balanceNr] = mass;
msrmntState = MsrmntState.Valid;
log.InfoFormat("{0} - Balance response = \"{1}<cr><lf>\", Mass = {2}", Name, received, mass);
}
else if (fields.Length == 2 && fields[1].Equals("-"))
else if (field.Length == 2 && field[1] == "-")
{
mass = 0;
Masses[balanceNr] = mass;
@@ -446,25 +435,24 @@ namespace TBF.BenchControl.MettlerToledo.Standard
{
msrmntState = MsrmntState.Failed;
log.WarnFormat("{0} Balance response = \"{1}<cr><lf>\", Overload or and unexpected error !!!", Name, received);
bool b = double.TryParse(fields[1], NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingSign, CultureInfo.InvariantCulture, out mass);
bool b = double.TryParse(field[1], NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingSign, CultureInfo.InvariantCulture, out mass);
}
}
else if (fields[0].Equals("SD")) /// Dynamic mass: field[1] = <mass> field[2] = "kg"
else if (field[0] == "SD") /// Dynamic mass: field[1] = <mass> field[2] = "kg"
{
if (fields.Length >= 3 &&
double.TryParse(fields[1],
if (field.Length >= 3 &&
double.TryParse(field[1],
NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingSign,
CultureInfo.InvariantCulture,
out mass))
{
if (fields[2].Equals("g")) mass /= 1000.0f;
if (fields[2].Equals("t")) mass *= 1000.0f;
mass = Config.Units.ConvertFrom(ParseUnit(field[2]), mass);
Masses[balanceNr] = mass;
msrmntState = MsrmntState.Valid;
log.InfoFormat("{0} - Balance response = \"{1}<cr><lf>\", Mass = {2}", Name, received, mass);
}
else if (fields.Length == 2 && fields[1].Equals("-"))
else if (field.Length == 2 && field[1] == "-")
{
mass = 0;
Masses[balanceNr] = mass;
@@ -475,21 +463,20 @@ namespace TBF.BenchControl.MettlerToledo.Standard
{
msrmntState = MsrmntState.Failed;
log.WarnFormat("{0} - Balance response = \"{1}<cr><lf>\", Overload or and unexpected error !!!", Name, received);
bool b = double.TryParse(fields[1], NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingSign, CultureInfo.InvariantCulture, out mass);
bool b = double.TryParse(field[1], NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingSign, CultureInfo.InvariantCulture, out mass);
}
}
else if (fields[0].Equals("TB")) /// Taring
else if (field[0] == "TB") /// Taring
{
if (fields.Length >= 3 &&
double.TryParse(fields[1],
if (field.Length >= 3 &&
double.TryParse(field[1],
NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingSign,
CultureInfo.InvariantCulture,
out mass))
{
if (fields[2].Equals("g")) mass /= 1000.0f;
if (fields[2].Equals("t")) mass *= 1000.0f;
msrmntState = MsrmntState.Valid;
mass = Config.Units.ConvertFrom(ParseUnit(field[2]), mass);
msrmntState = MsrmntState.Valid;
log.InfoFormat("{0} - Balance response = \"{1}<cr><lf>\", Tara = {2}", Name, received, mass);
}
else
@@ -498,16 +485,15 @@ namespace TBF.BenchControl.MettlerToledo.Standard
log.WarnFormat("{0} - Balance response = \"{1}<cr><lf>\", Overload or and unexpected error !!!", Name, received);
}
}
else if (fields[0].Equals("T")) /// Taring
else if (field[0] == "T") /// Taring
{
if (fields.Length >= 4 && fields[1].Equals("S") &&
double.TryParse(fields[2],
if (field.Length >= 4 && field[1] == "S" &&
double.TryParse(field[2],
NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingSign,
CultureInfo.InvariantCulture,
out mass))
{
if (fields[3].Equals("g")) mass /= 1000.0f;
if (fields[3].Equals("t")) mass *= 1000.0f;
mass = Config.Units.ConvertFrom(ParseUnit(field[3]), mass);
msrmntState = MsrmntState.Valid;
log.InfoFormat("{0} - Balance response = \"{1}<cr><lf>\", Tara = {2}", Name, received, mass);
}
@@ -554,7 +540,16 @@ namespace TBF.BenchControl.MettlerToledo.Standard
/// <returns>ZeroOp reference</returns>
public IOperation ZeroOp()
{
return new ZeroOp(this);
switch (balanceCfg.ActionAfter1stDraining)
{
case ActionA1D.Zero:
return new ZeroOp(this);
case ActionA1D.Tara:
DoubleBox dummy = new DoubleBox();
return new TaringOp(this, ref dummy);
default:
return null;
}
}
/// <summary>
@@ -599,5 +594,20 @@ namespace TBF.BenchControl.MettlerToledo.Standard
{
return null;
}
/// <summary>
/// Parse a string representing mass units.
/// Defaults to 'kg'in case unitStr not recognized.
/// </summary>
/// <param name="unitStr">String: "kg", "g", "t", "lb" or "oz" expected</param>
/// <returns></returns>
protected Config.Unit ParseUnit(string unitStr)
{
if (unitStr == "g") return Config.Unit.g;
if (unitStr == "t") return Config.Unit.t;
if (unitStr == "lb") return Config.Unit.lb;
if (unitStr == "oz") return Config.Unit.oz;
return Config.Unit.kg;
}
}
}