144 lines
3.5 KiB
C#
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);
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
}
|