正运动技术
正运动技术
EN

协助伙伴成功,是我们的价值所在

The value of Zmotion is to bring customers more success!

首页 / 支持与服务 / 技术分享

Technical support

技术分享

经济型EtherCAT运动控制器(七):运动缓冲


XPLC006E功能简介

0

XPLC006E是正运动运动控制器推出的一款多轴经济型EtherCAT总线运动控制器,XPLC系列运动控制器可应用于各种需要脱机或联机运行的场合。

1.png


XPLC006E自带6个电机轴,最多12轴运动控制(含虚拟轴数),支持12轴直线插补、电子凸轮、电子齿轮、同步跟随、虚拟轴设置等功能。

XPLC006E支持多任务同时运行,同时可以在PC上直接仿真运行,编程方式多种可选,支持ZDevelop软件的Basic/PLC梯形图/HMI组态和常用上位机软件编程。

XPLC006E只支持EtherCAT总线轴,不支持脉冲轴和编码器轴。采用EtherCAT总线与驱动器通讯,1ms的刷新周期。

XPLC006E支持PLC、Basic、HMI组态三种编程方式。PC上位机API编程支持C#、C++、LabVIEW、VB、matlab、Qt、Linux、.Net、iMAC、Python、 ROS等接口。

2.png

→此款产品有XPLC004E、XPLC006E、XPLC008E三个不同轴数的型号可选。

2

2



XPLC864E功能简介

XPLC864E在XPLC006E的功能基础上做了升级(即上节介绍的XPLC006E的功能都支持),部分资源空间优于XPLC006E,使用方法基本一致,不同之处在于XPLC864E,硬件支持32点输入、32点输出、2个ADC、2个DAC,支持脉冲轴和总线轴混合使用,总实轴轴数为8,除了带EtherCAT接口之外,输出口硬件上可配置为8个轴的脉冲方向信号输出,另带两路编码器输入,可由输入口配置

XPLC864E支持PLCBasicHMI组态三种编程方式。PC上位机API编程支持C#、C++、LabVIEW、VB、matlab、Qt、Linux、.Net、iMAC、Python、 ROS等接口。

3.png

4.png

2

2


XPLC系列经济型EtherCAT总线运动控制器支持多种编程方式,支持使用正运动技术自主研发的ZDevelop开发环境的Basic语言和PLC梯形图,上一节讲解了控制器的数据存储,本节内容主要讲解控制器的运动缓存。




图片

运动缓冲概念


在运行运动指令时,为了防止程序堵塞,控制器提供了一个缓冲区来保存进入运动缓冲的运动缓冲队列,把这个功能叫做运动缓冲,这样程序就能正常向下扫描,不会堵塞。

ZMotion运动控制器具有多级的运动缓冲,如下图。当运动缓冲开启的时候,程序扫描识别到程序任务的第一条运动指令时,将运动指令分配到指定轴的运动缓冲区,电机开始运动,此时程序会继续向下扫描。扫描到第二条运动指令时,再往运动缓冲区中存,且在不断扫描存入运动指令的同时,从运动缓冲区中依次取出运动指令执行。

MTYPE,NTYPE分别是当前运行的运动指令和第一个缓冲运动指令。任意一段程序的运动指令都可以进入任意轴的运动缓冲区,由轴号指定。每个轴的运动缓冲区都是独立的,互不干扰。

0.png




图片

运动缓冲区缓冲原理



程序扫描过程中,将扫描到的运动指令存入对应轴的运动缓冲区,再从运动缓冲区中按先进先出的顺序,依此取出运动指令执行。能进入运动缓冲区的指令除了运动指令之外,还包括一系列运动缓冲中输出指令。

插补运动缓冲在主轴的运动缓冲区。

缓冲多条运动指令时,为了判断当前运动执行到哪一条,提供MOVE_MARK运动标号和MOVE_CURMARK当前运动标号指令查询。MOVE_MARK运动标号每扫描一条运动指令+1;MOVE_CURMARK指令为当前运动的标号,提示当前运动到第几条运动指令,所有运动完成后为-1。

当前运动完成后会自动执行运动缓冲区内的下一条运动。运动指令全部执行完后,运动缓冲区为空,或者使用CANCEL/RAPIDSTOP指令清空运动缓冲区。

如下图,若程序中有多条运动指令,依据轴号的指示,按从上到下的顺序依次扫描进运动缓冲区,按先进先出的顺序依次执行,例如轴0,第一条执行MOVE(100)直线运动指令,可使用MTYPE指令查询运动指令的类型,MOVE(100)执行完成退出缓冲区,释放缓冲空间,接着执行下一条MOVE(150,200)直线插补指令,以此类推。

1.png

