搜档网
当前位置:搜档网 › PMAC教材

PMAC教材

PMAC教材
PMAC教材

1.PMAC控制卡及泰道公司简介

1.1PMAC控制卡

PMAC是可编程多轴控制器(Programmable Multi-Axis Controller)的简称,是美国泰道(Delta Tau Data Systems, Inc )公司生产的功能强大的运动控制器,PMAC是目前世界上功能最强的运动控制器,同时也是当前开放式数控系统控制器的突出代表

1.2泰道公司介绍

泰道公司拥有三十多年丰富的运动控制经验,是首屈一指的创新型、高性能机器控制专家,拥有全球数百万轴的惊人控制能力;自从上世纪90年代初推出第一款基于DSP的8轴的PMAC产品,每三年左右便会推出一款新的产品,如今最新的第七代产品Power PMAC(基于Power PC)已达到惊人的256轴的控制能力。

1.3应用范围

由于其灵活的结构和开放性的编程接口,PMAC有着非常广泛的从最简单的到最复杂的应用,如半导体制造、航空、通用自动化、机器人控制、半导体生产线自动化、各类数控机床、医药设备、各种测量和定位机具、包装生产流水线自动化等等。以下是在一些公司中

1.4PMAC特性

PMAC是一台具有独立内存、独立运算操作能力的计算机,采用泰道独有的实时内核(基于DSP的卡)或实时Linux操作系统(基于Power PC的卡)通过存储在自己内部的程序进行单独的操作;它还是一台实时的、多任务的计算机,能自动对任务进行优先等级判别,先执行优先级高的任务。PMAC既可以独立工作亦可按主机的命令进行工作,它和主机的

通讯可以通过串行口也可以通过总线进行,通过总线通讯时,还可以将中断信号引入主机,从而实现非常灵活有效的控制系统。

PMAC可以通过灵活的类似Basic的高级语言(Power PMAC还可以用C语言)控制多轴运动,提供了运动控制、可编程逻辑控制、同主机交互等基本功能;并具有各种现场总线和多种反馈装置接口。

PMAC的最大特点是开放性。允许用户根据自己的用途使用内部寄存器。PMAC的编码器反馈地址、A/D和I /O与内部寄存器一样是统一编址,可以像使用PMAC其它内存一样来操作编码器反馈、A/D和I/O,使用非常方便。内部寄存器和A/D、I/O的地址既可以使用PMAC的默认值,也可以由用户重新定义,以满足不同的需要。

以下是一些基本功能:

?多轴插补联动

?可同时运行多个运动程序和PLC程序

?多种插补方式和S曲线加减速

?空间任意平面刀具半径补偿

?螺距补偿、反向间隙补偿和力矩补偿

?高速高精度位置捕捉(25ns)和位置比较(100ns)

?G、M、T、D代码

?电子齿轮和电子凸轮

?运动程序旋转缓冲区

?时基控制

1.5PMAC相关资源

1.5.1官方网址

泰道总部:https://www.sodocs.net/doc/9f3323247.html,

泰道中国分公司:https://www.sodocs.net/doc/9f3323247.html,

1.5.2手册及相关资料

所有手册:https://www.sodocs.net/doc/9f3323247.html,/Manuals/default.aspx

技术笔记:

https://www.sodocs.net/doc/9f3323247.html,/common/support/technotes/technotes.asp?connectionStr=release

应用实例:https://www.sodocs.net/doc/9f3323247.html,/common/support/appex.asp?connectionStr=release

1.5.3技术热线和Email

请访问相关网址。

1.5.4论坛和群

论坛:https://www.sodocs.net/doc/9f3323247.html,/

https://www.sodocs.net/doc/9f3323247.html, 里的PMAC讨论区

群:QQ 114989406

2.PMAC分类及型号说明

2.1按内核功能划分

主要有Non-Turbo PMAC, Turbo PMAC,Turbo PMAC2和Power PMAC。

2.1.1Turbo PMAC和Non-Turbo PMAC的区别

Non-Turbo PMAC是最早生产的PMAC,在90年代初期生产,其功能相对较弱,已经停产;Turbo PMAC是Non-Turbo PMAC的升级产品,在90年代中后期生产保持了向前兼容的特性,但本身也相对较老。Turbo PMAC也叫PMAC 1型卡,Turbo PMAC和Non-Turbo PMAC的主要区别如下:

?32轴vs. 8轴

?16坐标系vs. 8坐标系

?具正逆解功能

?具前瞻算法

?32,768个用户变量vs. 4096个用户变量

?支持同时多个接口通讯

2.1.2Turbo PMAC和Turbo PMAC2的区别

