运动及轴命令ACC类型:轴指令语法: ACC(rate)注意:这个指令用来和旧的Trio控制器兼容。
在新控制程序中加速度率和减速度率可用ACCEL 和DECEL轴参数设定。
说明:同时设定加速度率和减速度率参数:rate:加速率,单位:UNITS/SEC/SEC例子:例1:把轴的加、减速设置成相同的值,在指定的速度下,运行电机ACC(120) ‘ 加减速同时设为 120 units/sec/secSPEED=14.5 ‘ 电机速度设为 14.5 units/secMOVE(200) ‘ 电机走 200个units的增量距离ADD_DAC类型:轴指令语法: ADD_DAC(轴)说明: ADD_DAC指令提供双反馈控制。
允许一个辅助编码器(轴2)反馈到伺服轴(轴1)。
指令使得两个伺服环的输出共同决定伺服轴的速度指令输出。
这个指令通常应用于轧辊反馈系统,需要一个辅助编码器补偿滑动。
当一个运动轴,带两个反馈编码器时,用到这条指令。
实现方法:在虚拟轴上做动作,用ADDAX()或CONNECT()把此动作加到两个轴上,再用ADD_DAC把两个轴的速度指令输出加到同一轴上如果2个反馈装置分辨率的不同,必须注意两个轴所要求的目标位置不一样。
注:在下例中,需要设置辅助编码器轴的ATYPE为伺服轴。
使用ADD_DAC(-1)取消连接参数:轴速度参考输出到基本轴,设置-1取消连接,并返回正常操作。
参阅: AXIS,ADDAX,OUTLIMIT例1:BASE(1)‘使两轴编码器在相同的线性距离反馈回相同的计数ENCODER_RATIO(counts_per_mm2, counts_per_mm1)UNITS AXIS(1) = counts_per_mm1UNITS AXIS(2) = counts_per_mm1 ‘ 单位必须相同ADD_DAC(2) ' 把轴2 的DAC_OUT叠加到轴1上ADDAX(1) AXIS(2) ' 把轴1的轨迹加到轴2上‘到现在,两轴已经准备就绪MOVE(1200)WAIT IDLEADDAX类型:运动控制指令语法: ADDAX(轴号)说明: ADDAX指令将2个或多个的运动叠加形成较复杂的运动轨迹。
ADDAX指令把指定轴的目标位置(DPOS)的变化,附加到指令指向的轴(基准轴)的任意运动上。
指定轴可以是任一轴,不一定在系统里物理存在。
ADDAX指令发出后两轴的链路保持连接。
直到断开。
指定轴上的进一步运动被附加到基准轴上。
使用ADDAX(-1)取消轴的连接。
ADDAX允许执行两轴叠加运动。
当带有编码器接口的伺服轴的轴参数SERVO 设置到OFF也就是开环,所测位置MPOS被复制到需求位置DPOS。
可以使用ADDAX统计编码器输入。
参数:轴号:指定轴注意:ADDAX指令在做运动叠加时,是在轴参数units下计算的。
例1UNITS AXIS(0)=1000UNITS AXIS(1)=20' 把轴1叠加到轴0ADDAX(1) AXIS(0)MOVE(1) AXIS(0)MOVE(2) AXIS(1)' 轴0将运动1*1000+2*20=1040个边沿例2 物体放置在连续运动的同步带上,并在不远处拾起。
传感器给出信息物体在需要位置之前还是之后,有多远的距离。
在以下例子中,轴0假设为基本轴并连续正向运动,叠加轴2依据子程序计算出的偏移运动到轴0。
FORWARD AXIS(0) ‘设置连续运动ADDAX(2) ‘叠加轴2的偏移运动到轴0REPEATGOSUB getoffset ‘计算偏移MOVE(offset) AXIS(2)在轴2上作偏移的运动UNITL IN(2)=ON ‘直到校正结束例3 有一个cambox运动,用一个编码器输入轴(可以是手轮)作主轴,其实现方法:用一个虚拟轴做主轴,执行cambox运动。
把编码器输入的脉冲输入加到这个虚拟轴上。
' 轴0执行凸轮运动,轴2做主轴' 轴1有一个编码输入子板' 轴2是虚拟轴SERVO AXIS(1)=OFFADDAX(1) AXIS(2) ’把编码器输入的脉冲输入加到这个虚拟轴上。
...CAMBOX(1000,1100,4,600,2) AXIS(0) ’ 轴0执行凸轮运动,轴2做主轴AXIS类型:修改指令语法: AXIS(轴号)说明: AXIS修改设置单轴运动指令或单轴参数读写。
AXIS参数在命令行或程序行特别有效。
注意:如果需要修改下面的所有指令的作用轴应该用BASE指令参数:轴号任何有效的BASIC表达式,指定轴号。
注意:AXIS指令可用于修改以下指令的轴参数:ADDAX,CAM,CAMBOX,CANCEL,CONNECT,DATUM,DEFPOS,FORWARD,MOVEABS,MOVECIRC,MOVELINK,MOVE,MOVEMODIFY,REVERSE,REGIST,WAIT IDLE,WAIT LOADED。
参阅: BASE()例子:例子1>> PRINT MPOS AXIS(3)例子2MOVE(300) AXIS(2)例子3REPDIST AXIS(3)=100注意:请注意上面例子中执行动作和参数读写时在写法上的区别。
BASE类型:运动控制指令语法: BASE(轴1,轴2,轴3)说明: BASE指令用于导向下一个运动指令轴的参数读/写入特定轴或轴组,设置的缺省值依次为:0,1,2…每一个过程有其自己的BASE基本轴组,每个程序能单独赋值。
Trio Basic 程序与控制轴运动的运动发生器分开。
每个轴的运动发生器有其独立的功能,因此每个轴能以自己的速度、加速度等进行编程,单独运动,同时运动,或者通过插补或链接运动链接在一起。
AXIS()命令只要应用正在进行的单命令可以重新导向不同的轴。
而BASE()指令,导向接下来的所有指令,除非用AXIS规定轴号参数:轴号:轴号或轴组号成为新的基准轴排列,即轴号或轴组发送运动指令给多轴指令里的第一个轴。
基本轴的轴数和顺序轴在轴组用于多轴运动。
例子:例子1BASE(1)UNITS=2000 ‘设置轴1的转换因子。
SPEED=100 ‘设置轴1的速度ACCEL=5000 ‘设置轴1的加速度BASE(2)UNITS=2000 ‘设置轴2 的转换因子SPEED=125 ‘设置轴2的速度ACCEL=10000 ‘设置轴2的加速度例子2BASE(0,4,6)MOVE(100,-23.1,1250)注意:轴0移动100单位,轴4移动-23.1单位,轴6移动1250单位。
这些轴会轴0的速度,加速度运动到特定位置。
注意:BASE指令为每一个过程设置一个内部轴队列。
默认值为:0,1,2一直到控制器上的最大轴号。
如果BASE没有指定所有轴,则自动把其他值填入。
首先填入的是比最后制定的轴号大的轴,然后按顺序填入其他轴:例子3在MC216控制器上设置16轴的基本排列。
BASE(2,6,10)设置16轴的内部排列2,6,10,11,12,13,14,15,0,1,3,4,5,7,8,9注意:在命令行处理过程中,通过输入>>BASE(0,2,3,1,4,5,6,7)>>例子是8轴控制器MC206CAM类型:轴指令语法: CAM (start point,End point,Table multiplier,distance)说明: CAM指令按存储在TABLE变量中数组的位置曲线来运动。
Table数组由TABLE指令定义。
Table值是相对于cam运动起始点的绝对位置,并特指编码器的边沿。
运动可由TABLE数组中3到数组容许的任意个点来定义。
运动控制器根据table里的运动曲线通过插补控制电机做出圆滑的运动。
参数: start pointTable数组中使用的第一个元素的地址。
允许Table数组保留多个轨迹或其它信息。
End pointTable数组中最后一个元素的地址。
注意:2个或2个以上CAM()指令同时执行时可以用数组中的相同一组值。
Table multiplierTable倍乘值用于成比例的放缩Table里存储的数值。
因为Table值特定为编码器的沿。
控制运动轨迹的幅值。
Distance用户定义的单位控制整个运动速度。
执行CAM依据当前轴的速度和距离。
控制频率例如:假定程序单位为mm同时速度设置成10mm/s,加速度足够高。
如果定义距离100mm,CAM的执行需要10秒。
速度可以由其他控制指令随时更改。
加速度为当前指定的ACCEL值。
注意为了跟随CAM轨迹,ACCEL参数必须比SPEED参数大1000倍。
(假设默认SERVO_PERID是1ms )参阅: ACCEL,AXIS,CAMBOX,SPEED,TABLE例子:假定运动需要遵循以下位置等式:T(x)=x*25+10000*(1-cos(x))上等式中,X是角度。
客户在利用这个例子时应注意上面的算式,在给table赋值时,cos(x)里的x要换算成弧度。
这个例子提供简单的常速摆动。
循环执行需要以下代码。
FOR deg=0 TO 360 STEP 20 ‘用来给table赋值的循环rad = deg * 2 * PI/360 ‘角度转化为弧度x = deg * 25 + 10000 * (1-COS(rad))TABLE(deg/20,x) ‘table赋值NEXT degWHILE IN(2)=ON ‘input 2 为on时,CAM循环CAM(0,18,1,200)WAIT IDLEWEND注:子程序camtable加载以下数据到table数组。
Table位置角度值1 0 02 20 11033 40 33404 60 65005 80 102636 100 142367 120 180008 140 211609 160 2339610 180 2450011 200 2439612 220 2316013 240 2100014 260 1823615 280 1526316 300 1250017 320 1034018 340 910319 360 9000注意:当CAM指令执行时,ENDMOVE参数设成上一运动的结束位置。
例2:电机上安转一个打印模版,上面有0到9十个数字,激光射到哪个数字,哪个数字就会被打印。
需要打印的数字来自PORT1,ASCII码。
编码器是4000个边沿每转,所以数字与数字之间是400。
Camtable从0到1,这样,cammultiplier应该是400的整数倍,这样才能保证在每个位置之间运动。
速度设为10000 边沿/s,每个cam运动周期设为固定0.25s,这样distance参数应该是10000*0.25=2500程序如下:GOSUB profile_genWHILE IN(2)=ONWAIT UNTIL KEY#1 '等待来自port1的数字GET#1,kIF k>47 AND k<58 THEN '是否有效position=(k-48)*400 '转化为绝对位置multiplier=position-offset '计算相对运动'检查反方向运动是否更近IF multiplier>2000 THENmultiplier=multiplier-4000ELSEIF multiplier<-2000 THENmultiplier=multiplier+4000ENDIFCAM(0,200,multiplier,2500) '做cam运动WAIT IDLEOP(15,ON) '触发激光WA(20)OP(15,OFF)offset=(k-48)*400 '计算当前位置ENDIFWENDprofile_gen:num_p=201scale=1.0FOR p=0 TO num_p-1TABLE(p,((-SIN(PI*2*p/num_p)/(PI*2))+p/num_p)*scale)NEXT pRETURNCAMBOX类型:运动控制指令语法:CAMBOX(start point, end point, table multiplier, link distance ,link axis<,link options><, link pos>)说明: CAMBOX指令按存储在TABLE变量中数组的位置曲线来运动。