6.PMAC下位机-下位机编程

PMAC的下位机编程包括三种程序:命令序列程序、运动(Program)程序和PLC程序。

如下图,PMAC中编写程序,直接在File->new新建文件会打开编辑器,所有文件为PMC后缀。


查看当前程序可以在File->Uplaod Programs查看当前已有的Program程序和PLC程序及他们的编号、状态。


1.命令序列程序

上节讲到,PMAC卡中可以使用手动操作,在命令行设置参数状态、控制电机等,但是它一次只能发送一条命令,那么为了一次性运行多个命令序列,即可在PMC程序中如下编写:
[plain]  view plain  copy
  1. i620=200  
  2. i621=20  
  3. i622=10  
  4.   
  5. #6j/  
这里先设置6轴电机的运动参数,然后激活电机,类似的写法经常用于PMAC参数的初始化中。
程序编写完成后,点击Download按钮, 命令系列程序在下载的过程中就会执行

如下图,勾选Show Message Window,打开Mesage窗口



如下图,在Message窗口可以可以看到当前程序是否有错误等,类似C语言编译过程。


命令序列经常和PLC程序及运动Program程序混用,下面会说明。

2.运动(Program)程序

为了便于编写运动程序,PMAC中使用一个坐标系的概念,比如有6号电机和8号电机,我们在一个的坐标系下将其分别映射到X和Y坐标,如下所示
[plain]  view plain  copy
  1. &1  
  2. #6->819.2Y ;机械手Y向,单位mm,(819.2=8192/10,丝杆导程为10mm)  
  3. #8->819.2X ;机械手X向,单位mm,(819.2=8192/10,丝杆导程为10mm)  
这样我们编程的时候,可以直接把当前运动想成现实坐标系的运动,实际行我们在程序中指定X运动1个单位就是电机运动819.2个脉冲,换算成轴的运动距离就是1mm,这样编写程序简洁易懂。

标准运动程序的模板如下:
[plain]  view plain  copy
  1. &1                      ;坐标系为1  
  2. CLOSE                   ;确认所有缓冲区被关闭  
  3.   
  4. OPEN PROG 40            ;程序号为40  
  5. CLEAR  
  6. ;;;;;;;;;;;;;;;;;;;;;运动程序主体-开始  
  7.   
  8. ;;;;;;;;;;;;;;;;;;;;;运动程序主体-结束  
  9. CLOSE  
这些指令都是命令指令,所以他们都是在程序下载的时候运行,之间的运动程序主体会被写到特定的缓冲区,但是在这时候程序是不运行的。

下面写编写一个简单的程序,如下:
[plain]  view plain  copy
  1. &1  
  2. CLOSE           ;确认所有缓冲区被关闭  
  3. #6->819.2X       ;机械手X向,单位mm,(819.2=8192/10,丝杆导程为10mm)  
  4. #8->819.2Y       ;机械手Y向,单位mm,(819.2=8192/10,丝杆导程为10mm)  
  5.   
  6. #6j/  
  7. #8j/  
  8.   
  9. OPEN PROG 40  
  10. CLEAR  
  11.   
  12. INC             ;增量运动模式  
  13. X(10) Y(10)     ;X正方向前进10mm,Y正方向前进10mm  
  14.   
  15. CLOSE  
注意这里,使用命令序列完成了轴的定义和电机的激活,但是中间的两行运动程序代码只是被写到对应的缓冲区,还没有执行。在terminal窗口输入命令 &1b40r程序才运行。注意一个坐标系下关联的所有电机必须都激活,运动程序才能正常运行。在实际中,轴的定义和电机的激活最好放到单独的命令序列文件中。

