92 lines
1.4 KiB
C#
92 lines
1.4 KiB
C#
using Aitex.Core.RT.Device;
|
|
using Aitex.Core.Util;
|
|
|
|
namespace MECF.Framework.Common.Device.Bases
|
|
{
|
|
public abstract class SignalLightBase : BaseDevice, IDevice
|
|
{
|
|
private DeviceTimer _timer = new DeviceTimer();
|
|
|
|
private bool _blinkingToken = false;
|
|
|
|
private int _timeout = 500;
|
|
|
|
public virtual bool Value => StateSetPoint != TowerLightStatus.Off;
|
|
|
|
public int Interval
|
|
{
|
|
get
|
|
{
|
|
return _timeout;
|
|
}
|
|
set
|
|
{
|
|
if (value < 200)
|
|
{
|
|
_timeout = 200;
|
|
}
|
|
else if (value > 20000)
|
|
{
|
|
_timeout = 20000;
|
|
}
|
|
else
|
|
{
|
|
_timeout = value;
|
|
}
|
|
}
|
|
}
|
|
|
|
public TowerLightStatus StateSetPoint { get; set; }
|
|
|
|
public SignalLightBase(string module, string name)
|
|
: base(module, name, name, name)
|
|
{
|
|
}
|
|
|
|
protected abstract void SetOn();
|
|
|
|
protected abstract void SetOff();
|
|
|
|
protected abstract void SetBlinking(bool token);
|
|
|
|
public bool Initialize()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
public void Terminate()
|
|
{
|
|
}
|
|
|
|
public void Monitor()
|
|
{
|
|
if (_timer.IsIdle())
|
|
{
|
|
_timer.Start(_timeout);
|
|
}
|
|
if (_timer.IsTimeout())
|
|
{
|
|
_timer.Start(_timeout);
|
|
_blinkingToken = !_blinkingToken;
|
|
}
|
|
switch (StateSetPoint)
|
|
{
|
|
case TowerLightStatus.On:
|
|
SetOn();
|
|
break;
|
|
case TowerLightStatus.Off:
|
|
SetOff();
|
|
break;
|
|
case TowerLightStatus.Blinking:
|
|
SetBlinking(_blinkingToken);
|
|
break;
|
|
}
|
|
}
|
|
|
|
public virtual void Reset()
|
|
{
|
|
StateSetPoint = TowerLightStatus.Off;
|
|
}
|
|
}
|
|
}
|