技術(shù)頻道

娓娓工業(yè)
您現(xiàn)在的位置: 中國傳動網(wǎng) > 技術(shù)頻道 > 技術(shù)百科 > 基于CAN總線的機(jī)械手控制系統(tǒng)

基于CAN總線的機(jī)械手控制系統(tǒng)

時間:2008-08-20 10:07:00來源:ronggang

導(dǎo)語:?基于現(xiàn)場總線的開放結(jié)構(gòu)機(jī)械手控制系統(tǒng)是目前機(jī)械手控制的發(fā)展方向。文章通過對物料搬運機(jī)械手裝置及其控制系統(tǒng)的介紹,提出了基于CAN總線的機(jī)械手控制系統(tǒng)方案
摘 要:基于現(xiàn)場總線的開放結(jié)構(gòu)機(jī)械手控制系統(tǒng)是目前機(jī)械手控制的發(fā)展方向。文章通過對物料搬運機(jī)械手裝置及其控制系統(tǒng)的介紹,提出了基于CAN總線的機(jī)械手控制系統(tǒng)方案,分析了控制系統(tǒng)的結(jié)構(gòu)組成,并對在Windows98平臺上用VC++6.0開發(fā)CAN總線控制系統(tǒng)軟件進(jìn)行了較為詳細(xì)的論述。 關(guān)鍵詞:CAN總線 機(jī)械手 開放結(jié)構(gòu)控制 VC++6.0 1 引言   機(jī)械手可在空間抓放物體,動作靈活多樣,適用于可變換生產(chǎn)品種的中、小批量自動化生產(chǎn),廣泛應(yīng)用于柔性自動線。我們開發(fā)的用于熱處理淬火加工的物料搬運機(jī)械手,是一種按預(yù)先設(shè)定的程序進(jìn)行工件分揀、搬運和淬火加工的自動化裝置,可部分代替人工在高溫和危險的作業(yè)區(qū)進(jìn)行單調(diào)持久的作業(yè),并可根據(jù)工件的變化以及淬火工藝的要求隨時更改相關(guān)控制參數(shù)。由于目前許多商品化的工業(yè)機(jī)器人(或機(jī)械手)大都采用封閉結(jié)構(gòu)的專用控制系統(tǒng),一般采用專用計算機(jī)(如PUMA工業(yè)機(jī)器人使用PDP-11)作為上層主控計算機(jī),使用專用機(jī)器人語言(如VAL)作為離線編程工具,采用專用微處理器,并將控制算法固化在EPROM中[1],這種專用系統(tǒng)很難進(jìn)行擴(kuò)展、修改或再集成外部硬件(如傳感器)和軟件。因此,我們自行開發(fā)了氣、電混合驅(qū)動的三自由度圓柱坐標(biāo)型機(jī)械手以及相應(yīng)的物料分揀裝置,并根據(jù)其控制要求設(shè)計了基于CAN總線的分式布開放結(jié)構(gòu)機(jī)械手控制系統(tǒng)。   本文重點闡述了該機(jī)械手控制系統(tǒng)的結(jié)構(gòu)組成,并從多個方面對控制系統(tǒng)軟件的設(shè)計方法作了進(jìn)一步分析。 2 機(jī)械手基本結(jié)構(gòu)   物料搬運機(jī)械手由機(jī)械手和物料分揀兩部分裝置組成。如圖1所示,機(jī)械手主要由機(jī)座(采用步進(jìn)電機(jī)驅(qū)動旋轉(zhuǎn))、水平手臂(采用直線坐標(biāo)氣缸HMP-20-200)、垂直手臂(采用滑塊氣缸SLT-16-50)、氣爪(采用平行氣爪HGP-10-A)等部分組成。物料分揀裝置則由三個普通氣缸構(gòu)成,用以將不同長度的工件送至不同的軌道中,供機(jī)械手分別抓取和搬運。 [align=center] 圖1 物料搬運機(jī)械手結(jié)構(gòu)簡圖[/align] 3 基于CAN總線的機(jī)械手控制系統(tǒng)組成   在機(jī)械手控制系統(tǒng)的開發(fā)中,我們始終立足于開放結(jié)構(gòu)機(jī)械手控制器的設(shè)計思想[2],主要體現(xiàn)在以下幾方面:  ?。?) 硬件基于標(biāo)準(zhǔn)總線結(jié)構(gòu),能實現(xiàn)現(xiàn)場設(shè)備之間、設(shè)備與各種傳感器之間以及現(xiàn)場設(shè)備與控制室之間的數(shù)據(jù)通信。   現(xiàn)場總線是當(dāng)今自動化領(lǐng)域技術(shù)發(fā)展的熱點之一,被譽(yù)為自動化領(lǐng)域的計算機(jī)局域網(wǎng)。CAN(Controller Area Network)總線是現(xiàn)場總線的一個分支,是應(yīng)用于生產(chǎn)現(xiàn)場控制設(shè)備之間實現(xiàn)雙向串行多節(jié)點數(shù)字通信的系統(tǒng),是開放式、數(shù)字式的底層控制網(wǎng)絡(luò)。因其具有很高的可靠性和性能價格比,已經(jīng)成為國際標(biāo)準(zhǔn),受到工業(yè)界的廣泛重視,并已被公認(rèn)為幾種最有前途的現(xiàn)場總線之一[3]。機(jī)械手控制系統(tǒng)建立在CAN總線網(wǎng)絡(luò)基礎(chǔ)上,能夠更好地滿足其開放性和可靠性的要求。   如圖2所示,控制系統(tǒng)中上位機(jī)采用PC機(jī),在上位機(jī)的PCI總線插槽中安裝了瑞隆德公司的CANPCA單口CAN總線適配卡。下位機(jī)則采用若干CAN總線智能節(jié)點,分別與氣閥、步進(jìn)電機(jī)驅(qū)動器、傳感器、開關(guān)等相連。上、下位機(jī)間的數(shù)據(jù)通信都是通過各自的CAN總線控制器SJA1000芯片和CAN總線收發(fā)器82C250芯片來實現(xiàn)的。其中,SJA1000具有完成CAN總線通信協(xié)議所要求的全部特性,它與獨立CAN總線控制器82C200完全兼容,并有支持CAN2.0B協(xié)議、擴(kuò)展接收緩沖器、增強(qiáng)錯誤處理能力和增強(qiáng)驗收濾波等新增功能。四個下位機(jī)智能節(jié)點各自獨立完成現(xiàn)場數(shù)據(jù)采集和運行控制任務(wù),并通過SJA1000實現(xiàn)與上位機(jī)間的數(shù)據(jù)接收和發(fā)送。而上位機(jī)則通過PCI橋和接口控制電路來訪問CAN控制器,從而實現(xiàn)與下位機(jī)間的數(shù)據(jù)通信。 [align=center] 圖2 物料搬運機(jī)械手CAN總線控制系統(tǒng)示意圖[/align]   (2)使用基于非專用計算機(jī)平臺的開發(fā)系統(tǒng)(本控制系統(tǒng)中采用PC機(jī))。  ?。?)使用標(biāo)準(zhǔn)的操作系統(tǒng)和標(biāo)準(zhǔn)的控制語言。   機(jī)械手控制系統(tǒng)監(jiān)控軟件采用Visual C++6.0作為開發(fā)工具,運行于Windows98平臺上。VC是一種面向?qū)ο蟮木幊陶Z言,它提供了可視化編程環(huán)境,特別是提供了MFC類庫,封裝了Windows API接口函數(shù),并建立了應(yīng)用程序框架,使程序開發(fā)人員可以將主要精力集中于所要解決的具體問題上。   另外,在機(jī)械手的水平手臂氣缸伺服控制中,采用德國Festo公司的伺服定位控制器SPC200以及與之配套的內(nèi)置位移傳感器MLO-POT-0225、伺服定位控制連接器SPC-AIF-POT和比例方向流量閥MPYE-5-1/8-LF-010-B等裝置。機(jī)械手的回轉(zhuǎn)控制則采用北京凱恩帝數(shù)控公司的BD-3Y三相混和式步進(jìn)電機(jī)驅(qū)動器。 4 機(jī)械手控制系統(tǒng)監(jiān)控軟件設(shè)計   4.1 監(jiān)控軟件基本結(jié)構(gòu)   機(jī)械手監(jiān)控軟件采用VC++6.0作為開發(fā)工具,應(yīng)用其提供的MFC類庫和APPWizard功能生成SDI單文檔界面應(yīng)用程序[4]。VC++6.0提供了現(xiàn)成的窗口、工具條等制作手段,大大簡化了界面的開發(fā)過程,并且使得開發(fā)出的界面具有組態(tài)軟件風(fēng)格,使用起來方便、靈活。如圖3所示,監(jiān)控軟件主要由系統(tǒng)界面、CAN總線通信、機(jī)械手監(jiān)控以及運行狀態(tài)顯示等模塊組成。下面就其中的數(shù)據(jù)通信、運行監(jiān)控及動態(tài)顯示部分作進(jìn)一步分析。 [align=center] 圖3 機(jī)械手監(jiān)控軟件功能框圖[/align]   4.2 CAN總線數(shù)據(jù)通信   CAN總線是一種有效支持分布式控制及實時控制的多主串行總線,它具有短報文幀收發(fā)靈活、非破壞性基于優(yōu)先權(quán)的總線仲裁技術(shù)等多種優(yōu)越性能。在機(jī)械手控制系統(tǒng)中,CAN總線數(shù)據(jù)通信是通過與CANPCA適配卡一起提供Pcicandrv.LIB(CAN總線函數(shù)庫)中的相關(guān)函數(shù)調(diào)用實現(xiàn)的[5]。為了及時準(zhǔn)確地了解CAN總線狀態(tài),并盡可能減少故障和縮小故障范圍,在控制軟件中專門設(shè)計了測試程序,負(fù)責(zé)CAN總線接口及通信部分的調(diào)試、運行任務(wù)。只有在測試正常的前提下,才能進(jìn)一步運用CAN總線對機(jī)械手進(jìn)行控制。CAN總線數(shù)據(jù)有標(biāo)準(zhǔn)幀和擴(kuò)展幀之分,它們都是由信息和數(shù)據(jù)兩部分組成的,只是地址標(biāo)識符的位數(shù)不同。下面是CAN總線初始化及CAN標(biāo)準(zhǔn)幀數(shù)據(jù)收發(fā)的部分代碼。   //CAN總線初始化   void CWuLiao::InitCAN()   {   int retval;   retval =CAN_Open(); //打開PCI適配卡函數(shù)   if(retval!=1) AfxMessageBox("打開PCI卡失敗!");   ptrConfig = &Config;   ptrStruct = &Struct; //定義CAN數(shù)據(jù)幀結(jié)構(gòu)指針   ptrConfig->timer0=0x3f;   ptrConfig->timer1=0xff; //設(shè)置波特率為5K   ptrConfig->workMode=0; //使用11位的CAN節(jié)點地址   ptrStruct->card=0; //PCI適配卡卡號   ptrConfig->accCode=0; //CAN接收碼   ptrConfig->accMask=0xff; //CAN屏蔽碼   ptrConfig->control=1; //開放中斷   ptrConfig->filterMode=0; //CAN控制器采用單濾波方式   retval =CAN_Init(ptrStruct,ptrConfig); //調(diào)CAN初始化函數(shù)   if(retval!=1) AfxMessageBox("初始化失敗!");  ?。?   //CAN數(shù)據(jù)發(fā)送   void CWuLiao::OutputCAN(unsigned int CanID,unsigned char H8B,unsigned char L8B)   {   int retval;   ptrPacket = &Packet;   ptrStruct = &Struct;   ptrStruct->card=0;   ptrPacket->length=4;//發(fā)送數(shù)據(jù)長度4個字節(jié)   ptrPacket->rtr=0;//表示發(fā)送的是數(shù)據(jù)幀,而非遠(yuǎn)程幀   ptrPacket->CAN_ID=CanID;//定義CAN節(jié)點地址   ptrPacket->data[0]=0x44;   ptrPacket->data[1]=0x4f;//CAN數(shù)據(jù)發(fā)送命令字   ptrPacket->data[2]=H8B;   ptrPacket->data[3]=L8B;//要發(fā)送的高、低字節(jié)   retval=CAN_Trans(ptrStruct,ptrPacket);//調(diào)發(fā)送數(shù)據(jù)幀函數(shù)  ?。?   //CAN數(shù)據(jù)接收   void CWuLiao::InputCAN(unsigned int ID)   {   ptrPacket = &Packet;   ptrStruct = &Struct;   int Rece_Length,retval,n;   ptrStruct->card=0;   ptrPacket->length=2;   ptrPacket->rtr=0;   ptrPacket->CAN_ID=ID;   ptrPacket->data[0]=0x44;   ptrPacket->data[1]=0x49; //CAN數(shù)據(jù)接收命令字   retval=CAN_Trans(ptrStruct,ptrPacket); //調(diào)發(fā)送數(shù)據(jù)幀函數(shù),發(fā)出接收命令   if(retval==1)  ?。?   retval=CAN_Rece(ptrStruct,ptrPacket); //調(diào)接收數(shù)據(jù)幀函數(shù)   if(retval==1) //接收成功,則返回值為1  ?。?   Rece_Length=ptrPacket->length; //取接收到的數(shù)據(jù)長度   for(n=0;n  ?。?   Rece_Data[n]=ptrPacket->data[n]; //接收到的數(shù)據(jù)從ptrPacket的成員變量Data中讀取,Race.Data[8]已 設(shè)置為全局變量  ?。?  ?。?  ?。?  ?。?   4.3 多線程技術(shù)在機(jī)械手實時監(jiān)控中的應(yīng)用   機(jī)械手控制程序是在Windows98下開發(fā)的,除了具有豐富的用戶圖形操作界面,該控制程序還需完成實時數(shù)據(jù)采集和控制任務(wù)。然而Windows98并不是實時操作系統(tǒng),它是基于消息驅(qū)動機(jī)制的搶先式多任務(wù)系統(tǒng),沒有提供足夠的實時處理功能。因此,在程序開發(fā)中,我們采用多線程技術(shù)來實現(xiàn)系統(tǒng)的實時功能。線程是多任務(wù)的基本單元,是操作系統(tǒng)用來調(diào)度執(zhí)行的最小單位[3]。一個進(jìn)程可以由多個線程組成,系統(tǒng)調(diào)度程序?qū)PU時間片劃分給各個線程,各個線程在各自的時間片內(nèi)使用CPU,從而實現(xiàn)了微觀上輪流執(zhí)行、宏觀上并發(fā)運行的多任務(wù)效果。   為了避免機(jī)械手控制軟件前臺顯示界面因CAN總線數(shù)據(jù)采集和機(jī)械手控制指令的程序循環(huán)而導(dǎo)致響應(yīng)過慢或任務(wù)阻塞(Blocking)現(xiàn)象,增強(qiáng)應(yīng)用程序的快速響應(yīng)特性,我們將主要的數(shù)據(jù)采集和控制任務(wù):“機(jī)械手搬運”及“物料分揀”定義成獨立的可以按并行方式執(zhí)行的工作線程,讓這個工作線程在后臺通過對CAN總線節(jié)點的讀寫完成數(shù)據(jù)輸入和控制參數(shù)輸出的任務(wù)。前臺顯示界面則通過PostMessage()函數(shù)與后臺數(shù)據(jù)采集及控制程序進(jìn)行通信,以共享數(shù)據(jù)單元的方式得到實時采集數(shù)據(jù)并加以顯示。在“機(jī)械手系統(tǒng)運行”界面中設(shè)置了一個按鈕用于數(shù)據(jù)采集和控制線程的啟動。以下給出部分“送料缸”運行控制代碼:   //設(shè)置全局變量   int Rece_Data[8]; //CAN輸入數(shù)據(jù)數(shù)組   //以下是主線程   ……   #define WM_THREADCAN WMUSER+10 //用戶消息定義   ……   ON_MESSAGE(WM_THREADCAN,OnThreadCAN) //用宏將消息和處理函數(shù)聯(lián)系起來   ……   LRESULT CWuLiao::OnThreadCAN(WPARAM wParam,LPARAM lParam)  ?。?   CWuLiao::InputCAN(0x10); //讀2#CAN節(jié)點輸入狀態(tài)   if (Rece_Data[2]==0x7e) CWuLiao::OutputCAN(0x10,0x00,0x55); //滿足條件,則輸出控制送料缸運動   ……   return 0;  ?。?   void CWuLiao::OnWuLiaoThread()  ?。?   InitCAN(); //CAN總線初始化   pThread=AfxBeginThread(CAN_IN,GetSafeHwnd(),THREAD_PRIORITY_NORMAL); //創(chuàng)建工作線程  ?。?   //以下是CAN數(shù)據(jù)采集和控制子線程   UINT CAN_IN(LPVOID pParam)  ?。?   HWND hWnd;   hWnd=(HWND)param;   do  ?。?   PostMessage(hWnd,WM_THREADCAN,0,0);   Sleep(10);  ?。?   while (Rece_Data[2]!=0xef); //停止按鈕按下則中止工作線程   return 0;  ?。?   上述代碼中,由主線程建立并初始化子線程,而子線程負(fù)責(zé)讀取CAN節(jié)點的狀態(tài)數(shù)據(jù),并通過分析、計算給出相應(yīng)的控制信號,完成控制任務(wù)。子線程一旦被創(chuàng)建,它將獨立于創(chuàng)建它的主線程運行。由于一個進(jìn)程中的所有線程都共享該進(jìn)程的虛擬地址空間,從而可以通過將主線程和子線程間需共享的數(shù)據(jù)聲明為全局變量的方法來訪問該進(jìn)程的所有全局變量。在機(jī)械手監(jiān)控程序中引入多線程機(jī)制,充分利用了Windows系統(tǒng)的多任務(wù)特點,可以有效地克服CAN總線數(shù)據(jù)采集和控制過程中的停滯和反應(yīng)不及時現(xiàn)象,并能大大提高程序的運行效率和可靠性。   4.4 機(jī)械手運行過程的動態(tài)顯示   工業(yè)監(jiān)控軟件中,現(xiàn)場采集來的數(shù)據(jù)都需要以某種方式表示在屏幕上。在機(jī)械手系統(tǒng)中,主要的控制對象是氣缸和步進(jìn)電機(jī),為了能直觀地反映出它們的運行狀態(tài),必須將CAN總線采集到的各傳感器狀態(tài)以及運動部件的運行情況以動畫的形式表現(xiàn)出來。為此,我們采用了ActiveX控件開發(fā)及應(yīng)用技術(shù)。ActiveX控件是微軟公司提供的功能強(qiáng)大的程序設(shè)計和開發(fā)技術(shù),它是提高程序開放性和可重用性的重要手段。在機(jī)械手控制程序中,通過MFC ActiveX Control Wizard建立了一個名為jixieshou的ActiveX控制的應(yīng)用程序框架,并在其中生成了可動態(tài)顯示的機(jī)械手裝置圖形控件。通過對該控件中諸如氣缸寬度、高度等屬性的設(shè)置來改變控件的形狀;通過氣缸活塞每移動一步的延時和每移動一步的距離來改變氣缸的運動速度;通過調(diào)用該控件的接口函數(shù)來顯示氣缸、步進(jìn)電機(jī)、傳感器等的運動和狀態(tài)。而上述行為的發(fā)生是由CAN總線數(shù)據(jù)采集和控制子線程向主線程傳遞相應(yīng)全局變量的值引發(fā)的,由此將圖形顯示與實物動作緊密聯(lián)系。 5 結(jié)束語   利用CAN總線技術(shù),并采用面向?qū)ο蟮某绦蛟O(shè)計方法以及多線程技術(shù)、ActiveX技術(shù)等,可以使監(jiān)控軟件具有較強(qiáng)的通用性、可擴(kuò)展性和可靠性,同時進(jìn)一步提高了控制系統(tǒng)的開放性和實時性。通過在物料搬運機(jī)械手控制中的應(yīng)用表明:該控制系統(tǒng)運行可靠,能夠完全滿足設(shè)計要求。 參考文獻(xiàn):   [1] 周學(xué)才,李衛(wèi)平,李強(qiáng). 開放式機(jī)器人通用控制系統(tǒng),機(jī)器人. 1998,20(1).   [2] William E. Ford. What is an Open Architecture Robot Controller?1994 IEEE International Symposium on Intelligent Control ,16-18 August,1994.Columbus,Ohio,USA.   [3] 陽憲惠. 現(xiàn)場總線技術(shù)及其應(yīng)用. 清華大學(xué)出版社,1999.6.   [4] 胡哲源. 掌握Visual C++—MFC程序設(shè)計與剖析. 清華大學(xué)出版社,2001.7.   [5] 瑞隆德公司. PCI非智能卡使用說明書. 2002.