Turbo PMAC2也叫PMAC2型卡,其与Turbo PMAC的主要区别在于伺服接口芯片和一些用于设置相关特性的固件功能。PMAC 2 型伺服芯片可以对驱动控制器软硬件的主时钟信号进行编程配置,PMAC 1型芯片不具有此功能。

这些功能意味着在Turbo PMAC2为核心的控制卡上,用户可以根据需求任意配置伺服环、电流环以及PWM的频率;这一点非常重要,因为不同的控制对象其动态响应特性相差很大。例如,对一个20KW的伺服电机,1KHZ的伺服环比较合适;而对只有5W的特种伺服电机,伺服环频率可能要求在10KHZ以上。

PMAC2型卡目前在市场是主流产品,但逐渐会被Power PMAC取代。

2.1.3Power PMAC

在Power PMAC以前的PMAC产品都是基于Motorola的DSP,内核采用泰道特有的实时内核,伺服接口芯片为DSPGATE1或DSPGATE2;Power PMAC采用嵌入式Power PC作为处理器并采用实时Linux操作系统,伺服接口芯片采用DSPGATE3。由于采用浮点芯片替代整数芯片,计算能力获得了质的提升。显著的表现是最大轴数由32轴提高到了256轴。

采用Power PMAC为内核的产品保持了向前兼容性,意味着以前采用Turbo PMAC2为内核的产品可以被无缝的替换掉。

2.2按架构划分及型号说明

主要分为板级产品、系统级产品和现场总线产品。

2.2.1板级产品

总线级插卡产品:

型号:Turbo PMAC PCI, Turbo PMAC Lite PCI, PMAC Mini PCI, Turbo PMAC VME,

PMAC2A PC/104,

分别支持PCI、ISA、VME和PC104总线,作为插卡直接插到计算机或其他控制设备的插槽中,由计算机或控制设备供电,离开计算机及相关设备无法独立运行。

VME PC/104 PCI

●独立板卡产品:

型号:Turbo PMAC Clipper

采用串口、USB或者以太网和上位机进行通讯,需要独立的电源进行供电,可以独立于计算机运行;成本较低,目前是中国市场上销售量最大的产品。

Clipper

2.2.2系统级产品

●UMAC:

型号:Turbo UMAC、Power UMAC

UMAC是泰道公司系列产品中的旗舰级产品,独立于计算机运行,采用积木式框架结构(3U标准),支持包括各种编码器、现场总线、驱动器、AD/DA 和I/O的扩展,能在最高层次上满足用户的要求;

例如:

◆用户因为升级原因,需要用正余弦编码器取代正交编码器,只需要将原来

的接口卡拔出,换成对应的正余弦接口卡即可。

◆用户需要用Power PMAC控制卡,只需将原来的Turbo PMAC 控制卡直接

替换既可以。

Turbo UMAC

●智能多轴伺服器

型号:Geo Brick、Geo Brick LV

Geo Brick 是集成了PMAC内核的多轴(4~8)驱动器,独立于计算机运行,可以完全取代原来的控制器+伺服器结构,并提供紧凑(四轴体积:144m m×178mm×391mm,重量:4.4Kg,功率:2KW/轴)的系统级解决方案;是数控机床集成商的理想的选择。

Geo Brick(90~240V AC) Geo Brick LV(12~80VDC)

●数控系统

型号:Advantage400、Advantage900

泰道的CNC产品,操作界面类似西门子840D;硬件上配合UMAC或者Clipper(需

要双端口RAM 选项)使用。

Advantage 900

2.2.3 MACRO 现场总线产品

型号: Turbo PMAC2 PCI Ultralite 、Turbo PMAC2 VME Ultralite 、Turbo PMAC2 Ethernet Ultralite, UMAC MACRO CPU 。

泰道采用MACRO 作为伺服器和控制器之间的现场总线,介质既可以采用光纤,也可以采用RJ45。

3. 典型运动控制卡介绍

这里介绍用途最广泛的Clipper 和最新产品Power UMAC 。

3.1 Clipper

Clipper 是基于Turbo PMAC2内核的一款大众型产品,结合了4轴全功能运动控制(脉冲加方向、模拟量和全数字PWM 输出于一体)32路本地数字I/O 、可任意扩展多至2048路远达百米的远程数字I/O 、8路12位/16位可选ADC 输入、4路额外12位+/-10V DAC 输出和两路手轮通道。

Clipper 的主要功能及特点:

? 4轴插补联动(单轴伺服频率最高30kHz) ? 所有轴都可以独立运行或联动

? 可同时运行16个运动程序和64个PLC 程序 ? 简单易用的高级语言编程

