999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于DCOM的無人機地面站串口通信模塊設計

2011-09-07 10:17:12孫秀霞董文瀚李湘清李大東
計算機工程與設計 2011年9期
關鍵詞:設計

徐 嵩, 孫秀霞, 董文瀚, 李湘清, 李大東

(空軍工程大學工程學院航空自動控制工程系,陜西西安710038)

0 引 言

小型無人機系統由于結構簡單、造價低廉、生存能力強、機動性好,被廣泛運用于科研試驗、教學實驗中。無人機地面站作為整個系統的用戶接口及服務器與無人機之間必須建立并保持可靠高效的數據通信,目前普遍采用通過串口連接的無線數據傳輸模塊實現[1]。無人機地面站是一個具有多個功能模塊的復雜系統,要求各功能模塊在設計上既滿足良好的封裝性又不能影響模塊間交互。COM組件化設計方法具備良好的封裝性、語言無關性和軟件的易擴展性[2],近年來被引入無人機地面站的設計與開發[3]。然而,各類串口通信的組件設計還局限在對串口的特性設置與收發字節或字符串等基本功能的封裝上[3-5],多個客戶端的協調及通信中的翻譯與編碼等功能仍在組件外實現,沒有實現完整封裝。本文通過基于分布式COM(DCOM)的設計方法,將地面站-無人機通信中所需的串口管理、遙測遙控及參數調整中的解析、翻譯、編碼等功能封裝在一個COM組件中并實現本地與遠程訪問。針對本組件分析了COM線程模式的適用性[6],在對第三方提供的串口類CSerialPort進行了修改與擴展的基礎上設計了實現串口管理和數據幀收發的接口,并設計了通過調用該接口實現接收及發送數據信息的狀態遙控遙測接口與飛控系統參數調整接口,滿足了地面站串口通信需求。

1 從COM到DCOM

1.1 COM與DCOM技術概述

組件化軟件設計就是將一個大的應用程序劃分成多個模塊,每一個模塊保持功能獨立性,模塊間通過規范的接口完成實際的任務,其中的模塊稱為組件。COM(component object model)為軟件的組件化設計提供了包含規范與實現兩部分的標準。一個設計良好的應用系統往往被分成多個可以單獨開發的組件,最終通過主程序對各個組件的調用與管理來實現整個系統。COM中的核心是接口,接口是客戶端與COM對象通信的抽象協議,客戶端只能通過接口調用COM對象[6],COM 中的智能指針類為接口的使用提供支持。與 C++對象的封裝不同,C++對象是源代碼級的語義封裝,COM對象是二進制級的封裝,COM接口的實現對調用它的程序是隱蔽的[7-8]。目前COM接口采用IDL語言定義,與具體實現語言無關,從而保證接口與實現之間的解耦;IDL具備豐富的數據類型支持及擴展,方便了模塊間的通信及組件接口調用[8]。

DCOM(Distributed COM)是對COM的一種擴展,支持不同計算機上COM對象間的聯網通信[9]。由于DCOM是COM的無縫衍生,因而當前設計的進程外COM組件服務 (COM EXE Service)無需修改即可通過配置(DCOMCNFG)來實現客戶對組件的遠程訪問。DCOM隱藏了網絡協議細節,還具備可伸縮性、平臺獨立、安全性、可配置性等特性[10],使我們可以集中精力設計組件而避免各種通信問題。

DCOM采用SCM(service control manager)進行COM對象的遠程激活,并采用ORPC(objectremoteprocedurecalls)進行通信,通信采用代理-存根(Proxy-Stub)結構[9],該結構由IDL文件經 MIDL自動編譯得到,無需開發人員設計。COM 運行時(Runtime)支持客戶和組件的面向對象服務,采用RPC及安全規定并依據 DCOM 協議標準生成標準網絡包[11-12]。具體的DCOM通信結構見圖1[13]。

圖1 DCOM通信結構

1.2 COM線程模型的選用

