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
主站蜘蛛池模板: 国产欧美日韩综合在线第一| av一区二区三区高清久久| 美女一区二区在线观看| 精品国产免费观看| 亚洲一区二区三区中文字幕5566| 国产福利免费视频| 国产91九色在线播放| 日本欧美中文字幕精品亚洲| 亚洲黄色片免费看| 成人a免费α片在线视频网站| 中日韩欧亚无码视频| 天堂成人在线视频| 中文字幕2区| 四虎成人精品在永久免费| 国产丝袜91| 亚洲欧美综合另类图片小说区| 婷婷五月在线视频| 国产va在线观看免费| 国产簧片免费在线播放| 亚洲无码37.| 久久精品嫩草研究院| 国产精品密蕾丝视频| 免费A级毛片无码免费视频| 亚洲国产AV无码综合原创| 国产成人高清精品免费软件| 91啪在线| 国产综合另类小说色区色噜噜| 中文精品久久久久国产网址| 青青操国产| 午夜精品影院| WWW丫丫国产成人精品| 91偷拍一区| 欧美区国产区| 亚洲一区精品视频在线| 亚洲成a人片7777| 中文字幕调教一区二区视频| 亚洲欧美精品一中文字幕| 欧美午夜小视频| 欧美在线网| 国产成人高清精品免费5388| 无码专区第一页| 国产亚洲欧美在线专区| 2021国产精品自拍| 69免费在线视频| 国产精品美女自慰喷水| 亚亚洲乱码一二三四区| 欧美一区二区三区不卡免费| 天天色综网| 国产国产人成免费视频77777| 色天堂无毒不卡| 广东一级毛片| 尤物精品视频一区二区三区| 午夜视频在线观看区二区| 久久女人网| yy6080理论大片一级久久| 欧美劲爆第一页| 亚洲男人的天堂网| 久久国产精品影院| 亚洲精品午夜天堂网页| 尤物精品国产福利网站| 在线国产你懂的| 爆操波多野结衣| 嫩草在线视频| 久青草免费在线视频| 四虎国产在线观看| 99热这里只有精品久久免费| 色婷婷在线影院| 大陆国产精品视频| 亚洲乱亚洲乱妇24p| 国产成人亚洲欧美激情| 亚洲中文精品久久久久久不卡| 欧美成人影院亚洲综合图| 国产美女主播一级成人毛片| 欧美福利在线| 亚洲国产天堂久久综合| 欧美在线视频不卡第一页| 真实国产乱子伦视频| 在线看片中文字幕| 亚洲综合激情另类专区| 91www在线观看| 91麻豆精品视频| 亚洲欧美日韩另类|