《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 業(yè)界動(dòng)態(tài) > 嵌入式系統(tǒng)在氣浮轉(zhuǎn)臺(tái)無線測控實(shí)驗(yàn)中的應(yīng)用

嵌入式系統(tǒng)在氣浮轉(zhuǎn)臺(tái)無線測控實(shí)驗(yàn)中的應(yīng)用

2008-07-16
作者:曲宏松1,,2,,張 葉1,,2,,徐

??? 摘 要: 以衛(wèi)星氣浮轉(zhuǎn)臺(tái)實(shí)驗(yàn)為背景,,介紹了基于實(shí)時(shí)嵌入式系統(tǒng)" title="嵌入式系統(tǒng)">嵌入式系統(tǒng)的氣浮轉(zhuǎn)臺(tái)無線測控通信子系統(tǒng)的設(shè)計(jì),。利用VxWorks操作系統(tǒng)實(shí)時(shí)性強(qiáng),、多任務(wù)" title="多任務(wù)">多任務(wù)調(diào)度的特點(diǎn),,對(duì)轉(zhuǎn)臺(tái)上的串口" title="串口">串口數(shù)據(jù)采集,、轉(zhuǎn)臺(tái)上下的無線網(wǎng)絡(luò)通信進(jìn)行了任務(wù)化編程,。在線測試表明,嵌入式實(shí)時(shí)操作系統(tǒng)VxWorks可以合理而快速地對(duì)各任務(wù)進(jìn)行實(shí)時(shí)而可靠的管理和調(diào)度,,嵌入式系統(tǒng)可以出色地完成轉(zhuǎn)臺(tái)無線測控通信任務(wù),。
??? 關(guān)鍵詞: 氣浮轉(zhuǎn)臺(tái)? 無線網(wǎng)? VxWorks? 嵌入式系統(tǒng)

?

