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


XPLC006E功能简介


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

经济型EtherCAT运动控制器(七):运动缓冲_第1张图片

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等接口。

经济型EtherCAT运动控制器(七):运动缓冲_第2张图片

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




XPLC864E功能简介


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

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

经济型EtherCAT运动控制器(七):运动缓冲_第3张图片

经济型EtherCAT运动控制器(七):运动缓冲_第4张图片


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




一、运动缓冲概念


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

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

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

经济型EtherCAT运动控制器(七):运动缓冲_第5张图片




二、运动缓冲区缓冲原理


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

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

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

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

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

经济型EtherCAT运动控制器(七):运动缓冲_第6张图片

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。

经济型EtherCAT运动控制器(七):运动缓冲_第7张图片




三、运动缓冲区查询


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

经济型EtherCAT运动控制器(七):运动缓冲_第8张图片

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

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

经济型EtherCAT运动控制器(七):运动缓冲_第9张图片

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




四、运动缓冲区堵塞


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

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

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

经济型EtherCAT运动控制器(七):运动缓冲_第10张图片


经济型EtherCAT运动控制器(七):运动缓冲_第11张图片

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

经济型EtherCAT运动控制器(七):运动缓冲_第12张图片




五、运动缓冲中输出


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


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

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

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


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

RAPIDSTOP(2)

WAIT IDLE(0)

BASE(0)       '选择轴0 

DPOS=0

UNITS=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才输出。

经济型EtherCAT运动控制器(七):运动缓冲_第13张图片

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

经济型EtherCAT运动控制器(七):运动缓冲_第14张图片

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

经济型EtherCAT运动控制器(七):运动缓冲_第15张图片


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.示波器采样运动波形如下图。

经济型EtherCAT运动控制器(七):运动缓冲_第16张图片

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

经济型EtherCAT运动控制器(七):运动缓冲_第17张图片

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

经济型EtherCAT运动控制器(七):运动缓冲_第18张图片




六、运动缓冲区清空


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

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

经济型EtherCAT运动控制器(七):运动缓冲_第19张图片


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.示波器采样运动波形。

经济型EtherCAT运动控制器(七):运动缓冲_第20张图片

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

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

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

你可能感兴趣的:(运动控制,制造,人工智能,自动化)