编写一个运动程序
前面我们已经知道了怎么定义一个坐标系,现在我们可以开始先建立一个坐标系1,再编写一个简单的运动程序,先来看一个例子。
undefine all // 清除所有坐标系定义
&1 //定义一个坐标系
#1->x //将1号电机分配给X轴
#2->y //将2号电机分配给Y轴
#3->z //将3号电机分配给Z轴
open prog 1 //打开程序1
linear abs //直线绝对值运动模式
ta 300 ts 100 td 300 f 30 //加速度时间为300ms S型曲线时间为100ms 减速度时间为300 进给速度为30
x 0 y 0 z 10 //X移动10个用户单元 Y不移动 Z移动10个用户单元
x 10 y 10 z 10
x10 y0 z10
x0 y 10 z 0
close //关闭运动程序
运动程序格式
所有的动作程序都必须有一个打开陈述(open prog ****)和一个结尾陈述(close),程序名可按自己功能定义,e.g.open prog Montion_Proggram
运动模式
运动模式分为5种,分别为linear,pvt, circle,spline,rapid,官方解释如下:
-
linear
线性插值混合运动。梯形速度与时间的关系,笛卡尔坐标系下的直线路径。 -
pvt
以指定的端点位置和速度和指定的移动时间进行移动。对抛物线速度与时间的关系使用厄米-样条(一种插值算法)路径。 -
circle
以指定的中心或半径和终点作圆周运动。 -
spline
样条模式提供三次b样条(三次位置与时间的微分方程)将轴上的一系列点混合在一起。 -
rapid
主要目的是极小时间点对点移动,给定速度,加速度,和冲击约束,快速是唯一可以从PLC程序命令的移动模式。
位置模式
- abs
使用绝对定位 - inc
使用增量式定位
移动参数
-
对于线性和圆周运动模式
加速时间(Ta)
减速时间(Td)
S型曲线时间(Ts)
移动时间(Tm)
以上参数单位均位毫秒(ms)
如果是进给轴,移动时间是进给速率(F),单位是:用户单位/Coord[x].FeedTime。(可使用FRAX函数定义进给轴) -
对于样条模,每个样条移动包含3段持续时间,指定段时间可可改变方法
spline{data0} :将3段时间设置为{data0}
spline{data0}spline{data1} :将T0设置为{data0},T1和T2为{data1}
spline{data0}spline{data1}spline{data2} :将T0设置为{data0},T1为{data1},T2为{data2}
计算和执行移动段0,并暂时计算段1和段2,但尚未执行,下一个程序样条移动可以改变这些时间(它的T0是这个移动的T1;它的T1是这个移动的T2) -
对于PVT模式
pvt {Time}
{Axis}{Position}:{Velocity}
Inc // 增量移动
pvt 1000 // 1000 ms移动时间
X 20:1.5 //X点为20个用户单位,点速度为1.5进给单位
运动程序例子
上面讲解了几种运动模式及与运动模式相关的尝试,下面是一个线性运动的例子。
open prog Motion_Program
linear abs //线性绝对值
ta 300 ts 100 td 300 f 30 加速度时间300 s型曲线时间100 减速时间300 矢量轴进给速30
dwell 1 //等待1ms,dwell与普通的延时不同,dwell不会对后面的移动或逻辑进行计算或判断
X 12.0666623184884703 Y -2.55370140075683594 Z 175.31781379350133
X 12.0667004654611265 Y -2.55370140075683594 Z 342.974248567900133
dwell 0
call Timer(m89) //一个延时子程序
X 12.0666733527865606 Y -2.55370140075683594 Z 278.997280101779666 A -0.432743549346923828
X 12.0666619086947637 Y 87.0913314819335938 Z 278.998695116046633 A -0.432743549346923828
call Timer(10)
X 12.0666623184884703 Y -2.55370140075683594 Z 175.31781379350133 A -0.43274688720703125
dwell 0
m86=0;
m87=0;
close
线性移动参数说明
TA TS TM F Frax
- TA:混合移动(线性和圆形模式)之间的部分指令加速时间,以及这些移动从开始到停止的时间
- TS:指定在线性和圆形模式混合移动中在s曲线加速度中花费的总加速时间的开始和结束时间
如果Ta>=Ts
总 加 速 时 间 = T a + T s 总加速时间=Ta+Ts 总加速时间=Ta+Ts
如果Ta<Ts
总 加 速 时 间 = 2 × T s 总加速时间=2\times Ts 总加速时间=2×Ts
如果Td>=Ts
总 加 速 时 间 = T d + T s 总加速时间=Td+Ts 总加速时间=Td+Ts
如果Td<Ts
总 加 速 时 间 = 2 × T s 总加速时间=2\times Ts 总加速时间=2×Ts - TM:线性模式和圆形模式在加速开始和减速开始之间所需要的时间。
如果Tm>=总的加减速时间
总 移 动 时 间 = T m + 总 的 加 减 速 时 间 总移动时间=Tm+总的加减速时间 总移动时间=Tm+总的加减速时间
如果Tm<总的加减速时间
总 移 动 时 间 = 2 × 总 的 加 减 速 时 间 总移动时间=2\times 总的加减速时间 总移动时间=2×总的加减速时间 - F:为线性和圆形模式混合移动设置命令速度[用户单位/Coord[x].FeedTime]
速度单位:(用户距离单位/用户时间单位)
用户距离单位:(在轴中定义)
用户时间单位:(在Coord[x].FeedTime参数定义)
如果用户距离单位时mm,Coord[x].FeedTime = 1000(默认值),F 10表示10mm/s
F {velocity} //指定进给轴的速度
F 10
Frax(Axes) // 矢量进给轴定义
Frax(x,y,z)
当使用F时,TM的值如下计算:
T
M
=
总
的
距
离
F
−
总
的
加
减
时
间
TM=\frac{总的距离} {F} -总的加减时间
TM=F总的距离−总的加减时间
当定义TM而不是F时,F最大值为:
F
m
a
x
=
匀
速
的
距
离
T
M
Fmax=\frac{匀速的距离}{TM}
Fmax=TM匀速的距离
- Frax:指定哪些坐标轴在进给量计算中
当在一个移动中涉及多个轴时,例如XYZ笛卡尔坐标系中,需要将距离计算指定为用于移动时间计算的向量长度,:任何非进给轴移动与进给轴移动在同一条线上,将在相同的时间内完成.
e.g.
Frax(x,y,z):表示距离从X, Y, Z轴计算(默认值)
矢 量 距 离 = X 2 + Y 2 + Z 2 矢量距离=\sqrt{X^2+Y^2+Z^2} 矢量距离=X2+Y2+Z2
Delay Dwell的区别
Delay
- 如果延迟发生在混合移动之后,则该移动的TA减速时间发生在延迟时间内,而不是之前
- 如果指定的延迟时间小于当前有效的加速时间(TA或2*TS),整个延迟将在加速期间发生,实际上根本不发生
- :延迟的实际时间会随着时间基数的变化而变化(当前%值,来自任何源)
- 在延迟期间,PMAC会预先计算即将到来的移动(以及它们之前的线路)
Dwell
- 如果上一个是混合移动,在暂停时间开始之前会有一个TA时间减速到停止
- 对变化的时间基不敏感,它总是在实时运行(Sys.ServoPeriod参数所定义)
- 在Dwell期间,Power PMAC不会预先计算即将到来的移动(以及它们之前的程序行),它会等待,直到完成后开始进一步的计算
同步变量赋值
由于PMAC对与移动无关的数值计算进行了预先处理,因此通常的变量分配可能会在用户预期之前执行,若要强制在下一个移动开始时进行变量分配,请使用同步变量赋值,就像一个普通的变量赋值,但是在赋值表达式中使用==而不是=,可以用于global, csglobal或ptr变量(除了自分配的prt变量)
ClearGlue == 1 //当运动开始时,变量输出1
X 12.0667004654611265 Y -2.55370140075683594 Z 342.974248567900133 A -0.43274688720703125
ClearGlue == 0
X 12.0666733527865606 Y -2.55370140075683594 Z 278.997280101779666 A -0.432743549346923828
ClearGlueLidOpen == 0
X 12.0666619086947637 Y 87.0913314819335938 Z 278.998695116046633 A -0.432743549346923828
ToolRotationEnable == 0 // //当运动结束时,变量输出0
结后语
这一节总结了运动程序的一些参数,下一节总结一下PLC脚本程序。
Power PMAC 5-Day Training (Plus Opt ECAT Training)