? 直线、圆弧、样条和PVT插补 ? S曲线加减速和动态前瞻控制 ? 2D和3D坐标平移和旋转 ? 非直角坐标系嵌入式正逆解 ? 空间任意平面刀具半径补偿

? 螺距补偿、反向间隙补偿和力矩补偿

? 高速高精度位置捕捉(25ns )和位置比较(100ns)

? 共振抑制(高频陷波、中频前置滤波、低频电子惯量)

MACRO Fiber Optic Ring

?用户自定义伺服算法

?龙门双驱交叉耦合自动纠偏

?G、M、T、D代码

?伺服环级联(张力控制、自动调高等)

?A/B相正交编码器1/T细分

?电子齿轮和电子凸轮

?运动程序旋转缓冲区

?时基控制

?可连接全数字直接PWM驱动器

Clipper最多可以扩展到32轴,每四轴需要添加一款扩展卡。

3.2Power PMAC

Power PMAC作为泰道的最新产品,其功能异常强大,主要表现如下:

●卓越的运算能力:

256轴插补联动(所有轴可以独立运行,伺服频率1~120KHZ)

128个坐标系(数控中的通道),每个坐标系支持32轴

同时运行16个运动控制程序、32个实时PLC(扫描时间可调,最高可达5us)和32个后台PLC(扫描时间小于100us)

64位浮点运算

●杰出的运动控制功能:

直线、圆弧(椭圆、螺旋、螺纹)、样条和PVT插补,回转体表面和球体表面加工

基本S曲线加减速和任意曲线加减速(可限制加加速度)

超前读和超前读回溯

电子齿轮和电子凸轮(时基控制)

高速高精度位置捕捉(25ns)和位置比较(100ns)

非直角坐标正逆解:斜轴功能、刀具中心控制、刀具端和机械手控制

G、M、T、D代码执行并可定制

动态2D或3D平面空间旋转变换

各种1D,2D和3D的补偿表(一阶或三阶插值):螺距补偿、反向间隙补偿、形变补偿和力矩补偿

任意平面刀具半径补偿

A/B相正交编码器12位硬件1/T细分

运动程序旋转缓冲区

●强劲的特殊功能:

伺服环级联:张力控制、自动调高等

共振抑制:高频陷波、中频前置滤波、低频电子惯量

用户自定义伺服算法和换相算法(C语言或脚本语言),支持Matlab,Simulink产生C 代码直接下载到伺服环

龙门双驱交叉耦合自动纠偏

●灵活的开发环境:

专用脚本语言和C/C++语言直接编程,提供接口用其他高级编程语言(VB,C#...)编程用户界面二次开发和第三方应用程序开发

内置的编辑器和调试器

内嵌实时的Linux系统支持任何开源程序

内置支持FTP和HTTP的网络服务器

●完善的接口:

反馈:内置正交编码解码和多种串行编码器(SSI, EnDat, Yaskawa…)解码功能,提供旋转变压器激励、正余弦编码16位插值

输出:模拟量、脉冲方向、四相PWM,或通讯速率高达1.25Gbps的MACRO2现场总线

控制对象:交流/直流无刷、直流有刷、感抗、直线、步进、音圈和压电陶瓷电机以及液压装置

●多样的通讯方式:

多种现场总线:ProfiBus, Devicenet, CANopen, ControlNet, CC-Link, Ethercat

100兆/1000兆以太网和USB2接口,每秒中实现5千运动控制数据包处理

4.典型运动控制卡使用说明

泰道中国分公司将Clipper作为内核,根据中国用户的特性进行本土化工作推出了IMAC400。IMAC400在工业级的外壳中完全光电隔离Clipper,大大提高了控制系统的整体稳定性和可靠性。不仅降低了接线的复杂性,完全屏蔽的工业插头和外壳也大大提高系统的抗干扰能力,最大限度地降低维护及维修成本。

现以IMAC400为例进行使用说明:

1)用户在拆箱后检查IMAC 400的配件是否齐全,全部配件包括:

2)检查IMAC 400侧面标签上的OPT选项是否和订货时所要求的一致

3)IMAC CD上有调试软件PEWIN32PRO2,建议用户在Windows XP系统下安装该

软件。

4)软件安装完成以后,把IMAC 400用交叉网线和用户电脑连接起来,连接完成后给

IMAC 400上电。

5)IMAC 400上电试运行。用户接入220V交流电源和+24V直流电源,观察A+5V、

A+12V、A-12V、D+5V这四个电源指示灯是否正常点亮,风扇是否能正常工作。

6)IMAC 400默认的IP地址是192.6.94.5,用户需要把电脑的IP地址修改为192.6.94.x,

其中x不能是5,否则会造成IP冲突。

