之前正运动技术与大家分享了,运动控制器的固件升级、ZBasic程序开发、ZPLC程序开发、与触摸屏通讯和输入/输出IO的应用、运动控制器数据与存储的应用、运动控制器ZCAN、EtherCAT总线的使用、示波器的应用、多任务运行的特点、运动控制器中断的应用、U盘接口的使用、ZDevelop 编程软件的使用以及运动控制器的基础轴参数与基础运动控制指令等。
今天,我们来讲解一下正运动技术运动控制器运动缓冲。
视频教程:《视频教程:运动控制器运动缓冲简介》
以下是图文详解
01 材料准备与接线参考

02运动缓冲
1.运动缓冲原理
在运行运动指令时,为了防止程序堵塞,控制器提供了一个缓冲区来保存进入运动缓冲的运动缓冲队列,把这个功能叫做运动缓冲,这样程序就能正常向下扫描,不会堵塞。
ZMotion运动控制器具有多级的运动缓冲,当运动缓冲开启的时候,程序在扫描识别到程序任务的第一条运动指令时,将运动指令分配到指定轴的运动缓冲区,电机开始运动,此时程序继续向下扫描到第二条运动指令时,再往运动缓冲区中存,在不断扫描存入运动指令的同时,从运动缓冲区中依次取出运动指令执行。
MTYPE,NTYPE分别是当前运行的运动指令和第一个缓冲运动指令。
任意一段程序的运动指令都可以进入任意轴的运动缓冲区,由轴号指定。
每个轴的运动缓冲区都是独立的,互不干扰。

缓冲多条运动指令时,为了判断当前运动执行到哪一条,提供MOVE_MARK运动标号和MOVE_CURMARK当前运动标号指令。MOVE_MARK运动标号每扫描一条运动指令+1;MOVE_CURMARK指令为当前运动的标号,提示当前运动到第几条运动指令,所有运动完成后为-1。
当前运动完成后会自动执行运动缓冲区内的下一条运动。运动指令全部执行完后,运动缓冲区为空,或者使用CANCEL/RAPIDSTOP指令清空运动缓冲区。
SP指令也属于运动指令,使用SP运动指令(如MOVESP、MOVECIRCSP等直接在运动指令后方加上SP)时,SP速度FORCE_SPEED、ENDMOVE_SPEED和STRATMOVE_SPEED会随SP运动指令写入运动缓存区。
SP运动指令与运动指令的区别:
MOVE(100)的速度是SPEED=100,MOVESP(100)的速度是FORCE_SPEED=200。

2.运动缓冲区堵塞
每个轴的运动缓冲空间是有限的,当扫描太多运动指令放入运动缓冲区时,多级运动缓冲区全部被塞满,如果程序继续扫描到更多的运动指令,程序也会被堵塞,直到运动指令依次完成并退出,运动缓冲区有了空位,运动指令才会继续进入运动缓冲区。
例:以V3.10版本仿真器为例,默认为4096个运动缓冲,下图例程中显示该控制器的运动缓冲区最多能存459条圆弧插补指令,下载程序后后打印i的值为458,表示当前FOR循环并未执行完,程序堵塞了。

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

每个轴的运动缓冲都是独立的,互不干扰,且缓冲区大小相同,通过指令REMAIN_BUFFER(MTYPE) AXIS(n)查看某个轴的剩余可用缓冲区的个数。
ZMC4系列运动控制器每个轴可支持多达4096段运动缓冲(不同型号的控制器缓冲个数有区别,具体情况参见控制器硬件手册说明或使用?*max打印查看),可以手动设置LIMIT_BUFFERED运动缓冲限制。
不同的运动指令占用的缓冲空间是不同的,越复杂的运动占用的运动缓冲空间越多。
例如:
ZMC432控制器,运动缓冲区大小为4096,缓冲区一次性可缓冲的MOVE直线插补指令和MOVECIRC圆弧插补指令个数是不同的。
插补运动缓冲在主轴的运动缓冲区。

3.运动缓冲例程
RAPIDSTOP(2)
WAIT IDLE(0)
WAIT IDLE(1)
BASE(0,1)
ATYPE=1,1
UNITS=100,100
SPEED=100,100
ACCEL=1000,1000
DECEL=1000,1000
DPOS=0,0
MERGE=OFF '关闭连续插补
TRIGGER
LIMIT_BUFFERED=3 '轴0/1运动缓冲区可缓冲运动指令个数设为3
MOVE(60,40 '进入MTYPE,Buffer0
MOVE(70,50) '进入NTYPE,Buffer1
MOVE(50,40) 'Buffer2
MOVE(60,50) '缓冲区满,暂不进入
?"轴0当前缓冲指令个数=" MOVES_BUFFERED(0) '结果2
?"轴0剩余缓冲区个数=" REMAIN_BUFFER(1) AXIS(0) '结果0
?"轴1剩余缓冲区个数=" REMAIN_BUFFER(1) AXIS(1) '结果3
END
将轴的运动缓冲区可缓冲运动指令个数限制为3,此时运动缓冲区最多能装3条直线插补指令。
共有4个直线插补指令,MOVE(60,40)占用轴0的MTYPE,轴0还能缓冲2个运动指令,轴0剩余缓冲数为0,且还有1条直线指令因为主轴轴0的运动缓冲区已满,还未进入运动缓冲区。
等到MOVE(60,40)运动完成,MOVE(60,50)才能进轴0的运动缓冲区。

插补运动缓冲在主轴轴0里,故轴1的运动缓冲区是没有指令的,剩余缓冲大小为3。每条MOVE指令占用一个缓冲空间。

4.普通输出与运动缓冲中输出的区别
普通输出指令程序扫描到该行指令便执行输出。
运动缓冲中输出指令在程序扫描之后,将其存入运动缓冲区,运动缓冲区按先进先出的顺序依此取出指令执行,直到取出该输出

本文详细介绍了正运动技术运动控制器的运动缓冲功能,包括运动缓冲原理、缓冲区堵塞、运动缓冲指令应用,如MOVE_OP、MOVE_DELAY、MOVE_AOUT等,并通过实例解析了如何在运动缓冲中进行输出、延时、暂停、恢复等操作,以及如何利用MOVE_MARK和MOVE_CURMARK进行运动控制。

2604

被折叠的 条评论
为什么被折叠?