??? 在衛(wèi)星的地面全物理或半物理仿真實(shí)驗(yàn)中,氣浮轉(zhuǎn)臺(tái)作為衛(wèi)星的運(yùn)動(dòng)仿真器,,不僅可以模擬衛(wèi)星的剛性本體,,而且要承載轉(zhuǎn)臺(tái)控制系統(tǒng)、測控通信系統(tǒng)等實(shí)物部件,,所以氣浮轉(zhuǎn)臺(tái)是衛(wèi)星控制系統(tǒng)物理仿真實(shí)驗(yàn)的核心設(shè)備,。由于在仿真實(shí)驗(yàn)中需要將轉(zhuǎn)臺(tái)上的各種實(shí)驗(yàn)數(shù)據(jù)實(shí)時(shí)下傳到臺(tái)下的監(jiān)控計(jì)算機(jī)中,并且有時(shí)需要臺(tái)下的監(jiān)控計(jì)算機(jī)上傳必要的遙控指令和數(shù)據(jù)信息至臺(tái)上的控制計(jì)算機(jī),,因此需要有一套實(shí)時(shí)性,、魯棒性很強(qiáng)的測控系統(tǒng)來完成轉(zhuǎn)臺(tái)上下的通信任務(wù)。
??? 當(dāng)前,,嵌入式技術(shù)發(fā)展迅猛,,已經(jīng)廣泛滲透到科學(xué)研究、工程設(shè)計(jì),、軍事技術(shù)以及人們的日常生活中,。VxWorks作為一款實(shí)時(shí)嵌入式操作系統(tǒng),以其強(qiáng)實(shí)時(shí)性,、高可靠性成為航空航天,、軍事國防、通信等領(lǐng)域應(yīng)用最廣的操作系統(tǒng)之一,。而PC104設(shè)備采用了緊固堆疊的安裝方式,,體積小巧、結(jié)構(gòu)緊湊,,特別適合轉(zhuǎn)臺(tái)這種空間有限的應(yīng)用。本系統(tǒng)針對(duì)氣浮轉(zhuǎn)臺(tái)實(shí)驗(yàn)的實(shí)際需要,,并結(jié)合嵌入式系統(tǒng)的特點(diǎn),,最終選取了“VxWorks+PC104”的嵌入式軟硬件搭配方式,完成轉(zhuǎn)臺(tái)數(shù)據(jù)采集管理,、轉(zhuǎn)臺(tái)控制以及臺(tái)上的測控終端" title="測控終端">測控終端等實(shí)驗(yàn)任務(wù),。
1 硬件實(shí)驗(yàn)環(huán)境
?? ?氣浮轉(zhuǎn)臺(tái)測控實(shí)驗(yàn)要完成的中心任務(wù)是:將轉(zhuǎn)臺(tái)上的各系統(tǒng)、各設(shè)備的遙測數(shù)據(jù)下傳到地面測控終端中,,由地面測控終端進(jìn)行處理,、顯示以及保存。同時(shí),,地面測控終端要將轉(zhuǎn)臺(tái)上所需要的數(shù)據(jù)信息以及一些控制指令上傳到臺(tái)上測控終端中,。
1.1 臺(tái)上實(shí)驗(yàn)環(huán)境
??? 轉(zhuǎn)臺(tái)上采用PC104嵌入式計(jì)算機(jī)作為轉(zhuǎn)臺(tái)主控計(jì)算機(jī),,選用的型號(hào)是數(shù)字邏輯公司的CPU卡MSMP5SEV, VxWorks操作系統(tǒng)在此CPU卡上運(yùn)行,。為了能夠采集臺(tái)上設(shè)備的工程數(shù)據(jù),,并對(duì)臺(tái)上的執(zhí)行部件進(jìn)行控制,通過PC104總線擴(kuò)展了一個(gè)8COM的串口卡和一個(gè)D/A轉(zhuǎn)換卡,。臺(tái)上的GPS接收機(jī),、光纖陀螺、自制飛輪電機(jī)通過串口與PC104串口卡相連,,以傳遞GPS授時(shí)數(shù)據(jù),、轉(zhuǎn)臺(tái)轉(zhuǎn)速以及飛輪轉(zhuǎn)速等遙測數(shù)據(jù)。而自制飛輪電機(jī)和磁力矩器等執(zhí)行部件連接到D/A轉(zhuǎn)換卡上,,由D/A卡發(fā)出的模擬信號(hào)控制執(zhí)行部件,。此外臺(tái)上配有多路供電電源,為臺(tái)上電子設(shè)備供電,。
1.2 臺(tái)下實(shí)驗(yàn)環(huán)境
??? 轉(zhuǎn)臺(tái)下需要一個(gè)工業(yè)控制計(jì)算機(jī)作為地面的監(jiān)控平臺(tái),,負(fù)責(zé)接收轉(zhuǎn)臺(tái)傳來的重要數(shù)據(jù),并向臺(tái)上傳遞控制命令及必要的實(shí)驗(yàn)數(shù)據(jù),。需要上傳的數(shù)據(jù)有模擬衛(wèi)星的軌道數(shù)據(jù)和轉(zhuǎn)臺(tái)感應(yīng)同步器得到的轉(zhuǎn)臺(tái)位置信息,。模擬衛(wèi)星軌道數(shù)據(jù)可以利用STK軟件得到,而轉(zhuǎn)臺(tái)感應(yīng)同步器的數(shù)據(jù)則通過一個(gè)自制數(shù)據(jù)采集板,,將并行數(shù)據(jù)轉(zhuǎn)換成串行數(shù)據(jù)輸入到監(jiān)控計(jì)算機(jī)中,。
1.3 轉(zhuǎn)臺(tái)上下的通信鏈路
??? 由于轉(zhuǎn)臺(tái)在實(shí)驗(yàn)時(shí)不斷轉(zhuǎn)動(dòng),很不適合有線通信,,所以選用無線局域網(wǎng)作為轉(zhuǎn)臺(tái)上下的數(shù)據(jù)通信鏈路,。臺(tái)上使用符合IEEE802.11g協(xié)議的無線接入點(diǎn)(Wireless Access Point)作為臺(tái)上的測控連接點(diǎn),通過網(wǎng)線接入到PC104主機(jī),。臺(tái)下使用USB接口的無線網(wǎng)卡,,直接插入到地面監(jiān)控計(jì)算機(jī)中。這樣就建立起一個(gè)無線點(diǎn)對(duì)點(diǎn)的局域網(wǎng),。圖1給出了轉(zhuǎn)臺(tái)實(shí)驗(yàn)環(huán)境的總體結(jié)構(gòu)圖,。

