
PMAC控制卡
PMAC是可编程多轴控制器(Programmable Multi-Axis Controller)的简称,是美国泰道(Delta Tau Data Systems, Inc )公司生产的功能强大的运动控制器,PMAC是目前世界上功能最强的运动控制器,同时也是当前开放式数控系统控制器的突出代表
泰道公司介绍
泰道公司拥有三十多年丰富的运动控制经验,是首屈一指的创新型、高性能机器控制专家,拥有全球数百万轴的惊人控制能力;自从上世纪90年代初推出第一款基于DSP的8轴的PMAC产品,每三年左右便会推出一款新的产品,如今最新的第七代产品Power PMAC(基于Power PC)已达到惊人的256轴的控制能力。
应用范围
由于其灵活的结构和开放性的编程接口,PMAC有着非常广泛的从最简单的到最复杂的应用,如半导造、航空、通用自动化、机器人控制、半导体生产线自动化、各类数控机床、医药设备、各种测量和定位机具、包装生产流水线自动化等等。以下是在一些公司中的典型的应用:
| Amada | 金属处理 | Hewlett Packard | 制造 |
| American National Can | 贴标签 | Hughes Aircraft | 机器工具 |
| Applied Materials | 半导造 | IBM | 集成电路制造 |
| ATS (Canada) | 专用机器制造 | Kodak | 胶卷处理和包装 |
| Alcon | 激光眼睛治疗手术 | Lawrence Livermore National Lab | 检测 |
| Blue Print Automation | 包装机器OEM | Lockheed | 制造 |
| Boeing | 制造 | Meyer Machine Tool | 沤轮叶片加工 |
| Bryant Grinder | 精密打磨 | M & M / Mars | 包装 |
| Coburn Optical | 镜片打磨 | National Institute of Science and Tech | 精密机床 |
| Cooper Tire | 轮胎制造 | Paper Conversion Machinery Co | 纸处理 |
| Dover Instruments | 制造 / 检测 | Brooks PRI | 水处理 |
| GE Aerospace | 飞行模拟 | Rank Taylor Hobson | 镜片打磨 |
| GE Aircraft | 机械 | SE Huffman | 精密打磨机床 |
| GE Medical | 机床 | Siemens | PLC |
| GE Plastics | 注射成型,等等 | Scott Paper | 包装/纸处理 |
| General Dynamics | 制造 | SIG | 包装 |
| General Tire | 轮胎制造 | Tappistron | 针织簇绒机床 |
| Gilette | 包装/制造 | Varian | 晶片处理 |
| Grinding Machines | 硅晶片打磨 | 3M | 胶卷/胶带处理/包装 |
| Hormel | 食物加工 |
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代码
• 电子齿轮和电子凸轮
• 运动程序旋转缓冲区
• 时基控制
PMAC相关资源
官方网址
泰道总部:www.deltatau.com
泰道中国分公司:www.deltatau-china.com
手册及相关资料
所有手册:http://www.deltatau.com/Manuals/default.aspx
技术笔记:
http://www.deltatau.com/common/support/technotes/technotes.asp?connectionStr=release
应用实例:http://www.deltatau.com/common/support/appex.asp?connectionStr=release
技术热线和Email
请访问相关网址。
论坛和群
论坛:http://forums.deltatau.com/
bbs.gongkong.com 里的PMAC讨论区
群:QQ 1149406
2.PMAC分类及型号说明
按内核功能划分
主要有Non-Turbo PMAC, Turbo PMAC,Turbo PMAC2和Power PMAC。
Turbo 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个用户变量
• 支持同时多个接口通讯
Turbo PMAC和Turbo PMAC2的区别
Turbo PMAC2也叫PMAC2型卡,其与Turbo PMAC的主要区别在于伺服接口芯片和一些用于设置相关特性的固件功能。PMAC 2 型伺服芯片可以对驱动控制器软硬件的主时钟信号进行编程配置,PMAC 1型芯片不具有此功能。
这些功能意味着在Turbo PMAC2为核心的控制卡上,用户可以根据需求任意配置伺服环、电流环以及PWM的频率;这一点非常重要,因为不同的控制对象其动态响应特性相差很大。例如,对一个20KW的伺服电机,1KHZ的伺服环比较合适;而对只有5W的特种伺服电机,伺服环频率可能要求在10KHZ以上。
PMAC2型卡目前在市场是主流产品,但逐渐会被Power PMAC取代。
Power PMAC
在Power PMAC以前的PMAC产品都是基于Motorola的DSP,内核采用泰道特有的实时内核,伺服接口芯片为DSPGATE1或DSPGATE2;Power PMAC采用嵌入式Power PC作为处理器并采用实时Linux操作系统,伺服接口芯片采用DSPGATE3。由于采用浮点芯片替代整数芯片,计算能力获得了质的提升。显著的表现是最大轴数由32轴提高到了256轴。
采用Power PMAC为内核的产品保持了向前兼容性,意味着以前采用Turbo PMAC2为内核的产品可以被无缝的替换掉。
按架构划分及型号说明
主要分为板级产品、系统级产品和现场总线产品。
板级产品
●总线级插卡产品:
型号: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
系统级产品
●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)驱动器,于计算机运行,可以完全取代原来的控制器+伺服器结构,并提供紧凑(四轴体积:144mm×178mm×391mm,重量:4.4Kg,功率:2KW/轴)的系统级解决方案;是数控机床集成商的理想的选择。
Geo Brick(90~240VAC) Geo Brick LV(12~80VDC)
●数控系统
型号:Advantage400、Advantage900
泰道的CNC产品,操作界面类似西门子840D;硬件上配合UMAC或者Clipper(需要双端口RAM选项)使用。
Advantage 900
MACRO现场总线产品
型号: Turbo PMAC2 PCI Ultralite、Turbo PMAC2 VME Ultralite、Turbo PMAC2 Ethernet Ultralite, UMAC MACRO CPU。
泰道采用MACRO作为伺服器和控制器之间的现场总线,介质既可以采用光纤,也可以采用RJ45。
3.典型运动控制卡介绍
这里介绍用途最广泛的Clipper和最新产品Power UMAC。
Clipper
Clipper是基于Turbo PMAC2内核的一款大众型产品,结合了4轴全功能运动控制(脉冲加方向、模拟量和全数字PWM输出于一体)32路本地数字I/O、可任意扩展多至2048路远达百米的远程数字I/O、8路12位/16位可选ADC输入、4路额外12位+/-10V DAC输出和两路手轮通道。
Clipper的主要功能及特点:
• 4轴插补联动(单轴伺服频率最高30kHz)
• 所有轴都可以运行或联动
• 可同时运行16个运动程序和个PLC程序
• 简单易用的高级语言编程
• 直线、圆弧、样条和PVT插补
• S曲线加减速和动态前瞻控制
• 2D和3D坐标平移和旋转
• 非直角坐标系嵌入式正逆解
• 空间任意平面刀具半径补偿
• 螺距补偿、反向间隙补偿和力矩补偿
• 高速高精度位置捕捉(25ns)和位置比较(100ns)
• 共振抑制(高频陷波、中频前置滤波、低频电子惯量)
• 用户自定义伺服算法
• 龙门双驱交叉耦合自动纠偏
• G、M、T、D代码
• 伺服环级联(张力控制、自动调高等)
• A/B相正交编码器1/T细分
• 电子齿轮和电子凸轮
• 运动程序旋转缓冲区
• 时基控制
• 可连接全数字直接PWM驱动器
Clipper最多可以扩展到32轴,每四轴需要添加一款扩展卡。
Power PMAC
Power PMAC作为泰道的最新产品,其功能异常强大,主要表现如下:
●卓越的运算能力:
256轴插补联动(所有轴可以运行,伺服频率1~120KHZ)
128个坐标系(数控中的通道),每个坐标系支持32轴
同时运行16个运动控制程序、32个实时PLC(扫描时间可调,最高可达5us)和32个 后台PLC(扫描时间小于100us)
位浮点运算
●杰出的运动控制功能:
直线、圆弧(椭圆、螺旋、螺纹)、样条和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的配件是否齐全,全部配件包括:
| 名称 | 数量 | 名称 | 数量 | |
| IMAC 400 | 1个 | TB2端子 | 1个 | |
| 电源线 | 1条 | IMAC CD | 1张 | |
| TB3端子 | 1个 | 其它 | 无 |
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.典型应用实例分析
Clipper或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
稍微复杂的运动程序
;******************** 设置和定义 ********************
&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 10 cm (=10,000 cts) positive
DWELL500 ; Hold position for 1/2 sec
X-10 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
具有分支的运动程序
;******************** 设置和定义**********************
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
简单的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 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
旋转缓冲区
旋转缓冲区用于从上位机向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
; 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 ;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
PLC 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
实时运动数据采集
实时采集数据,需要首先用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
运动学正逆解应用
此例解释如何直接从工具端运动映射到电机的运动;对象为一个两轴的机器人臂;工具端在XY坐标系中定义;A 和 B 定义为角度 (电机位置);最终目的是在运动控制程序中直接指定工具端XY位置而不是电机位置。L1 = 4 英尺, L2 = 3 英尺。
正向运动学方程:
逆向运动学方程:
注意:不失一般性,这里只讨论第一象限。
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都是过时的通讯函数库,泰道不再提供技术支持。
●人机接口软件
PMAC NC Pro2: 数控专用软件
HMI:类似于组态软件的人机接口开发软件。
