基于RFID的單件生產實驗系統的機械手運動控制
基于RFID的單件生產系統就是在RFID技術的支撐下,建立單件生產過程實時監控,對制造系統內單個具體產品的生產過程進行精確控制,使得每個產品的生產盡可能按照預先制定的生產調度方案在交付期之前完成。實驗系統主要由可編程控制器(PLC)、個人計算機(作為上位機)、基于RFID技術的數據采集終端設備和GRB3014四自由度機械手組成。機械手的作用就是按照上位機的生產調度指令完成零件在各機器、讀寫器與緩沖區之間的搬運工作。它要完成的動作包括:從緩沖區抓取工件(其工裝或容器上附有RFID電子標簽,其中存儲了零件的狀態數據)到RFID讀寫器上掃描,若是要加工的工件則放到讀寫器旁邊的機器上加工,若不是,則放回緩沖區,或者是從機器上把加工完成的工件放回緩沖區等等。
本文給出了這一基于RFID的單件生產實驗系統中機械手的控制方法,其主要思想是:上位機監控程序根據零件的優先級產生調度指令,通過進程間異步通信,機械手控制程序從上位機監控程序開辟的共享內存區逐條依次讀取指令,然后調用機械手運動控制函數,完成執行拾取和搬運工件的動作,并返回相關狀態數據給上位機監控程序。
1 基于RFID的單件生產實驗系統簡介及其工作原理
基于RFID 的單件生產實驗系統主要由可編程控制器(PLC)、個人計算機、基于RFID技術的數據采集終端設備和GRB3014四自由度機械手組成。它的系統體系結構如圖1所示。
上位機主要負責運行數據采集服務器程序、實時數據通信程序、生產調度服務器程序、實時監控服務器程序,完成實時數據的采集、解釋、顯示以及生產調度和監控指令的運算。上位機通過TCP/IP與PLC進行通信。PLC通過STL語言編程,將RFID終端設備采集到的實時狀態數據傳輸至上位機。RFID數據采集終端主要負責生產數據的實時采集。機械手就是執行由上位機發出的指令,搬運零件。
本實驗系統只是對現實的生產系統 零件的流動過程的模擬,并沒有真實的零件加工過程,主要是實現RFID電子標簽和讀寫器對零件狀態數據的采集。我們把關于零件的信息寫入RFID 電子標簽,當機械手把它拿到讀寫器上去掃描,RFID終端設備就采集到了實時狀態數據,然后PLC通過STL語言編程把數據傳給上位機,上位機就可以實時地對零件進行調度。RFID電子標簽具有8K的內存,存儲了關于零件的靜態數據和動態數據。零件的靜態數據包括:零件編號,零件工藝路線(工序順序號、每道工序加工時間、每道工序加工所用機器號);零件的動態數據包括:零件當前工序,零件當前位置,零件剩余工作量(加工時間)等。

2 機械手的運動
本單件生產實驗系統使用的GRB3014型四自由度
SCARA機械手如圖2所示。
它集成有四軸運動控制器、電機及其驅動、電控箱、機械手爪等部件,還包括在VC環境下的動態鏈接庫和安裝在PC機上的GT_400_SV運動控制卡,可以方便地進行二次開發。機械部分的關節1、2、4為旋轉關節,使用交流伺服電機和諧波減速器驅動,關節3為直線關節,可以上下伸縮,采用交流伺服電機和滾珠絲杠驅動。該機械手關節1連桿長度為200mm, 運動范圍為±100。, 關節2 連桿長度為200mm,運動范圍為±150。,直線關節3行程為~48mm,關節4運動范圍為±170。,還有一個電磁手爪用于抓取。鑒于機械手的運動范圍,本實驗系統用到了四臺讀寫器(一臺放在初始緩沖區的旁邊,掃描零件通知上位機有新的零件進入系統,另外的三臺讀寫器放在機器的旁邊),三臺機器(機器就是讀寫器旁邊的一個位置),總共定義了11個點的坐標,三臺讀寫器的位置,三臺機器的位置,一個緩沖區(這個緩沖區有三個放零件的位置),一個初始緩沖區還有一個零件加工完畢后所要放的位置。該機械手已經做了一次開發,可以實現簡單的單軸運動,并且已經有封裝好的VC環境下的API函數,可以直接調用其DLL文件,然后在VC下做二次開發實現所需要的運動。