?


2 基于VxWorks的轉(zhuǎn)臺(tái)測控通信端軟件開發(fā)
2.1 實(shí)時(shí)嵌入式操作系統(tǒng)VxWorks

??? VxWorks是美國風(fēng)河公司(Windriver)為嵌入式系統(tǒng)量身打造的一款實(shí)時(shí)操作系統(tǒng)。其微秒量級(jí)的任務(wù)切換和中斷延遲時(shí)間,,使其成為實(shí)時(shí)操作系統(tǒng)家族中的佼佼者,。經(jīng)過二十多年市場應(yīng)用的驗(yàn)證,VxWorks被認(rèn)為是高度可靠的操作系統(tǒng),。
??? VxWorks除了強(qiáng)實(shí)時(shí)性和高可靠性之外,,還具備多任務(wù)調(diào)度的特點(diǎn)。VxWorks中任務(wù)的概念類似Windows中的線程,每個(gè)明顯單獨(dú)運(yùn)行的程序成為一個(gè)任務(wù),。每個(gè)任務(wù)都可以直接訪問或共享大多數(shù)資源和內(nèi)存空間,,并擁有自己存放局部變量的棧和存放寄存器、延時(shí)定時(shí)器,、時(shí)間片定時(shí)器等控制塊,。每個(gè)任務(wù)都擁有自己的任務(wù)名、任務(wù)ID和優(yōu)先級(jí),。內(nèi)核根據(jù)各任務(wù)優(yōu)先級(jí)的高低,,進(jìn)行高優(yōu)先級(jí)搶占式的調(diào)度,而對(duì)于同等優(yōu)先級(jí)的任務(wù)采用輪轉(zhuǎn)調(diào)度策略,。VxWorks任務(wù)間的同步方式也比較靈活,,分別提供了共享內(nèi)存、管道,、信號(hào)量,、消息隊(duì)列等機(jī)制。豐富的通信機(jī)制和調(diào)度方式選擇使VxWorks下的任務(wù)編制非常靈活,,十分適合在有限時(shí)間內(nèi)同時(shí)處理多個(gè)事件,。
2.2 測控系統(tǒng)軟件設(shè)計(jì)
??? 測控軟件從功能角度分類可以分為遙測任務(wù)和遙控任務(wù)兩個(gè)部分。遙測任務(wù)需要采集,、整理轉(zhuǎn)臺(tái)上各設(shè)備的工程數(shù)據(jù),,然后通過網(wǎng)絡(luò)發(fā)送到地面監(jiān)控計(jì)算機(jī)中。遙控任務(wù)需要先通過網(wǎng)絡(luò)接收到地面監(jiān)控計(jì)算機(jī)發(fā)送來的數(shù)據(jù),,然后通過解包,、解碼發(fā)送給遙控處理任務(wù)來執(zhí)行遙控指令。但從數(shù)據(jù)的通信類別角度分類,,可以分為串口通信和網(wǎng)絡(luò)通信兩部分,。從編程角度,更傾向于后一種分類來組織軟件的編寫,。
2.2.1 串口通信
??? 串口通信的主要任務(wù)是采集遙測數(shù)據(jù),。從圖1可以看出,轉(zhuǎn)臺(tái)上有3路數(shù)據(jù)要通過串口進(jìn)行通信,,分別是GPS,、陀螺和飛輪電機(jī)。由于3個(gè)設(shè)備的數(shù)據(jù)更新率不同(GPS為1Hz,、陀螺為300Hz、飛輪電機(jī)為2Hz),,所以對(duì)于PC104主機(jī)而言,,遙測數(shù)據(jù)的到來具有隨機(jī)性。為了能在各路遙測數(shù)據(jù)到來之際及時(shí)做出響應(yīng),需要利用VxWorks系統(tǒng)提供的I/O復(fù)用機(jī)制進(jìn)行串口數(shù)據(jù)接收,。具體程序代碼如下:
??? if((xxxFd =open(″/tyCo/0″,,O_RDWR,0))==ERROR)
??? {
??????? perror(″Error in opening com1!″),;
??????? return(ERROR),;
????}
??? taskSpawn(TNAME_COMXXXRECV,TPRI_COMXXXRECV,,0,,XXX_STACK_SIZE,(FUNCPTR)xxxRecv,,0,,0,0,,0,,0,0,,0,,0,0,,0),;
??? STATUS xxxRecv(void)
??? {? …
??????? while(1)
?????{
??????? FD_ZERO(&readFds);
??????? FD_SET(xxxFd,,&readFds),;
??????? if(select (width,&readFds,,NULL,,NULL,NULL)==ERROR)
???????????? return (ERROR),;
??????? if(FD_ISSET(xxxFd,&readFds))
??????? {
?????????????if((recvLen=read(xxxFd,,recvBuf,buf_size))==ERROR)
???????????? {
????????????????printf(″ERROR when read XXX!),;
??????????????? return(ERROR),;
???????????? }
???????????? ……
??????? //釋放相應(yīng)信號(hào)量,進(jìn)行數(shù)據(jù)處理,、遙測數(shù)據(jù)編碼,、下傳數(shù)據(jù)打包等任務(wù)的執(zhí)行。
????????……
??????}
?????}
????}
??? 首先,,需要通過I/O系統(tǒng)API函數(shù)open()打開串口,,系統(tǒng)為相應(yīng)的串口分配一個(gè)表示該串口的文件標(biāo)識(shí)符xxxFd,,然后通過taskSpawn()函數(shù)發(fā)起串口接收任務(wù)。串口接收任務(wù)對(duì)應(yīng)的入口函數(shù)為xxxRecv(),,xxxRecv()函數(shù)的函數(shù)體是一個(gè)死循環(huán),,不斷接收串口數(shù)據(jù)。在死循環(huán)的開始處應(yīng)用I/O復(fù)用機(jī)制,,利用FD_ISSET()函數(shù)查看文件描述符集的xxxFd位是否被置位,。如果xxxFd所對(duì)應(yīng)的串口有數(shù)據(jù)到來,底層的驅(qū)動(dòng)程序會(huì)將數(shù)據(jù)傳遞到系統(tǒng)維護(hù)的接收環(huán)形隊(duì)列緩沖內(nèi)存中,,同時(shí)將文件描述符集中的xxxFd位置位,。當(dāng)FD_ISSET()函數(shù)發(fā)現(xiàn)xxxFd位被置位時(shí),則使串口接收任務(wù)解除阻塞,,開始向下執(zhí)行,,通過read()函數(shù)將存放在環(huán)形隊(duì)列中的數(shù)據(jù)接收到用戶緩沖區(qū)recvBuf[]數(shù)組中。如果沒有數(shù)據(jù)到來,,則文件描述符集中的xxxFd位為復(fù)位狀態(tài),,串口接收任務(wù)阻塞。通過使用I/O復(fù)用機(jī)制,,成功地解決了不同數(shù)據(jù)源更新率不同步的難題,。這種機(jī)制類似一個(gè)軟中斷,真正做到了數(shù)據(jù)的即到即收,。
2.2.2 網(wǎng)絡(luò)通信
??? 無線網(wǎng)絡(luò)通信擔(dān)負(fù)著連接轉(zhuǎn)臺(tái)與地面監(jiān)控計(jì)算機(jī)的重任,。由于PC104主機(jī)帶有網(wǎng)卡,而且VxWorks對(duì)多任務(wù)和BSD Socket具有良好的支持,,所以完備的嵌入式軟硬件環(huán)境使得無線網(wǎng)絡(luò)通信在轉(zhuǎn)臺(tái)測控系統(tǒng)中的應(yīng)用成為可能,。
??? 網(wǎng)絡(luò)通信任務(wù)是基于BSD Socket的編程,使用的是Server/Client模式,。轉(zhuǎn)臺(tái)上的嵌入式主機(jī)為服務(wù)器(Server),,臺(tái)下的監(jiān)控計(jì)算機(jī)為客戶端(Client)。BSD Socket通常構(gòu)造兩種應(yīng)用類型:面向連接的SOCK_STREAM應(yīng)用和無連接的SOCK_DGRAM應(yīng)用,。面向連接的應(yīng)用即基于TCP協(xié)議的socket應(yīng)用,,無連接的應(yīng)用即UDP應(yīng)用。TCP協(xié)議是提供給用戶的一種可靠的全雙工面向連接的協(xié)議,,而且TCP協(xié)議具有正確性檢查機(jī)制,。在此選用TCP協(xié)議進(jìn)行網(wǎng)絡(luò)通信。
??? 基于TCP協(xié)議面向連接的Socket應(yīng)用框架如圖2所示,。首先,,在服務(wù)器端創(chuàng)建Socket,然后調(diào)用bind()函數(shù)將Socket與一個(gè)端點(diǎn)地址綁定,,并通過listen()函數(shù)偵聽客戶的連接請(qǐng)求,,然后調(diào)用accept()阻塞任務(wù),,等待請(qǐng)求的到來。當(dāng)客戶端利用connect()連接到服務(wù)器的偵聽端口時(shí),,服務(wù)器與客戶端進(jìn)行3次握手建立點(diǎn)到點(diǎn)的連接。連接建立完畢以后,,就可以調(diào)用read()和write()函數(shù)進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)的接收和發(fā)送了,。

