国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

低空飛艇地面監(jiān)控系統(tǒng)設(shè)計與實現(xiàn)

2011-09-11 10:16:56侯中峰謝利理
微處理機 2011年4期
關(guān)鍵詞:操縱桿飛艇調(diào)用

茹 芬,侯中峰,謝利理

(西北工業(yè)大學(xué)自動化學(xué)院,西安 710129)

1 引言

現(xiàn)代飛艇多利用氦氣產(chǎn)生升力來進行浮空飛行,其優(yōu)良的性價比及高可靠性,近年來已經(jīng)成為國際上的研究熱點,我國也正在積極研制數(shù)十萬立方的平流層飛艇。作為其研究的一部分,低空實驗飛艇(在500米以下飛行)是未來研制平流層飛艇的重要準(zhǔn)備。隨著高度的增加,大氣壓力的變化,為了保持良好的浮空姿態(tài),飛艇會有比較復(fù)雜的自身壓力調(diào)節(jié)。以某低空實驗飛艇項目為背景,設(shè)計并實現(xiàn)了其地面監(jiān)控系統(tǒng)軟件。

2 低空飛艇地面監(jiān)控系統(tǒng)概述

飛艇一般由艇上飛行控制系統(tǒng)、通訊導(dǎo)航系統(tǒng)、任務(wù)載荷系統(tǒng)、能源動力系統(tǒng)、氣壓調(diào)節(jié)系統(tǒng)、應(yīng)急降落系統(tǒng)及地而監(jiān)控系統(tǒng)等部分組成,可以在預(yù)定空域巡航飛行來完成空中巡查、航空拍攝、環(huán)境監(jiān)測、通訊中繼、廣告宣傳等任務(wù)。艇載計算機是艇上部分的核心,負(fù)責(zé)完成控制處理和數(shù)據(jù)通信等任務(wù)。而地面監(jiān)控系統(tǒng)以地面計算機為核心,其作用是實時監(jiān)測并記錄飛艇的飛行狀態(tài)、環(huán)境信息及任務(wù)設(shè)備數(shù)據(jù),及時準(zhǔn)確地向飛艇下達控制指令等。地面操作人員既可以通過操縱桿手動遙控飛艇飛行,也可以通過地面監(jiān)控軟件界面發(fā)出控制指令控制飛艇飛行[1]。整個飛艇控制系統(tǒng)的基本組成部分如圖1所示。

3 地面監(jiān)控軟件設(shè)計

考慮到飛艇地面監(jiān)控軟件開發(fā)的效率及友好、美觀的人機交互界面,軟件的設(shè)計以美國NI(National Instruments)公司的虛擬儀器開發(fā)工具LabWindows/CVI[2]為平臺。軟件設(shè)計主要解決四個問題:①地面計算機與艇上計算機之間的實時數(shù)據(jù)交換;②操縱桿對飛艇飛行姿態(tài)的遠程控制;③設(shè)計地面監(jiān)控數(shù)據(jù)庫,對艇上計算機下傳數(shù)據(jù)進行存儲、查詢及過程回放等;④友好的人機交互接口。由于LabWindows/CVI集成了眾多優(yōu)秀的虛擬儀器控件,給軟件的界面設(shè)計帶來了極大的方便。當(dāng)LabWindows/CVI提供的標(biāo)準(zhǔn)虛擬儀器控件不能滿足需要時,可以使用VC++等其他工具開發(fā)專用的ActiveX控件,然后在實際工程中加載調(diào)用。

圖1 低空飛艇控制系統(tǒng)組成圖

3.1 底層通信程序設(shè)計

在飛艇執(zhí)行飛行任務(wù)的過程中,需要與地面進行大量實時的數(shù)據(jù)交換。這些數(shù)據(jù)包括地面上傳控制指令、艇上下傳各種狀態(tài)參數(shù)和任務(wù)設(shè)備采集的數(shù)據(jù)等。穩(wěn)定可靠的通訊是飛艇安全正常飛行的重要保證。選用全雙工數(shù)字電臺,可以實現(xiàn)30~50公里范圍內(nèi)的點對多點通信,通訊距離長;全雙工數(shù)字電臺具備先進的擴頻跳頻技術(shù),抗干擾能力強,穩(wěn)定可靠,提供最大115.2Kbps的 RS232串口傳輸速率。