工業機器人的運動通常由專門的運動控制卡來驅動,運動控制卡可安裝在工控機上,并且提供了專門的API函數以便根據生產現場的需要進行運動控制程序的開發。例如,文獻[2]中用于切割的機器人的運動控制就是這樣實現的。本系統中用于工件拾取與搬運的GRB3014型四自由度機械手的運動控制也是如此。文獻[3]給出了此種機械手的結構特征、技術參數和運動控制方法的介紹。據此,本文設計了一些機械手運動控制函數,并把它們生成一個DLL文件,供機械手運動控制程序調用。機械手的運動控制函數包括:
(1)機械手運動控制初始化函數
short iniLmotion_card();//初始化卡,初始化輸出,初始化運動軸
{
GT_ Open();//打開運動控制器設備,用戶程序開始時必須調用
此函數
GT_Reset();//該函數是主機以命令的形式使運動控制器復位
GT_LmtSns(255);//該函數設置限位開關有效電平。在初始化運
動控制器時,必須給出限位開關有效電平,255表示四個軸全部是低電
平觸發。
GT_ ExOpt(optva1);//初始化抓具
for(int i=1:i<5:i++)
{
6LAxis(i);
GLSetKp(3);
GT Update();
GT_ AxisOn0;
Sleep(50);
GT_ClrSts0;
}//初始化每個運動軸
return 0;
}
(2)機械手回零函數
因為機械手的編碼器是增量編碼器,所以機械手首次運動之前,必須先讓機械手的四個軸回零,然后機械手才會知道實驗定義的那11個點的坐標。該函數如下:
short grb— home()
{ axis_ homewithlimit(3,long(10O~*axis3PulsePerMmOrDegree), 20)://第三軸回零
axis_homewithlimit(1.1ong(12O.*axis1PulsePerMmOrDegree),10):// 第一軸回零
axis— homewithlimit(2,long(100.*axis2PulsePerMmOrDegree),15):// 第二軸回零
axis_ homewithoutlimit(4,1 5)://第四軸回零
return O: }
(3)機械手的點到點的運動函數
該函數的作用是控制機械手從關節坐標空間里的一個點【aAnglel, aAngle2, aPos3, aAngle4】運動到另外一個點[bAngle1,bAngle2,bPos3,bAngle4]。函數如下:
short grb_move _atob(int aAnglel,int aAngle2,int aPos3,int aAngle4。int bAngle1,int bAngle2,int bPos3,int bAngle4)
(4)機械手拾取和搬運工件的運動函數
機械手抓取電子標簽運動時,都是把第三軸上升到一個較高的位置運動的,為了防止讀寫器在不該讀數據的時候誤讀電子標簽里的內容。為此設計了這樣一個函數:
void robot_move(int position1,int position2,int flag ):
這個函數就是根據flag的標志來使機械手在這1 1個點上任意運動,例如flag=0表示機械手抓取零件從公共緩沖區運動到讀寫器,flag=1表示機械手抓取零件從讀寫器運動到讀寫器對應的機器位置上,flag=2表示機械手抓取零件從讀寫器運動到緩沖區,flag=3 表示機械手抓取零件從機器運動到任意一臺讀寫器所在的位置,flag=4表示機械手抓取零件從讀寫器運動到零件的所有工序加工完成后的輸出緩沖區,flag=5表示機械手抓取零件從零件輸入緩沖區運動到公共緩沖區, 即進入實驗系統。position1、position2是根據flag 的值分別代表公共緩沖區的具體某個位置,讀寫器的編號,機器的編號,零件輸入緩沖區,零件的所有工序加工完成后的輸出緩沖區之中的兩個值,是機械手完成某一搬運任務時的起止位置,然后把這兩個位置轉化為對應的關節坐標,調用函數(3)來完成相應的兩點之間的運動。如flag=0,position1就代表公共緩沖區的具體某個位置,position2就代表讀寫器的編號。
(5)關閉機械手的函數
short close— motion card();//生產結束時關掉運動控制器。以上這些函數共同完成了機械手的運動控制。
3 機械手的控制方法
機械手根據上位機調度程序下發的指令來運動。PLC通過把終端設備采集來的數據傳送給上位機,上位機通過共享內存區里的機器和零件狀態的改變來產生調度指令,然后通過進程間異步通信,機械手控制程序從共享內存區里取出指令,依次執行這些指令。根據參考文獻[4]提供的Petri網建模方法,建立了本實驗系統的Petri網模型。圖3為機械手控制邏輯的Petri網,為簡單計,這里只描述了一臺機器(機器i)上的加工任務(調度指令)完成的過程。此Petri網的各庫所和變遷的含義定義如下:
R:機械手空閑
B0:緩沖區中有加工任務所指定的零件
Ci:機器i空閑(i=1,2,3)
P0:待加工任務庫所
Pi1: 機械手持有待加工的零件

