龔 健,華更新,孫 越,衣學慧
(北京控制工程研究所,北京 100190)
測試是衛星電子設備研制過程中一個重要的環節,衛星電子設備測試系統是一個集數字電路、模擬電路、嵌入式軟件、以及專用軟件為一體的復雜系統,其實現一般由測試設備硬件和地面測試軟件兩大部分組成,測試設備的硬件一般包括采用單片機或處理器的硬件板卡、單純模擬或數字電路的硬件板卡;地面測試軟件是直接與用戶交互的測試系統專用軟件,一般具有圖形化的用戶界面,需要訪問測試設備硬件以便完成測試,并通過數據庫訪問完成測試數據的存儲和管理.目前有多種開發環境支持這種專用軟件的開發和設計,例如Microsoft公司的Visual C++和 Visual Basic,National Instruments公司的 LabView 和 LabWindows[1-6].雖然經過十幾年的發展,以LabView為代表的新開發工具層出不窮,但Microsoft公司的Visual C++依賴其對底層硬件訪問十分便捷、良好的兼容性、廣泛的用戶基礎和技術支持,目前依然是各種測試和監控系統最主要的軟件開發環境之一[2-3].采用Visual C++開發星用地面測試軟件的好處主要有:便于與硬件進行接口,尤其適合星用非標準硬件板卡的編程;適合通信協議解析等復雜邏輯的程序設計;具有廣泛的技術支持獲取渠道;能避免購買昂貴的專用測試板卡,降低開發成本.
在衛星電子設備測試系統中,地面測試軟件的特點是頻繁地訪問測試設備硬件,與其進行數據交換,并通過數據庫保存測試數據,此外還要響應用戶的指令,這就要求軟件能夠協調好測試數據獲取、測試數據保存以及用戶指令響應3個方面的工作.在實際測試過程中,地面測試軟件正確工作最為關鍵的是其能否可靠地訪問測試設備的各種硬件,可靠地進行數據交換,而不使測試數據發生錯誤和丟失.在軟件中采用單線程的停等數據接收處理方法或是結構欠佳的多線程數據接收處理方法都不能較好的解決問題,很容易造成用戶輸入長時間得不到響應、丟失測試數據或是數據處理不及時造成測試錯誤.
論文針對星用地面測試軟件的上述特點以及程序設計時出現的問題,提出一種適用于衛星電子設備測試的基于多種并發技術的軟件設計方法,并采用該方法設計了星用測試設備的地面測試軟件.
作為一種衛星電子設備測試系統的專用軟件,地面測試軟件的功能主要包括:
1)提供用戶接口和界面,及時響應用戶的指令.衛星電子設備的測試一般采用人機交互方式,用戶通過軟件發出測試指令并查看測試結果,因此地面測試軟件需要及時響應用戶的輸入.
2)對測試設備硬件進行訪問,其軟件的功能與硬件結構直接相關.在實際測試系統中,與地面測試軟件進行數據交換的測試設備硬件多采用網絡、串行總線以及各種專用接口,地面測試軟件通過訪問這些硬件發送測試指令,并接收測試的數據和結果,測試軟件對測試設備硬件的訪問是其最重要的功能.
3)提供數據庫訪問功能,實現大數據量存儲.在測試過程中,一般需要保留測試過程數據和測試結果,且數據量較大,因此地面測試軟件中需采用數據庫對數據進行存儲和管理.
基于上述功能需求,地面測試軟件處理好對多種硬件的訪問、基于數據庫的數據存儲、以及用戶界面之間的協調同步是軟件正確和可靠的保證.為此,本文提出一種采用多線程、消息機制、共享緩沖區和P-V操作4種并發機制相結合的地面測試軟件設計方法.
衛星電子設備測試系統的典型組成結構如圖1所示,由用戶、測試系統和被測系統3個部分組成,測試系統又可分為測試系統硬件和地面測試軟件.測試過程是用戶通過地面測試軟件輸入測試指令,軟件對指令進行分析后通過測試系統硬件再把測試指令發送到星上電子設備,星上電子設備把測試結果返回給測試系統的硬件,地面測試軟件從測試系統硬件中讀取測試結果輸出到用戶界面,并訪問數據庫保存測試的過程數據和結果數據.
星上的電子設備作為被測系統,通過線纜直接與測試系統的硬件相連接,這部分接口的信號一般既包括數字信號又包括模擬信號,測試系統硬件通過接收地面測試軟件的指令控制數字和模擬信號的輸出,對衛星電子設備施加激勵信號,取得電子設備在指定激勵下的響應,并把響應作為測試結果返回給測試系統.
在圖1的測試系統組成結構中,影響地面測試軟件可靠性和并發性的最核心部分是測試過程處理程序,該程序提供3類外部接口完成地面測試軟件的并發處理:①與硬件板卡的接口;②與數據庫的接口;③與用戶的接口.軟件運行過程中,外部接口對軟件功能和實時性的需求不同,用戶界面接口需要的響應時間一般是百毫秒級,硬件數據訪問一般是納秒級或者更快,而數據庫訪問主要涉及磁盤訪問和檢索指令,只有當大量數據寫入或檢索時才需要較長時間.衛星電子設備測試系統中涉及的硬件接口形式多樣,常用的有以太網、RS422串口、CAN總線、1553B總線,以及各種專用接口,而且在一個實際的測試系統中往往存在多種硬件接口,如果對這些復雜多樣的硬件接口處理不好,則會造成數據丟失、測試數據錯誤、用戶輸入不能響應甚至程序崩潰.因此,在星用地面測試軟件設計的關鍵是協調好各種硬件接口、數據庫訪問,以及響應用戶輸入之間的關系,保證地面測試軟件的可靠運行.
針對衛星電子設備測試系統的需求,在地面測試軟件中采用多種并發機制,即多線程、消息機制、共享緩沖區、P-V操作,并在程序設計中把他們結合起來使用.
(1)多線程的程序框架
線程是Windows操作系統中能被調度的最小單位,與進程相比較具有資源開銷較小,且線程間通信處理簡單的特點,采用多線程進行程序設計能有效提高系統的并發性.在衛星電子設備測試軟件中采用多線程結構的主要目的是保證通過訪問硬件接口實現可靠的數據發送、接收和處理.這種數據一般都具有某種協議和格式,在發送數據時,需要封裝一些協議信息,最終交由硬件傳輸的數據則是包含了協議信息的數據;接收數據時過程正好相反.收發數據的層次結構如圖2所示.