地面監(jiān)控計算機與數(shù)字電臺通過RS232串口進行通信。LabWindows/CVI提供了RS232通信函數(shù)庫,使原本較為復(fù)雜的RS232通信變得容易實現(xiàn)。這些函數(shù)可分為打開/關(guān)閉串口函數(shù)、串口設(shè)置函數(shù)、I/O讀寫函數(shù)、調(diào)制解調(diào)器控制函數(shù)、寄存器狀態(tài)函數(shù)和回調(diào)函數(shù)等6類。

由于LabWindows/CVI并不提供串口中斷處理函數(shù),LabWindows/CVI中串口通信是通過周期查詢方式實現(xiàn)的??梢栽O(shè)置一個定時器,定期執(zhí)行讀取串口的程序,也可以設(shè)置一個死循環(huán),通過延遲設(shè)置循環(huán)周期,這樣必須在循環(huán)內(nèi)部定義一個能夠及時響應(yīng)用戶面板回調(diào)函數(shù)和系統(tǒng)內(nèi)部事件的函數(shù)。串口編程需要以下幾個函數(shù):

OpenCom(COM1);//打開串口1

OpenComConfig(COM1,"COM1",9600,2,8,1,512,512);//配置串口 COM1

ComRdByte(COM1);//讀串口1數(shù)據(jù)

ComRd(COM1,Inbuf,100);//從串口1 的緩沖區(qū)Inbuf中讀取100個字節(jié)的數(shù)據(jù)

ComWrtByte(COM1);//向串口1寫數(shù)據(jù)

ComWrt(COM1,Outbuf,100);//向串口 1 的緩沖區(qū)Outbuf中寫入100個字節(jié)的數(shù)據(jù)

CloseCom(COM1);//關(guān)閉串口1

3.2 操縱桿驅(qū)動程序設(shè)計

飛艇的地面遙控采用性能優(yōu)越的USB接口操縱桿SAITEK X52,利用操縱桿上的搖桿、方向舵及按鈕,用以實現(xiàn)飛艇的俯仰、偏航等姿態(tài)的調(diào)節(jié),對油門和各種風(fēng)機的開關(guān)直接控制。在LabWindows/CVI環(huán)境下,利用微軟提供的 DirectX與Windows API函數(shù)相結(jié)合,通過設(shè)置定時器,利用消息傳遞方式來捕獲操縱桿的信息。在MMSYSTEM.H對所需的Windows API函數(shù)進行函數(shù)聲明,應(yīng)用程序必須包含該頭文件。

程序首先需要檢查操縱桿是否存在,包括檢查驅(qū)動程序支持和確認(rèn)操縱桿已與系統(tǒng)相連等兩項工作。調(diào)用joyGetNumDevs函數(shù)檢查系統(tǒng)是否配置了操縱端口和驅(qū)動程序。如果返回值為0,表明系統(tǒng)不支持操縱桿功能。但joyGetNumDevs并不能確定操縱桿是否已被連接上了,通過調(diào)用joyGetPosEx函數(shù)可以完成檢查是否連接上操縱桿,同時確定是否有錯誤發(fā)生。一旦確認(rèn)了操縱桿已連上,就可以接收操縱桿發(fā)來的消息。joySetCapture通知Windows操縱桿消息應(yīng)發(fā)往何處以及發(fā)送的頻率等。joySet-Capture中的第一個參數(shù)通知Windows誰將獲取消息,第二個參數(shù)確定程序?qū)哪膫€操縱桿接收消息,第三個參數(shù)表示希望以怎樣的頻度接收消息(單位為毫秒),無論操縱桿是否移動都將以這個頻度接收消息。joySetCapture的四個參數(shù)允許程序當(dāng)操縱桿移動一定的距離后才接收消息,該距離由joySetThreshold設(shè)置。

joySetCapture被調(diào)用后,窗口將接收操縱桿事件。MM_JOY1MOVE事件在joySetCapture定義的時間間隔內(nèi)發(fā)生。只有當(dāng)操縱桿的按鈕被按下時,MM_JOY1BUTTONUP和MM_JOY1BUTTONDOWN事件才發(fā)生。調(diào)用joyReleaseCapture通知Windows已結(jié)束對操縱桿的調(diào)用。部分程序段如下:

/*hwnd-接收消息的窗口句柄,uMsg-消息(命令),wParam和lParam是要傳遞的數(shù)據(jù)*/

LRESULT NewWindowProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)

{

JOYINFOEX JoyInfoEx;//包含操縱桿各種屬性的結(jié)構(gòu)體

unsigned int uJoyID;//操縱桿編號

switch(uMsg)

{

case MM_JOY1MOVE:

JoyInfoEx.dwFlags=JOY_CAL_READ3;

JoyInfoEx.dwSize=sizeof(JoyInfoEx);

JoyGetPosEx(uJoyID,&JoyInfoEx);

break;

case MM_JOY1BUTTONDOWN:

JoyInfoEx.dwFlags=

JOY_RETURNBUTTONS;

JoyInfoEx.dwSize=sizeof(JoyInfoEx);

JoyGetPosEx(uJoyID,&JoyInfoEx);

if(JoyInfoEx.dwButtons& JOY_BUTTON1)MessagePopup("ok","按鈕1按下");

break;

}

return CallWindowProc(oldWndProc, hwnd,uMsg,wParam,lParam);

}

3.3 飛艇實時數(shù)據(jù)庫的設(shè)計及實現(xiàn)

LabWindows/CVI既沒有通過標(biāo)準(zhǔn)函數(shù)庫來提供對數(shù)據(jù)庫進行訪問操作的函數(shù),也沒有在工具包中包含數(shù)據(jù)庫引擎。要在LabWindows/CVI環(huán)境下使用數(shù)據(jù)庫,必須安裝 CVI SQL工具包[3-4]。該工具包中一共包含了11個子類的函數(shù)庫,這些API(Application Programming Interface)使LabWindows/CVI編寫的上層應(yīng)用程序可以實現(xiàn)對數(shù)據(jù)庫的訪問。雖然LabWindows/CVI中通過Microsoft的ADO(Active Data Object,動態(tài)數(shù)據(jù)對象)接口可以支持多種類型的數(shù)據(jù)源,但最常用的還是ODBC(Open Database Connectivity,開放數(shù)據(jù)庫互連)數(shù)據(jù)源。ODBC實際上是一個函數(shù)庫,它提供了一個連接到底層數(shù)據(jù)庫系統(tǒng)的公共應(yīng)用程序接口,通過驅(qū)動程序與底層數(shù)據(jù)庫進行通信。在開發(fā)數(shù)據(jù)庫應(yīng)用程序時,只需要為應(yīng)用程序指定一個數(shù)據(jù)源,將數(shù)據(jù)源文件配置成已創(chuàng)建好的數(shù)據(jù)庫文件(包括已經(jīng)創(chuàng)建好的數(shù)據(jù)表等),即可以在 LabWindows/CVI中利用SQL語句訪問由第三方工具開發(fā)的數(shù)據(jù)庫。

3.3.1 數(shù)據(jù)庫的連接與斷開

使用DBConnect打開一個新數(shù)據(jù)連接,其唯一的參數(shù)是必須包含數(shù)據(jù)源或數(shù)據(jù)提供者名以及其他數(shù)據(jù)庫需要的屬性(User ID、Password、File Name等)的字符串。使用完畢調(diào)用DBDisconnect關(guān)閉連接。

int hdbc=0;//數(shù)據(jù)庫連接句柄

hdbc=DBConnect("DSN=DB_Airship");//連接到數(shù)據(jù)源DB_Airship

DBDisconnect(hdbc);//斷開數(shù)據(jù)庫連接

3.3.2 自動 SQL映射

使用SQL庫映射函數(shù)自動產(chǎn)生和執(zhí)行SQL語句。通過調(diào)用DBBeginMap定義一個映射,其唯一的參數(shù)是來自DBConnect的連接句柄,而返回值作為映射的句柄。

int hmap=DBBeginMap(hdbc);//定義SQL連接句柄

/* 將字段映射到數(shù)組或變量*/

DBMapColumnToChar(hmap,1,11,uutNum,&uutStat,"");