7)打开PEWIN32 PRO2软件,配置以太网通讯。在PMAC Devices中新建ETH0,配

置IP为192.6.94.5,配置完成后点击OK。

8)通讯成功后,用户可以进行出厂程序测试。打开文件窗口选择TXT文件,在\IMAC

400 CD\IMAC 400概述目录下选择“出厂测试程序.TXT”文件,点击黄色箭头下

载到IMAC 400中,然后在Terminal窗口中输入以下指令:

enaplc1

i5=2

&1b1r

此时用户可以在Position窗口上观察到4个轴的位置和速度变化。为防止误操作,测试完成后用户需要将以上测试程序用“$$$***”指令清除,然后输入“sav”指令保存。

警告:

1、出厂程序仅供用户测试裸机使用,严禁带电机操作。

2、测试结束后必须使用“$$$***”指令清除该程序,然后输入“sav”指令保存。

9)一切正常后,请参考用户手册进行IMAC400和伺服器间的接线;软件的使用请参

考随机光碟中的软件手册或者到官方网站下载对应的手册。

5.典型应用实例分析

5.1Clipper或IMAC400连接驱动器力矩模式配置及简单程序实例

Close

Delete Gather

;设置DSPGATE的相关频率

I7000 = 1001 ;PWM frequency 29.4kHz, PWM 1-4

I7001 = 5 ;Phase Clock 9.8kHz

I7002 = 3 ;Servo frequency 2.45kHz

I7003 = 1746 ;ADC frequency

I10 = 3421867 ;Servo interrupt time

;设置一号电机

I102 = $78002 ;Command Output Address

;Position Feedback

I7010 = 3 ;Closed loop, X4 CCW

I7016 = 0 ;Output mode: PWM

I169 = 1001 ;DAC limit 10Vdc

I100=1 ;To activate motor

;Example PID Gains

I130=10000 ;P gain = default

I131=3000 ;D gain = default

I132=3000 ;VFF = default

I133=0 ;I gain = default

I134=1 ;I mode = default

I135=0 ;AFF = default

I124=$120001

#1hmz

;设置二号电机

I200=1 ;To activate motor

I202 = $7800A ;Command Output Address ;Position Feedback

I7020 = 3 ;Closed loop, X4 CCW

I7026 = 0 ;Output mode: PWM

I269 = 1001 ;DAC limit 10Vdc

;Example PID Gains

I230=10000 ;P gain = default

I231=3000 ;D gain = default

I232=3000 ;VFF = default

I233=0 ;I gain = default

I234=1 ;I mode = default

I235=0 ;AFF = default

I224=$120001

#2hmz

;设置三号电机

I300=1 ;To activate motor

I302 = $78012 ;Command Output Address ;Position Feedback

I7030 = 3 ;Closed loop, X4 CCW

I7036 = 0 ;Output mode: PWM

I369 = 1001 ;DAC limit 10Vdc

;Example PID Gains

I330=10000 ;P gain = default

I331=3000 ;D gain = default

I332=3000 ;VFF = default

I333=0 ;I gain = default

I334=1 ;I mode = default

I335=0 ;AFF = default

I324=$120001

#3hmz

;设置四号电机

I400=1 ;To activate motor

I402 = $7801A ;Command Output Address ;Position Feedback

I7040 = 3 ;Closed loop, X4 CCW

I7046 = 0 ;Output mode: PWM

I469 = 1001 ;DAC limit 10Vdc

;Example PID Gains

I430=10000 ;P gain = default

I431=3000 ;D gain = default

I432=3000 ;VFF = default

I433=0 ;I gain = default

I434=1 ;I mode = default

I435=0 ;AFF = default

I424=$120001

#4hmz

;简单PLC程序,用于将四个电机置于闭环状态

;发送Enable PLC 2 可以执行

open plc2 clear

cmd"#1j/" cmd"#2j/" cmd"#3j/" cmd"#4j/"

displc2

close

;定义坐标轴并映射电机到坐标轴

&1

#1->1000X ;定义电机1为X轴

#2->1000Y ;定义电机2为Y轴

#3->1000X ;定义电机3为X轴

#4->1000Y ;定义电机4为Y轴

;简单的运动控制程序

OPEN PROG 2 CLEAR

RAPID X-10 Y0

DWE1000

ABS

CIRCLE1

F100

N 100

X-10 Y0 I10 J0

GOTO 100

CLOSE

I5113=10

5.2稍微复杂的运动程序

;******************** 设置和定义******************** &2 ; Coordinate system 2

CLOSE ; Make sure all buffers are closed

#5->1000X ; 1 unit (cm) of X is 1000 counts of motor 5

