namespace TBF.BenchControl.Modbus.TankSelector { public class SelectTankOp : IOperation { public enum OpSpecifier { None, SelectTank, UnselectTank, /// tankNo is ignored, the selected tank is unselected } TankSelector tankSelector; OpSpecifier currentOp; int tankNo; public SelectTankOp(TankSelector tankSelector, OpSpecifier op, int tankNo) { this.tankSelector = tankSelector; this.currentOp = op; if (currentOp == OpSpecifier.SelectTank) this.tankNo = tankNo; } /// Start this operation public void Start() { switch (currentOp) { case OpSpecifier.SelectTank: tankSelector.SetOutputs((tankNo == 1) ? 1u : ((tankNo == 2) ? 2u : ((tankNo == 3) ? 4u : 0))); break; case OpSpecifier.UnselectTank: tankSelector.SetOutputs((tankNo == 1) ? 8u : ((tankNo == 2) ? 16u : ((tankNo == 3) ? 32u : 0))); break; default: break; } } /// Run this operation public Event Run() { tankSelector.SetOutputs(0); return Event.ConditionMet; } /// Stop this operation public void Stop() { } } }