Sic.Framework/MECF.Framework.RT.Equipment.../Unit/IoSignalLight.cs

144 lines
3.5 KiB
C#

using System.Net.Configuration;
using System.Xml;
using Aitex.Core.RT.IOCore;
using Aitex.Core.RT.SCCore;
using Aitex.Core.Util;
using MECF.Framework.Common.Device.Bases;
namespace Aitex.Core.RT.Device.Unit
{
public class IoSignalLight : BaseDevice, IDevice
{
protected DOAccessor _do = null;
public bool Value
{
get
{
if (_do != null)
return _do.Value;
return false;
}
}
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; }
private DeviceTimer _timer = new DeviceTimer();
private bool _blinking = false;
private int _timeout = 500;
public IoSignalLight(string module, XmlElement node, string ioModule = "")
{
base.Module = module;
base.Name = node.GetAttribute("id");
base.Display = node.GetAttribute("display");
base.DeviceID = node.GetAttribute("schematicId");
_do = ParseDoNode("doSet", node, ioModule);
}
public IoSignalLight(string module, string id, string display, string deviceId, DOAccessor doItem)
{
base.Module = module;
base.Name = id;
base.Display = display;
base.DeviceID = deviceId;
_do = doItem;
}
protected virtual void SetIoValue(bool value)
{
string reason;
_do.SetValue(value, out reason);
}
public bool Initialize()
{
return true;
}
public void Terminate()
{
}
public void Monitor()
{
if (_timer.IsIdle()) _timer.Start(_timeout);
if (_timer.IsTimeout())
{
_timer.Start(_timeout);
_blinking = !_blinking;
}
switch (StateSetPoint)
{
case TowerLightStatus.On: SetIoValue(true); break;
case TowerLightStatus.Off: SetIoValue(false); break;
case TowerLightStatus.Blinking: SetIoValue(_blinking); break;
}
}
public void Reset()
{
StateSetPoint = TowerLightStatus.Off;
SetIoValue(false);
}
}
public class IoSwitchableSignalLight : IoSignalLight
{
private SCConfigItem _scUsingOption = null;
private DOAccessor _doDefault = null;
private DOAccessor _doOption = null;
public IoSwitchableSignalLight(string module, XmlElement node):base(module,node)
{
_doDefault = ParseDoNode("doSet", node);
_doOption = ParseDoNode("doSetOption", node);
_scUsingOption = ParseScNode("scUsingOption", node);
}
protected override void SetIoValue(bool value)
{
string reason;
if (_scUsingOption.BoolValue)
{
_doOption.SetValue(value, out reason);
}
else
{
_doDefault.SetValue(value, out reason);
}
}
}
}