tbf/TestBenchFramework/BenchControl/Operations/TimerOp.cs
Milan Hanajik 415adba8cf - Tank emptying on start-up implemented, EmptyTimeSec parameter added to Balances
- added events Event.TimerBusy, Event.ValvesBusy, etc.
- fixed bug in SetValvesOp
- preparing a virtual bench drawing on the Process screen - partly done
2014-12-10 12:37:05 +01:00

73 lines
1.9 KiB
C#

using log4net;
namespace TBF.BenchControl.Operations
{
/// <summary>
/// Implements timer function
///
/// Constructors:
/// Timer(timerTimeMs) ................ use Event.TimerExpired as eventExpired
/// Timer(timerTimeMs, eventExpired) .. use constructor argument as eventExpired
///
/// Start argument:
///
/// Events:
/// Event.None ........ operation is in progress
/// eventExpired ...... timer expired
/// </summary>
public class TimerOp : IOperation
{
private static readonly ILog log = LogManager.GetLogger(typeof(TimerOp));
public override string ToString() { return string.Format("TimerOp({0}s, Event.{1})", timerTime, eventExpired); }
/// Private fields
bool timerStarted = false;
bool timeExpired = false;
int expireTime;
/// Set by constructors
int timerTime;
Event eventExpired;
/// <summary>
/// Constructors, optional argument is a timer name (you can create more then one timer)
/// </summary>
public TimerOp(int timerTime, Event eventExpired)
{
this.timerTime = timerTime;
this.eventExpired = eventExpired;
}
public TimerOp(int timerTime)
: this(timerTime, Event.TimerExpired)
{
}
/// <param name="obj">Time period (TimeSpan)</param>
public void Start()
{
timeExpired = false;
timerStarted = true;
expireTime = StateMachine.Time + timerTime;
}
public Event Run()
{
if (timerStarted && !timeExpired && StateMachine.Time >= expireTime)
{
timeExpired = true;
return eventExpired;
}
else
{
return Event.TimerBusy;
}
}
public void Stop()
{
timerStarted = false;
timeExpired = false;
}
}
}