?


??? 從圖3可以看出,網(wǎng)絡(luò)通信應(yīng)用程序中建立了兩個(gè)緩沖隊(duì)列,,用來緩沖網(wǎng)絡(luò)接收和網(wǎng)絡(luò)發(fā)送數(shù)據(jù),。緩沖隊(duì)列由鏈表" title="鏈表">鏈表數(shù)據(jù)結(jié)構(gòu)的動(dòng)態(tài)添加與刪除來實(shí)現(xiàn)。為了節(jié)省空間,,沒有用VxWorks自身提供的雙向鏈表結(jié)構(gòu),,而是用單向鏈表,并用兩個(gè)全局指針來記錄鏈表頭尾的首地址,,用一個(gè)全局變量來記錄鏈表的長度,,以省略查找的過程。

?


??? 每個(gè)鏈表元素為一個(gè)結(jié)構(gòu)體struct xxxList,,結(jié)構(gòu)體內(nèi)容包含網(wǎng)絡(luò)數(shù)據(jù)頭指針pTemp和指向下一個(gè)元素的指針pNext,。全局變量為鏈表頭的指針listHead、指向鏈表尾的指針listRear以及鏈表的長度變量listLen,。圖4表示含有n個(gè)元素的鏈表結(jié)構(gòu),。

