1. 程式人生 > >6.PMAC下位機-下位機程式設計

6.PMAC下位機-下位機程式設計

PMAC的下位機程式設計包括三種程式:命令序列程式、運動(Program)程式和PLC程式。
如下圖,PMAC中編寫程式,直接在File->new新建檔案會開啟編輯器,所有檔案為PMC字尾。
檢視當前程式可以在File->Uplaod Programs檢視當前已有的Program程式和PLC程式及他們的編號、狀態。

1.命令序列程式

上節講到,PMAC卡中可以使用手動操作,在命令列設定引數狀態、控制電機等,但是它一次只能傳送一條命令,那麼為了一次性執行多個命令序列,即可在PMC程式中如下編寫:
i620=200
i621=20
i622=10

#6j/
這裡先設定6軸電機的運動引數,然後啟用電機,類似的寫法經常用於PMAC引數的初始化中。 程式編寫完成後,點選Download按鈕,命令系列程式在下載的過程中就會執行


如下圖,勾選Show Message Window,開啟Mesage視窗
如下圖,在Message視窗可以可以看到當前程式是否有錯誤等,類似C語言編譯過程。
命令序列經常和PLC程式及運動Program程式混用,下面會說明。

2.運動(Program)程式

為了便於編寫運動程式,PMAC中使用一個座標系的概念,比如有6號電機和8號電機,我們在一個的座標系下將其分別對映到X和Y座標,如下所示
&1
#6->819.2Y ;機械手Y向,單位mm,(819.2=8192/10,絲桿導程為10mm)
#8->819.2X ;機械手X向,單位mm,(819.2=8192/10,絲桿導程為10mm)
這樣我們程式設計的時候,可以直接把當前運動想成現實座標系的運動,實際行我們在程式中指定X運動1個單位就是電機運動819.2個脈衝,換算成軸的運動距離就是1mm,這樣編寫程式簡潔易懂。 標準運動程式的模板如下:
&1						;座標系為1
CLOSE 					;確認所有緩衝區被關閉

OPEN PROG 40			;程式號為40
CLEAR
;;;;;;;;;;;;;;;;;;;;;運動程式主體-開始

;;;;;;;;;;;;;;;;;;;;;運動程式主體-結束
CLOSE
這些指令都是命令指令,所以他們都是在程式下載的時候執行,之間的運動程式主體會被寫到特定的緩衝區,但是在這時候程式是不執行的。 下面寫編寫一個簡單的程式,如下:
&1
CLOSE 			;確認所有緩衝區被關閉
#6->819.2X 		;機械手X向,單位mm,(819.2=8192/10,絲桿導程為10mm)
#8->819.2Y 		;機械手Y向,單位mm,(819.2=8192/10,絲桿導程為10mm)

#6j/
#8j/

OPEN PROG 40
CLEAR

INC				;增量運動模式
X(10) Y(10)		;X正方向前進10mm,Y正方向前進10mm

CLOSE
注意這裡,使用命令序列完成了軸的定義和電機的啟用,但是中間的兩行運動程式程式碼只是被寫到對應的緩衝區,還沒有執行。在terminal視窗輸入命令&1b40r程式才執行。注意一個座標系下關聯的所有電機必須都啟用,運動程式才能正常執行。在實際中,軸的定義和電機的啟用最好放到單獨的命令序列檔案中。 下面是一個比較複雜的程式:
&1
CLOSE 				;確認所有緩衝區被關閉
#6->819.2X 			;機械手X向,單位mm,(819.2=8192/10,絲桿導程為10mm)
#8->819.2Y 			;機械手Y向,單位mm,(819.2=8192/10,絲桿導程為10mm)

#6j/
#8j/

OPEN PROG 40
CLEAR

;運動引數設定
TA(200)				;ms
TS(20)				;ms
F(50)				;mm/s

ABS					;絕對模式
Linear				;直線運動

p1 = 0
While (p1 < 10)
  F(50)
  X(30) Y(10)
  F(10)
  X(10) Y(30)
  
  If (p1 > 2)
    Return  
  EndIf  
  
  p1=p1+1
EndWhile

CLOSE
上面程式的含義就是從當前位置以速度50mm/s直線運動到絕對座標(30,10)的位置,再從當前位置以速度10mm/s直線運動到絕對座標(10,30)的位置,如此迴圈,如果沒有If語句的話,迴圈10次,但是這裡加了If語句就只迴圈2次了。 基本的運動程式就是這樣,再複雜的運動程式都是在此基礎上延伸出來的。各種運動指令請查PMAC Software Manual手冊,相應的程式編寫請查PMAC User Manual手冊。

3.PLC運動程式

在電氣系統中,PLC是經常用的控制元件,就是有快速的掃描各個狀態,對掃描到的狀態變化做相應的處理。他的實時性非常高,簡潔可靠。在PMAC中有模擬PLC的功能。 同樣對於運動程式中的最後一個例項功能,改寫如下: 運動程式:
&1
CLOSE 				;確認所有緩衝區被關閉
#6->819.2X 			;機械手X向,單位mm,(819.2=8192/10,絲桿導程為10mm)
#8->819.2Y 			;機械手Y向,單位mm,(819.2=8192/10,絲桿導程為10mm)

#6j/
#8j/

OPEN PROG 40
CLEAR

TA(200)				;ms
TS(20)				;ms
F(50)				;mm/s

ABS					;絕對模式
Linear				;直線運動

p1 = 0
While (p1 < 10)
  F(50)
  X(30) Y(10)
  F(10)
  X(10) Y(30)
  
  p1=p1+1
EndWhile

CLOSE

PLC程式:
OPEN PLC 20
CLEAR

If (p1 = 2)
  COMMAND "&1b40a"
  EndIf
  
CLOSE

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後實際執行軌跡為圓角拐彎,這個要注意,具體的請參考手冊。