Power PMAC中运动程序的编写 —— 下
1. 坐标系和轴定义
1.1 轴定义
1.2 坐标系定义
1.3 坐标系及轴的定义例程
2. 运动模式的介绍
2.1 相对模式与绝对模式
2.2 运动模式(直线、圆弧、样条、PVT)
3. 运动程序的编写
3.1 编写流程
3.2 运动程序模板(重要!)
4. 数据跟踪
5. 编程实例
声明
1. 坐标系和轴定义
定义坐标系的两种方法:

坐标轴定义语句,用于将电机映射到具有简单线性数学关系的轴;
运动学子程序,通常用于映射电机和轴之间的非线性关系,或用于非笛卡尔坐标系(如球面);
    对于第2种方法,在《Power PMAC运动控制器 —— 学习笔记4》进行讲解,本文只针对第1种做介绍:

1.1 轴定义
    在PMAC中,运动是通过轴来实现控制的,每个轴可以有多个电机,但一个电机只能指定一个轴。

    轴可以由以下字母来表示:A、B、C、U、V、W、X、Y、Z、AA、BB、CC、DD、EE、FF、GG、HH、LL、MM、NN、OO、PP、QQ、RR、SS、TT、UU、VV、WW、XX、YY、ZZ(注意没有II、JJ、KK),共计32个。

    其中II、JJ、KK是XX/YY/ZZ三维空间的向量名,A、B、C、AA、BB、CC通常被编程为旋转,X/Y/Z、XX/YY/ZZ、U/V/W、UU/VV/WW允许实时的3x3矩阵转换。其运动单位是由用户指定的,在《Power PMAC运动控制器 —— 学习笔记3》一文中已经介绍过。
在这里插入图片描述

轴有4种类型:

笛卡尔坐标系轴,由X/Y/Z、XX/YY/ZZ、U/V/W、UU/VV/WW指定,X/Y/Z、XX/YY/ZZ可实现三维空间的圆弧插补,刀具补偿指定在X/Y/Z
进给轴,默认情况下[x,y,z]是进给轴
旋转轴,由A、B、C、AA、BB、CC指定
运动学轴,采用运动学时要指定的轴,通过I来指定
虚轴,顾名思义,虚拟的不存在的轴,虚轴设定程序在《Power PMAC运动控制器 —— 学习笔记1》一文中已经给出。
    在一般情况下,我们可以狭义的认为一个轴对应一个电机,且可以抛开以上概念,直接指定电机对应的轴关系。如果是非线性的则必须使用逆运动学。

定义语法如下:

undefine  // 清除当前已寻址的坐标系的轴
undefine all	// 清除所有坐标系的轴定义
#n->{axis label}		//指定电机n到{axis label}轴
#n->0		//指定电机n到0轴,即未定义电机4
#1->1000X+500Y	// 线性轴的定义

另外,轴组成的坐标系可以实现平移和旋转,如下例:
在这里插入图片描述
在这里插入图片描述

正确的轴定义应如下图所示:
在这里插入图片描述

例程见1.3

1.2 坐标系定义

    如下图所示,坐标系是由一个或多轴组成的,它是一组电机和一系列电机与坐标轴之间的数学关系,需要联动的轴应该分组到相同的坐标系中,独立运动的坐标轴应该位于独立的坐标系中。
在这里插入图片描述

 对于坐标系的定义,比较简单,从上图可以看出,一个运动程序中可以有多个坐标系,此时运行的是相同的程序。

坐标系是在运动程序Motion Program中定义的,其定义语法如下:

&n	//n代表坐标系序号
&1  // 则代表定义1号坐标系

1.3 坐标系及轴的定义例程

undefine  all // 非必须
&1  // 定义/选择坐标系1
#1->1000X  // 将电机1分配到X轴上,每个用户单元电机走1000个计数
#2->500Y  // 将电机2分配到Y轴上,每个用户单元电机走500个计数

博主经验:
    对于任何一款运动控制器而言,最大联动数直接影响到产品的价格和型号,因此在购买控制器前,应先确定需求并联系技术咨询应该购买什么型号的控制器。