?


??? 使用緩沖隊(duì)列可以有效地提高通信的可靠性。在沒有緩沖隊(duì)列的情況下,,雖然實(shí)時(shí)性極強(qiáng)的VxWorks在絕大多數(shù)情況下能夠保證對(duì)需要傳遞的數(shù)據(jù)進(jìn)行及時(shí)的處理,,但仍然不能避免數(shù)據(jù)缺失情況的發(fā)生。而如果有一幀關(guān)鍵數(shù)據(jù)丟失,,則有可能造成某任務(wù)的阻塞,。當(dāng)阻塞時(shí)間超時(shí),可能引起Watchdog的啟動(dòng),,從而中止實(shí)驗(yàn)的進(jìn)行,。而加入緩沖隊(duì)列可以使尚未來得及處理的數(shù)據(jù)得到保護(hù),從而避免了數(shù)據(jù)的丟失,。從另一種角度說,,也提高了CPU的利用率。
3 多任務(wù)調(diào)度測試
??? 由于轉(zhuǎn)臺(tái)上只有一臺(tái)嵌入式控制主機(jī),,所以臺(tái)上各種數(shù)據(jù)的采集,、控制算法的實(shí)現(xiàn)、轉(zhuǎn)臺(tái)的自主管理等功能都將由這個(gè)嵌入式主機(jī)單獨(dú)完成,。VxWorks強(qiáng)大而靈活的多任務(wù)調(diào)度管理能力可以協(xié)助嵌入式PC104主機(jī)完成這些功能,。
??? 在轉(zhuǎn)臺(tái)仿真實(shí)驗(yàn)進(jìn)行過程中,,VxWorks操作系統(tǒng)將同時(shí)維護(hù)二十多個(gè)任務(wù)。對(duì)于用戶來說,,要明確各任務(wù)的運(yùn)行狀況就必須了解系統(tǒng)對(duì)多個(gè)任務(wù)調(diào)度的情況,,從而發(fā)現(xiàn)編程時(shí)考慮不周的bug。VxWorks的開發(fā)環(huán)境Tornado為用戶提供了一個(gè)動(dòng)態(tài)監(jiān)視工具WindView,,此工具可以在Target端的實(shí)時(shí)系統(tǒng)運(yùn)行過程中記錄各個(gè)元素之間動(dòng)態(tài)交互的信息,,然后在Host端用圖形化的方式直觀地顯示出來。
??? 圖5給出了進(jìn)行轉(zhuǎn)臺(tái)仿真實(shí)驗(yàn)過程中,,用WindView采集到的各任務(wù)占用CPU的時(shí)序,。通過WindView圖可以看出,雖然系統(tǒng)維護(hù)的任務(wù)很多,,而且有的任務(wù)被調(diào)用或者響應(yīng)中斷的頻率很高,,但由于VxWorks操作系統(tǒng)實(shí)時(shí)多任務(wù)調(diào)度的能力很強(qiáng),所以沒有造成任務(wù)的擁堵,、死鎖或者饑餓等情況的發(fā)生,,圓滿地完成了轉(zhuǎn)臺(tái)的仿真實(shí)驗(yàn)。

