雷赛运动控制卡编程(3)点位运动、连续运动、插补运动

一、点位运动

 什么是点位运动?

雷赛运动控制卡编程(1)基本配置-优快云博客

点位运动是指:运动控制器控制运动平台从 当前位置开始以设定的速度运动到指定位置后
准确地停止。
点位运动 只关注终点坐标 ,对运动轨迹的精度没有要求。点位运动的运动距离由脉冲数决
定,运动速度由脉冲频率决定。

点位运动的实现

单轴运动速度曲线设置

1、指定轴点位运动

 

            ushort _cardNo = 0;
            ushort _axisNo = 0;
            int _dist = 10;  // 目标位置 是脉冲 pulse 
            ushort _posi_mode=1;  //  运动模式   0 相对坐标模式  1 绝对坐标模式

            //  指定轴点位运动
            LTDMC.dmc_pmove(_cardNo, _axisNo, _dist,_posi_mode);
            // * 注意  ; 当运动模式为相对坐标模式的时候,_dist》0 表示正向运动    _dist《0 反向运动

2、设置单轴运动速度曲线

 

 

       // 设置单轴运动速度曲线
       double _startSpeed = 100;//  起始速度 单位是 脉冲 pulse/s 
       double _maxSpeed = 200;//  最大速度  单位是 脉冲 pulse/s 
       double  _tacc = 0.001;  // 加速时间0.001s
       double _tdec = 0.001;  // 减速时间 0.001s
       double _stopSpeed = 10;// 停止速度 单位是 脉冲 pulse/ s
       LTDMC.dmc_set_acc_profile(_cardNo, _axisNo, _startSpeed, _maxSpeed, _tacc, _tdec, _stopSpeed);

改变速度、改变终点位置

 

1、在线改变指定轴的当前运动速度 
 
            // 在线改变指定轴的当前运动速度
            ushort _currVel = 2000;  //Curr_Vel 改变后的运动速度,单位:pulse/s
            ushort _taccdec = 200;  // 保留参数,固定值为 0
            LTDMC.dmc_change_speed(_cardNo, _axisNo, _currVel, _taccdec);
2、在线改变指定轴的当前目标位置
 //在线改变指定轴的当前目标位置
 int _targetPosition = 1000; // 目标位置,单位:pulse
 ushort _positionMode = 0;
 LTDMC.dmc_reset_target_position(_cardNo, _axisNo, _targetPosition, _positionMode); 
3、 强行改变指定轴的当前目标位置(在线/非在线)

 

            //强行改变指定轴的当前目标位置(在线/非在线)
            LTDMC.dmc_update_target_position(_cardNo, _axisNo, _targetPosition, _positionMode);
 4、指定轴按固定曲线做分段定长位移运动(可实现软着陆功能)、

            ushort _midPos = 2000;    // _midPos 第一段运动终点位置,单位:pulse
            ushort _targetPos = 4000; //_targetPos 第二段运动终点位置,单位:pulse
            ushort _startSpeed1 = 204; //_startSpeed1 起始速度,单位:pulse / s
            ushort _maxSpeed1 = 300;    //_maxSpeed1 最大速度,单位:pulse / s
            ushort _stopSpeed1 = 300;   //_stopSpeed1 停止速度(第二段运动的运行速度),单位:pulse / s
            ushort _acc = 300;  //_acc 加速时间,单位:S
            ushort _dec = 300;  //_dec 减速时间,单位:S
            ushort _posiMode = 1;  //posi_mode 0 相对模式,1 绝对模式
            LTDMC.dmc_t_pmove_extern(_cardNo, _axisNo, _midPos, _targetPos, _startSpeed1, _maxSpeed1, 
                _stopSpeed1, _acc,_dec,_posi_mode);

 S 形速度曲线运动模式

设置 S 段曲线参数值

 

            //设置单轴速度曲线 S 段参数值 
            ushort _sMode = 0; 
            double  _sParamers = 0.1f;  // S 段时间,单位:s;范围:0~0.5 s
            LTDMC.dmc_set_s_profile(_cardNo, _axisNo, _sMode, _sParamers);

多轴联动 

多轴同时做点位运动,称之为多轴联动。
卡可以控制多个电机同时执行 dmc_pmove 这类单轴运动函数。所谓同时执行, 是在程序中顺序调用 dmc_pmove 等函数,因为程序执行速度很快,在几微秒内电机都开始运动, 感觉是同时开始运动

