龔 健,華更新,孫 越,衣學(xué)慧
(北京控制工程研究所,北京 100190)
測(cè)試是衛(wèi)星電子設(shè)備研制過程中一個(gè)重要的環(huán)節(jié),衛(wèi)星電子設(shè)備測(cè)試系統(tǒng)是一個(gè)集數(shù)字電路、模擬電路、嵌入式軟件、以及專用軟件為一體的復(fù)雜系統(tǒng),其實(shí)現(xiàn)一般由測(cè)試設(shè)備硬件和地面測(cè)試軟件兩大部分組成,測(cè)試設(shè)備的硬件一般包括采用單片機(jī)或處理器的硬件板卡、單純模擬或數(shù)字電路的硬件板卡;地面測(cè)試軟件是直接與用戶交互的測(cè)試系統(tǒng)專用軟件,一般具有圖形化的用戶界面,需要訪問測(cè)試設(shè)備硬件以便完成測(cè)試,并通過數(shù)據(jù)庫訪問完成測(cè)試數(shù)據(jù)的存儲(chǔ)和管理.目前有多種開發(fā)環(huán)境支持這種專用軟件的開發(fā)和設(shè)計(jì),例如Microsoft公司的Visual C++和 Visual Basic,National Instruments公司的 LabView 和 LabWindows[1-6].雖然經(jīng)過十幾年的發(fā)展,以LabView為代表的新開發(fā)工具層出不窮,但Microsoft公司的Visual C++依賴其對(duì)底層硬件訪問十分便捷、良好的兼容性、廣泛的用戶基礎(chǔ)和技術(shù)支持,目前依然是各種測(cè)試和監(jiān)控系統(tǒng)最主要的軟件開發(fā)環(huán)境之一[2-3].采用Visual C++開發(fā)星用地面測(cè)試軟件的好處主要有:便于與硬件進(jìn)行接口,尤其適合星用非標(biāo)準(zhǔn)硬件板卡的編程;適合通信協(xié)議解析等復(fù)雜邏輯的程序設(shè)計(jì);具有廣泛的技術(shù)支持獲取渠道;能避免購買昂貴的專用測(cè)試板卡,降低開發(fā)成本.
在衛(wèi)星電子設(shè)備測(cè)試系統(tǒng)中,地面測(cè)試軟件的特點(diǎn)是頻繁地訪問測(cè)試設(shè)備硬件,與其進(jìn)行數(shù)據(jù)交換,并通過數(shù)據(jù)庫保存測(cè)試數(shù)據(jù),此外還要響應(yīng)用戶的指令,這就要求軟件能夠協(xié)調(diào)好測(cè)試數(shù)據(jù)獲取、測(cè)試數(shù)據(jù)保存以及用戶指令響應(yīng)3個(gè)方面的工作.在實(shí)際測(cè)試過程中,地面測(cè)試軟件正確工作最為關(guān)鍵的是其能否可靠地訪問測(cè)試設(shè)備的各種硬件,可靠地進(jìn)行數(shù)據(jù)交換,而不使測(cè)試數(shù)據(jù)發(fā)生錯(cuò)誤和丟失.在軟件中采用單線程的停等數(shù)據(jù)接收處理方法或是結(jié)構(gòu)欠佳的多線程數(shù)據(jù)接收處理方法都不能較好的解決問題,很容易造成用戶輸入長(zhǎng)時(shí)間得不到響應(yīng)、丟失測(cè)試數(shù)據(jù)或是數(shù)據(jù)處理不及時(shí)造成測(cè)試錯(cuò)誤.
論文針對(duì)星用地面測(cè)試軟件的上述特點(diǎn)以及程序設(shè)計(jì)時(shí)出現(xiàn)的問題,提出一種適用于衛(wèi)星電子設(shè)備測(cè)試的基于多種并發(fā)技術(shù)的軟件設(shè)計(jì)方法,并采用該方法設(shè)計(jì)了星用測(cè)試設(shè)備的地面測(cè)試軟件.
作為一種衛(wèi)星電子設(shè)備測(cè)試系統(tǒng)的專用軟件,地面測(cè)試軟件的功能主要包括:
1)提供用戶接口和界面,及時(shí)響應(yīng)用戶的指令.衛(wèi)星電子設(shè)備的測(cè)試一般采用人機(jī)交互方式,用戶通過軟件發(fā)出測(cè)試指令并查看測(cè)試結(jié)果,因此地面測(cè)試軟件需要及時(shí)響應(yīng)用戶的輸入.
2)對(duì)測(cè)試設(shè)備硬件進(jìn)行訪問,其軟件的功能與硬件結(jié)構(gòu)直接相關(guān).在實(shí)際測(cè)試系統(tǒng)中,與地面測(cè)試軟件進(jìn)行數(shù)據(jù)交換的測(cè)試設(shè)備硬件多采用網(wǎng)絡(luò)、串行總線以及各種專用接口,地面測(cè)試軟件通過訪問這些硬件發(fā)送測(cè)試指令,并接收測(cè)試的數(shù)據(jù)和結(jié)果,測(cè)試軟件對(duì)測(cè)試設(shè)備硬件的訪問是其最重要的功能.
3)提供數(shù)據(jù)庫訪問功能,實(shí)現(xiàn)大數(shù)據(jù)量存儲(chǔ).在測(cè)試過程中,一般需要保留測(cè)試過程數(shù)據(jù)和測(cè)試結(jié)果,且數(shù)據(jù)量較大,因此地面測(cè)試軟件中需采用數(shù)據(jù)庫對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ)和管理.
基于上述功能需求,地面測(cè)試軟件處理好對(duì)多種硬件的訪問、基于數(shù)據(jù)庫的數(shù)據(jù)存儲(chǔ)、以及用戶界面之間的協(xié)調(diào)同步是軟件正確和可靠的保證.為此,本文提出一種采用多線程、消息機(jī)制、共享緩沖區(qū)和P-V操作4種并發(fā)機(jī)制相結(jié)合的地面測(cè)試軟件設(shè)計(jì)方法.
衛(wèi)星電子設(shè)備測(cè)試系統(tǒng)的典型組成結(jié)構(gòu)如圖1所示,由用戶、測(cè)試系統(tǒng)和被測(cè)系統(tǒng)3個(gè)部分組成,測(cè)試系統(tǒng)又可分為測(cè)試系統(tǒng)硬件和地面測(cè)試軟件.測(cè)試過程是用戶通過地面測(cè)試軟件輸入測(cè)試指令,軟件對(duì)指令進(jìn)行分析后通過測(cè)試系統(tǒng)硬件再把測(cè)試指令發(fā)送到星上電子設(shè)備,星上電子設(shè)備把測(cè)試結(jié)果返回給測(cè)試系統(tǒng)的硬件,地面測(cè)試軟件從測(cè)試系統(tǒng)硬件中讀取測(cè)試結(jié)果輸出到用戶界面,并訪問數(shù)據(jù)庫保存測(cè)試的過程數(shù)據(jù)和結(jié)果數(shù)據(jù).
星上的電子設(shè)備作為被測(cè)系統(tǒng),通過線纜直接與測(cè)試系統(tǒng)的硬件相連接,這部分接口的信號(hào)一般既包括數(shù)字信號(hào)又包括模擬信號(hào),測(cè)試系統(tǒng)硬件通過接收地面測(cè)試軟件的指令控制數(shù)字和模擬信號(hào)的輸出,對(duì)衛(wèi)星電子設(shè)備施加激勵(lì)信號(hào),取得電子設(shè)備在指定激勵(lì)下的響應(yīng),并把響應(yīng)作為測(cè)試結(jié)果返回給測(cè)試系統(tǒng).
在圖1的測(cè)試系統(tǒng)組成結(jié)構(gòu)中,影響地面測(cè)試軟件可靠性和并發(fā)性的最核心部分是測(cè)試過程處理程序,該程序提供3類外部接口完成地面測(cè)試軟件的并發(fā)處理:①與硬件板卡的接口;②與數(shù)據(jù)庫的接口;③與用戶的接口.軟件運(yùn)行過程中,外部接口對(duì)軟件功能和實(shí)時(shí)性的需求不同,用戶界面接口需要的響應(yīng)時(shí)間一般是百毫秒級(jí),硬件數(shù)據(jù)訪問一般是納秒級(jí)或者更快,而數(shù)據(jù)庫訪問主要涉及磁盤訪問和檢索指令,只有當(dāng)大量數(shù)據(jù)寫入或檢索時(shí)才需要較長(zhǎng)時(shí)間.衛(wèi)星電子設(shè)備測(cè)試系統(tǒng)中涉及的硬件接口形式多樣,常用的有以太網(wǎng)、RS422串口、CAN總線、1553B總線,以及各種專用接口,而且在一個(gè)實(shí)際的測(cè)試系統(tǒng)中往往存在多種硬件接口,如果對(duì)這些復(fù)雜多樣的硬件接口處理不好,則會(huì)造成數(shù)據(jù)丟失、測(cè)試數(shù)據(jù)錯(cuò)誤、用戶輸入不能響應(yīng)甚至程序崩潰.因此,在星用地面測(cè)試軟件設(shè)計(jì)的關(guān)鍵是協(xié)調(diào)好各種硬件接口、數(shù)據(jù)庫訪問,以及響應(yīng)用戶輸入之間的關(guān)系,保證地面測(cè)試軟件的可靠運(yùn)行.
針對(duì)衛(wèi)星電子設(shè)備測(cè)試系統(tǒng)的需求,在地面測(cè)試軟件中采用多種并發(fā)機(jī)制,即多線程、消息機(jī)制、共享緩沖區(qū)、P-V操作,并在程序設(shè)計(jì)中把他們結(jié)合起來使用.
(1)多線程的程序框架
線程是Windows操作系統(tǒng)中能被調(diào)度的最小單位,與進(jìn)程相比較具有資源開銷較小,且線程間通信處理簡(jiǎn)單的特點(diǎn),采用多線程進(jìn)行程序設(shè)計(jì)能有效提高系統(tǒng)的并發(fā)性.在衛(wèi)星電子設(shè)備測(cè)試軟件中采用多線程結(jié)構(gòu)的主要目的是保證通過訪問硬件接口實(shí)現(xiàn)可靠的數(shù)據(jù)發(fā)送、接收和處理.這種數(shù)據(jù)一般都具有某種協(xié)議和格式,在發(fā)送數(shù)據(jù)時(shí),需要封裝一些協(xié)議信息,最終交由硬件傳輸?shù)臄?shù)據(jù)則是包含了協(xié)議信息的數(shù)據(jù);接收數(shù)據(jù)時(shí)過程正好相反.收發(fā)數(shù)據(jù)的層次結(jié)構(gòu)如圖2所示.
圖2 硬件數(shù)據(jù)收發(fā)的層次結(jié)構(gòu)Fig.2 Hardware hierarchical structure for data receive and transmission
在實(shí)際的測(cè)試系統(tǒng)中,地面測(cè)試軟件需要負(fù)責(zé)多種硬件接口數(shù)據(jù)的收發(fā)和處理,因此程序中采用4類線程:①程序的主線程,用于處理用戶界面,并負(fù)責(zé)創(chuàng)建和管理其他子線程;②每個(gè)硬件板卡對(duì)應(yīng)一個(gè)數(shù)據(jù)接收線程,只負(fù)責(zé)從該板卡接收數(shù)據(jù);③一個(gè)或多個(gè)數(shù)據(jù)處理線程,負(fù)責(zé)對(duì)從硬件接收的數(shù)據(jù)進(jìn)行協(xié)議解析,以及向硬件發(fā)送帶有協(xié)議的數(shù)據(jù);④數(shù)據(jù)庫訪問線程,負(fù)責(zé)數(shù)據(jù)庫讀寫.整個(gè)地面測(cè)試軟件的結(jié)構(gòu)如圖4所示,主線程不斷處理用戶輸入、顯示輸出信息,并協(xié)調(diào)各子線程的工作,其余每個(gè)線程都設(shè)置一個(gè)無限循環(huán),不斷處理各自負(fù)責(zé)的任務(wù),在每次循環(huán)中都要自掛起一段時(shí)間,以便交出處理器時(shí)間讓其他線程能夠調(diào)度.
(2)基于共享緩沖區(qū)的數(shù)據(jù)交互
建立了多線程結(jié)構(gòu)的軟件中,各線程間需要進(jìn)行數(shù)據(jù)交互,例如硬件數(shù)據(jù)接收線程需要把收到的數(shù)據(jù)傳遞給數(shù)據(jù)處理線程,以便對(duì)數(shù)據(jù)進(jìn)行協(xié)議解析,而數(shù)據(jù)處理線程又需要把解析好的數(shù)據(jù)傳遞給主線程以便顯示和存儲(chǔ).共享存儲(chǔ)區(qū)是多任務(wù)間通信的主要方法,在多線程的程序中就表現(xiàn)為全局性的變量.地面測(cè)試軟件采用共享緩沖區(qū)實(shí)現(xiàn)線程間的數(shù)據(jù)交換,共享緩沖區(qū)設(shè)置如圖5所示,緩沖區(qū)采用順序循環(huán)結(jié)構(gòu),并設(shè)置讀寫兩個(gè)指針分別指示讀寫的位置,每個(gè)單元代表一個(gè)數(shù)據(jù)記錄,數(shù)據(jù)緩沖區(qū)的大小根據(jù)實(shí)際應(yīng)用情況決定,當(dāng)采用合適的長(zhǎng)度時(shí)能夠可靠地實(shí)現(xiàn)數(shù)據(jù)接收.數(shù)據(jù)緩沖區(qū)的典型數(shù)據(jù)結(jié)構(gòu)如圖3所示.
圖3 數(shù)據(jù)緩沖區(qū)的典型數(shù)據(jù)結(jié)構(gòu)Fig.3 Tytical bata structure of data buffer
(3)基于P-V操作的共享緩沖區(qū)讀寫保護(hù)
當(dāng)兩個(gè)或兩個(gè)以上的線程同時(shí)訪問共享緩沖區(qū)時(shí),可能發(fā)生數(shù)據(jù)訪問沖突,這種情況下容易造成緩沖區(qū)中數(shù)據(jù)的不一致,因此需要引入臨界資源互斥訪問機(jī)制,P-V操作能較好地解決對(duì)共享緩沖區(qū)的互斥訪問.以兩個(gè)線程同時(shí)訪問一個(gè)共享緩沖區(qū)為例,其通過P-V操作的訪問過程如圖6所示.
圖6 兩個(gè)線程采用P-V操作訪問共享緩沖區(qū)的過程Fig.6 Two threads accessing shared buffer with P-V operation
線程通過P-V操作訪問共享緩沖區(qū)的算法如下:
①Create Mutex Mbuf;
②P(Mbuf);
③Access to shared buffer;
(4)利用消息機(jī)制實(shí)現(xiàn)即時(shí)通知
多線程間采用共享緩沖區(qū)機(jī)制進(jìn)行數(shù)據(jù)交互更多是一種查詢的通信方式,需要數(shù)據(jù)接收線程不斷查詢數(shù)據(jù)緩沖區(qū)中是否有新的數(shù)據(jù)達(dá)到以便進(jìn)行處理,而引入消息機(jī)制則提供了線程間的類似中斷式的高效通信方式,這種方式能夠及時(shí)的把諸如數(shù)據(jù)接收完成等信息傳達(dá)給其他線程,以便能及時(shí)的處理、存儲(chǔ)或顯示信息.可見為了實(shí)現(xiàn)高效運(yùn)行,地面測(cè)試軟件的多個(gè)線程間除了采用共享緩沖區(qū)和P-V操作進(jìn)行數(shù)據(jù)交換外,還需要利用消息機(jī)制進(jìn)行協(xié)調(diào).
地面測(cè)試軟件的消息機(jī)制主要可以用于下層線程通知上層線程,即服務(wù)線程通知被服務(wù)線程.在衛(wèi)星電子設(shè)備測(cè)試系統(tǒng)中,每次測(cè)試由用戶通過地面測(cè)試軟件輸入測(cè)試指令主動(dòng)發(fā)起,測(cè)試指令經(jīng)過發(fā)送數(shù)據(jù)緩沖區(qū)并由數(shù)據(jù)處理線程發(fā)送給測(cè)試系統(tǒng)的硬件,測(cè)試結(jié)果的接收通過與硬件相對(duì)應(yīng)的硬件數(shù)據(jù)接收線程i實(shí)現(xiàn),硬件數(shù)據(jù)接收線程i完成數(shù)據(jù)接收后可通過消息通知數(shù)據(jù)處理線程,數(shù)據(jù)處理線程完成數(shù)據(jù)處理后把結(jié)果通過消息傳遞給用戶界面,此時(shí)主線程即能夠顯示測(cè)試結(jié)果,并把數(shù)據(jù)保存到數(shù)據(jù)庫中.利用Visual C++的消息機(jī)制,可以方便的實(shí)現(xiàn)消息通信,消息機(jī)制主要由消息映射表和消息處理函數(shù)組成,消息映射表用于把指定的消息與其處理函數(shù)聯(lián)系起來,當(dāng)接收到消息時(shí)自動(dòng)調(diào)用消息處理函數(shù);消息處理函數(shù)則包含了用戶實(shí)現(xiàn)的對(duì)該消息的處理程序.地面測(cè)試軟件的利用消息實(shí)現(xiàn)的通信過程和消息機(jī)制如圖7所示.
采用上述軟件設(shè)計(jì)方法,開發(fā)了某星用電子設(shè)備測(cè)試系統(tǒng)的地面測(cè)試軟件.整個(gè)測(cè)試系統(tǒng)的組成結(jié)構(gòu)可參見圖1,測(cè)試系統(tǒng)與被測(cè)電子設(shè)備的連接接口有兩種:以太網(wǎng)和RS422串口;數(shù)據(jù)庫采用ACCESS數(shù)據(jù)庫.地面測(cè)試軟件的開發(fā)采用Visual C++6.0,軟件的組成結(jié)構(gòu)如圖8所示,對(duì)網(wǎng)絡(luò)的訪問采用從CSocket繼承的類實(shí)現(xiàn),由于CSocket類的數(shù)據(jù)接收函數(shù)OnReceive()的消息映射也是一種并發(fā)機(jī)制,因此對(duì)網(wǎng)絡(luò)接口不再使用線程進(jìn)行實(shí)現(xiàn);對(duì)于RS422串口數(shù)據(jù)接收采用單獨(dú)的線程;創(chuàng)建一個(gè)數(shù)據(jù)處理線程負(fù)責(zé)對(duì)以太網(wǎng)接口和RS422串口的數(shù)據(jù)進(jìn)行處理,完成接收數(shù)據(jù)解析以及帶有幀格式數(shù)據(jù)的發(fā)送;對(duì)數(shù)據(jù)庫訪問采用單獨(dú)線程.線程之間通過帶有P-V操作的共享數(shù)據(jù)緩沖區(qū)交換數(shù)據(jù),此外數(shù)據(jù)處理線程通過消息機(jī)制及時(shí)把數(shù)據(jù)處理情況通知主線程.
論文針對(duì)衛(wèi)星電子設(shè)備地面測(cè)試軟件需要處理多種硬件接口的特點(diǎn),提出一種采用多線程、消息機(jī)制、共享緩沖區(qū)和P-V操作多種并發(fā)機(jī)制相結(jié)合的程序設(shè)計(jì)方法.地面測(cè)試軟件具體設(shè)計(jì)方法是,軟件首先建立在層次化的多線程結(jié)構(gòu)之上,底層線程向上層線程提供服務(wù),在相鄰兩層線程之間通過共享緩沖區(qū)交換數(shù)據(jù),同時(shí)把共享緩沖區(qū)作為臨界資源進(jìn)行保護(hù),采用P-V操作進(jìn)行訪問,防止出現(xiàn)數(shù)據(jù)的不同步,此外底層服務(wù)線程采用消息機(jī)制通知用戶界面數(shù)據(jù)處理的狀態(tài)和結(jié)果.最后,論文給出了一個(gè)某型號(hào)衛(wèi)星電子設(shè)備地面測(cè)試軟件的實(shí)現(xiàn),實(shí)際應(yīng)用表明這種并發(fā)程序設(shè)計(jì)方法是成功和有效的.
[1] 雷訇,李強(qiáng),左鐵釧.新型大功率激光光束光斑質(zhì)量測(cè)試儀的軟件開發(fā)[J].北京工業(yè)大學(xué)學(xué)報(bào),2001,27(2):197-201 Lei H,Li Q,Zuo T C.Software development of new type high-power laser beam quality analyzer[J].Journal of Beijing Polytechnic University,2001,27(2):197-201
[2] 王俊國,周建中.Visual C++6.0環(huán)境下的過程控制系統(tǒng)軟件設(shè)計(jì)與實(shí)現(xiàn)[J].工業(yè)儀表與自動(dòng)化裝置,2005(6):45-47 Wang J G,Zhou J Z.The software design and implementation of a process control system based on the Visual C++6.0[J].Industrial Instrumentation & Automation ,2005,(6):45-47
[3] 黎建偉,干方建,王碩桂.基于運(yùn)動(dòng)控制器的數(shù)控軟件研究與開發(fā)[J].工業(yè)控制計(jì)算機(jī),2009,22(6):30-31 Li J W,Gan F J,Wang S G.Research and develop on CNC software based on motion controller[J].Industrial Control Computer,2009,22(6):30-31
[4] 陳敏,湯曉安.虛擬儀器軟件LabVIEW與數(shù)據(jù)采集[J].小型微型計(jì)算機(jī)系統(tǒng),2001,22(4):501-503 Chen M,Tang X A.Virtual instrument software-labview and data acqusition[J].Journal of Chinese Computer Systems ,2001,22(4):501-503
[5] 陳懷民,安玉嬌,王亮.基于LabWindows/CVI虛擬測(cè)試系統(tǒng)軟件設(shè)計(jì)與實(shí)現(xiàn)[J].測(cè)控技術(shù),2009,28(11):59-62 Chen H M,An Y J,Wang L.Design and implementation of virtual test system based on LabWindows/CVI[J].Measurement& Control Technology,2009,28(11):59-62