;******************** 运动控制程序*********************** OPEN PROG 2 ; Open buffer for entry, Program #2

CLEAR ; Erase existing contents of buffer

LINEAR ; Blended linear interpolation move mode

INC ; Incremental mode - moves specified by distance TA500 ; 1/2 sec (500 msec) acceleration time

TS250 ; 1/4 sec in each half of S-curve

P1=0 ; Initialize a loop counter variable

WHILE (P1<10) ; Loop until condition is false (10 times)

X10 ; Move X-axis 10 cm (=10,000 cts) positive

DWELL500 ; Hold position for 1/2 sec

X-10 ; Move X-axis back 10 cm negative

DWELL500 ; Hold position for 1/2 sec

P1=P1+1 ; Increment loop counter

ENDWHILE ; End of loop

CLOSE ; Close buffer - end of program

; 终端窗口中输入下列指令运行运动控制程序

&2 B2 R ; Coordinate System 2, point to Beginning of Program 2, Run

5.3具有分支的运动程序

;******************** 设置和定义**********************

CLOSE ; Make sure all buffers are closed

&1 ; Coordinate System 1

#2->27.77777778A ; A-axis is programmed in degrees

; 10,000 (cts/rev) / 360 (deg/rev)

M1->Y:$FFC2,8,1 ; Variable M1 assigned to Machine Output 1

M11->Y:$FFC2,0,1 ; Variable M11 assigned to Machine Input 1

I5190=60000 ; Feedrate (speed) units are per minute

; (1 min=60000 msec)

;******************** 运动控制程序***********************

OPEN PROG 3 CLEAR ; Prepare buffer for entry

HOME2 ; Find home position for motor

LINEAR ; Blended linear interpolation move mode

F20 ; Speed of 20 degrees per minute

Q50=0 ; Initialize a loop counter variable

WHILE (Q50<36) ; Loop until condition is false (36 times)

IF (M11=1) ; Machine Input 1 on?

A((Q50+1)*10) ; Positive move to calculated position

ELSE ; Do the following branch for false IF

A(-(Q50+1)*10) ; Negative move to calculated position

ENDIF

DWELL20 ; Hold position for 20 msec

M1=1 M1=0 ; Pulse output on and off quickly

DWELL20 ; Hold position for 20 msec

A0 ; Return to home position

Q50=Q50+1 ; Increment loop counter

ENDWHILE ; End of loop

CLOSE ; Close buffer - end of program

; 终端窗口中输入下列指令运行运动控制程序

&1 B3 R ; Coordinate System 1, point to Beginning of Program 3, Run

5.4简单的G代码运动程序

此例子介绍简单PMAC G代码程序。Gxx 被解释成PROG 1000的标号为Nxx000 的子程序;Mxx被解释成PROG 1001的标号为Nxx000 的子程序;用户如果使用标准G 代码则无需去些这些子程序,因为泰道公司已经提供了标准的程序;本例中写的子程序只是为了解释工作原理;用户如果要定制G代码,可以修改对应的子程序。

;******************** 设置和定义**************************

OPEN PROG 5 CLEAR ; Prepare motion program 5 for entry

G17 G90 ; XY plane, absolute move spec

G97 S1800 ; Set spindle speed of 1800 rpm

F500 ; Cutting speed 500 mm/min

G00 X10.00 Y5.00 ; Rapid move to (10, 5)

M03 ; Start spindle

G04 P2.0 ; Wait 2 seconds

G01 Z0 ; Lower cutter

X30.25 Y5.00 ; Linear XY move

G03 X35.25 Y10.00 J5 ; CCW arc move

G01 X35.25 Y50.10 ; Linear move

G03 X30.25 Y55.10 I-5 ; CCW arc move

G01 X10.00 Y55.10 ; Linear move

G03 X5.00 Y50.10 J-5 ; CCW arc move

G01 X5.00 Y10.00 ; Linear move

G03 X10.00 Y5.00 I5 ; CCW arc move

G01 Z5 M05 ; Cutter up, stop

G00 X0 Y0 ; Back to home

CLOSE

;*****************************************************************

Motion program 1000 contains the G-Code subroutines

OPEN PROG 1000 CLEAR ; Prepare buffer 1000 for entry

RAPID RETURN ; G00 Rapid mode (N0 is implied)

N01000 LINEAR RETURN ; G01 Linear interpolation mode

N02000 CIRCLE1 RETURN ; G02 Clockwise circle mode

N03000 CIRCLE2 RETURN ; G03 Counterclockwise circle mode

N04000 READ(P) ; G04 Dwell for P seconds

IF (Q100 & 32768 > 0) ; P parameter specified?

DWELL (Q116*1000) ; PMAC specifies dwell time in msec

