XPLC系列运动控制器的运动缓冲详解

今日头条

1142人已加入

描述

XPLC006E功能简介


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

ethercat

 

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

 

→此款产品有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

 

ethercat

 

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

 

一、运动缓冲概念

 

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

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

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

ethercat

 

二、运动缓冲区缓冲原理

 

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

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

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

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

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

ethercat

 

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

 

三、运动缓冲区查询

 

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

ethercat

 

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

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

ethercat

 

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

 

四、运动缓冲区堵塞

 

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

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

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

ethercat

 

ethercat

 

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

ethercat

 

五、运动缓冲中输出

 

运动缓冲中输出指令能进入运动缓冲区,可在运动缓冲中开启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

 

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

ethercat

 

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

ethercat

 

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

 

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

ethercat

 

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

ethercat

 

六、运动缓冲区清空

 

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

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

ethercat

 

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

 

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

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

  审核编辑:汤梓红
 

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分