- Bug fixed: When copying a procwdure ItemId was not correctly set, remained 0 - Always create a message log when device initialization is completed successfully
95 lines
2.7 KiB
C#
95 lines
2.7 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;
|
|
TBF.Boxes.IntBox remainingTimeSec;
|
|
|
|
/// <summary>
|
|
/// Constructors, optional argument is a timer name (you can create more then one timer)
|
|
/// </summary>
|
|
public TimerOp(int timerTimeSec, Event eventExpired, TBF.Boxes.IntBox remainingTimeSec)
|
|
{
|
|
this.timerTime = timerTimeSec;
|
|
this.eventExpired = eventExpired;
|
|
this.remainingTimeSec = remainingTimeSec;
|
|
}
|
|
public TimerOp(int timerTimeSec, Event eventExpired)
|
|
: this(timerTimeSec, eventExpired, null)
|
|
{
|
|
}
|
|
public TimerOp(int timerTime, TBF.Boxes.IntBox remainingTimeSec)
|
|
: this(timerTime, Event.TimerExpired, remainingTimeSec)
|
|
{
|
|
}
|
|
public TimerOp(int timerTime)
|
|
: this(timerTime, Event.TimerExpired, null)
|
|
{
|
|
}
|
|
|
|
void UpdateRemainingTime()
|
|
{
|
|
if (remainingTimeSec != null)
|
|
{
|
|
remainingTimeSec.Val = System.Math.Max(expireTime - StateMachine.Time, 0);
|
|
}
|
|
}
|
|
|
|
/// <param name="obj">Time period (TimeSpan)</param>
|
|
public void Start()
|
|
{
|
|
timeExpired = false;
|
|
timerStarted = true;
|
|
expireTime = StateMachine.Time + timerTime;
|
|
|
|
UpdateRemainingTime();
|
|
}
|
|
|
|
public Event Run()
|
|
{
|
|
UpdateRemainingTime();
|
|
|
|
if (timerStarted && !timeExpired && StateMachine.Time >= expireTime)
|
|
{
|
|
timeExpired = true;
|
|
return eventExpired;
|
|
}
|
|
else
|
|
{
|
|
return Event.TimerBusy;
|
|
}
|
|
}
|
|
|
|
public void Stop()
|
|
{
|
|
timerStarted = false;
|
|
timeExpired = false;
|
|
}
|
|
}
|
|
}
|