/// /// Copyright (c) 2013-2020 Sensus Slovensko a.s. /// using System; using log4net; using TBF.Boxes; namespace TBF.Rig.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 scale; DoubleBox tara; bool activityStarted; /// /// Events: BalanceDone, Error /// /// Balance device instance /// Reference to variable for 'tara' in kg public TaringOp(BalanceDev scale, ref DoubleBox tara) { if (scale == null) throw new ArgumentNullException("balanceDev"); this.scale = scale; this.tara = tara; log.Debug(this.ToString()); } /// Start this operation public void Start() { log.DebugFormat("{0} - TaringOp - tart()", scale.Name); done = false; if (scale.Activity == Activity.Idle) { scale.SendTaraCmd(); activityStarted = true; scale.Activity = Activity.RunningOperation; } else { activityStarted = false; } } /// Run this operation /// /// Event.None /// Event.BalanceDone /// Event.Error . . . . . Current.Tick == null /// public Event Run() { if (!activityStarted && scale.Activity == Activity.Idle) { scale.SendTaraCmd(); activityStarted = true; scale.Activity = Activity.RunningOperation; return Event.Busy; } if (done) return Event.ScaleDone; /// Taring has been done already if (scale.MsrmntState == MsrmntState.Busy) return Event.Busy; if (scale.MsrmntState == MsrmntState.Overload) { tara.Val = scale.Capacity; done = true; return Event.ScaleOverload; } if (scale.MsrmntState == MsrmntState.Valid) { tara.Val = scale.Mass; done = true; return Event.ScaleDone; /// Taring completed } scale.SendTaraCmd(); /// Failed -> repeat taring return Event.Busy; } /// Stop this operation public void Stop() { if (scale.MsrmntState == MsrmntState.Busy) scale.MsrmntState = MsrmntState.Failed; scale.Activity = Activity.Idle; log.DebugFormat("{0} - TaringOp - Stop()", scale.Name); } } }