/// /// Copyright (c) 2013-2015 Sensus Metering Systems /// Author: Milan Hanajik /// using System; using log4net; using TBF.Boxes; namespace TBF.BenchControl.MettlerToledo.Standard { public class TaringOp : IOperation { private static readonly ILog log = LogManager.GetLogger(typeof(TaringOp)); public override string ToString() { return string.Format("TaringOp(.,.)"); } bool done; /// Set by the constructor BalanceDev balanceDev; FloatBox tara; /// /// Events: BalanceDone, Error /// /// Balance device instance /// Reference to variable for 'tara' in kg public TaringOp(BalanceDev balanceDev, ref FloatBox tara) { if (balanceDev == null) throw new ArgumentNullException("balanceDev"); this.balanceDev = balanceDev; this.tara = tara; log.Debug(this.ToString()); } /// Start this operation public void Start() { log.DebugFormat("{0} - Start()", balanceDev.Name); done = false; balanceDev.Taring(); } /// Run this operation /// /// Event.None /// Event.BalanceDone /// Event.Error . . . . . Current.Tick == null /// public Event Run() { if (done) return Event.BalanceDone; /// Taring has been done already if (balanceDev.MsrmntState == MsrmntState.Busy) return Event.Busy; if (balanceDev.MsrmntState == MsrmntState.Overload) { tara.Val = balanceDev.Capacity; done = true; return Event.BalanceOverload; } if (balanceDev.MsrmntState == MsrmntState.Valid) { tara.Val = balanceDev.Mass; done = true; return Event.BalanceDone; /// Taring completed } balanceDev.Taring(); /// Failed -> repeat taring return Event.Busy; } /// Stop this operation public void Stop() { log.DebugFormat("{0} - Stop()", balanceDev.Name); } } }