/// <summary>
/// 控制卡所有操作的接口
/// </summary>
public interface ICardExecuter : IAxisOperate, IIOOperate
{
/// <summary>
/// 品牌
/// </summary>
CardBrand Brand { get; }
/// <summary>
/// 驗證返回的結果
/// </summary>
Result GetResult(int rc);
Result GetLibVer(short cardNum, out int varNum, out int motionVer, out int firmWareVer);
/// <summary>
/// 打開運動卡
/// </summary>
/// <param name="cardNum">當前控制卡卡號</param>
Result Open(short cardNum = 0);
/// <summary>
/// 加載必要的ini配置文件
/// </summary>
Result LoadConfig(short cardNum);
Result WriteEtherCAT(short cardNum, int axis, int index, int subIndex, byte[] data);
//Result ReadEtherCAT(short cardNum,int axis,int index,int subIn
Result WriteEtherCAT(short cardNum, int axis, int index, int subIndex, byte data, int length);
Result ReadEtherCAT(short cardNum, int axis, int index, int subIndex, ref byte[] data);
/// <summary>
/// 關閉運動卡
/// </summary>
/// <param name="cardNum">當前控制卡卡號</param>
Result Close(short cardNum = 0);
/// <summary>
/// 按組設置編碼器的計數方向
/// </summary>
/// <param name="cardNum">當前控制卡卡號</param>
/// <param name="sense">按組設置編碼器的方向,0-正邏輯,1-負邏輯</param>
Result SetEncSns(ushort sense, short cardNum = 0);
/// <summary>
/// 復位運動控制器
/// </summary>
/// <param name="cardNum">當前控制卡卡號</param>
Result Reset(short cardNum = 0);
/// <summary>
/// 讀取規劃速度,衆爲興爲最大速度值
/// </summary>
Result GetPrfVel(short profile, out double pValue, short cardNum = 0);
/// <summary>
/// 執行XY直線插補
/// </summary>
Result LnXY(short crd, short xCode, short yCode, double xPos, double yPos, double synVel, double synAcc, short cardNum);
Result LnXYZ(short crd, short xCode, short yCode, short zCode, double xPos, double yPos, double zPos, double synVel, double synAcc, short cardNum);
Result StartLnXY(int[] axisCode, PointD[] posArray,
double[] vel, double acc, double startVel, int smoothTime, short cardNum);
int GetLnXYIndex(short cardNum);
int GetLnZIndex(short cardNum);
void WaitLnXYEnd(short cardNum);
Result StartLnZ(short axisCode, double[] posArray, double[] vel,
double acc, double startVel, int smoothTime, short cardNum);
void WaitLnZEnd(short cardNum);
/// <summary>
/// 獲得插補執行狀態
/// </summary>
Result GetCrdState(short crd, out bool isRun, short cardNum);
/// <summary>
/// 設置軸跟隨驅動模式(龍門雙驅)
/// </summary>
Result SetFollowAxis(short master, short slave, short cardNum = 0);
/// <summary>
/// 獲取位置比較長度
/// </summary>
/// <param name="cmp">比較器索引 0:OUT16 1:OUT17 2:OUT18 3:OUT19</param>
/// <param name="length">位置比較器餘量</param>
/// <returns></returns>
Result GetXDLen(int cmp, out int length, short cardNum = 0);
/// <summary>
/// 獲取位置比較狀態
/// </summary>
/// <param name="cmp">比較器索引 0:OUT16 1:OUT17 2:OUT18 3:OUT19</param>
/// <param name="couSucess">位置比較器已完成比較點數</param>
/// <returns></returns>
Result GetXDSts(int cmp, out int couSucess, short cardNum = 0);
/// <summary>
/// 設置位置比較誤差範圍
/// </summary>
/// <param name="cmp">比較器索引 0:OUT16 1:OUT17 2:OUT18 3:OUT19</param>
/// <param name="area">位置比較器位置比較矩形區域</param>
/// <returns></returns>
Result SetXDArea(int cmp, int[] area, short cardNum = 0);
/// <summary>
/// 設置位置比較觸發模式
/// </summary>
/// <param name="cmp">比較器索引 0:OUT16 1:OUT17 2:OUT18 3:OUT19</param>
/// <param name="axis">位置比較觸發軸號</param>
/// <param name="source">位置比較源 0:邏輯位置 1:編碼器位置</param>
/// <param name="mode">比較器觸發 IO 輸出模式 0:反轉 1:脈衝輸出</param>
/// <param name="level">輸出端口常態,即觸發前輸出端口狀態 0:低電平 1:高電平</param>
/// <returns></returns>
Result SetXDMode(int cmp, int xd, int[] axis, int source, int mode, int level, int cardNum = 0);
/// <summary>
/// 獲取位置比較觸發模式
/// </summary>
/// <param name="cmp">比較器索引 0:OUT16 1:OUT17 2:OUT18 3:OUT19</param>
/// <param name="axis">位置比較觸發軸號</param>
/// <param name="enable">是否啓用位置比較 0:不啓用 1:啓用</param>
/// <param name="xd">位置比較維數</param>
/// <param name="source">位置比較源 0:邏輯位置 1:編碼器位置</param>
/// <param name="mode">比較器觸發 IO 輸出模式 0:反轉 1:脈衝輸出</param>
/// <param name="level">輸出端口常態,即觸發前輸出端口狀態 0:低電平 1:高電平</param>
/// <returns></returns>
Result GetXDMode(int cmp, int[] axis, out int enable, out int xd, out int source,
out int mode, out int level, int cardNum = 0);
/// <summary>
/// 清除位置比較點位
/// </summary>
/// <param name="cmp">比較器索引 0:OUT16 1:OUT17 2:OUT18 3:OUT19</param>
/// <returns></returns>
Result ClearXDCmp(int cmp, short cardNum = 0);
/// <summary>
/// 添加位置比較點
/// </summary>
/// <param name="cmp">比較器索引 0:OUT16 1:OUT17 2:OUT18 3:OUT19</param>
/// <param name="pos">位置點</param>
/// <param name="time_h">位置比較輸出打開時間</param>
/// <param name="time_l">位置比較輸出關閉時間</param>
/// <returns></returns>
Result AddXDCmp(int cmp, int[] pos, double time_h, double time_l, short cardNum = 0);
/// <summary>
/// 重置位置比較
/// </summary>
/// <param name="cmp">比較器索引 0:OUT16 1:OUT17 2:OUT18 3:OUT19</param>
/// <returns></returns>
Result ResetXDCmp(int cmp, short cardNum = 0);
}
/// <summary>
/// 控制卡品牌的枚舉
/// </summary>
public enum CardBrand
{
/// <summary>
/// 衆爲興
/// </summary>
ADT_6320E = 0,
/// <summary>
/// 衆爲興
/// </summary>
ADT_6320E_C = 1,
/// <summary>
/// 雷賽
/// </summary>
DMC_E3032 = 2,
}
/// <summary>
/// 運動單位
/// </summary>
public enum MotionUnit
{
/// <summary>
/// 毫米
/// </summary>
MM,
/// <summary>
/// 脈衝
/// </summary>
Pulse,
}