#region << 版 本 注 释 >>
/*----------------------------------------------------------------
 * 命名空间:WIDESEAWCS_QuartzJob
 * 创建者:胡童庆
 * 创建时间:2024/8/2 16:13:36
 * 版本:V1.0.0
 * 描述:堆垛机接口层
 *
 * ----------------------------------------------------------------
 * 修改人:
 * 修改时间:
 * 版本:V1.0.1
 * 修改说明:
 * 
 *----------------------------------------------------------------*/
#endregion << 版 本 注 释 >>
using HslCommunication;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Communicator;
using WIDESEAWCS_Core.Enums;
using WIDESEAWCS_QuartzJob.DeviceBase;
using WIDESEAWCS_QuartzJob.DTO;
using WIDESEAWCS_QuartzJob.StackerCrane;
namespace WIDESEAWCS_QuartzJob
{
    /// 
    /// 堆垛机接口层
    /// 
    public interface IStackerCrane : IDevice
    {
        /// 
        /// 堆垛机通讯对象
        /// 
        BaseCommunicator Communicator { get; }
        /// 
        /// 堆垛机协议信息
        /// 
        List DeviceProDTOs { get; }
        /// 
        /// 堆垛机协议明细信息
        /// 
        List DeviceProtocolDetailDTOs { get; }
        /// 
        /// 上一次执行的任务
        /// 
        int LastTaskNum { get; }
        /// 
        /// 当前正在执行的任务
        /// 
        int CurrentTaskNum { get; }
        /// 
        /// 上一次任务类型
        /// 
        int? LastTaskType { get; set; }
        /// 
        /// 与设备的心跳
        /// 
        void Heartbeat();
        /// 
        /// 发送任务命令
        /// 
        /// 任务命令
        /// 
        bool SendCommand(T command) where T : IDataTransfer, new();
        /// 
        /// 堆垛机任务完成事件
        /// 
        event EventHandler StackerCraneTaskCompletedEventHandler;
        /// 
        /// 读取PLC协议地址的数据
        /// 
        /// 协议信息的枚举对象信息。
        /// 读取数据的类型对象信息。
        /// 枚举值
        /// 读取到的数据
        TRsult GetValue(TEnum value) where TEnum : Enum;
        /// 
        /// 根据参数名称写入堆垛机对应的数据。
        /// 
        /// 参数名称枚举类型。
        /// 要写入的数据类型。
        /// 参数名称。
        /// 要写入的数据。
        /// 返回写入成功或失败
        /// 
        bool SetValue(TEnum @enum, TValue value) where TEnum : Enum where TValue : notnull;
    }
}