(二)、运动编程
1. 概述
鉴于运动控制技术不断发展,应用也就变得比以往更为迫切,目前,各种各样的场合均采用伺服系统,如用旋转刀切割材料,在显微镜下对半导体晶片定位,同步贴标器等等。运动控制经常必须与其它事件(如点火继电器,指轮,监控开关等)进行同步。
为了进一步提高速度、精度和技术先进性的需要,新一代智能化运动控制器应运而生,这种控制器具有坐标联动、电子齿轮、板上程序存储器、符号化变量、与外部事件同步的可编程I/O等功能。
DMC运动控制器提供了功能强大且使用方便的编程语言,使用户能快速编程来解决任何运动控制方面的难题。能够把程序下载到DMC存储器,无需主机干预,即可执行。多任务功能同时执行8个用户程序,允许各独立任务同时执行。用DMC来执行复杂程序,让主计算机执行其它任务;不过,即使在程序正在执行中,控制器仍能随时接收来自主计算机的命令。
除标准运动命令外,DMC还提供许多命令,使其做出自行决定,这些命令包含各种跳转、事件触发及子程序。DMC还提供了用于检测、修正系统误差及处理来自外部开关的中断的自动子程序。
为了更高的编程灵活性,DMC提供了用户自定义变量、阵列及算术函数。
2. 命令格式
为了各种运动形态和应用,DMC提供了广泛的指令集,用2字符ASCII
命令代表这些指令,使编程简单得尤如英语ABC。例外,让X、Y轴开始运
动的指令规定为BGXY。
可以用指令来指定运动,对输出编程、检查输入状态,使运动与事件同步,如经过的时间、运动完成或输入等。关于整个命令列表,请参见产品目录中各种型号的运动控制器的对应部分。对于一些特殊应用,也能开发专用指令。
3、运动命令
主计算机能对运动控制器发命令来实现所控制的电机进行的运动。最简单
的运动是下例中所示的梯形包络速度轮廓运动,这个运动完整地由距离、转速、加/减速度来表达。
指定这些运动参数的最基本形式是通过“位置分辨率单位”。
4、运动编程
1)、PTP定位
可以使各轴任意组合以PTP方式运行,只要对各轴分别指定目标位置(PA
或PR)、速度(SP)、加速度(AC)和减速度(DC)即可。任何一个轴的运动均可分别起动和停止。一旦开始运动(BG),控制器就产生梯形速度包络线,在运动期间,可随时改变速度和加速度。例如:我要设备的X轴移动10mm,丝杠螺距为5mm,编码器的分辨率为2500cts/转,经过GALIL四倍频以后,电机旋转一转需要10000cts。X轴移动1mm需要10000/5=2000cts/mm,所以要移动的距离为20000cts。其程序如下:
指令 说明
#A 程序标号
AC2000000 指定加速度
DC2000000 指定减速度
SP20000 指定运动速度
PR20000 指定距离
BGX X轴开始运动
EN 程序结束
执行上述程序,X轴就移动10mm。
2)、 JOG方式
例1、按给定速度一直运行
在JOG方式,对各轴给出JOG速度和方向(JG)、加速度(AC)、减速度(DC),一旦开始运动(BG),控制器就以预定的加速度按梯形包络加速到JOG速度;用平滑处理功能避免速度突变。停止指令(ST)使运动以预定的减速度停止。在运动当中,可随时改变JOG速度、方向、加速度和减速度,用TV指令可随时查询平均速度。例如:一个系统编码器分辩率为4000cts/r,要求电机以600rpm(10r/s)的速度运转, 且必须在100ms内加速到所要求的速度。简单计算表明:速度是40000cts/s,加速度为400000cts/s2。
指令 说明
#A 标号
JG40000 JOG速度
AC400000 加速度
BGX 开始X轴运动
EN 程序结束
执行上述程序以后,X轴按40000cts/s的速度一直运行。
例2、 电位器进行速度控制
要想对电机速度进行控制,连接一个电位器到模拟输入口#1,并读取其电
压值。按模拟输入比例大小设置电机速度,10V输入对应最大速度100,000cts/s;
限制加速度、减速度为500000cts/s2。其程序如下:
指令 说明
#A 标号
JG0 初始速度
AC500000 加速度
DC500000 减速度
BGX 开始运动
#LOOP 标号
JGAN〔1〕*10000 读取电位器电压值并更新速度
JG#LOOP 循环
EN 程序结束
例3、 用输入点启动/停止速度控制
假设,只有等到起动脉冲(用输入口1),X轴开始运动;当检测到该输入点为0时,X轴停止。
指令 说明
#A 标号
JG5000 速度
AI1 等待起动信号
BGX 开始运动
AI-1 等待输入变低
STX 停止运动
AMX 等待X轴完成
EN 程序结束
3)、2D直线和圆弧插补
矢量运动方式(VM)是非常有用的一种运动方式,这种方式能够描述由直线(VP)和圆弧(CR)组成的任意两维轨迹。在运动开始之前,可以给出多达511个直线或圆弧段; 在运动期间,可以发送附加段,无需停止即可实现很长的运动轨迹,对矢量速度(VS)、矢量加速度(VA)、矢量减速度(VD)和运动平滑(VT)进行预先设定;在运动当中,可随时改变矢量速度,允许进给率修调,在拐角处减速,对指定的运动段分配不同速度。通过设定矢量速度为零可以很方便地实现运动期间的暂停,而增大矢量速度到100%来回复正常速度。
用规定运动平面为S和T的CA指令能够使两个坐标轴同时运行矢量方式。用户通过设置两组坐标运动,即能用一个控制器来实现完全分离的坐标系运动任务,它甚至能处理更为复杂的运动控制功能,如防撞运动。
矢量方式的另一个功能是切线跟踪,让第三轴与运动轨迹保持正切,这对于切割刀具而言是非常理想的。通过命令第三轴以相同速率跟随坐标轨迹还能实现螺旋线运动。
例1. 坐标运动
沿图示轨迹运动,起点A向B反时针运动。设矢量速度为匀速:5000cts/s,沿矢量方向的加、减速率:500000cts/s2。
命令 说明
#PATH 标号
VMXY 定义平面为XY
VA500000 加速度
VD500000 减速度
VS5000 矢量速度
VP40000 运动AB
CR500,-90,180 运动BC
VP-1000,1000 运动CD
CR500,90,180 运动DE
VP0,0 运动EA
VE 指示轨迹终点
BGS 开始运动
EN 程序结束
D(-1000,1000) C(4000,1000)
E(-1000,0) A(0,0) B(4000,0)
5)、直线插补
直线插补方式(LM)允许多达8个轴按所定义的直线段(LI)实现任意轨迹。需要定义矢量速度(VS)、矢量加速度(VA)、矢量减速度(VD)和矢量平滑(VT),在运动开始前可给出511个LI段;在运动期间,可以发送附加段,实现无限长度的轨迹跟踪。
例:直线插补
使直角坐标机械手以英制(inch)运动经过以下各坐标点:
P0(0,0,0)
P1(4,2,1)
P2(6,6,2)
P3(8,8,0)
假设各坐标轴的分辨率均为1000cts/inch,设定所需速度为1.2in/s(1200cts/s),加、减速度为100in/s2(100000cts/s2)。
注意:LM方式需要以增量方式定义各运动段。
点 坐标 增量值
P0 0,0,0
P1 4000,2000,1000 4000,2000,1000
P2 6000,6000,2000 2000,4000,1000
P3 8000,8000,0 2000,2000,-2000
程序 说明
#C 标号
LMXYZ 定义XYZ空间
VS1200 矢量速度
VA100000 矢量加速度
VD100000 矢量减速度
LI4000,2000,1000 P0-P1段
LI2000,4000,1000 P1-P2段
LI2000,2000,-2000 P2-P3段
LE 运动终点
BGS 开始运动
EN 程序结束
于VC/C/C++语言的编程及其动态链接库(DLLs)
以下是以C++语言为例编写的一个简单的程序。
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "Dmcwin.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
CDMCWin m_Controller;
long rc;
char szResponse[4096];
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ok(TObject *Sender)
{
int nController = 1;
m_Controller.SetController(nController);
rc = m_Controller.Open();
Label2->Caption = Label2->Caption + AnsiString(rc);
//把X轴的当前位置定义为2600cts
rc = m_Controller.Command("DP2600",szResponse,sizeof(szResponse));
//查询当前X轴电机编码器的位置
rc = m_Controller.Command("TPX",szResponse,sizeof(szResponse));
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ClickClose(TObject *Sender)
{
rc = m_Controller.Close();
Close();
}