Exemplo n.º 1
0
 public static extern AsuMotionError AsuMotionAddLineWithSyncIO(IntPtr AsuMotion,
                                                                ref AsuMotionAxisData end,
                                                                double vel,
                                                                double ini_maxvel,
                                                                double acc,
                                                                ushort[] DIO,
                                                                ushort[] AIO);
Exemplo n.º 2
0
        /// <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
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// 添加同步IO直线插补规划。
        /// 返回0 成功;
        /// 返回2 失败;
        /// 返回1 设备句柄为空指针,一般因为没有打开设备导致;
        /// 返回5 当前状态下不能添加PC的规划,因为缓冲区已经满了;
        /// 返回6 当前状态下不能进行PC的规划,因为前面提交的其他操作还未完成
        /// </summary>
        /// <param name="handle">设备句柄</param>
        /// <param name="end">指定当前直线的终点坐标</param>
        /// <param name="vel">指定当前直线运行的速度</param>
        /// <param name="ini_maxvel">由上一段直线或者曲线转入当前直线或者曲线时,所允许的最大速度</param>
        /// <param name="acc">当前直线运行的加速度</param>
        /// <param name="DIO">需要在当前规划阶段设置的数字量输出,低位对齐。每位对应一个数字量输出</param>
        /// <param name="AIO">需要在当前规划阶段设置的模拟量输出。控制卡为12位DA输出输出,即4095对应满量程输出</param>
        /// <returns></returns>
        public static int AsuMotion_AddLineWithSyncIO(IntPtr handle,
                                                      ref AsuMotionAxisData end,
                                                      double vel,
                                                      double ini_maxvel,
                                                      double acc,
                                                      ushort[] DIO,
                                                      ushort[] AIO)
        {
            AsuMotionError ret = AsuMotionAddLineWithSyncIO(handle, ref end, vel, ini_maxvel, acc, DIO, AIO);

            switch (ret)
            {
            case AsuMotionError.AsuMotion_Error_Ok:
                LogHelper.WriteLog("添加同步IO直线插补规划 成功");
                return(0);

            case AsuMotionError.AsuMotion_Device_Is_Null:
                LogHelper.WriteLog("添加同步IO直线插补规划 失败,设备句柄为空指针,一般因为没有打开设备导致" + "---" + AsuMotion_GetErrorMessage(1));
                return(1);

            case AsuMotionError.AsuMotion_Error:
                LogHelper.WriteLog("添加同步IO直线插补规划 失败" + "---" + AsuMotion_GetErrorMessage(2));
                return(2);

            case AsuMotionError.AsuMotion_Buffer_Full:
                LogHelper.WriteLog("添加同步IO直线插补规划 失败,缓冲区已满" + "---" + AsuMotion_GetErrorMessage(5));
                return(5);

            default:
                LogHelper.WriteLog("添加同步IO直线插补规划 失败,当前状态下不能进行PC的规划,因为前面提交的其他操作还未完成" + "---" + AsuMotion_GetErrorMessage(6));
                return(6);    // AsuMotion_CurrentState_Isnot_PCPlan
            }
        }
Exemplo n.º 4
0
 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);
Exemplo n.º 5
0
 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);
Exemplo n.º 6
0
        /// <summary>
        /// 当前各坐标轴最大速度获取
        /// 目前直接返回 AsuMotion_True,但不确定之后的sdk失败会返回什么,所以按如下返回:
        /// 返回3 成功;
        /// 返回4 失败
        /// </summary>
        /// <param name="handle">设备句柄</param>
        /// <param name="maxSpeed">板卡各轴最大运动速度的存储区域,单位毫米每分钟</param>
        /// <returns></returns>
        public static int AsuMotion_GetMaxSpeed(IntPtr handle, out AsuMotionAxisData maxSpeed)
        {
            AsuMotionError ret = AsuMotionGetMaxSpeed(handle, out maxSpeed);

            switch (ret)
            {
            case AsuMotionError.AsuMotion_True:
                LogHelper.WriteLog("当前各坐标轴最大速度获取 成功");
                return(3);

            default:
                LogHelper.WriteLog("当前各坐标轴最大速度获取 失败" + "---" + AsuMotion_GetErrorMessage(4));
                return(4);     // AsuMotion_False
            }
        }
Exemplo n.º 7
0
        /// <summary>
        /// 配置反向软限位
        /// 返回3 成功;
        /// 返回4 失败
        /// </summary>
        /// <param name="handle">设备句柄</param>
        /// <param name="softNegtiveLimit">反向软限位坐标的结构体</param>
        /// <returns></returns>
        public static int AsuMotion_SetSoftNegtiveLimit(IntPtr handle, ref AsuMotionAxisData softNegtiveLimit)
        {
            AsuMotionError ret = AsuMotionSetSoftNegtiveLimit(handle, ref softNegtiveLimit);

            switch (ret)
            {
            case AsuMotionError.AsuMotion_True:
                LogHelper.WriteLog("配置反向软限位 成功");
                return(3);

            default:
                LogHelper.WriteLog("配置反向软限位 失败" + "---" + AsuMotion_GetErrorMessage(4));
                return(4);     // AsuMotion_False
            }
        }