圖2 硬件數據收發的層次結構Fig.2 Hardware hierarchical structure for data receive and transmission
在實際的測試系統中,地面測試軟件需要負責多種硬件接口數據的收發和處理,因此程序中采用4類線程:①程序的主線程,用于處理用戶界面,并負責創建和管理其他子線程;②每個硬件板卡對應一個數據接收線程,只負責從該板卡接收數據;③一個或多個數據處理線程,負責對從硬件接收的數據進行協議解析,以及向硬件發送帶有協議的數據;④數據庫訪問線程,負責數據庫讀寫.整個地面測試軟件的結構如圖4所示,主線程不斷處理用戶輸入、顯示輸出信息,并協調各子線程的工作,其余每個線程都設置一個無限循環,不斷處理各自負責的任務,在每次循環中都要自掛起一段時間,以便交出處理器時間讓其他線程能夠調度.
(2)基于共享緩沖區的數據交互
建立了多線程結構的軟件中,各線程間需要進行數據交互,例如硬件數據接收線程需要把收到的數據傳遞給數據處理線程,以便對數據進行協議解析,而數據處理線程又需要把解析好的數據傳遞給主線程以便顯示和存儲.共享存儲區是多任務間通信的主要方法,在多線程的程序中就表現為全局性的變量.地面測試軟件采用共享緩沖區實現線程間的數據交換,共享緩沖區設置如圖5所示,緩沖區采用順序循環結構,并設置讀寫兩個指針分別指示讀寫的位置,每個單元代表一個數據記錄,數據緩沖區的大小根據實際應用情況決定,當采用合適的長度時能夠可靠地實現數據接收.數據緩沖區的典型數據結構如圖3所示.