下面是一个比较复杂的程序:
[plain]  view plain  copy
  1. &1  
  2. CLOSE               ;确认所有缓冲区被关闭  
  3. #6->819.2X           ;机械手X向,单位mm,(819.2=8192/10,丝杆导程为10mm)  
  4. #8->819.2Y           ;机械手Y向,单位mm,(819.2=8192/10,丝杆导程为10mm)  
  5.   
  6. #6j/  
  7. #8j/  
  8.   
  9. OPEN PROG 40  
  10. CLEAR  
  11.   
  12. ;运动参数设置  
  13. TA(200)             ;ms  
  14. TS(20)              ;ms  
  15. F(50)               ;mm/s  
  16.   
  17. ABS                 ;绝对模式  
  18. Linear              ;直线运动  
  19.   
  20. p1 = 0  
  21. While (p1 < 10)  
  22.   F(50)  
  23.   X(30) Y(10)  
  24.   F(10)  
  25.   X(10) Y(30)  
  26.     
  27.   If (p1 > 2)  
  28.     Return    
  29.   EndIf    
  30.     
  31.   p1=p1+1  
  32. EndWhile  
  33.   
  34. CLOSE  
上面程序的含义就是从当前位置以速度50mm/s直线运动到绝对坐标(30,10)的位置,再从当前位置以速度10mm/s直线运动到绝对坐标(10,30)的位置,如此循环,如果没有If语句的话,循环10次,但是这里加了If语句就只循环2次了。

基本的运动程序就是这样,再复杂的运动程序都是在此基础上延伸出来的。各种运动指令请查 PMAC Software Manual手册,相应的程序编写请查 PMAC User Manual手册。

3.PLC运动程序

在电气系统中,PLC是经常用的控制元件,就是有快速的扫描各个状态,对扫描到的状态变化做相应的处理。他的实时性非常高,简洁可靠。在PMAC中有模拟PLC的功能。
同样对于运动程序中的最后一个实例功能,改写如下:

运动程序:
[plain]  view plain  copy
  1. &1  
  2. CLOSE               ;确认所有缓冲区被关闭  
  3. #6->819.2X           ;机械手X向,单位mm,(819.2=8192/10,丝杆导程为10mm)  
  4. #8->819.2Y           ;机械手Y向,单位mm,(819.2=8192/10,丝杆导程为10mm)  
  5.   
  6. #6j/  
  7. #8j/  
  8.   
  9. OPEN PROG 40  
  10. CLEAR  
  11.   
  12. TA(200)             ;ms  
  13. TS(20)              ;ms  
  14. F(50)               ;mm/s  
  15.   
  16. ABS                 ;绝对模式  
  17. Linear              ;直线运动  
  18.   
  19. p1 = 0  
  20. While (p1 < 10)  
  21.   F(50)  
  22.   X(30) Y(10)  
  23.   F(10)  
  24.   X(10) Y(30)  
  25.     
  26.   p1=p1+1  
  27. EndWhile  
  28.   
  29. CLOSE  


PLC程序:
[plain]  view plain  copy
  1. OPEN PLC 20  
  2. CLEAR  
  3.   
  4. If (p1 = 2)  
  5.   COMMAND "&1b40a"  
  6.   EndIf  
  7.     
  8. CLOSE  
  9.   
  10. enable plc 20  

一般我们让PLC程序始终在后台运行,扫描指定的状态,这里我们在download PLC的时候就激活了PLC程序。这样当在terminal中输入&1b40r运行运动程序时,一旦p1=2,PLC可默认为立即扫描到该状态,这时候就会终止该程序。

这里本来运动程序会运行两个循环,但是由于PMAC的Lookhead的功能,这里只运行了一个循环就中止程序了,先留个悬念,马上讲到。


4.PMAC运动程序Lookhead功能

PMAC在执行的时候会有Lookhead的功能,顾名思义就是前瞻的功能,就是在执行的时候会预先读取执行下面一段代码,对于运动轨迹相关的代码会进行预先计算,变量赋值会提前进行。分析如上运动程序,在第二个循环的时候,预先读取了整个循环内容,即运动指令还没运行时,p1=p1+1就已经被执行了,这时候PLC检测到p1的改变就会中止程序了。
那么这里要怎么做才能避免预读取带来的副作用呢,其实很简单,在X(10) Y(30)后加一句dwell 0即可,这告诉运动程序,预读取就到此位置或者说必须dwell 0前的程序执行完毕才会进行后续操作。

Lookhead还会带来其他的影响,如对一个直角拐弯,开启了lookhead后实际运行轨迹为圆角拐弯,这个要注意,具体的请参考手册。


猜你喜欢

转载自blog.csdn.net/sinat_40730205/article/details/79455501