COM線程模型的選用直接影響組件服務與客戶端程序的設計方法與運行性能。套間(Apartment)是COM線程模型中重要的邏輯概念,是一個用來隔離并發訪問的假想邊界,在不同套間中的同一個COM對象將由于套間邊界的隔離而必須進行接口調度,這一方面阻止了不安全線程并發訪問所引發的錯誤,但也增加了運行開銷。套間分為STA(單線程套間)、MTA(多線程套間)、NA(中性套間),對于組件對象而言創建時可以選擇相應的套間支持類型:Apartment(支持STA)、Free(支持MTA)、Both(支持STA與MTA),對于NA的支持必須配置組件的注冊。只有當線程所屬套間類型與組件支持的套間類型相匹配才能實現直接調用,否則將建立相應的宿主套間(HostSTA/MTA/NA)進行間接調用[6]。這里比較STA與MTA的特點與適用性:

一個進程可以擁有多個STA,每個STA可具備消息循環并只含有一個線程,同一個COM對象在不同的STA中調用時須接口調度過程并增加開銷。一個進程只能有一個MTA,MTA中可有多個線程,同一個COM對象在MTA的多個線程間被調用時無需接口調度,但在COM對象設計中必須考慮線程安全問題。需要平凡I/O或處于多個線程中并發運行的組件適合采用MTA(Free或Both)以提高效率[6]。本文設計的通信組件由于不需要窗口及消息機制且須在多個線程中(接收、發送等)并發運行,因而適合采用MTA。

2 串口通信技術與地面站通信

Windows環境下已具備成熟的串口通信支持,可利用VC++運行時標準通信函數[14]、WindowsAPI函數、MSComm控件、第三方串口類進行串口通信設計開發。當前普遍采用后3種方式[3,15]。由于MSComm控件存在諸如內存泄露、無法發送16進制數等缺陷,也有文獻采用WindowsAPI自行開發串口組件[3]。本文在修改并擴充第三方類(CSerialPort)的基礎上設計實現串口通信組件的串口通信管理接口。

圖2中地面站與無人機間的通信由與RS232串口相連的無線數據傳輸模塊實現,地面站包含地面監控軟件與參數調整軟件等。無人機具有導航模塊、飛行控制模塊、舵機擴展模塊和其他自定義模塊,其中只有導航模塊能與地面設備直接通信。串口通信組件須實現地面軟件與無人機的實時通信以及遠程計算機調用通信組件與無人機通信。通信組件之間不直接進行遠程通信,各地面軟件與遠程的通信組件進行交互。多個地面軟件均由串口通信方式與無人機通信,該組件的設計符合軟件設計的復用性。

圖2 地面站串口通信需求

無人機的通信協議已由無人機自動駕駛儀制造方提供,數據幀結構如圖3所示,串口通信組件需要完成接收數據時的幀解析與翻譯以及發送數據時將待發送信息按照協議編碼為幀。

圖3 無人機-地面站數據幀結構

地面監控軟件與參數調整軟件與無人機的數據通信均有明顯的異步特性,須采用多線程循環等待的方式實現,因而需要設計異步的COM接口方法(一般的COM接口方法只能采用同步阻塞的方式調用[4])。數據異步傳輸及多線程會帶來數據丟失與訪問沖突等問題,需要采用緩沖區及線程同步方法。此外,串口通信組件需要頻繁開關串口與翻譯編碼過程,對內存資源必須進行可靠管理以防泄漏。

3 串口通信組件設計

3.1 組件整體結構

本文所設計的組件有3個接口類,其中IComPortAdm管理串口并收發數據幀,IGCSCommUAV編碼發送遙控數據與監聽翻譯遙測數據,CADJCommUAV編碼發送參數設置指令、發送參數回復請求與接收翻譯參數回復數據。后兩者通過接口調度(查詢)實現對IComPortAdm中的各種方法的調用,并通過全局線程及對象實現依據搶占設置的串口使用協調。此外所有接口方法均可返回錯誤,客戶端程序可通過try-catch將其捕獲用以報錯或糾錯處理。如圖4所示。

圖4 串口通信組件整體結構

3.2 公共 (模板)類的設計

3.2.1 異步緩沖區模板類的設計

為提高數據傳輸可靠性與解決接口異步調用和線程沖突問題,須將各種結構類型的數據通過具有異步特性與線程同步的緩沖區進行傳輸,因而本文設計了模板類:

同步操作函數與一般循環隊列相同,異步操作函數將緩沖區的存儲狀態與信號量(利用Semaphore的計數器Tokens)結合起來,圖5中粗實框由m_BufferSync防止沖突。

3.2.2 簡易線程管理器的設計

