using System.ComponentModel;

namespace FLY.Thick.Base.Common
{
    /// <summary>
    /// AD盒IO定义，避免忘记IO口的定义，出现功能重复
    /// </summary>
    public class FlyADIODefine
    {
        public static FlyADIODefine Instance { get; } = new FlyADIODefine();

        #region 输入口
        /// <summary>
        /// 归零信号
        /// </summary>
        [Description("归零信号")]
        public int InNo_Org { get; protected set; } = 2 - 1;

        /// <summary>
        /// 正向限位
        /// </summary>
        [Description("正向限位")]
        public int InNo_Limit_Forw { get; protected set; } = 3 - 1;
        /// <summary>
        /// 反向限位
        /// </summary>
        [Description("反向限位")]
        public int InNo_Limit_Backw { get; protected set; } = 4 - 1;

        /// <summary>
        /// 数据有效
        /// </summary>
        [Description("数据有效")]
        public int InNo_DataValid { get; protected set; } = 6 - 1;

        /// <summary>
        /// 急停 and 手动正转
        /// </summary>
        [Description("急停 & 手动正转")]
        public int InNo_Manual_Forw { get; protected set; } = 7 - 1;

        /// <summary>
        /// 急停 and 手动反转
        /// </summary>
        [Description("急停 & 手动反转")]
        public int InNo_Manual_Backw { get; protected set; } = 8 - 1;

        /// <summary>
        /// 同步输入信号
        /// </summary>
        [Description("同步输入信号")]
        public int InNo_Sync { get; protected set; } = 9 - 1;

        /// <summary>
        /// 辊速信号
        /// </summary>
        [Description("辊速信号")]
        public int InNo_Roll { get; protected set; } = 11 - 1;

        /// <summary>
        /// 控制主轴脉冲启动计数输入， o3 接 i11;
        /// i11 为 0 计数停止
        /// </summary>
        [Description("主轴脉冲启动计数")]
        public int InNo_Pos2OnOff { get; protected set; } = 11 - 1;

        /// <summary>
        /// 纵向光纤信号
        /// </summary>
        [Description("纵向光纤信号")]
        public int InNo_VSign { get; protected set; } = 12 - 1;

        #endregion
        #region 输出口
        /// <summary>
        /// 变频器正转 VF0 是松下的变频器牌子
        /// </summary>
        [Description("变频器正转")]
        public int OutNo_VF0_Forw { get; protected set; } = 1 - 1;
        /// <summary>
        /// 变频器反转 VF0 是松下的变频器牌子
        /// </summary>
        [Description("变频器反转")]
        public int OutNo_VF0_Backw { get; protected set; } = 2 - 1;
        /// <summary>
        /// 变频器减速 VF0 是松下的变频器牌子
        /// </summary>
        [Description("变频器减速")]
        public int OutNo_VF0_Slow { get; protected set; } = 3 - 1;

        /// <summary>
        /// 控制主轴脉冲启动计数
        /// </summary>
        [Description("主轴脉冲启动计数")]
        public int OutNo_Pos2OnOff { get; protected set; } = 3 - 1;

        /// <summary>
        /// 同步输出信号
        /// </summary>
        [Description("同步输出信号")]
        public int OutNo_Sync { get; protected set; } = 3 - 1;

        /// <summary>
        /// 报警信号
        /// </summary>
        [Description("报警信号")]
        public int OutNo_Alarm { get; protected set; } = 4 - 1;


        #endregion

        public virtual void Changed(int version)
        {
            if (version == 2)
            {
                InNo_Manual_Forw = 13 - 1;
                InNo_Manual_Backw = 14 - 1;
            }
            else
            {
                InNo_Manual_Forw = 3 - 1;
                InNo_Manual_Backw = 4 - 1;
            }
        }
    }
}
