亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

        2011-09-07 10:17:12孫秀霞董文瀚李湘清李大東
        計算機工程與設計 2011年9期
        關鍵詞:管理器線程調(diào)用

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

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

        0 引 言

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

        1 從COM到DCOM

        1.1 COM與DCOM技術概述

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

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

        DCOM采用SCM(service control manager)進行COM對象的遠程激活,并采用ORPC(objectremoteprocedurecalls)進行通信,通信采用代理-存根(Proxy-Stub)結構[9],該結構由IDL文件經(jīng) MIDL自動編譯得到,無需開發(fā)人員設計。COM 運行時(Runtime)支持客戶和組件的面向?qū)ο蠓眨捎肦PC及安全規(guī)定并依據(jù) DCOM 協(xié)議標準生成標準網(wǎng)絡包[11-12]。具體的DCOM通信結構見圖1[13]。

        圖1 DCOM通信結構

        1.2 COM線程模型的選用

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

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

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

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

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

        圖2 地面站串口通信需求

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

        圖3 無人機-地面站數(shù)據(jù)幀結構

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

        3 串口通信組件設計

        3.1 組件整體結構

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

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

        3.2 公共 (模板)類的設計

        3.2.1 異步緩沖區(qū)模板類的設計

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

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

        3.2.2 簡易線程管理器的設計

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

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

        圖5 異步緩沖區(qū)工作流程

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

        3.3.1 對CSerialPort類的修改與擴展:

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

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

        3.3.2 接口IComPortAdm的實現(xiàn)

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

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

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

        3.4 遙測遙控與調(diào)參接口的設計

        3.4.1 接口調(diào)度(查詢)的實現(xiàn)

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

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

        3.4.2 翻譯-編碼與數(shù)據(jù)傳遞的實現(xiàn)

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

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

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

        并添加線程管理器,與緩沖區(qū):

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

        圖6 IGCSCommUAV接口實現(xiàn)流程

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

        4 客戶端程序調(diào)用組件的方法

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

        定義智能指針:IComPortAdmPtr m_pComPortAdm;

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

        m_pComPortAdm=IComPortAdmPtr(qi.pItf);

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

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

        5 結束語

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

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

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

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

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

        [5]楊啟亮,邢建春,王平.基于DCOM的I/O驅(qū)動程序封裝關鍵技術研究[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技術內(nèi)幕[M].楊秀章,譯.北京:清華大學出版社,1999:202-212.

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

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

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

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

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

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

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

        猜你喜歡
        管理器線程調(diào)用
        應急狀態(tài)啟動磁盤管理器
        核電項目物項調(diào)用管理的應用研究
        Windows文件緩沖處理技術概述
        LabWindows/CVI下基于ActiveX技術的Excel調(diào)用
        測控技術(2018年5期)2018-12-09 09:04:46
        淺談linux多線程協(xié)作
        基于系統(tǒng)調(diào)用的惡意軟件檢測技術研究
        高集成度2.5A備份電源管理器簡化鋰離子電池備份系統(tǒng)
        快速導出QQ群消息
        電腦迷(2014年2期)2014-04-29 19:21:13
        利用RFC技術實現(xiàn)SAP系統(tǒng)接口通信
        Linux線程實現(xiàn)技術研究
        无码AV高潮喷水无码专区线| 女色av少妇一区二区三区| 中文字幕人妻系列一区尤物视频| 蜜桃视频永久免费在线观看| 国产一区二区黄色录像| 亚洲熟女乱色综合亚洲av| 一本一本久久a久久精品| 亚洲黄片高清在线观看| 日本精品一级二区三级| 亚洲av综合av国产av中文| 亚洲欧美日韩在线一区| 无码伊人66久久大杳蕉网站谷歌| 日本一区二区三区综合视频| 香港三级午夜理论三级| 亚洲av无码片在线观看| 97久久综合区小说区图片专区| 日本一级三级在线观看| 欧美性生交活xxxxxdddd| 国产乱人伦精品一区二区| 中日韩欧美高清在线播放| 蜜桃在线视频一区二区| 夜夜躁狠狠躁日日躁视频| 日韩av高清无码| 亚洲色无码中文字幕| 国产传媒精品成人自拍| 东京道一本热中文字幕| 粉嫩少妇内射浓精videos| 最新国产精品精品视频| 电驱蚊液可以插一晚上吗| 中国农村妇女hdxxxx| 久久亚洲伊人| 国产白浆一区二区三区佳柔 | 亚洲av乱码一区二区三区观影| 免费av网站大全亚洲一区| 天天躁日日躁狠狠很躁| 亚洲高清在线不卡中文字幕网| 久久色悠悠综合网亚洲| 日本国产成人国产在线播放| 亚洲综合无码一区二区| 一区二区三区蜜桃在线视频| 亚洲国产精品国自产拍久久蜜av|