組件服務與客戶端都存在需要反復開啟與關閉的線程,退出線程函數后只有關閉線程句柄才能銷毀線程對象,如未關閉句柄而再次創建線程則該句柄指向新創建的線程造成原線程對象資源泄漏。可采用線程池來管理線程,這里為了精簡程序采用了自定義的線程管理器(類)來管理線程。

線程管理器的作用過程:首先創建管理器對象并將其啟動StartThreadManager,創建自定義線程前注冊線程句柄地址RegisterThread;退出線程前采用CloseThreadHandle發送線程退出事件使管理器關閉對應的線程句柄 (管理器線程采用循環等待流程);當管理器對象生命周期結束時由析構函數將管理器線程退出并關閉句柄,通過CheckThreadClosed可檢查線程的關閉情況。串口的使用與協調也采用了類似的處理方法即:注冊(COM對象指針)→啟動→關閉(通過對象指針),如果串口已被占用但允許搶占,可在注冊時(通過對象指針)讓當前使用該串口的COM對象關閉串口。

圖5 異步緩沖區工作流程

3.3 串口通信管理接口的設計

3.3.1 對CSerialPort類的修改與擴展:

CSerialPort是一個被廣泛應用的串口類[3,15],它以成員函數的形式提供串口設置及寫數據接口,以消息方式提供讀取數據接口和部分串口狀態事件通知。而 MTA下的組件并不支持消息機制,本文去除了該類中有關消息機制的代碼并利用異步緩沖區實現了一個異步數據讀取接口(函數):

添加成員變量CDataBufferm_BytesBuffer;在InitPort函數中對其初始化m_BytesBuffer.AsynInitBuffer();在CommThread線程的退出代碼段中加入對緩沖區的清除port->m_BytesBuffer.AsynClearBuffer();將ReceiveChar函數中發送消息代碼替換為向緩沖區加入數據 port->m_BytesBuffer.AsynEnterBuffer(RXBuff)。添加異步獲取字符的接口函數:

3.3.2 接口IComPortAdm的實現

在類CComPortAdm中添加成員變量CSerialPortm_Port與CDataBufferm_DataFrameBuffer,CDataBufferm_NonFrameStrBuffer其中 DATAFRAME用來存儲D[3~14]的數據,NONFRAMESTRING則以同樣的形式存儲非數據幀字符串:

添加線程管理器CThreadManager m_ThreadManager與數據分發線程 static DWORD WINAPI DataDistribute(LPVOID pParam),在StartReceiveData中注冊并啟動線程DataDistribute中采用m_Port.GetRcvByte并依據數據幀的格式實現循環等待的處理流程并將數據幀存入m_DataFrameBuffer,其他數據存入m_NonFrameStrBuffer(AsynEnterBuffer)以供其他兩個接口調用:如本接口的一個方法:

RcvNonFrameStr方法的實現與其類似 (將m_DataFrame-Buffer替換為m_NonFrameStrBuffer),其余方法均為類CSerial-Port中方法的組合。

3.4 遙測遙控與調參接口的設計

3.4.1 接口調度(查詢)的實現

這兩個接口都經IComPortAdm獲取并發送數據幀,因而必須獲取該接口的指針,COM提供了一個靈活的接口查詢函數QueryInterface實現該過程,將IComPortAdm指針賦給這兩個接口實現類中的成員變量IComPortAdm*m_IComPortAdm:

QueryInterface會使被調用的接口對象的引用數加1,而由于實現類中不能采用智能指針,當退出(析構)這兩個接口時須通過m_IComPortAdm->Release()顯式地將引用數減1,從而使組件進程正常退出。

3.4.2 翻譯-編碼與數據傳遞的實現

翻譯時根據數據幀的特點可采用聯合的數據結構對幀進行解析,利用解析結果將數據幀翻譯為最終需要的結構體數據;編碼采用相反過程。翻譯與編碼對幀的基本處理(校驗、合成與分解)一致,可將其作為基類,而將其他的翻譯與編碼功能的實現作為若干派生類,提高代碼復用率。

幾乎每一幀翻譯結果或待編碼數據的結構類型都不相同,IDL提供了豐富的數據類型支持[5,8],本文利用其對結構體和聯合體的支持設計一種參數結構便于傳遞:

這種參數結構使我們能通過幀標識符(命令字)來選擇數據類型。在此基礎上添加數據接收與命令上傳線程:

并添加線程管理器,與緩沖區:

實現整個遙控遙測接口(見圖6)。

圖6 IGCSCommUAV接口實現流程

兩個線程調用了COM對象,必須在進入線程時將其放入MTA:::CoInitializeEx(NULL,COINIT_MULTITHREADED);,退出線程時必須使線程退出MTA(::CoUninitialize();)調參接口的實現采用同樣的方法,區別在于發送參數回復請求時無需進行編碼(直接發送命令字)。

4 客戶端程序調用組件的方法

各地面軟件都可作為組件的客戶端本地或遠程調用該串口通信組件。本地調用與調用一般的進程內或進程外 COM組件一致,遠程調用需要通過DCOMCNFG對已注冊的相應組件進行設置,包括身份信息驗證方式、運行應用程序(組件)的位置、對各類用戶激活及訪問該組件的權限的設置[8]。為便于客戶端編程,本文在將安全級別降到最低的情況下在局域網內實現了地面監控軟件及調參軟件對通信組件的遠程調用:

定義智能指針:IComPortAdmPtr m_pComPortAdm;

CoCreateInstanceEx(__uuidof(ComPortAdm),NULL,CLSCTX_SERVER,&si,1,&qi);

m_pComPortAdm=IComPortAdmPtr(qi.pItf);

其中si.pwszName可以設為計算機名(同一個工作組內),或組件所在IP地址,qi.pIID=&IID_IComPortAdm。其他兩個接口的調用方法與之相同,在客戶端設計多個工作線程并將其置入MTA,循環調用組件的異步接口方法。如果提高了組件的安全性設置則需要通過 COSERVERINFO結構來設置服務器信息機及提供客戶端的身份識別信息,DCOM的配置不是本文所涉及的內容,可參看MSDN。

采用VS2005進行調試,其報告中未發現資源泄漏,在正常運行時可以反復開關串口及遙控遙測與調參過程,通過調試可驗證當所有客戶端對該COM服務器中的COM對象的引用數減為0時,在COM服務器的消息機制作用下組件進程將順利退出。

5 結束語

COM作為實現良好的軟件組件化設計的標準與方法已被廣泛應用,它的擴展DCOM也為分布式系統的設計提供了一個便利途徑。本文在分析地面站串口通信需求的基礎上,綜合串口基本管理、無人機遙控遙測數據通信以及無人機參數調整通信等功能,設計了串口通信組件。采用自定義的異步緩沖區模板類實現了對COM接口方法的異步調用及解決多線程并發運行時的沖突問題,采用接口調度(查詢)實現了組件中有關接口對象的相互調用,并設計了線程管理類器有效防止資源泄漏,保證了無人機地面站串口通信的可靠性,增強了軟件功能模塊的復用性,同時也為通信模塊組件化設計提供一種可行的新方案。

[1]龔曉莉,李健.小型無人機數據采集與通信系統的設計與實現[J].微計算機信息,2007,23(12):100-101.

[2]吳云,宋人杰.基于COM技術的交互圖形開發平臺的設計與實現[J].計算機工程與設計,2009,30(9):2307-2310.

[3]馬力.無人直升機開放控制平臺控制組件與數據通信[D].南京:南京航空航天大學碩士學位論文,2008:36-44.

[4]李比翼,陳特放.異步COM技術在串口通信組件的應用[J].長沙航空職業技術學院學報,2006,6(3):40-42.

[5]楊啟亮,邢建春,王平.基于DCOM的I/O驅動程序封裝關鍵技術研究[J].計算機工程,2005,31(14):231-233.

[6]徐名昆,張英海.COM服務器組件線程模型的選擇[J].計算機工程與設計,2004,25(12):3338-3339.

[7]周振紅,周洞汝,楊國錄.基于COM的軟件組件[J].計算機應用,2001,21(3):6-8.

[8]Dale Rogerson.COM技術內幕[M].楊秀章,譯.北京:清華大學出版社,1999:202-212.

[9]邱巖.組件技術及其分析比較[J].計算機工程與設計,2003,24(7):13-17.

[10]吳立偉,陳進,孫衛祥.DCOM在設備遠程監測與故障診斷系統中的應用[J].計算機工程與應用,2006,21(4):183-185.

[11]汪維華,葛君偉,解紹詞.基于DCOM的分布式Web模型研究[J].計算機應用研究,2005,22(6):202-203.

