/// /// Copyright (c) 2013-2015 Sensus Metering Systems /// using System; using log4net; using TBF.BenchControl; using TBF.Boxes; namespace TBF.BenchControl.Operations { public class ReadMoreRegistersOp : IOperation { private static readonly ILog log = LogManager.GetLogger(typeof(ReadMoreRegistersOp)); public override string ToString() { return string.Format("ReadAllRegistersOp()"); } /// Set by the constructor int readersCount; IOperation[] readRegOps; /// /// Events: eventDone (default=Event.ReadRegisterDone) or Event.Error /// /// Register reader reference /// Reference to the water meter register state in pulses public ReadMoreRegistersOp(GenericDevices.IRegisterReader[] readers) { if (readers == null) throw new ArgumentNullException("readers"); readersCount = readers.Length; readRegOps = new IOperation[readersCount]; for (int i = 0; i < readersCount; i++) { if (readers[i] != null) readRegOps[i] = readers[i].ReadRegisterOp(); } log.Debug(this.ToString()); } /// Start this operation public void Start() { int oriRefPulses = Sequences.ProcessData.RefPulses; Sequences.ProcessData.RefPulses = StateMachine.ControlBoard.EtPulses(0); Sequences.ProcessData.RefPulsesDelta = Sequences.ProcessData.RefPulses - oriRefPulses; for (int i = 0; i < readersCount; i++) { if (readRegOps[i] != null) readRegOps[i].Start(); } } /// Run this operation public Event Run() { bool allDone = true; bool anyError = false; int oriRefPulses = Sequences.ProcessData.RefPulses; Sequences.ProcessData.RefPulses = StateMachine.ControlBoard.EtPulses(0); Sequences.ProcessData.RefPulsesDelta = Sequences.ProcessData.RefPulses - oriRefPulses; for (int i = 0; i < readersCount; i++) { if (readRegOps[i] != null) { Event evnt = readRegOps[i].Run(); if (evnt == Event.Error) anyError = true; if (evnt != Event.ReadRegisterDone) allDone = false; } } if (anyError) return Event.Error; if (allDone) return Event.ReadAllRegistersDone; return Event.None; } /// Stop this operation public void Stop() { for (int i = 0; i < readersCount; i++) { if (readRegOps[i] != null) readRegOps[i].Stop(); } } } }