/// <summary> /// 添加空间圆弧插补规划 /// 返回0 成功; /// 返回2 失败; /// 返回1 设备句柄为空指针,一般因为没有打开设备导致; /// 返回5 当前状态下不能添加PC的规划,因为缓冲区已经满了; /// 返回6 当前状态下不能进行PC的规划,因为前面提交的其他操作还未完成 /// </summary> /// <param name="handle">设备句柄</param> /// <param name="end">指定当前圆弧插补的终点坐标</param> /// <param name="center">指定当前圆弧插补定义的球坐标系原点</param> /// <param name="normal">法线终点,起点为原点(0,0,0)</param> /// <param name="turn">指定当前圆弧插补的圈数</param> /// <param name="vel">指定当前圆弧运行的速度</param> /// <param name="ini_maxvel">由上一段直线或者曲线转入当前圆弧曲线时,所允许的最大速度</param> /// <param name="acc">当前圆弧运行的加速度</param> public static int Asu_MotionAddCircle(IntPtr handle, ref AsuMotionAxisData end, ref AsuMotionCartesian center, ref AsuMotionCartesian normal, int turn, double vel, double ini_maxvel, double acc) { AsuMotionError ret = AsuMotionAddCircle(handle, ref end, ref center, ref normal, turn, vel, ini_maxvel, acc); switch (ret) { case AsuMotionError.AsuMotion_Error_Ok: LogHelper.WriteLog("添加空间圆弧插补规划 成功"); return(0); case AsuMotionError.AsuMotion_Device_Is_Null: LogHelper.WriteLog("添加空间圆弧插补规划 失败,设备句柄为空指针,一般因为没有打开设备导致" + "---" + AsuMotion_GetErrorMessage(1)); return(1); case AsuMotionError.AsuMotion_Error: LogHelper.WriteLog("添加空间圆弧插补规划 失败" + "---" + AsuMotion_GetErrorMessage(2)); return(2); case AsuMotionError.AsuMotion_Buffer_Full: LogHelper.WriteLog("添加空间圆弧插补规划 失败,缓冲区已满" + "---" + AsuMotion_GetErrorMessage(5)); return(5); default: LogHelper.WriteLog("添加空间圆弧插补规划 失败,当前状态下不能进行PC的规划,因为前面提交的其他操作还未完成" + "---" + AsuMotion_GetErrorMessage(6)); return(6); // AsuMotion_CurrentState_Isnot_PCPlan } }
public static extern AsuMotionError AsuMotionAddCircle(IntPtr AsuMotion, ref AsuMotionAxisData end, ref AsuMotionCartesian center, ref AsuMotionCartesian normal, int turn, double vel, double ini_maxvel, double acc);
public static extern AsuMotionError AsuMotionAddCircleWithSyncIO(IntPtr AsuMotion, ref AsuMotionAxisData end, ref AsuMotionCartesian center, ref AsuMotionCartesian normal, int turn, double vel, double ini_maxvel, double acc, ushort[] DIO, ushort[] AIO);
private void AsuMotionAddCircleWithSyncIO(object sender, EventArgs e) { AsuDll.AsuMotionAxisData end = new AsuDll.AsuMotionAxisData() { x = 0, y = 0, z = 0, a = 0, b = 0, c = 0, u = 0, v = 0, w = 0 }; // 坐标轴数据 AsuDll.AsuMotionCartesian center = new AsuDll.AsuMotionCartesian() { x = 1, y = 1, z = 1 }; AsuDll.AsuMotionCartesian normal = new AsuDll.AsuMotionCartesian() { x = 2, y = 2, z = 2 }; int turn = 1; double vel = 1; double ini_maxvel = 1; double acc = 1; int ret = AsuInvoke.AsuMotion_AddCircleWithSyncIO(handle, ref end, ref center, ref normal, turn, vel, ini_maxvel, acc, Digital, Analog); switch (ret) { case 0: Print("添加同步IO空间圆弧插补规划 成功"); break; case 1: Print("添加同步IO空间圆弧插补规划 失败,设备句柄为空指针,一般因为没有打开设备导致"); break; case 2: Print("添加同步IO空间圆弧插补规划 失败"); break; case 5: Print("添加同步IO空间圆弧插补规划 失败,缓冲区已满"); break; default: Print("添加同步IO空间圆弧插补规划 失败,当前状态下不能进行PC的规划,因为前面提交的其他操作还未完成"); break; } }