SP运动指令会写入运动缓存区,使用SP运动指令时(MOVESP、MOVECIRCSP等直接在运动指令后方加上SP),SP指令的速度按SP速度参数运动,而不是SPEED速度,SP速度包含FORCE_SPEED强制速度、ENDMOVE_SPEED结束速度和STRATMOVE_SPEED开始速度,设置的SP速度参数会在运动缓存区中生效。

SP指令与非SP指令的运行效果如下图所示,MOVE(100)的速度是SPEED=100,MOVESP(100)的速度是FFORCE_SPEED=150。

2.png




图片

运动缓冲区查询


例如ZMC4系列及以上运动控制器每个轴可支持多达4096段运动缓冲(不同型号的控制器缓冲个数有区别,具体情况参见控制器硬件手册说明或使用“?*max”打印查看max_movebuff参数),可以手动设置LIMIT_BUFFERED运动缓冲限制。

3.png

每个轴的运动缓冲都是独立的,互不干扰,且轴的缓冲区大小相同,通过指令REMAIN_BUFFER(MTYPE) AXIS(n)查看某个轴的剩余可用缓冲区的个数。

不同的运动指令占用的缓冲空间是不同的,越复杂的运动占用的运动缓冲空间越多。例如:ZMC432控制器,运动缓冲区大小为4096,缓冲区一次性可缓冲的MOVE直线插补指令和MOVECIRC圆弧插补指令个数是不同的。

9.png

LOADED指令用于判断轴的运动缓冲区是否为空,只读参数,返回值0表示运动缓冲区还有指令,返回值为-1表示运动缓冲区空,一般用法为WAIT LOADED。




图片

运动缓冲区堵塞

由于每个轴的运动缓冲空间是有限的,当扫描太多运动指令放入运动缓冲区时,多级运动缓冲区全部被塞满,如果程序继续扫描到更多的运动指令,程序也会被堵塞,直到运动指令依次完成并退出,运动缓冲区有了空位,运动指令才会继续进入运动缓冲区。

例:以ZDevelopV3.10版本的仿真器为例,默认为4096个直线插补的运动缓冲,一个圆弧插补/螺旋线插补/样条插补等插补运动会占用多个直线插补的运动缓冲。

下图例程中显示该控制器的运动缓冲区最多能存459条圆弧插补指令,下载程序后后打印i的值为458,表示当前FOR循环并未执行完,程序堵塞了,下图为直线插补指令过多导致堵塞的效果。

10.png


11.png

下图表示当从运动缓冲区取出部分圆弧运动指令执行之后,缓冲区有了空间,FOR循环继续执行,并存入运动指令到运动缓冲区。指令执行退出运动缓冲区后,只要运动缓冲区的空间够,新的运动指令再进运动缓冲区。

4.png




图片

运动缓冲中输出


运动缓冲中输出指令能进入运动缓冲区,可在运动缓冲中开启OP口、延时、输出参数,输出PWM、开启任务等,详细指令说明参见Basic编程手册第六章。

1.普通输出与运动缓冲中输出的区别。

(1)普通输出指令程序扫描到该行指令便执行输出。

(2)运动缓冲中输出指令在程序扫描之后,将其存入运动缓冲区,运动缓冲区按先进先出的顺序依此取出指令执行,直到取出该输出指令时才会执行输出。

