潘 策,姜凌羽
(1.大連高金數(shù)控技術(shù)有限公司,遼寧 大連 116001;2.北京航空航天大學(xué) 機(jī)械工程及自動(dòng)化學(xué)院,北京 100083)
開放式的數(shù)控系統(tǒng)是隨著計(jì)算機(jī)數(shù)控系統(tǒng)(CNC)的飛速發(fā)展而逐漸成為現(xiàn)代機(jī)床控制領(lǐng)域的新方向,其體系結(jié)構(gòu)的標(biāo)準(zhǔn)化、柔性化、功能模塊化以及超強(qiáng)的可擴(kuò)展性和移植性,特別是它能夠通過現(xiàn)場(chǎng)總線將單個(gè)設(shè)備連接,實(shí)現(xiàn)控制的網(wǎng)絡(luò)化和集成化,這是傳統(tǒng)的體系結(jié)構(gòu)所無法比擬的。在軟件應(yīng)用平臺(tái)開發(fā)上也具有更加寬廣的空間,能滿足不同用戶對(duì)其二次開發(fā)的不同需求。
在開放式數(shù)控系統(tǒng)中主要有兩大功能模塊:運(yùn)動(dòng)控制模塊和伺服控制模塊。運(yùn)動(dòng)控制模塊主要實(shí)現(xiàn)位置環(huán)的控制;伺服控制模塊主要實(shí)現(xiàn)速度環(huán)和電流環(huán)的控制。運(yùn)動(dòng)控制模塊通過特定的控制算法將機(jī)床位置參數(shù)轉(zhuǎn)化成速度指令,傳遞給伺服控制模塊,后者將傳來的速度指令和速度反饋值比較,其偏差作為速度控制器收入,其輸出為轉(zhuǎn)矩給定,并和電流環(huán)的反饋值比較,經(jīng)轉(zhuǎn)矩/電流變換后得到轉(zhuǎn)矩電流給定,從而完成一次完整的三環(huán)閉環(huán)控制。電流環(huán)是內(nèi)環(huán),速度環(huán)是中間環(huán),位置環(huán)是外環(huán)。機(jī)床電機(jī)得到是電流輸出值,而實(shí)現(xiàn)的是機(jī)床的位置控制,因此運(yùn)動(dòng)控制模塊決定了開放式數(shù)控系統(tǒng)的精度。
IEEE關(guān)于開放式系統(tǒng)的定義是:開放式系統(tǒng)能有效地運(yùn)行于不同的平臺(tái)之上,可以與其他應(yīng)用系統(tǒng)相互操作,并提供與用戶交互的統(tǒng)一風(fēng)格,即所謂互操作性、可移植性、可伸縮性和可互換性[1]。
開放式數(shù)控系統(tǒng)平臺(tái)由硬件和軟件組成。系統(tǒng)軟件包括實(shí)時(shí)操作系統(tǒng)、通訊系統(tǒng)、設(shè)備驅(qū)動(dòng)程序以及其它應(yīng)用程序。系統(tǒng)軟件通過標(biāo)準(zhǔn)的應(yīng)用程序接口向應(yīng)用軟件提供服務(wù)。系統(tǒng)硬件包括組成系統(tǒng)的各種物理實(shí)體。
Cunet網(wǎng)(Corective Uncontiunse Network)為無主從式、數(shù)據(jù)共享型現(xiàn)場(chǎng)總線網(wǎng)。特點(diǎn)是:把連接I/O設(shè)備的所有功能集成在一塊邊長(zhǎng)16mm的正方形IC芯片中,可省去使用者許多復(fù)雜的事先設(shè)置工作;僅用2條線,連接所有的I/O局,有極高的可維護(hù)性;IC芯片內(nèi)帶高性能糾錯(cuò)功能,具有極好的耐環(huán)境性;采用數(shù)據(jù)共享式通訊網(wǎng)絡(luò)組織方式,整個(gè)網(wǎng)絡(luò)溶為一體;不僅僅傳送I/O數(shù)據(jù),更可傳送網(wǎng)絡(luò)通訊局自身的有關(guān)信息。一個(gè)CUnet網(wǎng)絡(luò)中最多可連接64臺(tái)I/O設(shè)備。64臺(tái)I/O設(shè)備共享所有的I/O信息[2]。
MKY40是為Cunet總線網(wǎng)絡(luò)而配置的集成芯片,將各個(gè)站點(diǎn)通過MKY40相連接,可以形成分布式處理系統(tǒng)網(wǎng)絡(luò),從而增強(qiáng)整個(gè)網(wǎng)絡(luò)的存儲(chǔ)和處理能力[2]。
Cunet有兩種工作模式:內(nèi)存模
式和I/O模式。兩種模式之間可以通過硬件設(shè)置相互轉(zhuǎn)換。處于內(nèi)存模式的MKY40有兩個(gè)接口:總線接口(BUS-I/F)和網(wǎng)絡(luò)接口(Network I/F),將BUSI/F和用戶端CPU連接,同時(shí)將Network I/F和網(wǎng)絡(luò)連接,可以在Cunet總線網(wǎng)絡(luò)創(chuàng)建一個(gè)內(nèi)存基站[2]。
MCX314是日本NOVA電子公司研制的DSP運(yùn)動(dòng)控制專用芯片,能實(shí)現(xiàn)4軸3聯(lián)運(yùn)動(dòng)的位置、速度、加速度控制和直線、圓弧、位元3種模式的連續(xù)插補(bǔ)位置環(huán)閉環(huán)控制,其性能優(yōu)良、接口簡(jiǎn)單編程方便,廣泛應(yīng)用于數(shù)控機(jī)床和機(jī)器人控制領(lǐng)域。
本文采用的是通用PC加實(shí)時(shí)控制單元的雙內(nèi)核控制結(jié)構(gòu)。利用PC機(jī)的Linux形成完善的人機(jī)界面,同時(shí)用軟件來實(shí)現(xiàn)各種先進(jìn)的控制技術(shù);開放式結(jié)構(gòu)平臺(tái)可以集成不同開發(fā)商提供的軟件并適合聯(lián)網(wǎng)需要,且具有與硬件無關(guān)的特性。如圖1所示。
圖1 基于PCI總線的運(yùn)動(dòng)控制原理圖
PCI9052是連接PCI總線和MCX314的橋接口電路芯片,從PC機(jī)中發(fā)來的加工參數(shù)、插補(bǔ)軌跡以及狀態(tài)信息通過PCI總線傳到PCI9052的高速緩存FIFO中,PCI9052作為總線主設(shè)備將PC機(jī)傳來的信息經(jīng)過緩存最終存儲(chǔ)到MKY40內(nèi),由于MKY40映射為PC機(jī)的一部分內(nèi)存地址所以PC機(jī)就像操作內(nèi)存一樣將信息存儲(chǔ)到MKY40,等待MCX314的讀取。MCX314定時(shí)從MKY40中讀取PC機(jī)傳來的各種控制信息。MCX314的主要功能是根據(jù)PC機(jī)送來的插補(bǔ)信息通過插補(bǔ)算。如圖2所示。
圖2 PCI9052與PCI總線和MCX314的接口電路
在Linux下,驅(qū)動(dòng)程序處于“核心態(tài)”,所有的硬件設(shè)備都被映射為文件,對(duì)外提供統(tǒng)一的標(biāo)準(zhǔn)的軟件調(diào)用接口。上層軟件通過fopen(),fread(),fwrite()等,透明地在用戶層對(duì)硬件實(shí)現(xiàn)控制[4]。
驅(qū)動(dòng)程序的主要工作是:監(jiān)控板卡狀態(tài),控制板卡的熱插拔和熱交換;提供應(yīng)用程序訪問接口;從RAM中取出指令數(shù)據(jù);根據(jù)應(yīng)用程序的讀寫請(qǐng)求,將數(shù)據(jù)提供給應(yīng)用程序。
PCI設(shè)備的驅(qū)動(dòng)程序主要解決的首先是即插即用問題,如何獲取系統(tǒng)分配給該設(shè)備的配置資源,然后是如何訪問設(shè)備I/O內(nèi)存映射硬件,如果處理硬件中斷,最后還要解決和應(yīng)用程序的通訊問題。
圖3 基于PCI總線的運(yùn)動(dòng)控制原理圖
3.1.1 設(shè)備驅(qū)動(dòng)程序的結(jié)構(gòu)
Linux的設(shè)備驅(qū)動(dòng)程序大致可以分為如下幾個(gè)部分:
驅(qū)動(dòng)程序的注冊(cè)與注銷、設(shè)備的打開與釋放、設(shè)備的讀寫操作、設(shè)備的控制操作、設(shè)備的中斷和輪詢處理。
驅(qū)動(dòng)程序的注冊(cè)與注銷:通過在驅(qū)動(dòng)程序的初始化過程中調(diào)用register_chrdev()或者register_blkdev()來完成。而在關(guān)閉字符設(shè)備或者塊設(shè)備時(shí),則需要通過調(diào)unregister_chrdev()或unregister_blkdev()從內(nèi)核中注銷設(shè)備,同時(shí)釋放占用的主設(shè)備號(hào)。
設(shè)備的打開與釋放通過調(diào)用file_operations結(jié)構(gòu)中的函數(shù)open()和release()來完成的。
設(shè)備的讀寫操作:直接使用函數(shù)read()和write()就可以了。
設(shè)備的控制操作:通過設(shè)備驅(qū)動(dòng)程序中的函數(shù)ioctl()來完成。
設(shè)備的中斷和輪詢處理:對(duì)于不支持中斷的硬件設(shè)備,讀寫時(shí)需要輪流查詢?cè)O(shè)備狀態(tài),以便決定是否繼續(xù)進(jìn)行數(shù)據(jù)傳輸。如果設(shè)備支持中斷,則可以按中斷方式進(jìn)行操作。
3.1.2 設(shè)備驅(qū)動(dòng)程序的接口
Linux中的I/O子系統(tǒng)向內(nèi)核中的其他部分提供了一個(gè)統(tǒng)一的標(biāo)準(zhǔn)設(shè)備接口,這是通過include/linux/fs.h中的數(shù)據(jù)結(jié)構(gòu)file_operations來完成。當(dāng)應(yīng)用程序?qū)υO(shè)備文件進(jìn)行諸如open、close、read、write等操作時(shí),Linux內(nèi)核將通過file_operations結(jié)構(gòu)訪問驅(qū)動(dòng)程序提供的函數(shù)。例如,當(dāng)應(yīng)用程序?qū)υO(shè)備文件執(zhí)行讀操作時(shí),內(nèi)核將調(diào)用file_operations結(jié)構(gòu)中的read函數(shù)。
3.1.3 設(shè)備驅(qū)動(dòng)程序的動(dòng)態(tài)加載
從本質(zhì)上來講,模塊也是內(nèi)核的一部分,它不同于普通的應(yīng)用程序,不能調(diào)用位于用戶態(tài)下的C或者C++庫(kù)函數(shù),而只能調(diào)用Linux內(nèi)核提供的函數(shù),在/proc/ksyms中可以查看到內(nèi)核提供的所有函數(shù)。
在以模塊方式編寫驅(qū)動(dòng)程序時(shí),要實(shí)現(xiàn)兩個(gè)必不可少的函數(shù)init_module()和cleanup_module(),而且至少要包含<linux/krernel.h>和<linux/module.h>兩個(gè)頭文件。在用gcc編譯內(nèi)核模塊時(shí),需要加上-DMODULE-D_KERNEL_-DLINUX這幾個(gè)參數(shù),編譯生成的模塊(一般為.o文件)可以使用命令insmod載入Linux內(nèi)核,從而成為內(nèi)核的一個(gè)組成部分,此時(shí)內(nèi)核會(huì)調(diào)用模塊中的函數(shù)init_module()。當(dāng)不需要該模塊時(shí),可以使用rmmod命令進(jìn)行卸載,此進(jìn)內(nèi)核會(huì)調(diào)用模塊中的函數(shù)cleanup_module()。任何時(shí)候都可以使用命令來lsmod查看目前已經(jīng)加載的模塊以及正在使用該模塊的用戶數(shù)。
上層應(yīng)用程序模塊主要包括:人機(jī)接口模塊、解釋程序模塊、PLC接口模塊、插補(bǔ)模塊 、運(yùn)動(dòng)算法模塊五大部分,通過將輸入指令逐步分解、傳達(dá)至運(yùn)動(dòng)控制器,實(shí)現(xiàn)對(duì)機(jī)床的準(zhǔn)確控制,由于軟件采用了模塊化,同時(shí)基于組件技術(shù),所以進(jìn)行軟件升級(jí)以及用戶進(jìn)行二次開發(fā)都比較方便[4]
基于LINUX+RTLINUX雙內(nèi)核開發(fā)平臺(tái)和PCI總線的開放式數(shù)控系統(tǒng),具有實(shí)時(shí)性高、成本低,可移植性和可擴(kuò)展性好,易于二次開發(fā)等優(yōu)點(diǎn),能夠滿足數(shù)控車床、銑床、車銑中心、車削中心,立式和臥式加工中心等高精度機(jī)床的應(yīng)用。
[1]于東,郭銳鋒.開放式數(shù)控系統(tǒng)域建模研究[J].小型微型計(jì)算機(jī)統(tǒng),2000.
[2]Technical report No.006> CUnet Family> MKY40,Method of selecting the crystal oscillator for MKY40,2006.
[3]葉佩青,汪勁松.MCX314運(yùn)動(dòng)控制芯片與數(shù)控系統(tǒng)設(shè)計(jì)[M].北京:北京航空航天大學(xué)出版社,2002.
[4]馬毅,李霞峰,盛煥華.基于Linux的實(shí)時(shí)操作系統(tǒng)設(shè)計(jì)[J]. 計(jì)算機(jī)工程與應(yīng)用,2001(12):109-110,176.
[5]馮俊平.基于MPC8250的嵌入式Linux系統(tǒng)開發(fā)[D].西安電子科技大學(xué),2006.
[6]張俊鵬.PCI通信板卡及Linux驅(qū)動(dòng)設(shè)計(jì)與實(shí)現(xiàn)[D].大連:大連理工大學(xué),2007.
[7]趙昌永,等.一種基于嵌入式Linux的視頻采集系統(tǒng)儀器儀表學(xué)報(bào),2005.
[8]DVB-S機(jī)頂盒前端驅(qū)動(dòng)的軟件實(shí)現(xiàn).天津大學(xué),2006.