using System; using log4net; using TBF.Boxes; namespace TBF.BenchControl.Elde.FlowMeter { public class ReadFlowOp : IOperation { private static readonly ILog log = LogManager.GetLogger(typeof(ReadFlowOp)); public override string ToString() { return string.Format("ReadFlowOp(.,{0},{1},.)", eventDone, flowMeterNr); } /// Set by the constructor readonly ControlBoardDev controlBoard; readonly int flowMeterNr; readonly Event eventDone; FloatBox flow; /// /// Events: FlowInDone, FlowOutDone or Error /// /// Flow meter reference /// Reference to the measured flow variable, value is in bar /// Event to be returned by Run() when completed OK public ReadFlowOp(FlowMeter flowMeter, ref FloatBox flow, Event eventDone) { if (flowMeter == null) throw new ArgumentNullException("flowMeter"); this.controlBoard = flowMeter.ControlBoard; this.flowMeterNr = flowMeter.Idx1; this.eventDone = eventDone; this.flow = flow; log.Debug(this.ToString()); } public ReadFlowOp(FlowMeter flowMeter, ref FloatBox flow) : this(flowMeter, ref flow, Event.FlowMeasurementDone) { } /// Start this operation public void Start() { } /// Run this operation /// /// Event.FlowInDone or Event.FlowOutDone /// public Event Run() { if (flowMeterNr == (int)(controlBoard.StatusP & StatusP.RefFlowMeterMask)) { flow.Val = controlBoard.ReferenceFlow; return eventDone; } else { return Event.Error; } } /// Stop this operation public void Stop() { } } }