From 67a762e51cd4ac721c7f979fc50b5da172160385 Mon Sep 17 00:00:00 2001 From: Milan Hanajik Date: Mon, 14 May 2018 10:41:03 +0200 Subject: [PATCH] MettlerToledo.Standard : Timeout in ReadMassOp and ReadStableMassOp, ver. 2.18.892 --- .../MettlerToledo/Standard/BalanceDev.cs | 8 ++++ .../MettlerToledo/Standard/BalanceNewDev.cs | 1 + .../MettlerToledo/Standard/ReadMassOp.cs | 40 +++++++++++------ .../Standard/ReadStableMassOp.cs | 45 ++++++++++++------- TBF/Properties/AssemblyInfo.cs | 4 +- 5 files changed, 67 insertions(+), 31 deletions(-) diff --git a/TBF/BenchControl/MettlerToledo/Standard/BalanceDev.cs b/TBF/BenchControl/MettlerToledo/Standard/BalanceDev.cs index dcb3c25c1..6db28b6fa 100644 --- a/TBF/BenchControl/MettlerToledo/Standard/BalanceDev.cs +++ b/TBF/BenchControl/MettlerToledo/Standard/BalanceDev.cs @@ -62,6 +62,9 @@ namespace TBF.BenchControl.MettlerToledo.Standard public MsrmntState MsrmntState { get { return msrmntState; } } protected MsrmntState msrmntState; + /// Time since the last serial command in seconds + public int MsrmntTime; + /// The mass after StartMassMeasurement() when MsrmntState == MsrmntState.Valid public double Mass { get { return mass; } } protected double mass; @@ -105,6 +108,7 @@ namespace TBF.BenchControl.MettlerToledo.Standard base.Initalize(); msrmntState = MsrmntState.Failed; /// Data not valid yet + MsrmntTime = 0; if (balanceCfg.DebugLevel == DebugMode.Simulate) return; @@ -140,6 +144,7 @@ namespace TBF.BenchControl.MettlerToledo.Standard log.InfoFormat("{0} - ZeroWhenStable()", Name); msrmntState = MsrmntState.Busy; + MsrmntTime = 0; stringBuilder.Clear(); serialPort.Write("Z\r\n"); } @@ -157,6 +162,7 @@ namespace TBF.BenchControl.MettlerToledo.Standard log.InfoFormat("{0} - Taring()", Name); msrmntState = MsrmntState.Busy; + MsrmntTime = 0; stringBuilder.Clear(); serialPort.Write("T\r\n"); } @@ -177,6 +183,7 @@ namespace TBF.BenchControl.MettlerToledo.Standard log.InfoFormat("{0} - GetStableMassMeasurement()", Name); msrmntState = MsrmntState.Busy; + MsrmntTime = 0; stringBuilder.Clear(); serialPort.Write("S\r\n"); } @@ -197,6 +204,7 @@ namespace TBF.BenchControl.MettlerToledo.Standard log.InfoFormat("{0} - GetImmediateMassMeasurement()", Name); msrmntState = MsrmntState.Busy; + MsrmntTime = 0; stringBuilder.Clear(); serialPort.Write("SI\r\n"); } diff --git a/TBF/BenchControl/MettlerToledo/Standard/BalanceNewDev.cs b/TBF/BenchControl/MettlerToledo/Standard/BalanceNewDev.cs index 1fa76f31c..9ecd0baef 100644 --- a/TBF/BenchControl/MettlerToledo/Standard/BalanceNewDev.cs +++ b/TBF/BenchControl/MettlerToledo/Standard/BalanceNewDev.cs @@ -97,6 +97,7 @@ namespace TBF.BenchControl.MettlerToledo.Standard string received = stringBuilder.ToString(); + /// Eliminate double spaces in the received string while (true) { string tmp = received.Replace(" ", " "); diff --git a/TBF/BenchControl/MettlerToledo/Standard/ReadMassOp.cs b/TBF/BenchControl/MettlerToledo/Standard/ReadMassOp.cs index 16221e17c..d6719f520 100644 --- a/TBF/BenchControl/MettlerToledo/Standard/ReadMassOp.cs +++ b/TBF/BenchControl/MettlerToledo/Standard/ReadMassOp.cs @@ -51,6 +51,8 @@ namespace TBF.BenchControl.MettlerToledo.Standard /// public Event Run() { + scale.MsrmntTime++; + if (!started) { scale.GetImmediateMassMeasurement(); @@ -58,19 +60,31 @@ namespace TBF.BenchControl.MettlerToledo.Standard done = false; return Event.Busy; } - else if (started && scale.MsrmntState != MsrmntState.Busy) - { - if (scale.MsrmntState == MsrmntState.Valid) result.Val = scale.Mass; - log.InfoFormat("ReadMassOp.Run() ... state={0}, mass={1} ... returning Event.BalanceDone", - scale.MsrmntState, scale.Mass); - done = true; - started = false; - return Event.BalanceDone; /// Mass read OK - } - else - { - return Event.Busy; - } + else if (started && scale.MsrmntState == MsrmntState.Busy) + { + /// Measurement is in progress + + if (scale.MsrmntTime >= 2) + { + /// Timeout - no response from the scale within 2 seconds - send command again + scale.GetImmediateMassMeasurement(); + started = true; + done = false; + } + + return Event.Busy; + } + else + { + /// Measurement completed or failed: (started == true) && (scale.MsrmntState != MsrmntState.Busy) + + if (scale.MsrmntState == MsrmntState.Valid) result.Val = scale.Mass; + log.InfoFormat("ReadMassOp.Run() ... state={0}, mass={1} ... returning Event.BalanceDone", + scale.MsrmntState, scale.Mass); + done = true; + started = false; + return Event.BalanceDone; /// Mass read OK + } } /// Stop this operation diff --git a/TBF/BenchControl/MettlerToledo/Standard/ReadStableMassOp.cs b/TBF/BenchControl/MettlerToledo/Standard/ReadStableMassOp.cs index c2431f190..4ef0ef059 100644 --- a/TBF/BenchControl/MettlerToledo/Standard/ReadStableMassOp.cs +++ b/TBF/BenchControl/MettlerToledo/Standard/ReadStableMassOp.cs @@ -16,7 +16,7 @@ namespace TBF.BenchControl.MettlerToledo.Standard public override string ToString() { return string.Format("ReadStableMassOp(.,{0},.)", totalReadingsCount); } /// Set by the constructor - BalanceDev balanceDev; + BalanceDev scale; int totalReadingsCount; double maxSpread; /// Maximum spread of measurements in kg (otherwise the measurement continues) Config.Entities.MassMethod method; /// by the scale, mass spread threshold or mass standard deviation threshold @@ -31,18 +31,18 @@ namespace TBF.BenchControl.MettlerToledo.Standard /// /// Events: BalanceDone, Error /// - /// Balance device instance + /// Balance device instance /// Reference to the measured mass in kg /// Required mass readings count (>= 4) /// Maximum spread of measurements in kg (otherwise the measurement continues) /// Method: false = slow (precise), true = fast (immediate) - public ReadStableMassOp(BalanceDev balanceDev, ref DoubleBox result, int readingsCount, double maxSpread, Config.Entities.MassMethod method) + public ReadStableMassOp(BalanceDev scale, ref DoubleBox result, int readingsCount, double maxSpread, Config.Entities.MassMethod method) { - if (balanceDev == null) throw new ArgumentNullException("balanceDev"); - this.balanceDev = balanceDev; + if (scale == null) throw new ArgumentNullException("balanceDev"); + this.scale = scale; this.totalReadingsCount = (readingsCount < 4) ? 5 : readingsCount; /// readingsCount is at least 4 - this.maxSpread = (maxSpread == 0) ? (balanceDev.Capacity / 20000.0) : maxSpread; + this.maxSpread = (maxSpread == 0) ? (scale.Capacity / 20000.0) : maxSpread; this.method = method; this.result = result; @@ -61,9 +61,9 @@ namespace TBF.BenchControl.MettlerToledo.Standard measurementCompleted = false; if (method == Config.Entities.MassMethod.Scale) - balanceDev.GetStableMassMeasurement(); + scale.GetStableMassMeasurement(); else - balanceDev.GetImmediateMassMeasurement(); + scale.GetImmediateMassMeasurement(); } /// Run this operation @@ -74,19 +74,32 @@ namespace TBF.BenchControl.MettlerToledo.Standard /// public Event Run() { - if (measurementCompleted) return Event.BalanceDone; + scale.MsrmntTime++; - if (balanceDev.MsrmntState == MsrmntState.Busy) + if (measurementCompleted) return Event.BalanceDone; + + if (scale.MsrmntState == MsrmntState.Busy) { - return Event.None; /// Wait for a mass measurement + /// Measurement is in progress - resend command if timeout occurs + + if (method == Config.Entities.MassMethod.Scale) + { + if (scale.MsrmntTime >= 60) scale.GetStableMassMeasurement(); + } + else + { + if (scale.MsrmntTime >= 2) scale.GetImmediateMassMeasurement(); + } + + return Event.None; /// Wait for a mass measurement } - if (balanceDev.MsrmntState == MsrmntState.Valid) + if (scale.MsrmntState == MsrmntState.Valid) { /// Save the measurement if (currentReadingsCount < totalReadingsCount) { - massReadings[currentReadingsCount++] = balanceDev.Mass; + massReadings[currentReadingsCount++] = scale.Mass; } else { @@ -95,7 +108,7 @@ namespace TBF.BenchControl.MettlerToledo.Standard { massReadings[i - 1] = massReadings[i]; } - massReadings[totalReadingsCount - 1] = balanceDev.Mass; + massReadings[totalReadingsCount - 1] = scale.Mass; } } @@ -165,9 +178,9 @@ namespace TBF.BenchControl.MettlerToledo.Standard /// Start a new measurement /// if (method == Config.Entities.MassMethod.Scale) - balanceDev.GetStableMassMeasurement(); + scale.GetStableMassMeasurement(); else - balanceDev.GetImmediateMassMeasurement(); + scale.GetImmediateMassMeasurement(); return Event.None; } diff --git a/TBF/Properties/AssemblyInfo.cs b/TBF/Properties/AssemblyInfo.cs index 970ad20b6..96b2183ec 100644 --- a/TBF/Properties/AssemblyInfo.cs +++ b/TBF/Properties/AssemblyInfo.cs @@ -29,5 +29,5 @@ using System.Runtime.InteropServices; // Build Number // Revision // -[assembly: AssemblyVersion("2.18.891.0")] -[assembly: AssemblyFileVersion("2.18.891.0")] +[assembly: AssemblyVersion("2.18.892.0")] +[assembly: AssemblyFileVersion("2.18.892.0")]