Exemplo n.º 8
0
        /// <summary>
        /// 配置运动卡规划运动的最大速度
        /// 返回3 成功;
        /// 返回4 失败
        /// </summary>
        /// <param name="handle">设备句柄</param>
        /// <param name="maxSpeed">一个存储各轴速度的结构体</param>
        /// <returns></returns>
        public static int AsuMotion_SetMaxSpeed(IntPtr handle, ref AsuMotionAxisData maxSpeed)
        {
            AsuMotionError ret = AsuMotionSetMaxSpeed(handle, ref maxSpeed);

            switch (ret)
            {
            case AsuMotionError.AsuMotion_True:
                LogHelper.WriteLog("配置运动卡规划运动的最大速度 成功");
                return(3);

            default:
                LogHelper.WriteLog("配置运动卡规划运动的最大速度 失败" + "---" + AsuMotion_GetErrorMessage(4));
                return(4);     // AsuMotion_False
            }
        }
Exemplo n.º 9
0
        /// <summary>
        /// 配置运动卡规划运动的加速度
        /// 返回3 成功;
        /// 返回4 失败
        /// </summary>
        /// <param name="handle">设备句柄</param>
        /// <param name="acceleration">一个存储各轴加速度的结构体</param>
        /// <returns></returns>
        public static int AsuMotion_SetAccelaration(IntPtr handle, ref AsuMotionAxisData acceleration)
        {
            AsuMotionError ret = AsuMotionSetAccelaration(handle, ref acceleration);

            switch (ret)
            {
            case AsuMotionError.AsuMotion_True:
                LogHelper.WriteLog("配置运动卡规划运动的加速度 成功");
                return(3);

            default:
                LogHelper.WriteLog("配置运动卡规划运动的加速度 失败" + "---" + AsuMotion_GetErrorMessage(4));
                return(4);     // AsuMotion_False
            }
        }
Exemplo n.º 10
0
        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;
            }
        }
Exemplo n.º 11
0
        /// <summary>
        /// 设置当前坐标
        /// 返回0 成功;
        /// 返回2 失败;
        /// 返回1 设备句柄为空指针,一般因为没有打开设备导致
        /// </summary>
        /// <param name="handle">设备句柄</param>
        /// <param name="position">一个指向AsuMotionAxisData的指针,此指针指向的对象包含需要设置的当前坐标</param>
        /// <returns></returns>
        public static int AsuMotion_SetCurrentPostion(IntPtr handle, ref AsuMotionAxisData position)
        {
            AsuMotionError ret = AsuMotionSetCurrentPostion(handle, ref position);

            switch (ret)
            {
            case AsuMotionError.AsuMotion_Error_Ok:
                LogHelper.WriteLog("设置当前坐标 成功");
                return(0);

            case AsuMotionError.AsuMotion_Device_Is_Null:
                LogHelper.WriteLog("设置当前坐标 失败,设备句柄为空指针,一般因为没有打开设备导致" + "---" + AsuMotion_GetErrorMessage(1));
                return(1);

            default:
                LogHelper.WriteLog("设置当前坐标 失败" + "---" + AsuMotion_GetErrorMessage(2));
                return(2);    // AsuMotion_Error
            }
        }
Exemplo n.º 12
0
        /// <summary>
        /// 请求一次回原点
        /// 返回0 成功;
        /// 返回1 设备句柄为空指针,一般因为没有打开设备导致;
        /// 返回7 当前状态下不能进行回原点,因为前面提交的其他操作还未完成
        /// </summary>
        /// <param name="handle">设备句柄</param>
        /// <param name="type">设置回原点的方式,目前支持三种方式</param>
        /// <param name="axisMask">配置当前需要运行的轴</param>
        /// <param name="count">设置回原点采用多次回原点时,回原点的次数</param>
        /// <param name="acceleration">一个存储各轴加速度的结构体</param>
        /// <param name="maxSpeed">一个存储各轴速度的结构体</param>
        /// <returns></returns>
        public static int AsuMotion_GoHome(IntPtr handle,
                                           AsuMotionHomingType type,
                                           AsuMotionAxisMaskType axisMask,
                                           ushort count,
                                           ref AsuMotionAxisData acceleration,
                                           ref AsuMotionAxisData maxSpeed)
        {
            AsuMotionError ret = AsuMotionGoHome(handle, type, axisMask, count, ref acceleration, ref maxSpeed);

            switch (ret)
            {
            case AsuMotionError.AsuMotion_Error_Ok:
                LogHelper.WriteLog("请求一次回原点 成功");
                return(0);

            case AsuMotionError.AsuMotion_Device_Is_Null:
                LogHelper.WriteLog("请求一次回原点 失败,设备句柄为空指针,一般因为没有打开设备导致" + "---" + AsuMotion_GetErrorMessage(1));
                return(1);

            default:
                LogHelper.WriteLog("请求一次回原点 失败,当前状态下不能进行回原点,因为前面提交的其他操作还未完成" + "---" + AsuMotion_GetErrorMessage(7));
                return(7);     // AsuMotion_CurrentState_Isnot_Idle
            }
        }
