閱讀 | 訂閱
閱讀 | 訂閱
機(jī)器人

激光加工機(jī)器人通信協(xié)議設(shè)計(jì)

星之球激光 來(lái)源:電子發(fā)燒友2011-11-10 我要評(píng)論(0 )   

機(jī)器人目前應(yīng)用十分廣泛,在工業(yè)、科研、醫(yī)學(xué)等領(lǐng)域發(fā)揮了重要作用。我們知道,機(jī)器人的指令需要我們來(lái)提供。目前,工業(yè)機(jī)器人的指令一般都是通過(guò)示教盒輸入的。示教盒...

機(jī)器人目前應(yīng)用十分廣泛,在工業(yè)、科研、醫(yī)學(xué)等領(lǐng)域發(fā)揮了重要作用。我們知道,機(jī)器人的指令需要我們來(lái)提供。目前,工業(yè)機(jī)器人的指令一般都是通過(guò)示教盒輸入的。示教盒提供了簡(jiǎn)單的人機(jī)界面,可以幫助完成簡(jiǎn)單的示教任務(wù)。但在許多應(yīng)用中,僅通過(guò)示教輸入是無(wú)法滿足要求的。在激光加工機(jī)器人系統(tǒng)中,要給機(jī)器人的指令多達(dá)幾萬(wàn)條,而且指令的參數(shù)不能示教得到,是由其他測(cè)量系統(tǒng)提供的。在這種情況下,需要通過(guò)上位機(jī)給機(jī)器人控制器發(fā)送指令。這就需要實(shí)現(xiàn)機(jī)器人控制器和上位機(jī)的實(shí)時(shí)通信。機(jī)器人指令有固定格式,機(jī)器人通信有其特殊性。為了保證通信的可靠性,提高通信效率,可根據(jù)機(jī)器人通信特點(diǎn),制定了相應(yīng)的通信協(xié)議,并制作了專用的、更適合于工業(yè)應(yīng)用的上位機(jī)通信控件。

1 機(jī)器人主控計(jì)算機(jī)

機(jī)器人控制器中最重要的是主控計(jì)算機(jī)。在激光加工機(jī)器人中,主控計(jì)算機(jī)采用基于PC總線S 104/486DX工業(yè)控制級(jí)嵌入式單板計(jì)算機(jī),其核心是AMD 80486 DX微處理器。主控計(jì)算機(jī)提供串行接口,可以和它進(jìn)行串口通信。主控計(jì)算機(jī)內(nèi)部的信息處理由機(jī)器人控制器操作系統(tǒng)來(lái)實(shí)現(xiàn)。整個(gè)系統(tǒng)采用了實(shí)時(shí)多任務(wù)操作系統(tǒng)VRTXsa來(lái)實(shí)現(xiàn),它具有很好的實(shí)時(shí)性和可靠性,同時(shí)具有完善的任務(wù)管理機(jī)制。

2 激光加工機(jī)器人通信系統(tǒng)結(jié)構(gòu)

機(jī)器人的運(yùn)動(dòng)指令來(lái)自通信系統(tǒng)。在我們的通信系統(tǒng)中,主要包括上位機(jī)應(yīng)用程序、串口控件、串口和機(jī)器人主控計(jì)算機(jī)(下稱下位機(jī))。上位機(jī)應(yīng)用程序產(chǎn)生指令,通過(guò)控件訪問(wèn)串行端口,將指令傳給下位機(jī)。下位機(jī)收到指令后,對(duì)指令進(jìn)行分析處理。對(duì)于下位機(jī)來(lái)說(shuō),這些指令分兩種:一種是解釋執(zhí)行指令,需要進(jìn)入命令隊(duì)列,排隊(duì)執(zhí)行,占用緩存;另一種是立即執(zhí)行指令,不需要進(jìn)入隊(duì)列,不占用緩存。對(duì)于解釋執(zhí)行指令,下位機(jī)收到后,把指令放入隊(duì)列后馬上返回應(yīng)答。對(duì)于立即執(zhí)行指令,先執(zhí)行該指令,然后才返回應(yīng)答。查詢指令屬于立即執(zhí)行指令,下位機(jī)除了返回命令在命令字外,還同時(shí)返回相應(yīng)的數(shù)值。上位機(jī)根據(jù)返回的應(yīng)答判斷通信的狀態(tài),并進(jìn)行相應(yīng)的處理。