標(biāo)簽:

點贊

分享到:

上一篇:基于NI虛擬儀器的電流變網(wǎng)絡(luò)...

下一篇:微能WIN-V63矢量控制變頻器在...

中國傳動網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來源:中國傳動網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國傳動網(wǎng)(www.treenowplaneincome.com)獨家所有。如需轉(zhuǎn)載請與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個人轉(zhuǎn)載使用時須注明來源“中國傳動網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明其他來源的稿件,均來自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請保留稿件來源及作者,禁止擅自篡改,違者自負(fù)版權(quán)法律責(zé)任。

網(wǎng)站簡介|會員服務(wù)|聯(lián)系方式|幫助信息|版權(quán)信息|網(wǎng)站地圖|友情鏈接|法律支持|意見反饋|sitemap

中國傳動網(wǎng)-工業(yè)自動化與智能制造的全媒體“互聯(lián)網(wǎng)+”創(chuàng)新服務(wù)平臺

網(wǎng)站客服服務(wù)咨詢采購咨詢媒體合作

Chuandong.com Copyright ?2005 - 2024 ,All Rights Reserved 版權(quán)所有 粵ICP備 14004826號 | 營業(yè)執(zhí)照證書 | 不良信息舉報中心 | 粵公網(wǎng)安備 44030402000946號