Exemplo n.º 13
0
 public static extern AsuMotionError AsuMotionGoHome(IntPtr AsuMotion,
                                                     AsuMotionHomingType Type,
                                                     AsuMotionAxisMaskType AxisMask,
                                                     ushort Count,
                                                     ref AsuMotionAxisData Acceleration,
                                                     ref AsuMotionAxisData MaxSpeed);
Exemplo n.º 14
0
 public static extern AsuMotionError AsuMotionSetAccelaration(IntPtr AsuMotion, ref AsuMotionAxisData Acceleration);
Exemplo n.º 15
0
 public static extern AsuMotionError AsuMotionGetMaxSpeed(IntPtr AsuMotion, out AsuMotionAxisData MaxSpeed);
Exemplo n.º 16
0
 public static extern AsuMotionError AsuMotionSetMachineCoordinate(IntPtr AsuMotion, AsuMotionAxisMaskType AxisMask, ref AsuMotionAxisData Position);
Exemplo n.º 17
0
 public static extern AsuMotionError AsuMotionMoveAbsolute(IntPtr AsuMotion, AsuMotionAxisMaskType AxisMask, ref AsuMotionAxisData PositionGiven);
Exemplo n.º 18
0
        /// <summary>
        /// 绝对位置移动
        /// 返回0 成功;
        /// 返回2 失败;
        /// 返回1 设备句柄为空指针,一般因为没有打开设备导致;
        /// 返回8 当前状态下不能进行运动控制卡的规划,因为前面提交的其他操作还未完成
        /// </summary>
        /// <param name="handle">设备句柄</param>
        /// <param name="axisMask">配置当前需要运行的轴</param>
        /// <param name="positionGiven">给定一个点动运行时,机器的目标位置</param>
        /// <returns></returns>
        public static int AsuMotion_MoveAbsolute(IntPtr handle, AsuMotionAxisMaskType axisMask, ref AsuMotionAxisData positionGiven)
        {
            AsuMotionError ret = AsuMotionMoveAbsolute(handle, axisMask, ref positionGiven);

            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);

            default:
                LogHelper.WriteLog("绝对位置移动 失败,当前状态下不能进行运动控制卡的规划,因为前面提交的其他操作还未完成" + "---" + AsuMotion_GetErrorMessage(8));
                return(8);     // AsuMotion_CurrentState_Isnot_CardPlan
            }
        }
Exemplo n.º 19
0
        /// <summary>
        /// 配置机器坐标
        /// 返回3 空闲状态;
        /// 返回4 运动状态
        /// </summary>
        /// <param name="handle">设备句柄</param>
        /// <param name="axisMask">配置当前需要运行的轴</param>
        /// <param name="position">一个存储各轴机器坐标的结构体</param>
        /// <returns></returns>
        public static int AsuMotion_SetMachineCoordinate(IntPtr handle, AsuMotionAxisMaskType axisMask, AsuMotionAxisData position)
        {
            AsuMotionError ret = AsuMotionSetMachineCoordinate(handle, axisMask, ref position);

            switch (ret)
            {
            case AsuMotionError.AsuMotion_True:
                LogHelper.WriteLog("配置机器坐标 当前运动卡处于 空闲 状态");
                return(3);

            default:
                LogHelper.WriteLog("配置机器坐标 当前运动卡处于 运动 状态");
                return(4);     // AsuMotion_False
            }
        }
Exemplo n.º 20
0
 public static extern AsuMotionError AsuMotionSetMaxSpeed(IntPtr AsuMotion, ref AsuMotionAxisData MaxSpeed);
Exemplo n.º 21
0
 public static extern AsuMotionError AsuMotionAddLine(IntPtr AsuMotion, ref AsuMotionAxisData end, double vel, double ini_maxvel, double acc);
Exemplo n.º 22
0
 public static extern AsuMotionError AsuMotionSetSoftNegtiveLimit(IntPtr AsuMotion, ref AsuMotionAxisData SoftNegtiveLimit);
Exemplo n.º 23
0
 public static extern AsuMotionError AsuMotionSetCurrentPostion(IntPtr AsuMotion, ref AsuMotionAxisData Pos);