3 通信協(xié)議

我們的激光加工機(jī)器人通信系統(tǒng)具有以下特點(diǎn):

1)機(jī)器人只會(huì)按指令進(jìn)行工作,如果指令有問(wèn)題,將會(huì)帶來(lái)不可預(yù)測(cè)的后果。所以對(duì)于我們的通信系統(tǒng)來(lái)說(shuō),可靠性、安全性是首要的。

2)機(jī)器人工作環(huán)境比較惡劣,各種干擾比較大。通信的抗干擾能力、錯(cuò)誤處理的能力非常重要。

3)為了提高加工效率,希望機(jī)器人能以較快的速度進(jìn)行工作。

為避免機(jī)器人出現(xiàn)“空指令”,通信速度要跟得上?;跈C(jī)器人通信系統(tǒng)自身的特點(diǎn),上位機(jī)和它進(jìn)行通信,必須滿足其特定的要求。我們采用如下的通信方式:

(1)主從方式。上位機(jī)為主機(jī),下位機(jī)為從機(jī)。一般情況下,下位機(jī)不能主動(dòng)給上位機(jī)發(fā)送信息。只有上位機(jī)給下位機(jī)發(fā)出指令后,下位機(jī)才能作出應(yīng)答。這樣通過(guò)上位機(jī),我們就可以很好地控制整個(gè)通信過(guò)程。

(2)數(shù)據(jù)幀方式。采用數(shù)據(jù)幀的方式,有利于保證數(shù)據(jù)包的完整性,便于進(jìn)行數(shù)據(jù)接收和處理。在我們的通信系統(tǒng)中,上位機(jī)和下位機(jī)均采用相同的協(xié)議對(duì)通信數(shù)據(jù)進(jìn)行打包、解包。我們自己定義幀頭為eb 90 82,幀尾為9082,幀標(biāo)志為f0。另外規(guī)定,有效數(shù)據(jù)中若出現(xiàn)90,則雙寫(xiě)90,用以區(qū)別幀尾中的900數(shù)據(jù)幀格式如下所示:

{幀頭一幀標(biāo)志一通信數(shù)據(jù)一幀尾一校驗(yàn)字}

另外,在我們的通信過(guò)程中,要處理各種不同類型的數(shù)據(jù),包括char’ , short型、float型、byte型等,在有效數(shù)據(jù)前加入標(biāo)識(shí)符來(lái)識(shí)別它們。如f0 06表示6個(gè)浮點(diǎn)數(shù),f3 05表示5個(gè)字符。

(3)校驗(yàn)和。這是一種簡(jiǎn)單而實(shí)用的校驗(yàn)方式。在上位機(jī)發(fā)送指令前,自動(dòng)計(jì)算數(shù)據(jù)的和,并將它附在數(shù)據(jù)幀的末端,一起發(fā)送給下位機(jī)。下位機(jī)在接收到數(shù)據(jù)幀后,先解包,然后再計(jì)算一次數(shù)據(jù)和,用它與數(shù)據(jù)幀末端的校驗(yàn)和進(jìn)行比較。反之亦然。使用這種方式可以檢驗(yàn)數(shù)據(jù)在傳輸?shù)倪^(guò)程中是否發(fā)生了變異。

(4)自動(dòng)重發(fā)機(jī)制。下位機(jī)在接收到錯(cuò)誤的數(shù)據(jù)幀時(shí),將會(huì)把該數(shù)據(jù)幀遺棄掉,同時(shí)向上位機(jī)返回錯(cuò)誤碼報(bào)錯(cuò)。這時(shí)候,該幀數(shù)據(jù)需要重新發(fā)送。如果把重發(fā)任務(wù)交給應(yīng)用程序,程序?qū)⒆兊帽容^復(fù)雜。我們把這個(gè)任務(wù)交給控件,可以很輕松的實(shí)現(xiàn)重發(fā)功能。在控件內(nèi)部,當(dāng)新的數(shù)據(jù)發(fā)送之前,都將數(shù)據(jù)做一個(gè)備份,直到確認(rèn)接收正確了,才將其消除。如果發(fā)現(xiàn)有錯(cuò)誤,將其再次發(fā)出去。

