張 宏
(中色科技股份有限公司,河南 洛陽 471039)
機器人是代替人類在危險、不良環(huán)境進行工作的智能自動化裝置,是機械、電子、控制系統(tǒng)集成的復(fù)雜設(shè)備。為了使其能夠更智能、更好的完成各種場合任務(wù),需要對其進行大量的程序設(shè)計和通訊控制。目前常用的控制方式是用PLC做邏輯控制器以各種現(xiàn)場總線作通訊媒介對機器人進行動作控制。然而在應(yīng)用中發(fā)現(xiàn),無論CPU速度如何提高PLC算法如何改善,對整個系統(tǒng)響應(yīng)的影響微乎其微。這是因為現(xiàn)場總線通訊才是整個系統(tǒng)的瓶頸,阻礙了系統(tǒng)性能的提升。因此,更充分地利用IT技術(shù)成果,改善自動化通訊技術(shù)才是解決方案。
EtherCAT是工業(yè)以太網(wǎng)通訊技術(shù),通訊速度快,1000個開關(guān)點的數(shù)據(jù)刷新周期僅為30微秒,而100個伺服軸(每個軸8byte IN+OUT)的刷新周期也僅為100微秒。此外,EtherCAT還可優(yōu)化系統(tǒng)結(jié)構(gòu),使原來傳統(tǒng)的現(xiàn)場總線四層循環(huán)結(jié)構(gòu)改善為僅有兩層的結(jié)構(gòu),相對于傳統(tǒng)的現(xiàn)場總線系統(tǒng),底層I/O響應(yīng)時間大大縮減。因此,EtherCAT打破了傳統(tǒng)現(xiàn)場總線的通訊瓶頸,解放了PLC或PC的CPU性能,從而大大提高了系統(tǒng)性能。
通訊控制芯片采用優(yōu)賀訊公司的netX芯片,這是一款高度集成的網(wǎng)絡(luò)控制器,具有全新的結(jié)構(gòu),非常適合工業(yè)通訊和大規(guī)模的數(shù)據(jù)吞吐。
通過集成的雙端口內(nèi)存DPM,netX可以作為協(xié)處理器與主機系統(tǒng)(主CPU)相連,可以實現(xiàn)現(xiàn)場總線或?qū)崟r以太網(wǎng)的工業(yè)通訊。此外,netX也可以作為單片系統(tǒng)無需使用其他CPU。根據(jù)應(yīng)用不同,主機接口也可以配置為擴展總線接口或數(shù)字輸入輸出接口。同時,netX包含豐富的外設(shè)功能如UART、USB、SPI、I2C以及集成的IO-Link和CCD控制器,可以滿足廣泛的應(yīng)用需求。
netX片上集成CPU/PHY/Memory/DPM和豐富外設(shè),因此僅需晶振、外部存儲器及物理通訊接口等少量部件即可實現(xiàn)完整網(wǎng)絡(luò)通訊接口。同一個netX網(wǎng)絡(luò)控制器即能夠支持所有主流的現(xiàn)場總線及實時以太網(wǎng),通過軟件可實現(xiàn)不同網(wǎng)絡(luò)之間的切換,并且一個硬件最多可以提供四個通訊通道。這樣既減少了產(chǎn)品開發(fā)成本和開發(fā)風險,又使設(shè)備具有高度的靈活性。本系統(tǒng)使用一片netX50,用于同步機器人的6根工作軸。通訊協(xié)議采用EtherCAT實時以太網(wǎng)總線協(xié)議,通過總線實現(xiàn)位置和速度的閉環(huán)控制,整個控制循環(huán)周期為1ms,而復(fù)雜的控制算法則在PC上完成。
EtherCAT 是開放的實時以太網(wǎng)絡(luò)通訊協(xié)議,為系統(tǒng)實時性能和拓撲靈活性樹立了新的標準。EtherCAT的特點還包括高精度設(shè)備同步、可選線纜冗余和功能性安全協(xié)議(SIL3)。在幀被傳遞 (僅被延遲幾位)過去的時候,從站會識別出相關(guān)命令并進行處理。此過程是在從站控制器中通過硬件實現(xiàn)的,因此與協(xié)議堆棧軟件的實時運行系統(tǒng)或處理器性能無關(guān)。網(wǎng)段中的最后一個EtherCAT從站將經(jīng)過充分處理的報文返回,這樣該報文就作為一個響應(yīng)報文由第一個從站返回到主站(圖1)。
圖1 EtherCAT工作原理
EtherCAT采用標準的IEEE802-3以太網(wǎng)幀。EtherCAT在標準以太網(wǎng)幀結(jié)構(gòu)中使用了一個特殊的以太網(wǎng)幀類型0x88A4,采用這種方式可以使控制數(shù)據(jù)直接寫入以太網(wǎng)幀內(nèi),并且可以與遵守其它協(xié)議的以太網(wǎng)幀在同一網(wǎng)絡(luò)中并行。一個EtherCAT幀中可以包含若干個EtherCAT子報文,每個報文都服務(wù)于一塊邏輯過程映像區(qū)的特定內(nèi)存區(qū)域,由FMMU(Fieldbus Memory Management Unit)寄存器和SM (SyncManager)寄存器定義,該區(qū)域最大可達4GB字節(jié)。EtherCAT報文由一個16位的WKC(Working Count)結(jié)束,其數(shù)據(jù)區(qū)最大長度可達1486個字節(jié)。在報文頭中由8位命令區(qū)數(shù)據(jù)決定主站對從站的尋址方式,由于數(shù)據(jù)鏈獨立于物理順序,因此可以對EtherCAT從站進行任意的編址。
機器人采用ABB公司生產(chǎn)設(shè)計的S4型6軸控制工業(yè)機器人。該機器人支持Ethernet通訊方式。采用機器人編程語言RAPAID進行編程控制,以程序控制機器人動作。該類型機器人內(nèi)置BaseWare OS多任務(wù)操作系統(tǒng)和RPC遠程過程調(diào)用服務(wù)程序。要實現(xiàn)機器人的在線控制,必須通過RPC服務(wù)程序與機器人的RAPID程序進行實時數(shù)據(jù)通信,從而獲得機器人的當前工作狀態(tài),控制計算機通過RPC客戶端程序向機器人發(fā)送控制指令并響應(yīng)機器人的位置信號請求。
ABB RPC服務(wù)程序是基于RPC的遠程過程調(diào)用模型,此模型和本地過程調(diào)用(LPC)類似。對于LPC而言,調(diào)用方只需要將參數(shù)放入固定地址如寄存器,然后將程序的控制權(quán)轉(zhuǎn)交給控制程序,最后再由控制程序返回即可。RPC與之類似,RPC控制程序在調(diào)用一個遠程服務(wù)過程后,自己處于等待狀態(tài),傳往遠程服務(wù)過程的參數(shù)包括過程參數(shù),返回參數(shù)包括執(zhí)行結(jié)果。當收到包括執(zhí)行結(jié)果的消息后,控制程序從消息中取得結(jié)果并重新開始執(zhí)行。在服務(wù)器一方,服務(wù)器的子函數(shù)在等待調(diào)用,當有一個調(diào)用到達時服務(wù)器進程取得通訊參數(shù)計算結(jié)果,然后返回結(jié)果。
上述模型中,在某一個時刻只有一個程序(控制程序或服務(wù)程序)是活動的。ABB RPC沒有規(guī)定如何處理并發(fā),調(diào)用可以同步也可以異步。服務(wù)器可以創(chuàng)建一個線程來接收用戶請求,也可以自己接收用戶請求。RCP與LPC不同之處在于:①錯誤處理,對于遠程服務(wù)器和網(wǎng)絡(luò)失敗必須進行處理;②全局變量,因為遠程服務(wù)不可能訪問本地變量,因此不能傳送全局變量;③認證,RPC通常要經(jīng)過網(wǎng)絡(luò),因此必須進行認證。
RPC可由不同的傳輸協(xié)議實現(xiàn),但RPC依然需要獲得傳輸層的信息。這是因為有時候傳輸層會限制信息長度,而采用EtherCAT可以在硬件層面保證通信雙方遵守同一個通信協(xié)議。為了響應(yīng)一個消息域,RPC對這個域統(tǒng)一定義如下:
enum auth_flavor {
AUTH_NONE = 0,
AUTH_SYS = 1,
AUTH_SHORT = 2
};
struct opaque_auth {
auth_flavor flavor;
opaque body<400>;
};
如果認證失敗,必須提供失敗原因。程序號成組給出,規(guī)定如下:
0 - 1fffffff 由rpc@sun.com定義
20000000 - 3fffffff 用戶定義
40000000 - 5fffffff 臨時
60000000 - 7fffffff 保留
80000000 - 9fffffff保留
a0000000 - bfffffff保留
c0000000 - dfffffff保留
e0000000 - ffffffff保留
其中第一組中要求的號碼所有RPC過程必須遵守,即同一個號必須提供相同的功能;第二組主要用于調(diào)試;第三組是由程序臨時產(chǎn)生的號碼;其它號碼保留不得使用。用戶可以向服務(wù)器發(fā)送一組請求稱為批處理。批處理時用戶不用等待服務(wù)器返回,而是使用一個特定的請求獲得這一組請求的響應(yīng)。
下面我們來定義RPC消息:
enum msg_type {
CALL = 0,
REPLY = 1
};
當一個消息接收到時,下面是調(diào)用遠程過程調(diào)用的狀態(tài):
enum accept_stat {
SUCCESS = 0, /*RPC 執(zhí)行成功*/
PROG_UNAVAIL = 1, /*遠程調(diào)用過程無效(不存在)*/
PROG_MISMATCH = 2, /*遠程調(diào)用過程版本不匹配*/
PROC_UNAVAIL = 3, /*遠程過程不支持此功能*/
GARBAGE_ARGS = 4, /*不能解碼調(diào)用參數(shù)*/
SYSTEM_ERR = 5 /*系統(tǒng)異常,內(nèi)存分配錯誤*/
};
調(diào)用消息被拒絕的原因如下:
enum reject_stat {
RPC_MISMATCH = 0, /*過程版本號不匹配*/
AUTH_ERROR = 1 /*認證錯誤*/
};
認證失敗的原因如下:
enum auth_stat {
AUTH_OK = 0, /*成功*/
/*
*調(diào)用失敗原因
*/
AUTH_BADCRED = 1, /*校驗錯誤*/
AUTH_REJECTEDCRED = 2, /*必須重新啟動一個會話*/
AUTH_BADVERF = 3, /*模式不匹配*/
AUTH_REJECTEDVERF = 4, /*重復(fù)*/
AUTH_TOOWEAK = 5, /*安全限制*/
/*
*失敗原因
*/
AUTH_INVALIDRESP = 6, /*無效數(shù)據(jù)*/
AUTH_FAILED = 7 /*調(diào)用失敗原因不明*/
};
消息體格式如下,其中XID是消息號,請求消息和返回消息的消息號必須一致。
struct rpc_msg {
unsigned int xid;
union switch (msg_type mtype){
case CALL:
call_body cbody;
case REPLY:
reply_body rbody;
} body;
};
RPC的消息體,版本號為5:
struct call_body {
unsigned int rpcvers; /*版本號*/
unsigned int prog;
unsigned int vers;
unsigned int proc;
opaque_auth cred;
opaque_auth verf;
/*用戶自定義過程狀態(tài)字段*/
};
雖然cred和verf是兩個數(shù)據(jù)域,但我們通常將它們做一個處理。而響應(yīng)消息格式如下:
union reply_body switch (reply_stat stat){
case MSG_ACCEPTED:
accepted_reply areply;
case MSG_DENIED:
rejected_reply rreply;
} reply;
通過以上通訊接口設(shè)計實現(xiàn)了利用EtherCAT工業(yè)以太網(wǎng)絡(luò)的實時通訊特性與機器人程序控制的有效結(jié)合。構(gòu)筑了機器人分布式控制網(wǎng)絡(luò),實現(xiàn)了機器人柔性自動化系統(tǒng)的開發(fā)。
本文總結(jié)了EtherCAT工業(yè)以太網(wǎng)絡(luò)和ABB機器人通訊控制的軟件設(shè)計技術(shù)特點,提出了應(yīng)用RPC通訊協(xié)議構(gòu)建機器人控制程序的設(shè)計細節(jié)。并給出了通訊接口的細節(jié)設(shè)計實例,它可以應(yīng)用在多種形式的機器人控制通訊軟件設(shè)計中。
[1]尼庫.機器人學(xué)導(dǎo)論——分析、控制及應(yīng)用[M].北京:電子工業(yè)出版社,2004. 66-220
[2]Shoham Y. Agent-oriented Programming[M]. New York: Artificial Intelligence, 1993, 1-77
[3]Lewis M. Designing for Human-agent Interaction[M]. Washington: AI Magazine, 1988,67-68
[4]SUN. SUN Solaris8 ONC+ Dev[OL]. http://www.sun.com/rpcsvr/, 2003
[5]ABB . ABB機器人技術(shù)資料[OL]. http://www.abb.com.cn/, 2012
[6]詹建明.機器人研磨自由曲面時的作業(yè)環(huán)境與柔順性控制研究[D].長春:吉林大學(xué) 2002 5-67