ENDIF

RETURN

N17000 NORMAL K-1 RET ; G17 Specify XY plane

N18000 NORMAL J-1 RET ; G18 Specify ZX plane

N19000 NORMAL I-1 RET ; G19 Specify YZ plane

N90000 ABS RET ; G90 Absolute mode

N91000 INC RET ; G91 Incremental mode

N97000 READ(S) ; G97 Spindle speed set

IF (Q100 & 262144 > 0) ; S parameter specified?

I422=Q119/30 ; #4 jog speed in cts/msec

ENDIF

RETURN

CLOSE

;*****************************************************************

Motion program 1001 contains the M-Code subroutines

OPEN PROG 1001 CLEAR ; Prepare buffer 1001 for entry

N03000 CMD "#4J+" RET ; Start spindle clockwise (closed loop)

N04000 CMD "#4J-" RET ; Start spindle counterclockwise (ditto)

N05000 CMD "#4J/" RET ; Stop spindle

CLOSE

; 终端窗口中输入下列指令运行运动控制程序

&1 B5 R ;Coordinate System 1, point to Beginning of Program 5, Run

5.5旋转缓冲区

旋转缓冲区用于从上位机向PMAC传送大量的动态数据,例如机器人视觉系统和高速高精数控机床,其原理是采用缓存接受和存储动态数据。

; This example Motion Program demonstrates:

; A) Using the Rotary Buffer

; B) Calculating Rotary Buffer size

; C) Using G-Codes (G0, G1) to command motion

; D) Using M-codes to control PMAC digital I/O

; E) Download 'associated' files using '#include'

; The '&1R' command (line 49) will cause this program to begin running

; The 'Stop' command (line 76) will end the Motion Program

;

; Calculating Rotary Buffer size:

; Estimate 1.5 'words' per axis move

; Estimate 1 'word' per other commands

; ; 12 x 1.5 = 18

; 12 x 1 = 12

; -----

; 30

; &1 DEFINE ROTARY 30

Close

Delete Gather

Delete Rot

;;Included files provide G-Code & M-code definitions

#include "G-Code_Sub.pmc" ;download G-code definitions, Prog 1000

#include "M-Code_Sub.pmc" ;download M-code definitions, Prog 1001

&1 ;Define Coordinate System

#1->2000X ;Define Motor #1 - X axis

#2->2000Y ;Define Motor #2 - Y axis

I5192=1 ;Isx92 ;Disable 'Blending' for C.S #1

&1 DEFINE ROTARY 30 ; Create C.S. 1 rotary buffer

&1 B0 ; Point C.S. 1 to rotary buffer

&1R ;Start the Motion Program

OPEN ROT ; Open buffers for entry

G90 ;Absolute positioning

F5 ;Set Feedrate

M05 ;Pen up

G00 X5 Y5 ;Move to start

M03 ;Pen down

G01 X10 Y5

G01 X10 Y10

G01 X5 Y10

G01 X5 Y5

M05 ;Pen up

G00 X0 Y0 ;Move to machine zero

Stop ;Stop the Motion Program

CLOSE

5.6PLC I/O实例

此例子展示如何使用PLC程序操作PMAC的通用I/O;程序开始时把变量M1~M14映射到对应的机器I/O的地址;实际应用中用户只需选择对应的PMAC卡并下载缺省的M变量映射既可以,不需要这样一个一个定义M变量。

注意:不同的PMAC卡对应的I/O地址不一样,错误的M变量映射可能导致不可知的后果。

;************************** 设置和定义***************************

CLOSE ; To ensure these are on-line

M1->Y:$FFC2,8,1 ; Machine Output 1

M2->Y:$FFC2,9,1 ; Machine Output 2

M3->Y:$FFC2,10,1 ; Machine Output 3

M4->Y:$FFC2,11,1 ; Machine Output 4

M11->Y:$FFC2,0,1 ; Machine Input 1

M12->Y:$FFC2,1,1 ; Machine Input 2

M13->Y:$FFC2,2,1 ; Machine Input 3

M14->Y:$FFC2,3,1 ; Machine Input 4

M20..39->* ; Self-referenced flag variables

;************************** PLC Program ********************************** CLOSE ; Make sure other buffers closed

OPEN PLC 5 ; Open buffer for editing

CLEAR ; Erase existing contents

;第一个分支基于1号输入,对应的P1000变量被设置,它可以是位置、速度或时间等等.

IF (M11=1) ; Machine Input 1 true?

P1000=5000 ; If so, set to this value

ELSE

P1000=500 ; If not set to this value

ENDIF

; 此分支基于2号输入,当其值为真时,P8计数值增加一位