(5)應(yīng)答方式。在通信過(guò)程,下位機(jī)對(duì)上位機(jī)每一幀數(shù)據(jù)都必須做出的應(yīng)答。上位機(jī)根據(jù)返回的應(yīng)答判斷通信狀態(tài),然后進(jìn)行下一步動(dòng)作。為了安全起見(jiàn),規(guī)定只有在確認(rèn)前一包指令正確應(yīng)答之后,才可以發(fā)下一包指令。對(duì)于非查詢指令(包括全部解釋執(zhí)行指令和部分立即執(zhí)行指令),下位機(jī)收到后,返回該指令的命令字;對(duì)于查詢指令,除了返回命令字之外,同時(shí)還返回查詢數(shù)據(jù),如機(jī)器人的位置、各軸轉(zhuǎn)角等。如果下位機(jī)檢測(cè)到數(shù)據(jù)幀有問(wèn)題,如無(wú)幀頭、校驗(yàn)和錯(cuò)等,則返回相應(yīng)的錯(cuò)誤碼。上位機(jī)在發(fā)送指令的時(shí)候,同時(shí)記錄下了該指令的命令字。在接收到下位機(jī)返回的應(yīng)答后,將其中的命令字與保留的命令字比較,如果一樣,則說(shuō)明發(fā)送正確,可以發(fā)送下一條指令;反之,則說(shuō)明指令發(fā)送有問(wèn)題,根據(jù)錯(cuò)誤碼進(jìn)行錯(cuò)誤處理,并重發(fā)當(dāng)前指令包。指令的發(fā)送和應(yīng)答的接收過(guò)程如圖1所示。



(6)成組指令發(fā)送方式。由于機(jī)器人的運(yùn)行速度很快,為了能保證指令發(fā)送速度能跟上運(yùn)行速度,因此在一個(gè)數(shù)據(jù)報(bào)里同時(shí)發(fā)送了多條指令,而下位機(jī)只需應(yīng)答第一條指令。這樣就減少了應(yīng)答時(shí)間,提高了指令的發(fā)送速度。實(shí)際應(yīng)用中,我們采用7條指令一個(gè)數(shù)據(jù)報(bào),結(jié)果顯示,速度快了大約37。為了安全和處理方便,控件只允許解釋執(zhí)行指令成組發(fā)送,對(duì)于立即指令,只能發(fā)送單指令數(shù)據(jù)報(bào)。

4 通信的實(shí)現(xiàn)

4.1 下位機(jī)通信任務(wù)的實(shí)現(xiàn)

在實(shí)時(shí)多任務(wù)系統(tǒng)中,一項(xiàng)工作的完成往往需要通過(guò)多個(gè)任務(wù)(中斷)共同完成的。這需要各任務(wù)及中斷協(xié)調(diào)動(dòng)作,相互配合,甚至進(jìn)行通信。VRTXsa提供了郵箱(mailbox),隊(duì)列(queue)、事件標(biāo)志(event flag)、信號(hào)量(semaphore)互斥體(mutexes) 5種通信機(jī)制。在下位機(jī)通信系統(tǒng)中,通信工作由串口2中斷、時(shí)鐘中斷、監(jiān)控任務(wù)、顯示任務(wù)、執(zhí)行任務(wù)等共同協(xié)調(diào)完成的。如圖2所示。



