using System.Collections.Generic; using Aitex.Core.RT.IOCore.Interlock.DataProvider; using Aitex.Core.RT.IOCore.Interlock.Utils; namespace Aitex.Core.RT.IOCore.Interlock.Limits; /// /// 基于AO判断的互锁限制条件。 /// internal class AoLimit : InterlockLimitBase { #region Constructors public AoLimit(AoValueProvider dataProvider, string value, string tip, Dictionary cultureTip, bool ignoreReverse) : base(dataProvider, value, tip, cultureTip, ignoreReverse) { LimitRange = new InterlockLimitRangeDouble(value); } #endregion #region Properties private InterlockLimitRangeDouble LimitRange { get; } public override double CurrentValue => (double)DataProvider.GetValue(); public override string LimitReason => $"{DataProvider.Name} = {CurrentValue:F1}, out of range [{LimitRange}]{(string.IsNullOrEmpty(Tip) ? "" : $",{Tip}")}"; public override string DaemonReason => $"{DataProvider.Name} = {CurrentValue:F1}, in the range [{LimitRange}]{(string.IsNullOrEmpty(Tip) ? "" : $",{Tip}")}"; #endregion #region Methods protected override bool CheckInRange() { return LimitRange.CheckIsInRange(CurrentValue); } public override string ToString() { return $"{Name}, Limit={LimitRange}"; } #endregion }