2. 运动模式的介绍
2.1 相对模式与绝对模式
abs: 绝对定位。PMAC会将传入的参数识别为绝对位置,从而进行运动
inc: 相对定位。PMAC按相对值执行
2.2 运动模式(直线、圆弧、样条、PVT)
Linear: 线性插值混合移动
Circle: 以指定的中心或半径和端点作圆周运动
Spline: 使用三次b样条插值器移动
Rapid: 使用pmac顺序的Jog动作。
PVT: 以指定的端点位置、速度和指定的移动时间移动。使用Hermite样条插值(机器人常用)
    在本文中主要讲解Linear和PVT两种模式的区别,更详细的说明请参考手册《Power PMAC Users Manual》。

在使用Linear模式时,如文章开头所提,如果Blending是关闭的状态,给定电机一串轨迹点,电机在执行的时候会出现卡顿现象,这是因为此时没有开启速度插补,到达指定点时电机速度会降为0,因此电机在执行这串轨迹点的过程时是一个不断加速减速的过程(如下图Blending OFF所示);在Blending开启状态,电机会启动速度插补,因此会是一个连续过程,此时位置是连续的,从下图可以看出速度曲线不平滑,因此在多数情况下该模式用于回零或者指定点运动。
在这里插入图片描述

使用示例如下:

linear  // Linear move mode
TM 1000 TA 500 TS 0  // Move time 1000 msec, Acc. Time 500 msec, No S-Curve Time
abs  // Absolute endpoint mode
X 20 Y 10  // Go to X=20, Y=10
  1. 在使用PVT模式时,此时会指定各轨迹点在执行过程中所对应的位置-速度-时间数据,此时速度曲线经过Hermite插值之后是平滑的,因此此模式在机械臂或多轴机床联动控制上最常用

使用语法如下:

pvt {time}  // time为上一点距离该点的时间间隔
{Axis} {Position}:{velocity} // Axis是要运动的轴,Position是相对于上一点绝对位置的增量位置

例程:

undefine  all
&1  // Address C.S. 1
#1->100X    // 100 counts is 1 user unit for X axis
open prog 4  // Open Program 4 buffer and clear
	inc  // Incremental endpoint definition
	PVT 200  // PVT mode with move time T=200 msec
	X 133.333:1000  // Move 1: ΔP=133.333, V=1000
	PVT 100  // Change PVT move time to T=100 msec
	X 100:1000  // Move 2: ΔP=100, V=1000
	X 96.667:900  // Move 3: ΔP=96.667, V=900
	PVT 200  // Change PVT move time to T=200 msec
	X 140:500  // Move 4: ΔP=140, V=500
	PVT 500  // Change PVT move time to T=500 msec
	X 83.333:0  // Move 5: ΔP=83.333, V=0
close  // Close program buffer

在这里插入图片描述
    

从上图我们可以看出,速度曲线是比较平滑的。

注意: 此模式需在相对模式(inc)执行,指定的时间间隔、位置均为相对值