P i2機械手持有掃描完成的待加工的零件在讀寫器(j)上(i=1,2,3)
Pi3:機械手往機器(i)上搬運待加工的零件(i=1,2,3)
P i4機器(i)/JI]工零件(i=1,2,3)
P i5加工完成的零件等待搬運到讀寫器(i)上掃描( 1,2,3)
P i6機械手往讀寫器(i)上搬運加工完成后待掃描的零件(j=1,2,3)
P 7讀寫器(i)掃描加工完成的零件(i=1,2,3)
P 8:機械手往緩沖區上搬運確認加工完成的零件
P9:機械手往緩沖區上搬運不是要加工的的零件
t0:有加工任務到達
t i1機械手抓取并移動零件(i=1,2,3)
t i2:機械手抓取的待加工的零件到達讀寫器,開始掃描(i=1,2,3)
t i3掃描結束,是正確的零件,機械手開始把零件向機器上搬運(i=1,2,3)
t i4機械手到達機器,釋放零件,準備開始加工( =1,2,3)
t i5:零件加工完成,開始等待機械手搬運(_-1,2,3)
t i6加工完成后機械手開始搬運零件(i=1,2,3) .
t i7機械手持有加工完成后的零件到達讀寫器,開始準備掃描(i=1,2,3)
t i8掃描完成,確認零件加工完成,機械手開始把零件往緩沖區移動(_=1,2,3)
t9:機械手到達緩沖區,釋放加工完成的零件
ti10:掃描結束,是錯誤的零件,機械手開始把零件向緩沖區搬運
t 11機械手到達緩沖區,釋放錯誤的零件
t12 加工任務相關零件到達
在本實驗系統中是3臺機器共用一個機械手,且有一公共緩沖區,因此R(機械手空閑庫所)與B。(緩沖區中有加工任務所指定的零件)是共享庫所,需要由這兩個庫所各引出一條弧指向與每臺機器相關的t. (機械手抓取并移動零件)變遷。與各機器相關的t. 變遷會由于競爭托肯而發生沖突,當這些變遷被使能時,需按照調度指令確定的順序依次觸發。避免死鎖是離散制造系統控制的基本要求,與基于局部可達樹預測分析的死鎖避免算法不同的是,由于本實驗系統的邏輯結構較為簡單,這里采取了一種通過控制在制品數量以避免公共緩沖區被填滿的簡單方法來避免死鎖。
機械手運動主要有三種:有新的零件產生,這時機械手控制程序從緩沖區找出一個空位,控制機械手把零件從初始緩沖區抓到這個空的緩沖區位置上;有零件要在機器上加工,這時機械手從緩沖區有零件的位置上抓取一個零件去機器旁的讀寫器上掃描,若是要加工的零件,把它放到機器上,若不是,重新放回緩沖區的原來位置上,再從下一個位置抓取,直到找到要加工的零件;有零件在機器上加工完畢,若是這個零件的所有工序都加工完畢,把這個零件抓出系統,若不是,從緩沖區找一個空位,把零件從機器上放到讀寫器上掃描,確認加工完畢,然后放到那個空位上。最后機械手做完以上的三種中的任意一種動作時,零件和機器的狀態都會發生改變,監控程序把更新后的狀態數據寫入共享內存區。圖4是整個控制程序的流程。

圖5是根據機械手的運動范圍定義的本實驗系統的平面布局圖,原點就 :是機械手的機械原點,(0,400)是機械手回零后的點,機械手的第一軸和第二軸的長度都是200mm。表1是這些點對應的機械手的關節坐標空間里的四個軸的關節坐標值。表1中定義的坐標值是關節坐標,例如:緩沖區的1位置(-25,0,-80,O) 里面的四個值代表四個軸的關節坐標值,第一軸相對于零點(即機械手回零后的位置)轉-250,第二軸不動,第三軸相對于零點下降-80cm,第四軸不動。


typedef struct RECV_ INF
{
UINT which~ partlD;f l %
UINT which— machinelD://機器號
UINT entry— num://若生產系統是可重人生產系統,表示可重人次數,在本實驗系統中保留。
U1NT flag1;//0到達生產線,1零件在機器上加工,2零件在機器上加工完畢,3零件的所有工序在機器上加工完lRECV_INF, pRECV_INF; 接收到調度指令后,機械手運動控制程序凋用函數G_Exe_ cute_ command(RECV INF)來執行這一指令。機械手控制程序根據RECV_INF->flag1的值來執行相應的運動, 并把RECV_INF-> which_machinelD(機器號)賦給機械手運動函數robot_move(int position1,int position2,int flag)中的positionl或者position2(這個是根據flag的值來決定的,參考這個函數的說明),當機械手抓取零件去機器上加工前要到機器對應的讀寫器上掃描,這時PLC會傳給上位機一個數據包,里面包含機械手抓取的這個零件的工件號,機械手控制程序就會從共享內存區里讀到這個工件號并與RECV_INF->which_partlD(工件號)來做比較,判斷是不是要加工的零件。當指令執行完后,監控程序會改變零件和機器的狀態,然后機械手控制程序取下一條調度指令直到每個零件的所有工序都加工完畢。
實驗結果表明,機械手可以完成要求的動作。
5 結束語
本文提出了一種針對基于RFID的單件生產實驗系統的機械手控制方法。首先建立了本實驗系統的Petri網模型,獲得正確的控制邏輯;然后設計了機械手運動控制函數,并實現了與上位機的進程閫異步通信,從而逐條解析并執行調度指令。實驗結果表明,機械手可以完成上位機的調度指令,可以在預先定義的11個位置中的任意兩個位置之間運動。