Sic.Framework/MECF.Framework.Common/MECF/Framework/Common/Device/Bases/SignalLightBase.cs

92 lines
1.4 KiB
C#
Raw Normal View History

2023-04-13 11:51:03 +08:00
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;
}
}
}