?


參考文獻(xiàn)
[1] VxWorks Programmer′s Guide.Wind River System Inc,,2002.
[2] Tornado 2.2 User′s Guide.Wind River System Inc,,2002.
[3] 陳洋,陸宇平.機(jī)器人實(shí)時(shí)遠(yuǎn)程控制系統(tǒng)及其開發(fā)庫的設(shè)計(jì)與實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,,2006,,(2):7-10.
[4] 孔祥營,柏桂枝.嵌入式實(shí)時(shí)操作系統(tǒng)VxWorks及其開發(fā)環(huán)境Tornado[M].北京:中國電力出版社,,2001.
[5] 程敬原.VxWorks軟件開發(fā)項(xiàng)目實(shí)例完全解析[M].北京:中國電力出版社,,2005.
[6] 鄺堅(jiān).Tornado/VxWorks入門與提高[M].北京:科學(xué)出版社,2004.
[7] 曲宏松,,耿愛輝,,陳濤.基于VxWorks的串口芯片ST16C554的驅(qū)動(dòng)程序設(shè)計(jì)[J].電子器件,2006,,(3):959-962.

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn),。轉(zhuǎn)載的所有的文章,、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有,。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者,。如涉及作品內(nèi)容、版權(quán)和其它問題,,請(qǐng)及時(shí)通過電子郵件或電話通知我們,,以便迅速采取適當(dāng)措施,,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118,;郵箱:[email protected],。