/// /// Copyright (c) 2013-2015 Sensus Metering Systems /// using System; using log4net; namespace TBF.Rig.MettlerToledo.Standard { public class GetSerNumOp : IOperation { private static readonly ILog log = LogManager.GetLogger(typeof(GetSerNumOp)); public override string ToString() { return string.Format("GetSerNumOp(.,.)"); } /// Set by the constructor BalanceNewDev scale; string serialNumber; bool activityStarted; /// /// Events: BalanceDone, Error /// /// Balance device instance /// Reference to the serialNumber public GetSerNumOp(BalanceNewDev scale, ref string serialNumber) { if (scale == null) throw new ArgumentNullException("balanceDev"); this.scale = scale; this.serialNumber = serialNumber; log.Debug(this.ToString()); } /// Start this operation public void Start() { if (scale.Activity == Activity.Idle) { scale.SendGetSerialNumberCmd(); activityStarted = true; scale.Activity = Activity.RunningOperation; } else { activityStarted = false; } } /// Run this operation /// /// Event.None /// Event.BalanceDone /// public Event Run() { if (!activityStarted && scale.Activity == Activity.Idle) { scale.SendGetSerialNumberCmd(); activityStarted = true; scale.Activity = Activity.RunningOperation; return Event.Busy; } if (scale.MsrmntState == MsrmntState.Valid) { serialNumber = scale.SerialNumber; return Event.ScaleDone; /// S/N read successful } if (scale.MsrmntState == MsrmntState.Failed) { return Event.Error; /// S/N read failed } return Event.Busy; /// No result yet } /// Stop this operation public void Stop() { if (scale.MsrmntState == MsrmntState.Busy) scale.MsrmntState = MsrmntState.Failed; scale.Activity = Activity.Idle; } } }