圖3 數據緩沖區的典型數據結構Fig.3 Tytical bata structure of data buffer
(3)基于P-V操作的共享緩沖區讀寫保護
當兩個或兩個以上的線程同時訪問共享緩沖區時,可能發生數據訪問沖突,這種情況下容易造成緩沖區中數據的不一致,因此需要引入臨界資源互斥訪問機制,P-V操作能較好地解決對共享緩沖區的互斥訪問.以兩個線程同時訪問一個共享緩沖區為例,其通過P-V操作的訪問過程如圖6所示.



圖6 兩個線程采用P-V操作訪問共享緩沖區的過程Fig.6 Two threads accessing shared buffer with P-V operation
線程通過P-V操作訪問共享緩沖區的算法如下:
①Create Mutex Mbuf;
②P(Mbuf);
③Access to shared buffer;
(4)利用消息機制實現即時通知
多線程間采用共享緩沖區機制進行數據交互更多是一種查詢的通信方式,需要數據接收線程不斷查詢數據緩沖區中是否有新的數據達到以便進行處理,而引入消息機制則提供了線程間的類似中斷式的高效通信方式,這種方式能夠及時的把諸如數據接收完成等信息傳達給其他線程,以便能及時的處理、存儲或顯示信息.可見為了實現高效運行,地面測試軟件的多個線程間除了采用共享緩沖區和P-V操作進行數據交換外,還需要利用消息機制進行協調.
地面測試軟件的消息機制主要可以用于下層線程通知上層線程,即服務線程通知被服務線程.在衛星電子設備測試系統中,每次測試由用戶通過地面測試軟件輸入測試指令主動發起,測試指令經過發送數據緩沖區并由數據處理線程發送給測試系統的硬件,測試結果的接收通過與硬件相對應的硬件數據接收線程i實現,硬件數據接收線程i完成數據接收后可通過消息通知數據處理線程,數據處理線程完成數據處理后把結果通過消息傳遞給用戶界面,此時主線程即能夠顯示測試結果,并把數據保存到數據庫中.利用Visual C++的消息機制,可以方便的實現消息通信,消息機制主要由消息映射表和消息處理函數組成,消息映射表用于把指定的消息與其處理函數聯系起來,當接收到消息時自動調用消息處理函數;消息處理函數則包含了用戶實現的對該消息的處理程序.地面測試軟件的利用消息實現的通信過程和消息機制如圖7所示.
采用上述軟件設計方法,開發了某星用電子設備測試系統的地面測試軟件.整個測試系統的組成結構可參見圖1,測試系統與被測電子設備的連接接口有兩種:以太網和RS422串口;數據庫采用ACCESS數據庫.地面測試軟件的開發采用Visual C++6.0,軟件的組成結構如圖8所示,對網絡的訪問采用從CSocket繼承的類實現,由于CSocket類的數據接收函數OnReceive()的消息映射也是一種并發機制,因此對網絡接口不再使用線程進行實現;對于RS422串口數據接收采用單獨的線程;創建一個數據處理線程負責對以太網接口和RS422串口的數據進行處理,完成接收數據解析以及帶有幀格式數據的發送;對數據庫訪問采用單獨線程.線程之間通過帶有P-V操作的共享數據緩沖區交換數據,此外數據處理線程通過消息機制及時把數據處理情況通知主線程.


論文針對衛星電子設備地面測試軟件需要處理多種硬件接口的特點,提出一種采用多線程、消息機制、共享緩沖區和P-V操作多種并發機制相結合的程序設計方法.地面測試軟件具體設計方法是,軟件首先建立在層次化的多線程結構之上,底層線程向上層線程提供服務,在相鄰兩層線程之間通過共享緩沖區交換數據,同時把共享緩沖區作為臨界資源進行保護,采用P-V操作進行訪問,防止出現數據的不同步,此外底層服務線程采用消息機制通知用戶界面數據處理的狀態和結果.最后,論文給出了一個某型號衛星電子設備地面測試軟件的實現,實際應用表明這種并發程序設計方法是成功和有效的.
[1] 雷訇,李強,左鐵釧.新型大功率激光光束光斑質量測試儀的軟件開發[J].北京工業大學學報,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環境下的過程控制系統軟件設計與實現[J].工業儀表與自動化裝置,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] 黎建偉,干方建,王碩桂.基于運動控制器的數控軟件研究與開發[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與數據采集[J].小型微型計算機系統,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虛擬測試系統軟件設計與實現[J].測控技術,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