IF (M12=1) ; Machine Input 2 true?

IF (M22=0) ; Not true last time thru?

P8=P8+1 ; Have rise edge, so increment

M22=1 ; Note as true for next time thru

ENDIF

ELSE ; MI2 is not true

M22=0 ; Note as not true for next time thru

ENDIF

;标志位满足一定条件时,对应的输出被设置,运行对应的电机

IF (M23=1 AND M24=1) ; First two flags true?

AND (M25=1 AND M26=1) ; Second two flags true?

M1=1 ; Then set output

COMMAND"#1J+" ;手动运行1号电机

COMMAND"#2J/" ;手动停止2号电机

ELSE

M1=0 ; Otherwise clear output

COMMAND"#2J+" ;手动运行2号电机

COMMAND"#1J/" ;手动停止1号电机

ENDIF

CLOSE ; Close the buffer

ENABLE PLC 5 ; Enable operation of program

5.7实时运动数据采集

实时采集数据,需要首先用I5000变量指定用于存储采集数据的缓冲区内存起始地址和模式,然后用I5001–I5048变量指定要采集数据源的地址,最后采用I5049指定采集周期;实际应用中没有这么复杂,采用PMAC PLOT软件可以方便的实现这些设置。

;********************* Set-up and Definitions *********************/

Undefine All ; Undefine all coordinate definitions

End Gat ; End any data gathering that might be happening presently Del Gat ; Erase any defined gather buffer Close ; Make sure all buffers are closed &1 ; Coordinate System 1

#1->1000X ; Assign motor 1 to the X-axis - 1 program unit ; of X is 1000 encoder counts of motor #1

/********************* Motion Program Text *************************/ Open Prog 1 Clear

; Open buffer for program entry, Program #1 Linear ; Blended linear interpolation move mode Abs ; Absolute mode - moves specified by position TA 500 ; Set 1/2 sec (500 msec) acceleration time TS 0 ; Set no S-curve acceleration time F 5 ; Set feedrate (speed) of 5000 units(cts)/sec CMD"End Gat" ; Stop gathering CMD"Del Gat" ; Deletes the gather buffer CMD"Def Gat" ; Allocates all the available memory as gather buffer Dwell 0 ; Force CMD lines to execute CMD"Gat" ; Starts gathering of the data Dwell 0 ; Force CMD lines to execute X 10 ; Move X-axis to position 10000 Dwell 500 ; Stay in position for 1/2 sec (500 msec) X 0 ; Move X-axis to position 0 Dwell 0 ; Force CMD lines to execute CMD"End Gat" ; Send On-line command to stop data gathering Dwell 0 ; Force CMD lines to execute Close ; Close buffer - end of program

5.8 运动学正逆解应用

此例解释如何直接从工具端运动映射到电机的运动;对象为一个两轴的机器人臂;工具端在XY 坐标系中定义;A 和 B 定义为角度 (电机位置);最终目的是在运动控制程序中直接指定工具端XY 位置而不是电机位置。L1 = 4 英尺, L2 = 3 英尺。 正向运动学方程:

逆向运动学方程:

注意:不失一般性,这里只讨论第一象限。

1212X L cos(A)L cos(A B)

Y L sin(A)L sin(A B)=++=+

+2222

112122

2221X Y L L B cos 2L L A atan2(Y,X)cos --??

+--=+ ?????=-

End Gat

Del Gat

Close

//=======================相关设置===================================//

//运动学相关变量,这些变量是固定的不变的。

#define KinPosX Q7 ; X-axis pos in mm for kinematics

#define KinPosY Q8 ; Y-axis pos in mm for kinematics

#define Mtr1Pos P1 ; Motor#1 pos in cts for kinematics

#define Mtr2Pos P2 ; Motor#2 pos in cts for kinematics

// 采用宏定义代替坐标系变量使得编程更加直观

#define Length1 Q91 ; Linkage 1 length (inches)

#define Length2 Q92 ; Linkage 2 length (inches)

#define Mtr1SF Q93 ; Motor#1 Scale Factor, Counts/User units (deg)

#define Mtr2SF Q94 ; Motor#2 Scale Factor, Counts/User units (deg)

#define TempA Q95 ; Temporary holding register for A calculation (deg)

#define TempB Q96 ; Temporary holding register for B calculation (deg)

#define Xsq_p_Ysq Q97 ; X^2+Y^2

#define L1sq_p_L2sq Q98 ; L1^2+L2^2

#define L1sq_s_L2sq Q99 ; L1^2-L2^2

#define TempCosB Q100 ; cos(B) value

Length1=4 ; Linkage 1 length, 4 inches --UserInput Length2=3 ; Linkage 2 length, 3 inches --UserInput