DBMapColumnToDouble(hmap,2, &meas1,&meas1Stat);

DBMapColumnToDouble(hmap,3, &meas2,&meas2Stat);

DBActivateMap(hmap,"Table1");//程序映射所有的列后激活映射

DBDeactivateMap(hmap);//結(jié)束激活映射

3.3.3 數(shù)據(jù)庫操作

顯式SQL語句的執(zhí)行如下:

hstmt=DBActivateSQL(hdbc,"SELECT UUT_NUM,MEAS1,MEAS2 FROM TESTRES WHERE MEAS2 >1.0");

除了SELECT外的大多數(shù)SQL語句不需要進一步的處理,可以使用DBImmediateSQL。

插入數(shù)據(jù):

DBImmediateSQL(hdbc,"INSERT INTO Table1 VALUES('2860B456',0.4,0.6)");

更新數(shù)據(jù):

DBActivateSQL(hdbc,"UPDATE Table1 SET MEAS2=500.0 WHERE UUT_NUM= '2860B456'");

刪除數(shù)據(jù):

DBImmediateSQL (hdbc,"DELETE FROM Table1 WHERE UUT_NUM= '2860B567 '");

3.3.4 取回結(jié)果

采用NUMERIC控件和STRING控件來顯示數(shù)據(jù),部分程序段如下:

while(DBFetchNext(hstmt)==DB_SUCCESS){

SetCtrlVal(panelHandle,PANEL_uutNum,uut-Num);

SetCtrlVal(panelHandle, PANEL_meas1,meas1);

SetCtrlVal(panelHandle, PANEL_meas2,meas2);}

4 結(jié)束語

地面監(jiān)控系統(tǒng)是飛艇控制系統(tǒng)重要的組成部分。完整地給出了在LabWindows/CVI環(huán)境下地面監(jiān)控系統(tǒng)基本功能的設(shè)計與實現(xiàn)方法,完成了底層通信程序的設(shè)計,并通過調(diào)用Windows API函數(shù)實現(xiàn)了對操縱桿的編程,最后詳細(xì)給出了在LabWindows/CVI環(huán)境下數(shù)據(jù)庫的開發(fā)過程。地面監(jiān)控軟件經(jīng)過運行表明該系統(tǒng)運行穩(wěn)定,功能完備實用,開發(fā)周期短,成本低,維護方便,具有較高的工程應(yīng)用價值。

[1]于歌,劉剛,房建成.小型無人機地面監(jiān)控系統(tǒng)軟件設(shè)計與實現(xiàn)[J].機械與電子,2007(7):24-26.

[2]NI.LabWindows/CVI User Manual[M].National instruments corporation,2002.

[3]NI.LabWindows/CVI SQL Toolkit Reference Manual[M].National instruments corporation,2002.

[4]高水德,辛喆,水林娜.基于LabWindows/CVI的發(fā)動機試驗數(shù)據(jù)庫的設(shè)計與實現(xiàn)[J].微計算機信息(測控自動化),2004,20(4):33-34.

猜你喜歡
操縱桿飛艇調(diào)用
基于CAN總線接口的車載操縱桿設(shè)計
輪椅概念設(shè)計
核電項目物項調(diào)用管理的應(yīng)用研究
LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
聯(lián)合收割機各操縱桿功能的研究
基于系統(tǒng)調(diào)用的惡意軟件檢測技術(shù)研究
機場消防車駕駛室移動式操縱裝置及踏板的設(shè)計
派個飛艇去火星
太空探索(2016年12期)2016-07-18 11:13:43
飛艇的前世今生(下)
飛艇的前世今生(中)
陈巴尔虎旗| 三穗县| 鄱阳县| 古蔺县| 长汀县| 平山县| 金沙县| 永新县| 昆明市| 卓资县| 合山市| 达日县| 扶余县| 宁安市| 綦江县| 子长县| 神木县| 定西市| 宽甸| 赞皇县| 右玉县| 托克逊县| 连山| 喀喇| 洪雅县| 桂平市| 新密市| 灌阳县| 绥化市| 青神县| 万全县| 临夏市| 桓台县| 景宁| 扬中市| 邻水| 土默特右旗| 腾冲县| 夹江县| 涟源市| 古蔺县|