当前运动指令正在执行时,后续调用的运动指令会自动缓冲起来,控制器每个轴可以支持最多达512级运动缓冲(不同型号控制器缓冲个数有区别),当缓冲全部占用时,后续调用的运动指令会阻塞当前任务,直到缓冲有空位。
每个运动指令都带有一个MOVE_MARK参数,通过MOVE_CURMARK可以知道当前缓冲运行到哪一个了。
MOVE等单轴运动指令采用SPEED等各自单轴的轴参数。
MOVE等多轴插补运动指令采用BASE主轴SPEED等轴参数作为矢量合成速度,但其有相应的SP指令,SP指令可以为每个运动指定不同的速度等参数(FORCE_SPEED,STARTMOVE_SPEED,ENDMOVE_SPEED),参见*SP。
轴参数MERGE用来设置多轴插补指令中间是否减速到零,MERGE=ON时不减速,此时轴参数CORNER_MODE可以设置多轴插补之间是否自动减速到必要的速度。
控制器支持运动暂停,参见MOVE_PAUSE。
控制器支持运动叠加,参见ADDAX。
目录
BASE [选择运动轴]
TYPE:
运动指令
DESCRIPTION:
选择要设置参数、参与运动的轴。
缺省值依次为:0,1,2…
程序中在下一条BASE指令被执行前,都以上一条BASE指令选择轴
每个任务拥有独立的轴列表,会记住任务中BASE选择的轴,用于不同机台的控制。
当插补运动的时候,第一个轴的运动参数作为插补参数。见EXAMPLE
如果在BASE指令中没有列出所有的轴,BASE指令自动将剩余轴顺序排列在后面。见EXAMPLE2
SYNTAX:
BASE(axis<,second axis><,third axis>...)
PARAMETERS:
axis | 第一个轴 |
second axis | 下一个轴 |
… | 参数最多为控制器支持的轴数,参照对应控制器硬件手册 |
EXAMPLE:
BASE(0,1,2,3) '轴列表选择为:0,1,2,3
SPEED=100,10,20,30 '此时轴0,1,2,3设置了对应速度,但是插补
'运动时,只有主轴速度100起作用
MOVE(100,100,100,100) '轴0,1,2,3联合插补运动,合成运动的速度
'为100,各轴速度为分速度
EXAMPLE2:
BASE(1) '轴列表选择为:1
MOVE(100,100,100) '轴1,2,3做插补运动
EXAMPLE3:
BASE(0,2,5) '轴列表选择为:0,2,5
SPEED=100
MOVE(100,100,100) '轴0,2,5做插补运动
EXAMPLE4:
BASE(0,1)
ATYPE=1,1
UNITS=100,100
SPEED=100,100
ACCEL=1000,1000
DECEL=1000,1000 '减速度设为1000
FASTDEC=10000,10000 '快减减速度设为10000
MOVE(1000,100) '当前运动
base(1)
MOVE(-1000) '缓冲运动
?dpos
AXIS [强制指定轴]
TYPE:
辅助指令
DESCRIPTION:
临时修改一个运动指令或轴参数到一个指定轴上去执行。
对轴参数,可以AXIS可以省掉。
SYNTAX:
AXIS(expression)
PARAMETERS:
expression | 临时修正的新轴号,执行完后,轴选择仍以BASE指令为准 |
EXAMPLE:
BASE(0)
SPEED=100,500
MOVE(1000) AXIS(1) '此时强制轴1运动1000units
MOVE(100) '轴0运动100units
EXAMPLE2:
BASE(1)
UNITS AXIS(0)=100 '强制指定轴0 UNITS设为100
'可简写为UNITS(0)=100
UNITS=10 '轴1 UNITS设为10
ADDAX [运动叠加]
TYPE:
单轴运动指令
DESCRIPTION:
运动叠加,把一个轴的运动叠加到另一个轴。
ADDAX指令叠加的是脉冲个数,而不是设置的units单位。
转换关系:叠加轴运动距离*叠加轴UNITS/被叠加轴UNITS=被叠加轴运动距离。
假设轴A的UNITS是100,轴B的UNITS是50,叠加轴运动100
把轴A的运动叠加到轴B,此时轴A显示运动了100,轴B运动了100*100/50=200。
把轴B的运动叠加到轴A,此时轴B显示运动了100,轴A运动了100*50/100=50。
轴之间不能相互同时叠加,A叠加到B后,B不能再叠加到A。
叠加时速度从被叠加轴开始变化,加减速按照叠加轴加减速及两轴units比例确定。
ADDAX 在轴MTYPE为FRAME, 或REFRAME的时候不起作用。
在轴ATYPE为纯编码器类型的时候, 不起作用。
SYNTAX:
ADDAX(axis)
PARAMETERS:
axis | 轴号 |
EXAMPLE:
BASE(0,1)
ATYPE=1,1
UNITS=100,200 '轴0 UNITS设100,轴1 UNITS设200
SPEED=100,100 '速度设100
ACCEL=1000,1000 '加速度1000
DECEL=1000,1000 '减速度1000
ADDAX(0)AXIS(1) '轴0的运动叠加到轴1,按脉冲个数叠加
DPOS=0,0 '设置位置为0,0
TRIGGER '自动触发示波器
MOVE(100) '轴0运动100,此时轴1运动 100*100/200=50
'要考虑到两轴UNITS的转换
WAIT IDLE '等待运行完
ADDAX(-1)AXIS(1) '取消叠加
EXAMPLE2:
BASE(0,1)
ATYPE=1,1
UNITS=100,200 '轴0 UNITS设100,轴1 UNITS设200
SPEED=100,100 '速度设1000
ACCEL=1000,1000 '加速度10000
DECEL=1000,1000 '减速度10000
ADDAX(0)AXIS(1) '轴0的运动叠加到轴1,按脉冲个数叠加
DPOS=0,0 '设置位置为0,0
TRIGGER '自动触发示波器
MOVE(500)AXIS(1)
MOVE(100) '轴0运动100,此时轴1运动 100*100/200=50
'要考虑到两轴UNITS的转换
WAIT IDLE '等待运行完
ADDAX(-1)AXIS(1) '取消叠加
DEFPOS [设置当量位置]
TYPE:
坐标指令
DESCRIPTION:
设置当前位置为一个新的绝对位置值,不会对已运行/进入缓冲区的运动产生影响。
SYNTAX:
DEFPOS(pos1 [,pos2[, pos3[, pos4.....]]])
PARAMETERS:
pos1 | 绝对位置,采用unit定义单位。 |
Pos2 | 下一轴的绝对位置,采用unit定义单位。 |
EXAMPLE:
BASE(0,1) '选择轴0,轴1
ATYPE=1,1
UNITS=100,100 'UNITS设为100
DPOS=0,0 '把DPOS清0
MOVE(100,100) '轴0和轴1运动100
WAIT IDLE
?DPOS(0),DPOS(1) '此时DPOS都为100
DEFPOS(0,10) '设置当前位置
?DPOS(0),DPOS(1) '此时DPOS为0,10
EXAMPLE2:
'与OFFPOS相对改变不同,DEFPOS是改变为绝对位置
BASE(0,1) '选择轴0,轴1
DPOS=100,100 '设置当前位置为100,100
?DPOS(0),DPOS(1) '打印确认
DEFPOS(10,20) '设置当前位置为10,20
?DPOS(0),DPOS(1) '当前位置为10,20
DEFPOS(10,20) '多次调用DEFPOS
DEFPOS(10,20)
?DPOS(0),DPOS(1) '此时当前位置仍为10,20
OFFPOS=10,20 '多次调用OFFPOS
OFFPOS=10,20
?DPOS(0),DPOS(1) '此时当前位置变为30,60(10+10+10,20+20+20)
CANCEL [BASE轴停]
TYPE:
多轴运动指令
DESCRIPTION:
BASE轴减速停止,如果轴参与插补,也停止插补运动。
Mode0~2减速度按FASTDEC和DECEL中最大的值。
CANCEL后要调用绝对位置运动,必须先WAIT IDLE 等待停止完成。
注意:停止的缓冲运动包括指令缓冲和运动缓冲。
SYNTAX:
CANCEL(mode)
PARAMETERS:
mode |
|
EXAMPLE:
BASE(0)
ATYPE=1
DPOS=0
UNITS=100
SPEED=100
ACCEL=1000
DECEL=1000 '减速度设为1000
FASTDEC=10000 '快减减速度设为10000
MERGE = ON
MOVE(1000) '当前运动
MOVE(-1000) '缓冲运动
WA 1000
CANCEL(0) '此时轴取消当前运动,减速度为10000 ,继续执行下一个运动。
EXAMPLE2:
BASE(0)
ATYPE=1
DPOS=0
UNITS=100
SPEED=100
ACCEL=1000
DECEL=1000 '减速度设为1000
FASTDEC=10000 '快减减速度设为10000
MERGE = ON
MOVE(1000) '当前运动
MOVE(-1000) '缓冲运动
CANCEL(1) '此时轴只执行完MOVE(1000),减速度为10000
EXAMPLE3:
BASE(0)
ATYPE=1
DPOS=0
SPEED=100
ACCEL=1000
DECEL=1000
FASTDEC=1000
MERGE = ON
MOVE(10000) '当前运动10000
DELAY(2000) '延时2秒
CANCEL(3) '此时直接切断脉冲发送,轴立即停止。
EXAMPLE4:
BASE(0)
ATYPE=1
DPOS=0
SPEED=100
ACCEL=1000
DECEL=1000
FASTDEC=1000
MOVE(10000) '当前运动10000
BASE(1)
ATYPE=1
DPOS=0
SPEED=100
ACCEL=1000
DECEL=1000
FASTDEC=1000
MOVE(10000) '当前运动10000
DELAY(2000) '延时2秒
CANCEL(3) '此时直接切断脉冲发送,轴1立即停止,仅停止base(1)轴。
EXAMPLE5:
BASE(0,1)
ATYPE=1,1
DPOS=0,0
SPEED=1000
ACCEL=1000
DECEL=1000
FASTDEC=1000
MOVE(1000,1000) '插补运动
DELAY(1000) '延时1秒
CANCEL(2)AXIS(1) '停止轴1,轴1参与了插补,插补运动也停止
RAPIDSTOP [所有轴停]
TYPE:
多轴运动指令
DESCRIPTION:
所有轴立即停止,如果轴参与插补,也停止插补运动。
Mode0~2减速度按FASTDEC和DECEL中最大的值。
RAPIDSTOP后要调用绝对位置运动,必须先WAIT IDLE 等待停止完成。
注意:停止的缓冲运动包括指令缓冲和运动缓冲。
SYNTAX:
RAPIDSTOP (mode)
PARAMETERS:
mode | 0 取消当前运动
|
EXAMPLE:
BASE(0,1,2)
ATYPE=1,1,1
UNITS=100
SPEED=100 '插补合成运动速度100
ACCEL=1000
DECEL=1000 '减速度设为1000
FASTDEC=10000 '快减减速度设为10000
MOVE(1000,1000,1000) '当前运动
MOVE(-1000,-1000,-1000) '缓冲运动
RAPIDSTOP (1) '此时轴只执行完当前运动,减速度为10000
EXAMPLE2:
BASE(0,1)
ATYPE=1,1
DPOS=0,0
SPEED=100
ACCEL=1000
DECEL=1000
FASTDEC=1000
MOVE(10000,10000) '插补运动10000
DELAY(2000) '延时2秒
RAPIDSTOP (3) '此时直接切断脉冲发送,轴立即停止。
EXAMPLE3:
BASE(0)
ATYPE=1
DPOS=0
SPEED=100
ACCEL=1000
DECEL=1000
FASTDEC=1000
MOVE(10000) '当前运动10000
BASE(1)
ATYPE=1
DPOS=0
SPEED=100
ACCEL=1000
DECEL=1000
FASTDEC=1000
MOVE(10000) '当前运动10000
DELAY(2000) '延时2秒
RAPIDSTOP (3) '此时直接切断脉冲发送,全部轴立即停止。