2023-08-16 15:21:02 +08:00
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
|
|
|
|
namespace Aitex.Core.RT.IOCore;
|
|
|
|
|
|
2023-08-21 11:32:01 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// 互锁动作接口。
|
|
|
|
|
/// </summary>
|
2023-08-16 15:21:02 +08:00
|
|
|
|
public interface IInterlockAction
|
|
|
|
|
{
|
2023-08-21 11:32:01 +08:00
|
|
|
|
#region Properties
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 返回当前动作的名称。
|
|
|
|
|
/// <remarks>
|
|
|
|
|
/// 通常返回当前动作对应的DO名称。
|
|
|
|
|
/// </remarks>
|
|
|
|
|
/// </summary>
|
2023-08-16 15:21:02 +08:00
|
|
|
|
string ActionName { get; }
|
2023-08-21 11:32:01 +08:00
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 返回当前动作的限制条件。
|
|
|
|
|
/// </summary>
|
2023-08-16 15:21:02 +08:00
|
|
|
|
IEnumerable<IInterlockLimit> Limits { get; }
|
2023-08-21 11:32:01 +08:00
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 返回当前动作限制条件中的“逻辑与”组。
|
|
|
|
|
/// <remarks>
|
|
|
|
|
/// “逻辑与”组由多个Limit对象构成,若其中任意一个Limit命中,则当前组命中。
|
|
|
|
|
/// </remarks>
|
|
|
|
|
/// </summary>
|
2023-08-16 15:21:02 +08:00
|
|
|
|
IEnumerable<IEnumerable<IInterlockLimit>> LogicOrGroups { get; }
|
2023-08-21 11:32:01 +08:00
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region Methods
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 判断当前动作是否和给定的条件一致,若一致,则表明当前动作与特定条件的动作为同一动作。
|
|
|
|
|
/// </summary>
|
2023-08-21 11:51:09 +08:00
|
|
|
|
/// <remarks>
|
|
|
|
|
/// 对比时忽略OO名称大小写。
|
|
|
|
|
/// </remarks>>
|
|
|
|
|
/// <param name="doName">DO名称</param>
|
|
|
|
|
/// <param name="value">DO目标输出</param>
|
2023-08-21 11:32:01 +08:00
|
|
|
|
/// <returns></returns>
|
2023-08-16 15:21:02 +08:00
|
|
|
|
bool IsSame(string doName, bool value);
|
2023-08-21 11:32:01 +08:00
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 增加一个限制条件。
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="limit"></param>
|
2023-08-16 15:21:02 +08:00
|
|
|
|
void AddLimit(IInterlockLimit limit);
|
|
|
|
|
|
2023-08-21 11:32:01 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// 增加一个“逻辑与”组。
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="group"></param>
|
2023-08-16 15:21:02 +08:00
|
|
|
|
void AddLogicOrGroup(List<IInterlockLimit> group);
|
|
|
|
|
|
2023-08-21 11:32:01 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// 判断当前动作是否允许执行。
|
|
|
|
|
/// <remarks>
|
|
|
|
|
/// 当前动作的所有Limit均命中时,允许执行。
|
|
|
|
|
/// </remarks>
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="reason"></param>
|
|
|
|
|
/// <returns></returns>
|
2023-08-16 15:21:02 +08:00
|
|
|
|
bool CanDo(out string reason);
|
|
|
|
|
|
2023-08-21 11:32:01 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// 扫描线程周期性执行的任务。
|
|
|
|
|
/// </summary>
|
2023-08-16 15:21:02 +08:00
|
|
|
|
void Monitor();
|
2023-08-21 11:32:01 +08:00
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
2023-08-16 15:21:02 +08:00
|
|
|
|
}
|