機(jī)器人收到上位機(jī)的指令后,串口2中斷發(fā)生,它的中斷服務(wù)程序啟動(dòng)。它將設(shè)置中斷同步標(biāo)志,觸發(fā)串口2任務(wù)程序。串口2任務(wù)將處理接收到的上位機(jī)數(shù)據(jù),將解釋指令放入命令隊(duì)列中,并設(shè)置相關(guān)標(biāo)志。在一個(gè)時(shí)鐘周期內(nèi)(16ms),所有任務(wù)執(zhí)行一遍,它們根據(jù)相關(guān)標(biāo)志,完成相應(yīng)的工作,如讀取命令隊(duì)列,執(zhí)行命令,給上位機(jī)返回應(yīng)答。

串口2任務(wù)程序如下:

void far com2_ task(void)#p#分頁(yè)標(biāo)題#e#

{刀初始化

刀裝載串口2中斷

sys_ load vrtx_ isr(Ox34,com- isr);

刀允許串口2中斷

n8259_ inerrupt enable(4);

while(true)

刀等待串口2中斷

ev_group=sc_ fpend(group_ id,0,4,0,&erro);

刀中斷到來(lái),清中斷同步標(biāo)志

ev_group=sc_ fclear(gruop_ id,4,&err);

read_ CommData();//處理并讀取數(shù)據(jù)

刀處理各種指令,并設(shè)置各相關(guān)標(biāo)志

process_ Comm (BYTE *Buff,BYTE *cPtr);

4.2 上位機(jī)通信控件的實(shí)現(xiàn)

為了便于用戶使用,把上位機(jī)的通信功能封裝到ActiveX控件中。選擇VC++6進(jìn)行通信控件的開(kāi)發(fā),串口操作使用API函數(shù)來(lái)實(shí)現(xiàn)??丶胁捎昧硕嗑€程技術(shù)。為監(jiān)控串口任務(wù)創(chuàng)建了一個(gè)工作線程,以免它堵塞主線程,提高了系統(tǒng)的響應(yīng)性。通信控件采用了異步v0方式,以提高發(fā)送、接收和處理數(shù)據(jù)的效率。異步v0操作建立后會(huì)立即返回,即使操作還未完成。這樣把費(fèi)時(shí)的v0操作放在后臺(tái)進(jìn)行,線程就可以干別的事情,極大地提高了程序的運(yùn)行效率。在串口通信中,有

幾種讀取串口數(shù)據(jù)的方式,其中事件驅(qū)動(dòng)是最有效率的方式。在監(jiān)視串口的輔助線程中,當(dāng)有數(shù)據(jù)到達(dá)時(shí)串口是,串口事件觸發(fā),控件開(kāi)始讀取串口輸入緩沖區(qū)的數(shù)據(jù)。如果沒(méi)有數(shù)據(jù)到達(dá),那么使用WaitForMultipleObjects 0’數(shù)堵塞監(jiān)測(cè)線程,把資源讓給其它線程。在使用線程堵塞技術(shù)之后,監(jiān)視串口線程占用的系統(tǒng)資源大大減少,同時(shí)提高了指令的發(fā)送效率。串口讀寫(xiě)和監(jiān)控是通信的最主要部分,采用了異步v0操作,使得程序復(fù)雜化。異步v0操作分兩部分:一是創(chuàng)建該v0操作,然后返回;二是探測(cè)操作的完成。下面是讀串口的部分程序清單:

void CCommCtrl::ReadChar(COMSTAT comstat)

{

while (comstat.cbInQue>0)f

C1earCommERROR(mJWomm,&dwError,&comstat);

if(!ReadFile(hcomm,&RXBuf,l,&dwRead,&m_ ov))

f //ReadFile返回FALSE,判斷是出錯(cuò)還是沒(méi)完成

if(GetLastError()==ERROR IO_PENDING) f

//沒(méi)完成,需要等待

if(!GetOverlappedResult(hComm,&m- ov,

&dwRead,TRUE)) //等待讀操作完成

{…}刀完成讀操作,但出錯(cuò)

else //正確完成讀操作

{…}//處理接收的字符

else(…}/贖操作出錯(cuò)

else //讀操作在函數(shù)返回前已經(jīng)完成

{…}刀處理接收的字符

}

return; //沒(méi)有字符了,返回

}

寫(xiě)串口程序和讀串口類似。監(jiān)視線程的部分代碼如下:

