/// <summary>
/// 軸參數
/// </summary>
public class AxisPrm : EntityBase<AxisKey>, ICloneable
{
public AxisPrm() : base()
{
}
private AxisPrm(string name, AxisKey key) : base(key)
{
Name = name;
}
/// <summary>
/// 普通軸構造函數
/// </summary>
/// <param name="name">軸名稱</param>
/// <param name="cardNum">軸對應的控制卡編號</param>
/// <param name="code">軸在這臺幾臺上的編號,由自己定義</param>
/// <param name="key">軸在控制卡上的編號值,16軸卡就是1到16,這裏用枚舉值</param>
public AxisPrm(string name, short cardNum, short code, AxisKey key) : this(name, key)
{
CardNum = cardNum;
Code = code;
}
/// <summary>
/// 龍門(Master)軸的構造函數
/// </summary>
public AxisPrm(string name, short cardNum, short code, short followCode, AxisKey key) : this(name, cardNum, code, key)
{
FollowAxisCode = followCode;
Type = AxisType.Master;
}
/// <summary>
/// 反轉(Reverse)軸的構造函數
/// </summary>
public AxisPrm(string name, AxisKey key, AxisKey reverseKey) : this(name, key)
{
ReverseAxisKey = reverseKey;
Type = AxisType.Reverse;
}
/// <summary>
/// TwoPos氣缸軸的構造函數
public AxisPrm(string name, AxisKey key, IOName[] mov, IOName[] arrive) : this(name, key)
{
OutDo = mov;
InDi = arrive;
Type = AxisType.Cylinder_TwoPos;
}
private const string CategoryConstant = "固有參數";
private const string CategoryLM = "龍門參數";
private const string CategoryOther = "其他軸";
private const string CategoryJogMotion = "Jog運動參數";
private const string CategoryDotMotion = "點動運動參數";
private const string CategoryLimit = "限位參數";
#region 固有屬性
/// <summary>
/// 軸名字
/// </summary>
[JsonProperty]
[ReadOnly(true)]
[Category(CategoryConstant)]
[Description("軸名字")]
[DisplayName("軸名")]
public string Name { get; set; }
/// <summary>
/// 軸類型
/// </summary>
[JsonProperty]
[ReadOnly(true)]
[Category(CategoryConstant)]
[Description("軸類型")]
[DisplayName("軸類型")]
public AxisType Type { get; set; } = AxisType.Common;
/// <summary>
/// 編號
/// </summary>
[JsonProperty]
[ReadOnly(true)]
[Category(CategoryConstant)]
[Description("軸編號")]
[DisplayName("軸編號")]
public short Code { get; set; }
/// <summary>
/// 所屬控制卡編號
/// </summary>
[JsonProperty]
[ReadOnly(true)]
[Category(CategoryConstant)]
[Description("所屬控制卡編號")]
[DisplayName("所屬控制卡編號")]
public short CardNum { get; set; } = 0;
/// <summary>
/// 脈衝當量
/// </summary>
[JsonProperty]
[Category(CategoryConstant)]
[Description("脈衝當量")]
[DisplayName("脈衝當量")]
public double PulseEquiv { get; set; } = 1000;
[JsonProperty]
[Category(CategoryConstant)]
[DisplayName("Encoder")]
[Description("編碼器轉一圈脈衝數")]
public int Encoder { get; set; } = 16777216;
[JsonProperty]
[Category(CategoryConstant)]
[DisplayName("Gear")]
[Description("編碼器轉一圈需發脈衝數")]
public int Gear { get; set; } = 10000;
/// <summary>
/// 驅動器品牌
/// </summary>
[JsonProperty]
[Category(CategoryConstant)]
[Description("驅動器品牌")]
[DisplayName("驅動器品牌")]
public DriveType DriveType { get; set; } = DriveType.衆爲興;
#endregion
#region 龍門相關
[JsonProperty]
[Category(CategoryLM)]
[Description("龍門學習長度/mm")]
[DisplayName("學習長度")]
[Browsable(false)]
[JsonIgnore]
public int LMLength { get; set; } = 100;
[JsonProperty]
[Category(CategoryLM)]
[Description("龍門學習方向是否爲負")]
[DisplayName("學習方向")]
[Browsable(false)]
[JsonIgnore]
public bool DicIsNeg { get; set; } = false;
[Category(CategoryLM)]
[Description("龍門從軸軸號")]
[DisplayName("從軸號")]
[JsonIgnore]
[Browsable(false)]
public short FollowAxisCode { get; set; }
#endregion
#region 其他
/// <summary>
/// TwoPos氣缸軸獨有,輸出的運動指令
/// </summary>
[JsonProperty]
[Browsable(false)]
public IOName[] OutDo { get; set; }
/// <summary>
/// TwoPos氣缸軸獨有,到位信號
/// </summary>
[JsonProperty]
[Browsable(false)]
public IOName[] InDi { get; set; }
/// <summary>
/// Reverse軸特有,表示跟隨它反轉的軸號
/// </summary>
[JsonProperty]
[Browsable(false)]
public AxisKey ReverseAxisKey { get; set; }
#endregion
#region 回零相關
[JsonProperty]
[Category("回零相關")]
[Description("回零模式")]
[DisplayName("回零模式")]
public AxisHomeType HomeMode { get; set; } = AxisHomeType.NegLimitIndex_1;
[JsonProperty]
[Category("回零相關")]
[Description("高速回零速度")]
[DisplayName("高速回零速度")]
public double HomeVel { get; set; } = 20;
[JsonProperty]
[Category("回零相關")]
[Description("最大高速回零速度")]
[DisplayName("最大高速回零速度")]
public double MaxHomeVel { get; set; } = 20;
[JsonProperty]
[Category("回零相關")]
[Description("低速回零速度")]
[DisplayName("低速回零速度")]
public double HomeLowVel { get; set; } = 10;
[JsonProperty]
[Category("回零相關")]
[Description("回零加速度")]
[DisplayName("回零加速度")]
public double HomeAcc { get; set; } = 100;
[JsonProperty]
[Category("回零相關")]
[Description("原點偏移 / mm")]
[DisplayName("原點偏移")]
public double HomeOffset { get; set; } = 0;
#endregion
#region Dot運動參數
[JsonProperty]
[Category(CategoryDotMotion)]
[Description("默認速度 mm/s,即定點移動")]
[DisplayName("速度")]
public double DefVel { get; set; } = 50;
[JsonProperty]
[Category(CategoryDotMotion)]
[Description("默認起步速度 mm/s,即定點移動")]
[DisplayName("起步速度")]
public double DefStartVel { get; set; } = 0;
[JsonProperty]
[Category(CategoryDotMotion)]
[Description("默認加速度 mm/s,即定點移動")]
[DisplayName("加速度")]
public double DefAcc { get; set; } = 4000;
[JsonProperty]
[Category(CategoryDotMotion)]
[Description("默認減速度 mm/s^2,即定點移動")]
[DisplayName("減速度")]
public double DefDec { get; set; } = 4000;
[JsonProperty]
[Category(CategoryDotMotion)]
[Description("默認最大速度 mm/s,即定點移動")]
[DisplayName("最大速度")]
public double MaxDefVel { get; set; } = 200;
[JsonProperty]
[Category(CategoryDotMotion)]
[Description("默認最大加速度 mm/s,即定點移動")]
[DisplayName("最大加速度")]
public double MaxDefAcc { get; set; } = 4000;
[JsonProperty]
[Category(CategoryDotMotion)]
[Description("默認最大減速度 mm/s^2,即定點移動")]
[DisplayName("最大減速度")]
public double MaxDefDec { get; set; } = 4000;
#endregion
#region Jog運動參數
[JsonProperty]
[Category(CategoryJogMotion)]
[Description("默認Jog運動速度 mm/s")]
[DisplayName("Jog速度")]
public double DefJogVel { get; set; } = 100;
[JsonProperty]
[Category(CategoryJogMotion)]
[Description("默認Jog起步速度 mm/s")]
[DisplayName("Jog起步速度")]
public double DefJogStartVel { get; set; } = 0;
[JsonProperty]
[Category(CategoryJogMotion)]
[Description("默認Jog運動加速度 mm/s^2")]
[DisplayName("Jog加速度")]
public double DefJogAcc { get; set; } = 4000;
[JsonProperty]
[Category(CategoryJogMotion)]
[Description("默認Jog運動減速度 mm/s^2")]
[DisplayName("Jog減速度")]
public double DefJogDec { get; set; } = 4000;
[JsonProperty]
[Category(CategoryJogMotion)]
[Description("默認插補座標系[0,1]")]
[DisplayName("插補座標系")]
public short DefCrd { get; set; } = 0;
[JsonProperty]
[Category(CategoryJogMotion)]
[Description("勻速時間 ms")]
[DisplayName("勻速時間")]
public double SmoothTime { get; set; } = 10;
[JsonProperty]
[Category(CategoryJogMotion)]
[Description("默認最大Jog運動速度 mm/s")]
[DisplayName("最大Jog速度")]
public double MaxDefJogVel { get; set; } = 100;
[JsonProperty]
[Category(CategoryJogMotion)]
[Description("默認最大Jog運動加速度 mm/s^2")]
[DisplayName("最大Jog加速度")]
public double MaxDefJogAcc { get; set; } = 4000;
[JsonProperty]
[Category(CategoryJogMotion)]
[Description("默認最大Jog運動減速度 mm/s^2")]
[DisplayName("最大Jog減速度")]
public double MaxDefJogDec { get; set; } = 4000;
#endregion
#region 限位相關
[JsonProperty]
[Category(CategoryLimit)]
[DisplayName("硬件正限位端口號")]
[Description("查詢硬件正限位時的端口號")]
public int PosLimitNum { get; set; } = 0;
[JsonProperty]
[Category(CategoryLimit)]
[DisplayName("硬件負限位端口號")]
[Description("查詢硬件負限位時的端口號")]
public int NegLimitNum { get; set; } = 1;
[JsonProperty]
[Category(CategoryLimit)]
[DisplayName("啓用軟限位")]
[Description("啓用軟限位,0:禁用 1:啓用")]
public bool IsSoftLimit { get; set; } = true;
[JsonProperty]
[Category(CategoryLimit)]
[DisplayName("負軟限位")]
[Description("負方向軟限位 mm")]
public int SoftNegLimit { get; set; } = -1500;
[JsonProperty]
[Category(CategoryLimit)]
[DisplayName("正軟限位")]
[Description("正方向軟限位 mm")]
public int SoftPosLimit { get; set; } = 1500;
#endregion
public object Clone()
{
return MemberwiseClone();
}
}
/// <summary>
/// 驅動器品牌枚舉
/// </summary>
public enum DriveType
{
[Browsable(false)]
NULL = 0,
匯川,
Elmo,
高創,
衆爲興,
}