Mtr1SF=2000/360 ; Motor#1, cts/deg --UserInput

Mtr2SF=2000/360 ; Motor#2, cts/deg --UserInput

L1sq_p_L2sq=Length1*Length1+Length2*Length2

L1sq_s_L2sq=Length1*Length1-Length2*Length2

// 标志位

#define Mtr1HmComp M145 ; Motor#1 Home-complete bit (suggested M-variable)

#define Mtr2HmComp M245 ; Motor#2 Home-complete bit (suggested M-variable)

#define CS1_RunTimeError M5182 ; Coordinate System 1 run-time-error bit (suggested M-variable)

Mtr1HmComp->Y:$0000C0,10,1 ; #1 Home-complete bit

Mtr2HmComp->Y:$000140,10,1 ; #2 Home-complete bit

CS1_RunTimeError->Y:$00203F,22,1 ; &1 Run-time-error bit

Undefine all

&1 ; Addressing Coordinate System 1

//========================= 正向运动学================================ // Open Forward Clear

If(Mtr1HmComp=1 and Mtr2HmComp=1) ; Homed?

TempA=Mtr1Pos/Mtr1SF ; Motor 1 position in deg

TempB=Mtr2Pos/Mtr2SF ; Motor 2 position in deg

KinPosX=Length1*cos(TempA)+Length2*cos(TempA+TempB)

KinPosY=Length1*sin(TempA)+Length2*sin(TempA+TempB)

Else

CS1_RunTimeError=1 ; Abort, and set runtime if not homed

Endif

Close

//============================逆向运动学============================== // Open Inverse Clear

Xsq_p_Ysq=KinPosX*KinPosX+KinPosY*KinPosY

TempCosB=(Xsq_p_Ysq-L1sq_p_L2sq)/(2*Length1*Length2)

If (ABS(TempCosB)<0.9998) ; Valid solution with 1 degree error ?

Q0=KinPosX ; Q0 is atan2 function denominator

TempA=atan2(KinPosY)-acos((Xsq_p_Ysq+L1sq_s_L2sq)/(2*Length1*sqrt(Xsq_p_Ysq))) TempB=acos(TempCosB)

Mtr1Pos=Mtr1SF*TempA

Mtr2Pos=Mtr2SF*TempB

Else

CS1_RunTimeError=1 ;Abort, and set runtime if not homed

Endif

Close

//===============运动控制程序========================================== // End Gat

Del Gat

Close

&1 ; Address Coordinate System 1

I5150=1 ; Isx50 Coordinate System x Kinematic Calculations Enable

I5113=10 ; Isx13 Coordinate System x Segmentation Time (msec)

#1->I ; Use kinematics to calculate Motor# 1 position

#2->I ; Use kinematics to calculate Motor# 2 position

Open Prog 1 Clear

Linear ; Linear move mode

Abs ; Absolute move modal

TA 100 ; Acceleration time 100 msec

TS 0 ; S-curve time 0 msec

TM 1000 ; Move time 1000 msec

X 1.5 Y 0 ; Go to starting position X=1.5 Y=0

CMD "EndGat" ; End previous gathering

CMD "DelGat" ; Delete gathering buffer (release buffer)

CMD "DefGat" ; Define gathering buffer

CMD "Gat" ; Start gathering data

X 2 Y 0 ; Go to X=2 Y=0

Dwell 0 ; Stop 0 msec, stop blending

X 4 Y 0 ; Go to X=4 Y=0

Dwell 0 ; Stop 0 msec, stop blending

X 4 Y 3 ; Go to X=4 Y=3

Dwell 0 ; Stop 0 msec, stop blending

X 2 Y 3 ; Go to X=2 Y=3

Dwell 0 ; Stop 0 msec, stop blending

X 2 Y 0 ; Go to X=2 Y=0

Dwell 1000 ; Wait for 1000 msec

CMD "EndG" ; End gathering data

Close

6.PMAC相关软件

PMAC相关软件在开发过程冲起到了很大的作用,熟悉这些软件的使用将有效的加快开发。

●开发软件

用于设置电机,编写PLC和运动控制程序,调试和发送在线指令;主要有以下几款:PeWin32Pro2:核心开发环境,编写PLC和运动控制程序,发送指令,动态观测窗口。

PMAC Tuning:用于调试电机电流环和伺服环。

PMAC Plotting:采集和绘制各种曲线。

●通讯函数库(PCOMMSERVER)

提供和各种和高级语言开发工具如:.NET, C++, C#, Visual Studio的COM组件接口。

注意:PCOMM32和PTALK都是过时的通讯函数库,泰道不再提供技术支持。

●人机接口软件

相关主题