徐 嵩, 孫秀霞, 董文瀚, 李湘清, 李大東
(空軍工程大學(xué)工程學(xué)院航空自動(dòng)控制工程系,陜西西安710038)
小型無(wú)人機(jī)系統(tǒng)由于結(jié)構(gòu)簡(jiǎn)單、造價(jià)低廉、生存能力強(qiáng)、機(jī)動(dòng)性好,被廣泛運(yùn)用于科研試驗(yàn)、教學(xué)實(shí)驗(yàn)中。無(wú)人機(jī)地面站作為整個(gè)系統(tǒng)的用戶接口及服務(wù)器與無(wú)人機(jī)之間必須建立并保持可靠高效的數(shù)據(jù)通信,目前普遍采用通過(guò)串口連接的無(wú)線數(shù)據(jù)傳輸模塊實(shí)現(xiàn)[1]。無(wú)人機(jī)地面站是一個(gè)具有多個(gè)功能模塊的復(fù)雜系統(tǒng),要求各功能模塊在設(shè)計(jì)上既滿足良好的封裝性又不能影響模塊間交互。COM組件化設(shè)計(jì)方法具備良好的封裝性、語(yǔ)言無(wú)關(guān)性和軟件的易擴(kuò)展性[2],近年來(lái)被引入無(wú)人機(jī)地面站的設(shè)計(jì)與開(kāi)發(fā)[3]。然而,各類串口通信的組件設(shè)計(jì)還局限在對(duì)串口的特性設(shè)置與收發(fā)字節(jié)或字符串等基本功能的封裝上[3-5],多個(gè)客戶端的協(xié)調(diào)及通信中的翻譯與編碼等功能仍在組件外實(shí)現(xiàn),沒(méi)有實(shí)現(xiàn)完整封裝。本文通過(guò)基于分布式COM(DCOM)的設(shè)計(jì)方法,將地面站-無(wú)人機(jī)通信中所需的串口管理、遙測(cè)遙控及參數(shù)調(diào)整中的解析、翻譯、編碼等功能封裝在一個(gè)COM組件中并實(shí)現(xiàn)本地與遠(yuǎn)程訪問(wèn)。針對(duì)本組件分析了COM線程模式的適用性[6],在對(duì)第三方提供的串口類CSerialPort進(jìn)行了修改與擴(kuò)展的基礎(chǔ)上設(shè)計(jì)了實(shí)現(xiàn)串口管理和數(shù)據(jù)幀收發(fā)的接口,并設(shè)計(jì)了通過(guò)調(diào)用該接口實(shí)現(xiàn)接收及發(fā)送數(shù)據(jù)信息的狀態(tài)遙控遙測(cè)接口與飛控系統(tǒng)參數(shù)調(diào)整接口,滿足了地面站串口通信需求。
組件化軟件設(shè)計(jì)就是將一個(gè)大的應(yīng)用程序劃分成多個(gè)模塊,每一個(gè)模塊保持功能獨(dú)立性,模塊間通過(guò)規(guī)范的接口完成實(shí)際的任務(wù),其中的模塊稱為組件。COM(component object model)為軟件的組件化設(shè)計(jì)提供了包含規(guī)范與實(shí)現(xiàn)兩部分的標(biāo)準(zhǔn)。一個(gè)設(shè)計(jì)良好的應(yīng)用系統(tǒng)往往被分成多個(gè)可以單獨(dú)開(kāi)發(fā)的組件,最終通過(guò)主程序?qū)Ω鱾€(gè)組件的調(diào)用與管理來(lái)實(shí)現(xiàn)整個(gè)系統(tǒng)。COM中的核心是接口,接口是客戶端與COM對(duì)象通信的抽象協(xié)議,客戶端只能通過(guò)接口調(diào)用COM對(duì)象[6],COM 中的智能指針類為接口的使用提供支持。與 C++對(duì)象的封裝不同,C++對(duì)象是源代碼級(jí)的語(yǔ)義封裝,COM對(duì)象是二進(jìn)制級(jí)的封裝,COM接口的實(shí)現(xiàn)對(duì)調(diào)用它的程序是隱蔽的[7-8]。目前COM接口采用IDL語(yǔ)言定義,與具體實(shí)現(xiàn)語(yǔ)言無(wú)關(guān),從而保證接口與實(shí)現(xiàn)之間的解耦;IDL具備豐富的數(shù)據(jù)類型支持及擴(kuò)展,方便了模塊間的通信及組件接口調(diào)用[8]。
DCOM(Distributed COM)是對(duì)COM的一種擴(kuò)展,支持不同計(jì)算機(jī)上COM對(duì)象間的聯(lián)網(wǎng)通信[9]。由于DCOM是COM的無(wú)縫衍生,因而當(dāng)前設(shè)計(jì)的進(jìn)程外COM組件服務(wù) (COM EXE Service)無(wú)需修改即可通過(guò)配置(DCOMCNFG)來(lái)實(shí)現(xiàn)客戶對(duì)組件的遠(yuǎn)程訪問(wèn)。DCOM隱藏了網(wǎng)絡(luò)協(xié)議細(xì)節(jié),還具備可伸縮性、平臺(tái)獨(dú)立、安全性、可配置性等特性[10],使我們可以集中精力設(shè)計(jì)組件而避免各種通信問(wèn)題。
DCOM采用SCM(service control manager)進(jìn)行COM對(duì)象的遠(yuǎn)程激活,并采用ORPC(objectremoteprocedurecalls)進(jìn)行通信,通信采用代理-存根(Proxy-Stub)結(jié)構(gòu)[9],該結(jié)構(gòu)由IDL文件經(jīng) MIDL自動(dòng)編譯得到,無(wú)需開(kāi)發(fā)人員設(shè)計(jì)。COM 運(yùn)行時(shí)(Runtime)支持客戶和組件的面向?qū)ο蠓?wù),采用RPC及安全規(guī)定并依據(jù) DCOM 協(xié)議標(biāo)準(zhǔn)生成標(biāo)準(zhǔn)網(wǎng)絡(luò)包[11-12]。具體的DCOM通信結(jié)構(gòu)見(jiàn)圖1[13]。
圖1 DCOM通信結(jié)構(gòu)
COM線程模型的選用直接影響組件服務(wù)與客戶端程序的設(shè)計(jì)方法與運(yùn)行性能。套間(Apartment)是COM線程模型中重要的邏輯概念,是一個(gè)用來(lái)隔離并發(fā)訪問(wèn)的假想邊界,在不同套間中的同一個(gè)COM對(duì)象將由于套間邊界的隔離而必須進(jìn)行接口調(diào)度,這一方面阻止了不安全線程并發(fā)訪問(wèn)所引發(fā)的錯(cuò)誤,但也增加了運(yùn)行開(kāi)銷。套間分為STA(單線程套間)、MTA(多線程套間)、NA(中性套間),對(duì)于組件對(duì)象而言創(chuàng)建時(shí)可以選擇相應(yīng)的套間支持類型:Apartment(支持STA)、Free(支持MTA)、Both(支持STA與MTA),對(duì)于NA的支持必須配置組件的注冊(cè)。只有當(dāng)線程所屬套間類型與組件支持的套間類型相匹配才能實(shí)現(xiàn)直接調(diào)用,否則將建立相應(yīng)的宿主套間(HostSTA/MTA/NA)進(jìn)行間接調(diào)用[6]。這里比較STA與MTA的特點(diǎn)與適用性:
一個(gè)進(jìn)程可以擁有多個(gè)STA,每個(gè)STA可具備消息循環(huán)并只含有一個(gè)線程,同一個(gè)COM對(duì)象在不同的STA中調(diào)用時(shí)須接口調(diào)度過(guò)程并增加開(kāi)銷。一個(gè)進(jìn)程只能有一個(gè)MTA,MTA中可有多個(gè)線程,同一個(gè)COM對(duì)象在MTA的多個(gè)線程間被調(diào)用時(shí)無(wú)需接口調(diào)度,但在COM對(duì)象設(shè)計(jì)中必須考慮線程安全問(wèn)題。需要平凡I/O或處于多個(gè)線程中并發(fā)運(yùn)行的組件適合采用MTA(Free或Both)以提高效率[6]。本文設(shè)計(jì)的通信組件由于不需要窗口及消息機(jī)制且須在多個(gè)線程中(接收、發(fā)送等)并發(fā)運(yùn)行,因而適合采用MTA。
Windows環(huán)境下已具備成熟的串口通信支持,可利用VC++運(yùn)行時(shí)標(biāo)準(zhǔn)通信函數(shù)[14]、WindowsAPI函數(shù)、MSComm控件、第三方串口類進(jìn)行串口通信設(shè)計(jì)開(kāi)發(fā)。當(dāng)前普遍采用后3種方式[3,15]。由于MSComm控件存在諸如內(nèi)存泄露、無(wú)法發(fā)送16進(jìn)制數(shù)等缺陷,也有文獻(xiàn)采用WindowsAPI自行開(kāi)發(fā)串口組件[3]。本文在修改并擴(kuò)充第三方類(CSerialPort)的基礎(chǔ)上設(shè)計(jì)實(shí)現(xiàn)串口通信組件的串口通信管理接口。
圖2中地面站與無(wú)人機(jī)間的通信由與RS232串口相連的無(wú)線數(shù)據(jù)傳輸模塊實(shí)現(xiàn),地面站包含地面監(jiān)控軟件與參數(shù)調(diào)整軟件等。無(wú)人機(jī)具有導(dǎo)航模塊、飛行控制模塊、舵機(jī)擴(kuò)展模塊和其他自定義模塊,其中只有導(dǎo)航模塊能與地面設(shè)備直接通信。串口通信組件須實(shí)現(xiàn)地面軟件與無(wú)人機(jī)的實(shí)時(shí)通信以及遠(yuǎn)程計(jì)算機(jī)調(diào)用通信組件與無(wú)人機(jī)通信。通信組件之間不直接進(jìn)行遠(yuǎn)程通信,各地面軟件與遠(yuǎn)程的通信組件進(jìn)行交互。多個(gè)地面軟件均由串口通信方式與無(wú)人機(jī)通信,該組件的設(shè)計(jì)符合軟件設(shè)計(jì)的復(fù)用性。
圖2 地面站串口通信需求
無(wú)人機(jī)的通信協(xié)議已由無(wú)人機(jī)自動(dòng)駕駛儀制造方提供,數(shù)據(jù)幀結(jié)構(gòu)如圖3所示,串口通信組件需要完成接收數(shù)據(jù)時(shí)的幀解析與翻譯以及發(fā)送數(shù)據(jù)時(shí)將待發(fā)送信息按照協(xié)議編碼為幀。
圖3 無(wú)人機(jī)-地面站數(shù)據(jù)幀結(jié)構(gòu)
地面監(jiān)控軟件與參數(shù)調(diào)整軟件與無(wú)人機(jī)的數(shù)據(jù)通信均有明顯的異步特性,須采用多線程循環(huán)等待的方式實(shí)現(xiàn),因而需要設(shè)計(jì)異步的COM接口方法(一般的COM接口方法只能采用同步阻塞的方式調(diào)用[4])。數(shù)據(jù)異步傳輸及多線程會(huì)帶來(lái)數(shù)據(jù)丟失與訪問(wèn)沖突等問(wèn)題,需要采用緩沖區(qū)及線程同步方法。此外,串口通信組件需要頻繁開(kāi)關(guān)串口與翻譯編碼過(guò)程,對(duì)內(nèi)存資源必須進(jìn)行可靠管理以防泄漏。
本文所設(shè)計(jì)的組件有3個(gè)接口類,其中IComPortAdm管理串口并收發(fā)數(shù)據(jù)幀,IGCSCommUAV編碼發(fā)送遙控?cái)?shù)據(jù)與監(jiān)聽(tīng)翻譯遙測(cè)數(shù)據(jù),CADJCommUAV編碼發(fā)送參數(shù)設(shè)置指令、發(fā)送參數(shù)回復(fù)請(qǐng)求與接收翻譯參數(shù)回復(fù)數(shù)據(jù)。后兩者通過(guò)接口調(diào)度(查詢)實(shí)現(xiàn)對(duì)IComPortAdm中的各種方法的調(diào)用,并通過(guò)全局線程及對(duì)象實(shí)現(xiàn)依據(jù)搶占設(shè)置的串口使用協(xié)調(diào)。此外所有接口方法均可返回錯(cuò)誤,客戶端程序可通過(guò)try-catch將其捕獲用以報(bào)錯(cuò)或糾錯(cuò)處理。如圖4所示。
圖4 串口通信組件整體結(jié)構(gòu)
3.2.1 異步緩沖區(qū)模板類的設(shè)計(jì)
為提高數(shù)據(jù)傳輸可靠性與解決接口異步調(diào)用和線程沖突問(wèn)題,須將各種結(jié)構(gòu)類型的數(shù)據(jù)通過(guò)具有異步特性與線程同步的緩沖區(qū)進(jìn)行傳輸,因而本文設(shè)計(jì)了模板類:
同步操作函數(shù)與一般循環(huán)隊(duì)列相同,異步操作函數(shù)將緩沖區(qū)的存儲(chǔ)狀態(tài)與信號(hào)量(利用Semaphore的計(jì)數(shù)器Tokens)結(jié)合起來(lái),圖5中粗實(shí)框由m_BufferSync防止沖突。
3.2.2 簡(jiǎn)易線程管理器的設(shè)計(jì)
組件服務(wù)與客戶端都存在需要反復(fù)開(kāi)啟與關(guān)閉的線程,退出線程函數(shù)后只有關(guān)閉線程句柄才能銷毀線程對(duì)象,如未關(guān)閉句柄而再次創(chuàng)建線程則該句柄指向新創(chuàng)建的線程造成原線程對(duì)象資源泄漏??刹捎镁€程池來(lái)管理線程,這里為了精簡(jiǎn)程序采用了自定義的線程管理器(類)來(lái)管理線程。
線程管理器的作用過(guò)程:首先創(chuàng)建管理器對(duì)象并將其啟動(dòng)StartThreadManager,創(chuàng)建自定義線程前注冊(cè)線程句柄地址RegisterThread;退出線程前采用CloseThreadHandle發(fā)送線程退出事件使管理器關(guān)閉對(duì)應(yīng)的線程句柄 (管理器線程采用循環(huán)等待流程);當(dāng)管理器對(duì)象生命周期結(jié)束時(shí)由析構(gòu)函數(shù)將管理器線程退出并關(guān)閉句柄,通過(guò)CheckThreadClosed可檢查線程的關(guān)閉情況。串口的使用與協(xié)調(diào)也采用了類似的處理方法即:注冊(cè)(COM對(duì)象指針)→啟動(dòng)→關(guān)閉(通過(guò)對(duì)象指針),如果串口已被占用但允許搶占,可在注冊(cè)時(shí)(通過(guò)對(duì)象指針)讓當(dāng)前使用該串口的COM對(duì)象關(guān)閉串口。
圖5 異步緩沖區(qū)工作流程
3.3.1 對(duì)CSerialPort類的修改與擴(kuò)展:
CSerialPort是一個(gè)被廣泛應(yīng)用的串口類[3,15],它以成員函數(shù)的形式提供串口設(shè)置及寫數(shù)據(jù)接口,以消息方式提供讀取數(shù)據(jù)接口和部分串口狀態(tài)事件通知。而 MTA下的組件并不支持消息機(jī)制,本文去除了該類中有關(guān)消息機(jī)制的代碼并利用異步緩沖區(qū)實(shí)現(xiàn)了一個(gè)異步數(shù)據(jù)讀取接口(函數(shù)):
添加成員變量CDataBuffer
3.3.2 接口IComPortAdm的實(shí)現(xiàn)
在類CComPortAdm中添加成員變量CSerialPortm_Port與CDataBuffer
添加線程管理器CThreadManager m_ThreadManager與數(shù)據(jù)分發(fā)線程 static DWORD WINAPI DataDistribute(LPVOID pParam),在StartReceiveData中注冊(cè)并啟動(dòng)線程DataDistribute中采用m_Port.GetRcvByte并依據(jù)數(shù)據(jù)幀的格式實(shí)現(xiàn)循環(huán)等待的處理流程并將數(shù)據(jù)幀存入m_DataFrameBuffer,其他數(shù)據(jù)存入m_NonFrameStrBuffer(AsynEnterBuffer)以供其他兩個(gè)接口調(diào)用:如本接口的一個(gè)方法:
RcvNonFrameStr方法的實(shí)現(xiàn)與其類似 (將m_DataFrame-Buffer替換為m_NonFrameStrBuffer),其余方法均為類CSerial-Port中方法的組合。
3.4.1 接口調(diào)度(查詢)的實(shí)現(xiàn)
這兩個(gè)接口都經(jīng)IComPortAdm獲取并發(fā)送數(shù)據(jù)幀,因而必須獲取該接口的指針,COM提供了一個(gè)靈活的接口查詢函數(shù)QueryInterface實(shí)現(xiàn)該過(guò)程,將IComPortAdm指針賦給這兩個(gè)接口實(shí)現(xiàn)類中的成員變量IComPortAdm*m_IComPortAdm:
QueryInterface會(huì)使被調(diào)用的接口對(duì)象的引用數(shù)加1,而由于實(shí)現(xiàn)類中不能采用智能指針,當(dāng)退出(析構(gòu))這兩個(gè)接口時(shí)須通過(guò)m_IComPortAdm->Release()顯式地將引用數(shù)減1,從而使組件進(jìn)程正常退出。
3.4.2 翻譯-編碼與數(shù)據(jù)傳遞的實(shí)現(xiàn)
翻譯時(shí)根據(jù)數(shù)據(jù)幀的特點(diǎn)可采用聯(lián)合的數(shù)據(jù)結(jié)構(gòu)對(duì)幀進(jìn)行解析,利用解析結(jié)果將數(shù)據(jù)幀翻譯為最終需要的結(jié)構(gòu)體數(shù)據(jù);編碼采用相反過(guò)程。翻譯與編碼對(duì)幀的基本處理(校驗(yàn)、合成與分解)一致,可將其作為基類,而將其他的翻譯與編碼功能的實(shí)現(xiàn)作為若干派生類,提高代碼復(fù)用率。
幾乎每一幀翻譯結(jié)果或待編碼數(shù)據(jù)的結(jié)構(gòu)類型都不相同,IDL提供了豐富的數(shù)據(jù)類型支持[5,8],本文利用其對(duì)結(jié)構(gòu)體和聯(lián)合體的支持設(shè)計(jì)一種參數(shù)結(jié)構(gòu)便于傳遞:
這種參數(shù)結(jié)構(gòu)使我們能通過(guò)幀標(biāo)識(shí)符(命令字)來(lái)選擇數(shù)據(jù)類型。在此基礎(chǔ)上添加數(shù)據(jù)接收與命令上傳線程:
并添加線程管理器,與緩沖區(qū):
實(shí)現(xiàn)整個(gè)遙控遙測(cè)接口(見(jiàn)圖6)。
圖6 IGCSCommUAV接口實(shí)現(xiàn)流程
兩個(gè)線程調(diào)用了COM對(duì)象,必須在進(jìn)入線程時(shí)將其放入MTA:::CoInitializeEx(NULL,COINIT_MULTITHREADED);,退出線程時(shí)必須使線程退出MTA(::CoUninitialize();)調(diào)參接口的實(shí)現(xiàn)采用同樣的方法,區(qū)別在于發(fā)送參數(shù)回復(fù)請(qǐng)求時(shí)無(wú)需進(jìn)行編碼(直接發(fā)送命令字)。
各地面軟件都可作為組件的客戶端本地或遠(yuǎn)程調(diào)用該串口通信組件。本地調(diào)用與調(diào)用一般的進(jìn)程內(nèi)或進(jìn)程外 COM組件一致,遠(yuǎn)程調(diào)用需要通過(guò)DCOMCNFG對(duì)已注冊(cè)的相應(yīng)組件進(jìn)行設(shè)置,包括身份信息驗(yàn)證方式、運(yùn)行應(yīng)用程序(組件)的位置、對(duì)各類用戶激活及訪問(wèn)該組件的權(quán)限的設(shè)置[8]。為便于客戶端編程,本文在將安全級(jí)別降到最低的情況下在局域網(wǎng)內(nèi)實(shí)現(xiàn)了地面監(jiān)控軟件及調(diào)參軟件對(duì)通信組件的遠(yuǎn)程調(diào)用:
定義智能指針:IComPortAdmPtr m_pComPortAdm;
CoCreateInstanceEx(__uuidof(ComPortAdm),NULL,CLSCTX_SERVER,&si,1,&qi);
m_pComPortAdm=IComPortAdmPtr(qi.pItf);
其中si.pwszName可以設(shè)為計(jì)算機(jī)名(同一個(gè)工作組內(nèi)),或組件所在IP地址,qi.pIID=&IID_IComPortAdm。其他兩個(gè)接口的調(diào)用方法與之相同,在客戶端設(shè)計(jì)多個(gè)工作線程并將其置入MTA,循環(huán)調(diào)用組件的異步接口方法。如果提高了組件的安全性設(shè)置則需要通過(guò) COSERVERINFO結(jié)構(gòu)來(lái)設(shè)置服務(wù)器信息機(jī)及提供客戶端的身份識(shí)別信息,DCOM的配置不是本文所涉及的內(nèi)容,可參看MSDN。
采用VS2005進(jìn)行調(diào)試,其報(bào)告中未發(fā)現(xiàn)資源泄漏,在正常運(yùn)行時(shí)可以反復(fù)開(kāi)關(guān)串口及遙控遙測(cè)與調(diào)參過(guò)程,通過(guò)調(diào)試可驗(yàn)證當(dāng)所有客戶端對(duì)該COM服務(wù)器中的COM對(duì)象的引用數(shù)減為0時(shí),在COM服務(wù)器的消息機(jī)制作用下組件進(jìn)程將順利退出。
COM作為實(shí)現(xiàn)良好的軟件組件化設(shè)計(jì)的標(biāo)準(zhǔn)與方法已被廣泛應(yīng)用,它的擴(kuò)展DCOM也為分布式系統(tǒng)的設(shè)計(jì)提供了一個(gè)便利途徑。本文在分析地面站串口通信需求的基礎(chǔ)上,綜合串口基本管理、無(wú)人機(jī)遙控遙測(cè)數(shù)據(jù)通信以及無(wú)人機(jī)參數(shù)調(diào)整通信等功能,設(shè)計(jì)了串口通信組件。采用自定義的異步緩沖區(qū)模板類實(shí)現(xiàn)了對(duì)COM接口方法的異步調(diào)用及解決多線程并發(fā)運(yùn)行時(shí)的沖突問(wèn)題,采用接口調(diào)度(查詢)實(shí)現(xiàn)了組件中有關(guān)接口對(duì)象的相互調(diào)用,并設(shè)計(jì)了線程管理類器有效防止資源泄漏,保證了無(wú)人機(jī)地面站串口通信的可靠性,增強(qiáng)了軟件功能模塊的復(fù)用性,同時(shí)也為通信模塊組件化設(shè)計(jì)提供一種可行的新方案。
[1]龔曉莉,李健.小型無(wú)人機(jī)數(shù)據(jù)采集與通信系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].微計(jì)算機(jī)信息,2007,23(12):100-101.
[2]吳云,宋人杰.基于COM技術(shù)的交互圖形開(kāi)發(fā)平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(jì),2009,30(9):2307-2310.
[3]馬力.無(wú)人直升機(jī)開(kāi)放控制平臺(tái)控制組件與數(shù)據(jù)通信[D].南京:南京航空航天大學(xué)碩士學(xué)位論文,2008:36-44.
[4]李比翼,陳特放.異步COM技術(shù)在串口通信組件的應(yīng)用[J].長(zhǎng)沙航空職業(yè)技術(shù)學(xué)院學(xué)報(bào),2006,6(3):40-42.
[5]楊啟亮,邢建春,王平.基于DCOM的I/O驅(qū)動(dòng)程序封裝關(guān)鍵技術(shù)研究[J].計(jì)算機(jī)工程,2005,31(14):231-233.
[6]徐名昆,張英海.COM服務(wù)器組件線程模型的選擇[J].計(jì)算機(jī)工程與設(shè)計(jì),2004,25(12):3338-3339.
[7]周振紅,周洞汝,楊國(guó)錄.基于COM的軟件組件[J].計(jì)算機(jī)應(yīng)用,2001,21(3):6-8.
[8]Dale Rogerson.COM技術(shù)內(nèi)幕[M].楊秀章,譯.北京:清華大學(xué)出版社,1999:202-212.
[9]邱巖.組件技術(shù)及其分析比較[J].計(jì)算機(jī)工程與設(shè)計(jì),2003,24(7):13-17.
[10]吳立偉,陳進(jìn),孫衛(wèi)祥.DCOM在設(shè)備遠(yuǎn)程監(jiān)測(cè)與故障診斷系統(tǒng)中的應(yīng)用[J].計(jì)算機(jī)工程與應(yīng)用,2006,21(4):183-185.
[11]汪維華,葛君偉,解紹詞.基于DCOM的分布式Web模型研究[J].計(jì)算機(jī)應(yīng)用研究,2005,22(6):202-203.
[12]史建華,吳旭光,高云迪,等.基于DCOM技術(shù)的三層分布式網(wǎng)絡(luò)的實(shí)現(xiàn)[J].計(jì)算機(jī)測(cè)量與控制,2009,17(7):1359-1361.
[13]趙靖,李石君,劉海青.基于對(duì)象的分布式系統(tǒng)比較[J].武漢大學(xué)學(xué)報(bào)(理學(xué)版),2005,51(S2):151-154.
[14]鐘文,王益.串行端口底層通信機(jī)理研究及相應(yīng)實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2005,31(19):225-227.
[15]阮鋒,沈進(jìn)棋,諸靜.移動(dòng)機(jī)器人中通信的串口解決方案[J].計(jì)算機(jī)工程,2004,30(21):186-189.