CODE


        public  int  Jog()
        {
            ushort _cardNo = 0;
            ushort _axisNo = 0;
            int _dist = 10;  // 目标位置 是脉冲 pulse 
            ushort _posi_mode=1;  //  运动模式   0 相对坐标模式  1 绝对坐标模式

            //  指定轴点位运动
            LTDMC.dmc_pmove(_cardNo, _axisNo, _dist,_posi_mode);
            // * 注意  ; 当运动模式为相对坐标模式的时候,_dist》0 表示正向运动    _dist《0 反向运动




            // 设置单轴运动速度曲线
            double _startSpeed = 100;//  起始速度 单位是 脉冲 pulse/s 
            double _maxSpeed = 200;//  最大速度  单位是 脉冲 pulse/s 
            double  _tacc = 0.001;  // 加速时间0.001s
            double _tdec = 0.001;  // 减速时间 0.001s
            double _stopSpeed = 10;// 停止速度 单位是 脉冲 pulse/ s
            LTDMC.dmc_set_acc_profile(_cardNo, _axisNo, _startSpeed, _maxSpeed, _tacc, _tdec, _stopSpeed);


            ushort direct = 1; //  运动方向  0 负方向  1 正方向
            LTDMC.dmc_vmove(_cardNo, _axisNo, direct);


            // 在线改变指定轴的当前运动速度
            ushort _currVel = 2000;  //Curr_Vel 改变后的运动速度,单位:pulse/s
            ushort _taccdec = 200;  // 保留参数,固定值为 0
            LTDMC.dmc_change_speed(_cardNo, _axisNo, _currVel, _taccdec);

            //在线改变指定轴的当前目标位置
            int _targetPosition = 1000; // 目标位置,单位:pulse
            ushort _positionMode = 0;
            LTDMC.dmc_reset_target_position(_cardNo, _axisNo, _targetPosition, _positionMode);

            //强行改变指定轴的当前目标位置(在线/非在线)
            LTDMC.dmc_update_target_position(_cardNo, _axisNo, _targetPosition, _positionMode);


            ushort _midPos = 2000;    // _midPos 第一段运动终点位置,单位:pulse
            ushort _targetPos = 4000; //_targetPos 第二段运动终点位置,单位:pulse
            ushort _startSpeed1 = 204; //_startSpeed1 起始速度,单位:pulse / s
            ushort _maxSpeed1 = 300;    //_maxSpeed1 最大速度,单位:pulse / s
            ushort _stopSpeed1 = 300;   //_stopSpeed1 停止速度(第二段运动的运行速度),单位:pulse / s
            ushort _acc = 300;  //_acc 加速时间,单位:S
            ushort _dec = 300;  //_dec 减速时间,单位:S
            ushort _posiMode = 1;  //posi_mode 0 相对模式,1 绝对模式
            LTDMC.dmc_t_pmove_extern(_cardNo, _axisNo, _midPos, _targetPos, _startSpeed1, _maxSpeed1, 
                _stopSpeed1, _acc,_dec,_posi_mode);

            //设置单轴速度曲线 S 段参数值 
            ushort _sMode = 0; 
            double  _sParamers = 0.1f;  // S 段时间,单位:s;范围:0~0.5 s
            LTDMC.dmc_set_s_profile(_cardNo, _axisNo, _sMode, _sParamers);


            return 0; 
        }

二、连续运动

什么是连续运动?

连续运动是指:电机从起始速度开始运行,加速至最大速度后连续运动;只有当接收到停
止指令或外部停止信号后,才减速停止。
连续运动指令其实就是速度控制指令,国外运动控制器将此指令称为 JOG 指令。

该功能的主要用途是:速度控制,如:传送带的速度、包装机连续送料速度等 

指定轴连续运动 

 CODE

            ushort direct = 1; //  运动方向  0 负方向  1 正方向
            LTDMC.dmc_vmove(_cardNo, _axisNo, direct);

三、插补运动

什么是插补运动?

为了实现轨迹控制,运动控制卡按照一定的控制策略控制多轴联动,使运动平台用微小直线段精确地逼近轨迹的理论曲线,保证运动平台从起点到终点上的所有轨迹点都控制在允许误 差范围内。这种控制策略称为插补算法,因此轨迹运动通常称为插补运动。插补运动有许多种 类,如:直线插补、圆弧插补、螺旋线插补、抛物线插补等。

 直线插补运动

