using System.Collections.Generic;
using Aitex.Core.Util;
using DocumentFormat.OpenXml.Spreadsheet;
using ILNumerics.Native;
namespace Aitex.Core.RT.IOCore
{
/*
*
*
*/
public abstract class InterlockLimit
{
public string Name
{
get { return _name; }
}
public abstract bool CurrentValue { get; }
public abstract string LimitReason { get; }
public bool LimitValue
{
get { return _limitValue; }
}
public string Tip
{
get
{
return _tip;
}
}
private string _name;
private bool _limitValue;
private string _tip;
private Dictionary _cultureTip = new Dictionary();
R_TRIG _trigger = new R_TRIG();
public InterlockLimit(string name, bool value, string tip, Dictionary cultureTip)
{
_name = name;
_limitValue = value;
_tip = tip;
_cultureTip = cultureTip;
}
public bool IsSame(string name, bool value)
{
return (name == _name) && (_limitValue == value);
}
public bool IsSame(InterlockLimit limit)
{
return (limit.Name == _name) && (_limitValue == limit.LimitValue);
}
public bool IsTriggered()
{
_trigger.CLK = CurrentValue != _limitValue;
return _trigger.Q;
}
public bool CanDo(out string reason)
{
reason = string.Empty;
if (CurrentValue == _limitValue)
return true;
reason = LimitReason;
return false;
}
}
internal class DiLimit:InterlockLimit
{
private DIAccessor _di;
public DiLimit(DIAccessor diItem, bool value, string tip, Dictionary cultureTip)
:base(diItem.Name, value, tip, cultureTip)
{
_di = diItem;
}
public override bool CurrentValue
{
get { return _di.Value; }
}
public override string LimitReason
{
get
{
return string.Format("DI-{0}({1}) = [{2}],{3}", _di.IoTableIndex, _di.Name, _di.Value ? "ON" : "OFF", Tip);
}
}
}
internal class DoLimit : InterlockLimit
{
private DOAccessor _do;
public DoLimit(DOAccessor doItem, bool value, string tip, Dictionary cultureTip)
: base(doItem.Name, value, tip, cultureTip)
{
_do = doItem;
}
public override bool CurrentValue
{
get { return _do.Value; }
}
public override string LimitReason
{
get
{
return string.Format("DO-{0}({1}) = [{2}],{3}", _do.IoTableIndex, _do.Name, _do.Value ? "ON" : "OFF", Tip);
}
}
}
public class CustomLimitBase : InterlockLimit
{
public CustomLimitBase(string name, bool limitValue, string tip, Dictionary cultureTip) : base(name, limitValue, tip, cultureTip)
{
}
public override bool CurrentValue { get; }
public override string LimitReason { get; }
}
}