3. 运动程序的编写
3.1 编写流程
step1:定义坐标系、关联电机和轴
step2:创建程序结构体open-close
step3:选择移动模式(Linear, Circle, Spline, Rapid, PVT)
step4:选择绝对(abs)或增量(inc)位置编程模式
step5:配置适当的速度、加速度和时间设置
step6:编写运动程序段
step7:下载运动程序
step8:测试/启动程序,首先伺服使能(#1j/)、电机回零(#1 homez),然后在终端中使用&m bn r命令执行,在PLC程序或者其他程序中可用cmd"&mbnr"或者start m:n来执行
3.2 运动程序模板(重要!)

坐标系号
电机指向
open prog  程序名		// 注意,程序名可为数字和大小写组成的字符串
	绝对/相对编程模式
	移动模式
	移动内容
close

例:
    当程序名称为大小写字母组成的字符串GatherExample时,终端的运行命令应该为:&1b GatherExample r
    此时应该注意,b、r与字符串名字之间应有空格作为分隔符!

&1	// 指定坐标系为坐标系1,即&nbmr中的n
#1->10X	//把电机1与X轴关联起来,比例系数为10

open prog 1	//定义prog程序块,指定程序名称为1,即&nbmr中的m
	local data;	//定义局部变量,使用local关键字声明
	abs			//指定是相对模式还是绝对模式
	linear		//指定运动模式
	TA 500		//加减速参数设置
	TS 500
	X 10		//运动到10的位置,此单位跟设置有关,如果用户单位设置为1,则此处运动到100cts的位置,由于程序开头10倍系数的存在
	dwell 1000	//延时1秒
	X 20

close		//与open相对应的

从上述程序来看,运动程序可分为2个模块:运动关联指定、函数体,其中函数体是open prog {name} - close结构,在函数体内又可分为两部分:运动参数指定和运动指令。对于PVT模式下的模板,请参考以下例程,其他运动模式用法,请参考手册《Power PMAC Software Reference Manual》和《Power PMAC Users Manual》。

undefine  all
&1  // Address C.S. 1
#1->100X    // 100 counts is 1 user unit for X axis
open prog 4  // Open Program 4 buffer and clear
	inc  // Incremental endpoint definition
	PVT 200  // PVT mode with move time T=200 msec
	X 133.333:1000  // Move 1: ΔP=133.333, V=1000
	PVT 100  // Change PVT move time to T=100 msec
	X 100:1000  // Move 2: ΔP=100, V=1000
	X 96.667:900  // Move 3: ΔP=96.667, V=900
	PVT 200  // Change PVT move time to T=200 msec
	X 140:500  // Move 4: ΔP=140, V=500
	PVT 500  // Change PVT move time to T=500 msec
	X 83.333:0  // Move 5: ΔP=83.333, V=0
close  // Close program buffer

4. 数据跟踪


    在测试程序时,如何知道电机正确的按照给定数据执行的?

    我们可以使用数据跟踪工具来对电机执行过程中的数据进行采样监控。

有两种方法可以实现:

  1. 手动采集
    在这里插入图片描述

  2. 在这里插入图片描述
  3. 在这里插入图片描述
  4. 在程序中自动采集
        缓存区大小的设置,从上图左下角红框内可以看到,我们可以根据实际需求设定最大采样时间以及采样周期。
  5. Gather.Enable  = 3;		//无限采集
    Gather.Enable  = 2;		//采集到之前设置的缓冲区大小
    
    Gather.Enable  = 1;		//停止采集;数据收集指针在缓冲区的末尾
    Gather.Enable  = 0;		//停止采集;将收集指针重置为缓冲区的起始点
    
  6. 例子:
  7.  ```
     dwell 0 Gather.Enable  = 2; dwell 0	//	开始采集
     
     Gather.Enable  = 0; dwell 0 		// 停止采集
     ```
    
  8.   对于以上两种方法,采集完的数据处理方式是一样的,同样在绘图界面进行操作,首先点击上传数据,然后通过>>把要绘制的数据添加到数据处理以及绘制框内,最后点击绘制数据即可,此操作需要联机操作,故本文略去详细操作步骤。

    5. 编程实例

  9. &1
    #1->1000X;
    #2->1000Y;
    open prog 1
    	linear; abs; 
    	tm500; ta100; ts100;
    	dwell 0 Gather.Enable  = 2; dwell 0 // 开始采集
    	X0 Y10; 
    	X10 Y10; 
    	X10 Y0; 
    	X0 Y0; 
    	dwell 100; // 延时100ms
    	Gather.Enable  = 0; dwell 0  // 停止采集
    close
    注意:    ① 插补之间如果不加Dwell会超前执行下一条,导致轨迹错误        ②多轴同时联动时,同一时刻各联动轴的数据应写在一行,否则PMAC脚本将按行执行。如下所示,例1将实现X和Y轴的联动,而例2先执行X100,再执行Y100    例1:X100 Y100例2:X100     Y100

声明


    1. 仅为技术分享交流,码字不易,转载请说明出处,违者必究,谢谢合作!
    2. 部分图片来源于PMAC手册,版权归欧姆龙所有。