两轴直线插补

进行2-11轴同时作用的时候就需要插补,如图

XY两个轴同时运动,并且同时到达终点,X、Y 轴的运动速度之比为 ΔX:ΔY,二轴合成的

矢量速度为:

插补速度曲线设置函数

三轴直线插补

在 X、Y、Z 轴内直线插补,从 P0 点运动至 P1 点。插补过程中 3 轴的速 度比为 ΔX:ΔY:ΔZ,三轴合成的矢量速度为:

四轴直线插补

4 轴插补可以理解为在 4 维空间里的直 线插补。一般情况是 3 个轴进行直线插补, 另一个旋转轴也按照一定的比例关系和这条 空间直线一起运动。其合成矢量速度为:

函数

设置插补速度

 

直线插补运动 

            // 直线插补
            ushort _cardNo = 0;
            ushort _axisNo = 0;
            ushort _minSpeed = 0; //_minSpeed ,单位:pulse / s
            ushort _maxSpeed1 = 300;    //_maxSpeed1 合成最大速度,单位:pulse / s
            ushort _acc = 300;  //_acc 加速时间,单位:S
            ushort _dec = 300;  //_dec 减速时间,单位:S
            ushort _stopVel = 1;  //
            LTDMC.dmc_set_vector_profile_multicoor(_cardNo, _axisNo, _minSpeed, _maxSpeed1, _acc, _dec,_stopVel);


            ushort _axisNum = 1; // 插补轴数,取值范围:DMC3C00:0~11,DMC3800:0~7,DMC3600:0~5  DMC3400A:0~3
            ushort[] axisList=new ushort[9];  //插补轴列表
            int[] _distList = new int[9]; //_distList 插补轴目标位置列表,单位:pulse
            ushort _posiMode = 1;  //posi_mode 0 相对模式,1 绝对模式
            LTDMC.dmc_line_multicoor(_cardNo, _axisNo, _axisNum, axisList, _distList, _posiMode);

圆弧插补运动

设置插补速度

两轴圆弧插补运动

            // 圆弧插补
            int[] _targetPos = new int[10]; //Target_Pos 终点坐标,单位:pulse
            int [] _centerPos = new int[10]; //Cen_Pos 圆心坐标,单位:pulse
            ushort _arcDirect = 1; //Arc_Dir 圆弧方向,0:顺时针,1:逆时针
            LTDMC.dmc_arc_move_multicoor(_cardNo, _axisNo, axisList, _targetPos, _centerPos, _arcDirect, _posiMode);

CODE 

 public  int SetInterpolation()
{
    // 直线插补
    ushort _cardNo = 0;
    ushort _axisNo = 0;
    ushort _minSpeed = 0; //_minSpeed ,单位:pulse / s
    ushort _maxSpeed1 = 300;    //_maxSpeed1 合成最大速度,单位:pulse / s
    ushort _acc = 300;  //_acc 加速时间,单位:S
    ushort _dec = 300;  //_dec 减速时间,单位:S
    ushort _stopVel = 1;  //
    LTDMC.dmc_set_vector_profile_multicoor(_cardNo, _axisNo, _minSpeed, _maxSpeed1, _acc, _dec,_stopVel);


    ushort _axisNum = 1; // 插补轴数,取值范围:DMC3C00:0~11,DMC3800:0~7,DMC3600:0~5  DMC3400A:0~3
    ushort[] axisList=new ushort[9];  //插补轴列表
    int[] _distList = new int[9]; //_distList 插补轴目标位置列表,单位:pulse
    ushort _posiMode = 1;  //posi_mode 0 相对模式,1 绝对模式
    LTDMC.dmc_line_multicoor(_cardNo, _axisNo, _axisNum, axisList, _distList, _posiMode);

    // 圆弧插补
    int[] _targetPos = new int[10]; //Target_Pos 终点坐标,单位:pulse
    int [] _centerPos = new int[10]; //Cen_Pos 圆心坐标,单位:pulse
    ushort _arcDirect = 1; //Arc_Dir 圆弧方向,0:顺时针,1:逆时针
    LTDMC.dmc_arc_move_multicoor(_cardNo, _axisNo, axisList, _targetPos, _centerPos, _arcDirect, _posiMode);



    return 0; 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值