基于CAN總線的機(jī)械手控制系統(tǒng)
1引言
本文引用地址:http://m.butianyuan.cn/article/163547.htm機(jī)械手可在空間抓放物體,動(dòng)作靈活多樣,適用于可變換生產(chǎn)品種的中、小批量自動(dòng)化生產(chǎn),廣泛應(yīng)用于柔性自動(dòng)線。我們開(kāi)發(fā)的用于熱處理淬火加工的物料搬運(yùn)機(jī)械手,是一種按預(yù)先設(shè)定的程序進(jìn)行工件分揀、搬運(yùn)和淬火加工的自動(dòng)化裝置,可部分代替人工在高溫和危險(xiǎn)的作業(yè)區(qū)進(jìn)行單調(diào)持久的作業(yè),并可根據(jù)工件的變化以及淬火工藝的要求隨時(shí)更改相關(guān)控制參數(shù)。由于目前許多商品化的工業(yè)機(jī)器人(或機(jī)械手)大都采用封閉結(jié)構(gòu)的專用控制系統(tǒng),一般采用專用計(jì)算機(jī)(如PUMA工業(yè)機(jī)器人使用PDP-11)作為上層主控計(jì)算機(jī),使用專用機(jī)器人語(yǔ)言(如VAL)作為離線編程工具,采用專用微處理器,并將控制算法固化在EPROM中[1],這種專用系統(tǒng)很難進(jìn)行擴(kuò)展、修改或再集成外部硬件(如傳感器)和軟件。因此,我們自行開(kāi)發(fā)了氣、電混合驅(qū)動(dòng)的三自由度圓柱坐標(biāo)型機(jī)械手以及相應(yīng)的物料分揀裝置,并根據(jù)其控制要求設(shè)計(jì)了基于CAN總線的分式布開(kāi)放結(jié)構(gòu)機(jī)械手控制系統(tǒng)。
本文重點(diǎn)闡述了該機(jī)械手控制系統(tǒng)的結(jié)構(gòu)組成,并從多個(gè)方面對(duì)控制系統(tǒng)軟件的設(shè)計(jì)方法作了進(jìn)一步分析。
2機(jī)械手基本結(jié)構(gòu)
物料搬運(yùn)機(jī)械手由機(jī)械手和物料分揀兩部分裝置組成。如圖1所示,機(jī)械手主要由機(jī)座(采用步進(jìn)電機(jī)驅(qū)動(dòng)旋轉(zhuǎn))、水平手臂(采用直線坐標(biāo)氣缸HMP-20-200)、垂直手臂(采用滑塊氣缸SLT-16-50)、氣爪(采用平行氣爪HGP-10-A)等部分組成。物料分揀裝置則由三個(gè)普通氣缸構(gòu)成,用以將不同長(zhǎng)度的工件送至不同的軌道中,供機(jī)械手分別抓取和搬運(yùn)。
圖1物料搬運(yùn)機(jī)械手結(jié)構(gòu)簡(jiǎn)圖
在機(jī)械手控制系統(tǒng)的開(kāi)發(fā)中,我們始終立足于開(kāi)放結(jié)構(gòu)機(jī)械手控制器的設(shè)計(jì)思想,主要體現(xiàn)在以下幾方面:
?。?)硬件基于標(biāo)準(zhǔn)總線結(jié)構(gòu),能實(shí)現(xiàn)現(xiàn)場(chǎng)設(shè)備之間、設(shè)備與各種傳感器之間以及現(xiàn)場(chǎng)設(shè)備與控制室之間的數(shù)據(jù)通信。
現(xiàn)場(chǎng)總線是當(dāng)今自動(dòng)化領(lǐng)域技術(shù)發(fā)展的熱點(diǎn)之一,被譽(yù)為自動(dòng)化領(lǐng)域的計(jì)算機(jī)局域網(wǎng)。CAN(ControllerAreaNetwork)總線是現(xiàn)場(chǎng)總線的一個(gè)分支,是應(yīng)用于生產(chǎn)現(xiàn)場(chǎng)控制設(shè)備之間實(shí)現(xiàn)雙向串行多節(jié)點(diǎn)數(shù)字通信的系統(tǒng),是開(kāi)放式、數(shù)字式的底層控制網(wǎng)絡(luò)。因其具有很高的可靠性和性能價(jià)格比,已經(jīng)成為國(guó)際標(biāo)準(zhǔn),受到工業(yè)界的廣泛重視,并已被公認(rèn)為幾種最有前途的現(xiàn)場(chǎng)總線之一。機(jī)械手控制系統(tǒng)建立在CAN總線網(wǎng)絡(luò)基礎(chǔ)上,能夠更好地滿足其開(kāi)放性和可靠性的要求。
如圖2所示,控制系統(tǒng)中上位機(jī)采用PC機(jī),在上位機(jī)的PCI總線插槽中安裝了瑞隆德公司的CANPCA單口CAN總線適配卡。下位機(jī)則采用若干CAN總線智能節(jié)點(diǎn),分別與氣閥、步進(jìn)電機(jī)驅(qū)動(dòng)器、傳感器、開(kāi)關(guān)等相連。上、下位機(jī)間的數(shù)據(jù)通信都是通過(guò)各自的CAN總線控制器SJA1000芯片和CAN總線收發(fā)器82C250芯片來(lái)實(shí)現(xiàn)的。其中,SJA1000具有完成CAN總線通信協(xié)議所要求的全部特性,它與獨(dú)立CAN總線控制器82C200完全兼容,并有支持CAN2.0B協(xié)議、擴(kuò)展接收緩沖器、增強(qiáng)錯(cuò)誤處理能力和增強(qiáng)驗(yàn)收濾波等新增功能。四個(gè)下位機(jī)智能節(jié)點(diǎn)各自獨(dú)立完成現(xiàn)場(chǎng)數(shù)據(jù)采集和運(yùn)行控制任務(wù),并通過(guò)SJA1000實(shí)現(xiàn)與上位機(jī)間的數(shù)據(jù)接收和發(fā)送。而上位機(jī)則通過(guò)PCI橋和接口控制電路來(lái)訪問(wèn)CAN控制器,從而實(shí)現(xiàn)與下位機(jī)間的數(shù)據(jù)通信。
圖2物料搬運(yùn)機(jī)械手CAN總線控制系統(tǒng)示意圖
?。?)使用基于非專用計(jì)算機(jī)平臺(tái)的開(kāi)發(fā)系統(tǒng)(本控制系統(tǒng)中采用PC機(jī))。
(3)使用標(biāo)準(zhǔn)的操作系統(tǒng)和標(biāo)準(zhǔn)的控制語(yǔ)言。
機(jī)械手控制系統(tǒng)監(jiān)控軟件采用VisualC++6.0作為開(kāi)發(fā)工具,運(yùn)行于Windows98平臺(tái)上。VC是一種面向?qū)ο蟮木幊陶Z(yǔ)言,它提供了可視化編程環(huán)境,特別是提供了MFC類庫(kù),封裝了WindowsAPI接口函數(shù),并建立了應(yīng)用程序框架,使程序開(kāi)發(fā)人員可以將主要精力集中于所要解決的具體問(wèn)題上。
另外,在機(jī)械手的水平手臂氣缸伺服控制中,采用德國(guó)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ū)動(dòng)器。
4機(jī)械手控制系統(tǒng)監(jiān)控軟件設(shè)計(jì)
4.1監(jiān)控軟件基本結(jié)構(gòu)
機(jī)械手監(jiān)控軟件采用VC++6.0作為開(kāi)發(fā)工具,應(yīng)用其提供的MFC類庫(kù)和APPWizard功能生成SDI單文檔界面應(yīng)用程序。VC++6.0提供了現(xiàn)成的窗口、工具條等制作手段,大大簡(jiǎn)化了界面的開(kāi)發(fā)過(guò)程,并且使得開(kāi)發(fā)出的界面具有組態(tài)軟件風(fēng)格,使用起來(lái)方便、靈活。如圖3所示,監(jiān)控軟件主要由系統(tǒng)界面、CAN總線通信、機(jī)械手監(jiān)控以及運(yùn)行狀態(tài)顯示等模塊組成。下面就其中的數(shù)據(jù)通信、運(yùn)行監(jiān)控及動(dòng)態(tài)顯示部分作進(jìn)一步分析。
圖3機(jī)械手監(jiān)控軟件功能框圖
4.2CAN總線數(shù)據(jù)通信
CAN總線是一種有效支持分布式控制及實(shí)時(shí)控制的多主串行總線,它具有短報(bào)文幀收發(fā)靈活、非破壞性基于優(yōu)先權(quán)的總線仲裁技術(shù)等多種優(yōu)越性能。在機(jī)械手控制系統(tǒng)中,CAN總線數(shù)據(jù)通信是通過(guò)與CANPCA適配卡一起提供Pcicandrv.LIB(CAN總線函數(shù)庫(kù))中的相關(guān)函數(shù)調(diào)用實(shí)現(xiàn)的[5]。為了及時(shí)準(zhǔn)確地了解CAN總線狀態(tài),并盡可能減少故障和縮小故障范圍,在控制軟件中專門(mén)設(shè)計(jì)了測(cè)試程序,負(fù)責(zé)CAN總線接口及通信部分的調(diào)試、運(yùn)行任務(wù)。只有在測(cè)試正常的前提下,才能進(jìn)一步運(yùn)用CAN總線對(duì)機(jī)械手進(jìn)行控制。CAN總線數(shù)據(jù)有標(biāo)準(zhǔn)幀和擴(kuò)展幀之分,它們都是由信息和數(shù)據(jù)兩部分組成的,只是地址標(biāo)識(shí)符的位數(shù)不同。下面是CAN總線初始化及CAN標(biāo)準(zhǔn)幀數(shù)據(jù)收發(fā)的部分代碼。
//CAN總線初始化
voidCWuLiao::InitCAN()
?。?/p>
intretval;
retval=CAN_Open();//打開(kāi)PCI適配卡函數(shù)
if(retval!=1)AfxMessageBox(打開(kāi)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é)點(diǎn)地址
ptrStruct->card=0;//PCI適配卡卡號(hào)
ptrConfig->accCode=0;//CAN接收碼
ptrConfig->accMask=0xff;//CAN屏蔽碼
ptrConfig->control=1;//開(kāi)放中斷
ptrConfig->filterMode=0;//CAN控制器采用單濾波方式
retval=CAN_Init(ptrStruct,ptrConfig);//調(diào)CAN初始化函數(shù)
if(retval!=1)AfxMessageBox(初始化失敗!);
}
//CAN數(shù)據(jù)發(fā)送
voidCWuLiao::OutputCAN(unsignedintCanID,unsignedcharH8B,unsignedcharL8B)
?。?/p>
intretval;
ptrPacket=Packet;
ptrStruct=Struct;
ptrStruct->card=0;
ptrPacket->length=4;//發(fā)送數(shù)據(jù)長(zhǎng)度4個(gè)字節(jié)
ptrPacket->rtr=0;//表示發(fā)送的是數(shù)據(jù)幀,而非遠(yuǎn)程幀
ptrPacket->CAN_ID=CanID;//定義CAN節(jié)點(diǎn)地址
ptrPacket->data[0]=0x44;
ptrPacket->data[1]=0x4f;//CAN數(shù)據(jù)發(fā)送命令字
ptrPacket->data[2]=H8B;
ptrPacket->data[3]=L8B;//要發(fā)送的高、低字節(jié)
評(píng)論