53 lines
1.2 KiB
C#
53 lines
1.2 KiB
C#
|
|
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;
|
|
}
|
|
|
|
/// <summary>Start this operation</summary>
|
|
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;
|
|
}
|
|
}
|
|
|
|
/// <summary>Run this operation</summary>
|
|
public Event Run()
|
|
{
|
|
tankSelector.SetOutputs(0);
|
|
return Event.ConditionMet;
|
|
}
|
|
|
|
/// <summary>Stop this operation</summary>
|
|
public void Stop()
|
|
{
|
|
}
|
|
}
|
|
}
|