2.示例:对比OP和MOVE_OP的输出效果。

    RAPIDSTOP(2)WAIT IDLE(0)BASE(0)       '选择轴0
    DPOS=0UNITS=1000    '脉冲当量
    ATYPE=1       '脉冲轴类型
    SPEED=100     '速度
    ACCEL=1000    '加速度
    DECEL=1000    '减速度
    SRAMP=100     'S曲线
    TRIGGER       '触发示波器采样
    OP(0,3,$0)    '关闭输出口0-3
    DELAY(100)    '延时
    MOVE(100)
    MOVE_OP(1,ON) '运动缓冲中输出
    OP(0,ON)      '普通输出
    3.例子运行效果如下图。

    延时1s之后,程序扫描到OP指令,输出口0立即执行输出。

    MOVE_OP把IO操作指令填入运动缓冲区,所以在运行完MOVE(100)之后,输出口1才输出。

    5.png

    4.控制器支持的运动缓冲中输出指令一览表如下。

    指令

    含义

    说明

    MOVE_OP

    缓冲输出

    运动缓冲中开关OP口

    MOVE_OP2

    缓冲输出2

    运动缓冲中开关OP口,并可以设置多少ms之后反转输出口状态

    MOVE_DELAY

    缓冲延时

    运动缓冲中延时

    MOVE_AOUT

    缓冲输出模拟量

    运动缓冲中控制模拟量输出

    MOVE_PAUSE

    缓冲暂停

    运动缓冲中生效,暂停运动

    MOVE_RESUME

    缓冲恢复

    运动缓冲中生效,恢复运动,配合暂停使用

    MOVE_TABLE

    缓冲输出TABLE

    运动缓冲中修改TABLE寄存器的值

    MOVE_PARA

    缓冲参数

    运动缓冲中修改多种轴参数的值,例如修改SPEED,实现实时变速

    MOVE_PWM

    缓冲PWM

    运动缓冲中操作PWM

    MOVE_SYNMOVE

    缓冲触发其他轴

    运动缓冲中启动其他轴运动,当前轴等待

    MOVE_ASYNMOVE

    缓冲触发其他轴2

    运动缓冲中启动其他轴运动,当前轴不等待

    MOVE_TASK

    缓冲开启任务

    运动缓冲中开启子程序任务运行

    MOVE_WAIT

    缓冲等待

    运动缓冲中等待设置的条件满足要求,才可执行下一条缓冲命令

    MOVE_CANCEL

    缓冲停止

    在运动缓冲中执行停止命令,多种停止模式可选,同CANCEL

    了解了运动缓冲中输出概念,我们可以实现下图功能,随着运动精准控制OP口开关光,使用MOVE_PWM指令调节光的能量。

    6.png

    5.实现代码如下,此功能需要支持直线插补、圆弧插补和PWM功能的控制器,并采用连续插补功能提升效率。

      RAPIDSTOP(2)
      WAIT IDLE(0)
      BASE(0,1)                '选择运动轴号
      DPOS=0,0
      UNITS=1000,1000
      ATYPE=1,1
      SPEED=200,200
      ACCEL=1000,1000
      DECEL=1000,1000          '减速度设为1000
      FASTDEC=10000,10000      '快减减速度设为10000
      MERGE=ON, ON             '开启连续插补
      SRAMP=100,100
      MOVE_OP(0,OFF)
      TRIGGER                  '开启运动波形采集
      MOVEABS(100,0)           '第一段直线,空走
      MOVE_OP(0,ON)            '开关
      MOVE_PWM(0, 1, 2000)     'PWM输出占空比为1,频率2K
      MOVEABS(400,0)           '第二段直线
      MOVE_PWM(0, 0.7, 2000)   '调光,占空比为0.7
      MOVECIRCABS(400,-200,400,-100,1)    '第三段圆弧
      MOVE_PWM(0, 0.5, 2000)   '调光,占空比为0.5
      MOVEABS(250,-200)        '第四段直线
      MOVE_OP(0,OFF)           '关光
      MOVE_DELAY(1000)         '延时
      MOVEABS(0,0)             '第五段直线,空走回到原点
      END

      6.示波器采样运动波形如下图。

      12.png

      (1)XY模式下的平面插补轨迹如下图。

      7.png

      (2)XYZ模式下的合成轨迹如下图:清晰看出输出口的电平变化。

      8.png





      运动缓冲区清空


      运动指令等执行完便会退出运动缓冲区,进入运动缓冲区的命令全部执行完成后,运动缓冲区为空。

      用户想要清空运动缓冲区,使用CANCEL或RAPIDSTOP指令,两个指令都有如下四种不同的模式,区别在于,CANCEL针对单个轴,RAPIDSTOP针对所有的轴,每个轴都要一个缓冲区,互不干扰。

      模式值

      说明

      0(缺省)

      取消当前运动,再执行缓冲区的下一条运动

      1

      取消缓冲的所有运动,当前的运动执行完停止

      2

      取消当前运动和缓冲运动,运动缓冲区被清空,立即减速停止

      3

      立即中断脉冲发送,运动缓冲区被清空,立即减速停止

      1.示例:清空运动缓冲,立即停止轴。
        RAPIDSTOP(2)
        WAIT IDLE(0)
        BASE(0,1)
        DPOS=0,0
        UNITS=1000,1000
        ATYPE=1,1
        SPEED=200,200
        ACCEL=1000,1000
        DECEL=1000,1000          '减速度设为1000
        FASTDEC=10000,10000      '快减减速度设为10000
        SRAMP=100,100
        TRIGGER                
        MOVE(1000,500)           '插补运动
        DELAY(1000)              '延时1秒后取消运动
        RAPIDSTOP(2)             '清空运动缓冲区,快速停止轴,减速度为10000

        2.示波器采样运动波形。

        9.png

        本次,正运动技术经济型EtherCAT运动控制器(七):运动缓冲,就分享到这里。

        更多精彩内容请关注“正运动小助手”公众号,需要相关开发环境与例程代码,请咨询正运动技术销售工程师:400-089-8936。

        本文由正运动技术原创,欢迎大家转载,共同学习,一起提高中国智能制造水平。文章版权归正运动技术所有,如有转载请注明文章来源。


        邮箱留言

        Copyright © 2013 正运动技术有限公司 Design by Zmotion 版权所有   粤ICP备13037187号    Powered by www.zmotion.com.cn 运动控制器-运动控制卡

        在线咨询