[12]史建華,吳旭光,高云迪,等.基于DCOM技術的三層分布式網絡的實現[J].計算機測量與控制,2009,17(7):1359-1361.

[13]趙靖,李石君,劉海青.基于對象的分布式系統比較[J].武漢大學學報(理學版),2005,51(S2):151-154.

[14]鐘文,王益.串行端口底層通信機理研究及相應實現[J].計算機工程,2005,31(19):225-227.

[15]阮鋒,沈進棋,諸靜.移動機器人中通信的串口解決方案[J].計算機工程,2004,30(21):186-189.

猜你喜歡
設計
二十四節氣在平面廣告設計中的應用
河北畫報(2020年8期)2020-10-27 02:54:06
何為設計的守護之道?
現代裝飾(2020年7期)2020-07-27 01:27:42
《豐收的喜悅展示設計》
流行色(2020年1期)2020-04-28 11:16:38
基于PWM的伺服控制系統設計
電子制作(2019年19期)2019-11-23 08:41:36
基于89C52的32只三色LED搖搖棒設計
電子制作(2019年15期)2019-08-27 01:11:50
基于ICL8038的波形發生器仿真設計
電子制作(2019年7期)2019-04-25 13:18:16
瞞天過海——仿生設計萌到家
藝術啟蒙(2018年7期)2018-08-23 09:14:18
設計秀
海峽姐妹(2017年7期)2017-07-31 19:08:17
有種設計叫而專
Coco薇(2017年5期)2017-06-05 08:53:16
從平面設計到“設計健康”
商周刊(2017年26期)2017-04-25 08:13:04
主站蜘蛛池模板: 国产成人精品18| 一区二区三区四区日韩| 日本妇乱子伦视频| 精品久久综合1区2区3区激情| 免费啪啪网址| 国内精品自在自线视频香蕉| 免费无码AV片在线观看国产| www.91在线播放| 啦啦啦网站在线观看a毛片| AV不卡无码免费一区二区三区| 亚洲国产精品日韩专区AV| 在线播放真实国产乱子伦| 五月婷婷欧美| 精品一区二区无码av| 91尤物国产尤物福利在线| 高清无码一本到东京热| 91久久偷偷做嫩草影院电| 九色最新网址| 亚洲有无码中文网| 婷婷色一区二区三区| 国产乱子伦手机在线| 一级全免费视频播放| 日韩资源站| 国产裸舞福利在线视频合集| 亚洲国产亚洲综合在线尤物| 国产二级毛片| 亚洲人在线| 人妻精品全国免费视频| 婷婷亚洲最大| 国产免费久久精品99re不卡| 999精品在线视频| 最新亚洲av女人的天堂| 超碰91免费人妻| 国产精品视频第一专区| 秘书高跟黑色丝袜国产91在线| 免费啪啪网址| 久久久久久午夜精品| 亚洲色欲色欲www网| AV熟女乱| 日韩精品久久无码中文字幕色欲| 亚洲国产日韩在线成人蜜芽| 国产美女自慰在线观看| 国产麻豆永久视频| 国产精品深爱在线| 午夜少妇精品视频小电影| 午夜不卡福利| 国产无遮挡猛进猛出免费软件| 亚洲国产日韩视频观看| 久久天天躁夜夜躁狠狠| 91精品国产情侣高潮露脸| 色爽网免费视频| 国产理论精品| 全部毛片免费看| 欧美亚洲国产精品第一页| 国产精品精品视频| 精品国产成人国产在线| 亚洲有无码中文网| 蝴蝶伊人久久中文娱乐网| 国产丝袜无码精品| 日韩成人高清无码| 亚洲精品天堂在线观看| 香蕉久久永久视频| 久久久久人妻一区精品| 国产伦片中文免费观看| 欧美亚洲香蕉| 国产午夜人做人免费视频| 亚洲一区网站| 国产精品原创不卡在线| 亚洲系列无码专区偷窥无码| 四虎永久在线| 大香伊人久久| 视频一区视频二区日韩专区| 久草青青在线视频| 午夜性刺激在线观看免费| 日本黄色不卡视频| 国产亚洲视频中文字幕视频| 成年免费在线观看| 国产免费高清无需播放器 | 日韩av在线直播| 666精品国产精品亚洲| 国产女人在线观看| 成人日韩欧美|