DINT CommWatch(LPVOID pParam)

{刀清緩存

PurgeComm(hcom,PURGE_ RXCLEAR I PURGE一XCLEAR I

PURGE_ RXABORTIPURGE一XABORT);

for(;;) f

bResult2=WaitCommEvent(hcom,&dwEvtMask,&m一 ov);

刀等待串口事件的發(fā)生

if(!bResult2)[//事件WaitCommEvent返回假

switch (dw=GetLastError(川

case ERROR-10-PENDING://異步I/O操作(WaitCommEvent)/

/進(jìn)行中,正常情況

{break;}

default:[ // I/O操作出現(xiàn)錯(cuò)誤

ProcESSErrorMessage("WaitCommEvent()");

break;}}}

else{//事件WaitCommEven嶇回真,操作完成

bResult2=C1earCommError(hcom,&dw, &commstat);

if (commstat.cbInQue==0)

continue;}

刀堵塞線程,等待事件組發(fā)生。事件組包括:關(guān)閉線程事件、

刀讀事件、寫(xiě)事件

Event=WaitForMultipleObjects(3, m- hEventArray, FALSE,

INFINITE);

switch (Event){//判斷是哪個(gè)事件發(fā)生

case 0:f//關(guān)閉事件

mJbThreadAlive= FALSE;

AfxEndThread(100);//關(guān)閉線程

break;)

case 1:f//字符到達(dá),讀字符

bRead=TRUE;

bResult=TRUE;

GetCommMask(hcom, &CommEvent);

if(CommEvent&EV_ RXCHAR)(

刀通知控件句柄讀取字符

::SendMessage(CommWnd,WM_ COMM_ READ,0,0);)

break;)

case 2:{//寫(xiě)事件

//通知控件句柄寫(xiě)串口

::SendMessage(CommWnd,WM_ COMM_ WRITE,0,0);)}}

刀主循環(huán)結(jié)束

return 0;}

5 結(jié)束語(yǔ)

我們根據(jù)激光加工機(jī)器人通信的特點(diǎn),制定了相應(yīng)的通信協(xié)議,同時(shí)采用了多種有效的編程方法,以達(dá)到安全、高效、實(shí)用的目的。經(jīng)過(guò)大量的測(cè)試以及I年多工業(yè)運(yùn)用表明,該通信協(xié)議及通信系統(tǒng)取得了很好的效果,完全達(dá)到了工業(yè)機(jī)器人通信的要求。

 

轉(zhuǎn)載請(qǐng)注明出處。

暫無(wú)關(guān)鍵詞
免責(zé)聲明

① 凡本網(wǎng)未注明其他出處的作品,版權(quán)均屬于激光制造網(wǎng),未經(jīng)本網(wǎng)授權(quán)不得轉(zhuǎn)載、摘編或利用其它方式使用。獲本網(wǎng)授權(quán)使用作品的,應(yīng)在授權(quán)范圍內(nèi)使 用,并注明"來(lái)源:激光制造網(wǎng)”。違反上述聲明者,本網(wǎng)將追究其相關(guān)責(zé)任。
② 凡本網(wǎng)注明其他來(lái)源的作品及圖片,均轉(zhuǎn)載自其它媒體,轉(zhuǎn)載目的在于傳遞更多信息,并不代表本媒贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé),版權(quán)歸原作者所有,如有侵權(quán)請(qǐng)聯(lián)系我們刪除。
③ 任何單位或個(gè)人認(rèn)為本網(wǎng)內(nèi)容可能涉嫌侵犯其合法權(quán)益,請(qǐng)及時(shí)向本網(wǎng)提出書(shū)面權(quán)利通知,并提供身份證明、權(quán)屬證明、具體鏈接(URL)及詳細(xì)侵權(quán)情況證明。本網(wǎng)在收到上述法律文件后,將會(huì)依法盡快移除相關(guān)涉嫌侵權(quán)的內(nèi)容。

網(wǎng)友點(diǎn)評(píng)
0相關(guān)評(píng)論
精彩導(dǎo)讀