龔 健,華更新,孫 越,衣學慧
(北京控制工程研究所,北京 100190)
測試是衛(wèi)星電子設備研制過程中一個重要的環(huán)節(jié),衛(wèi)星電子設備測試系統(tǒng)是一個集數字電路、模擬電路、嵌入式軟件、以及專用軟件為一體的復雜系統(tǒng),其實現(xiàn)一般由測試設備硬件和地面測試軟件兩大部分組成,測試設備的硬件一般包括采用單片機或處理器的硬件板卡、單純模擬或數字電路的硬件板卡;地面測試軟件是直接與用戶交互的測試系統(tǒng)專用軟件,一般具有圖形化的用戶界面,需要訪問測試設備硬件以便完成測試,并通過數據庫訪問完成測試數據的存儲和管理.目前有多種開發(fā)環(huán)境支持這種專用軟件的開發(fā)和設計,例如Microsoft公司的Visual C++和 Visual Basic,National Instruments公司的 LabView 和 LabWindows[1-6].雖然經過十幾年的發(fā)展,以LabView為代表的新開發(fā)工具層出不窮,但Microsoft公司的Visual C++依賴其對底層硬件訪問十分便捷、良好的兼容性、廣泛的用戶基礎和技術支持,目前依然是各種測試和監(jiān)控系統(tǒng)最主要的軟件開發(fā)環(huán)境之一[2-3].采用Visual C++開發(fā)星用地面測試軟件的好處主要有:便于與硬件進行接口,尤其適合星用非標準硬件板卡的編程;適合通信協(xié)議解析等復雜邏輯的程序設計;具有廣泛的技術支持獲取渠道;能避免購買昂貴的專用測試板卡,降低開發(fā)成本.
在衛(wèi)星電子設備測試系統(tǒng)中,地面測試軟件的特點是頻繁地訪問測試設備硬件,與其進行數據交換,并通過數據庫保存測試數據,此外還要響應用戶的指令,這就要求軟件能夠協(xié)調好測試數據獲取、測試數據保存以及用戶指令響應3個方面的工作.在實際測試過程中,地面測試軟件正確工作最為關鍵的是其能否可靠地訪問測試設備的各種硬件,可靠地進行數據交換,而不使測試數據發(fā)生錯誤和丟失.在軟件中采用單線程的停等數據接收處理方法或是結構欠佳的多線程數據接收處理方法都不能較好的解決問題,很容易造成用戶輸入長時間得不到響應、丟失測試數據或是數據處理不及時造成測試錯誤.
論文針對星用地面測試軟件的上述特點以及程序設計時出現(xiàn)的問題,提出一種適用于衛(wèi)星電子設備測試的基于多種并發(fā)技術的軟件設計方法,并采用該方法設計了星用測試設備的地面測試軟件.
作為一種衛(wèi)星電子設備測試系統(tǒng)的專用軟件,地面測試軟件的功能主要包括:
1)提供用戶接口和界面,及時響應用戶的指令.衛(wèi)星電子設備的測試一般采用人機交互方式,用戶通過軟件發(fā)出測試指令并查看測試結果,因此地面測試軟件需要及時響應用戶的輸入.
2)對測試設備硬件進行訪問,其軟件的功能與硬件結構直接相關.在實際測試系統(tǒng)中,與地面測試軟件進行數據交換的測試設備硬件多采用網絡、串行總線以及各種專用接口,地面測試軟件通過訪問這些硬件發(fā)送測試指令,并接收測試的數據和結果,測試軟件對測試設備硬件的訪問是其最重要的功能.
3)提供數據庫訪問功能,實現(xiàn)大數據量存儲.在測試過程中,一般需要保留測試過程數據和測試結果,且數據量較大,因此地面測試軟件中需采用數據庫對數據進行存儲和管理.
基于上述功能需求,地面測試軟件處理好對多種硬件的訪問、基于數據庫的數據存儲、以及用戶界面之間的協(xié)調同步是軟件正確和可靠的保證.為此,本文提出一種采用多線程、消息機制、共享緩沖區(qū)和P-V操作4種并發(fā)機制相結合的地面測試軟件設計方法.
衛(wèi)星電子設備測試系統(tǒng)的典型組成結構如圖1所示,由用戶、測試系統(tǒng)和被測系統(tǒng)3個部分組成,測試系統(tǒng)又可分為測試系統(tǒng)硬件和地面測試軟件.測試過程是用戶通過地面測試軟件輸入測試指令,軟件對指令進行分析后通過測試系統(tǒng)硬件再把測試指令發(fā)送到星上電子設備,星上電子設備把測試結果返回給測試系統(tǒng)的硬件,地面測試軟件從測試系統(tǒng)硬件中讀取測試結果輸出到用戶界面,并訪問數據庫保存測試的過程數據和結果數據.
星上的電子設備作為被測系統(tǒng),通過線纜直接與測試系統(tǒng)的硬件相連接,這部分接口的信號一般既包括數字信號又包括模擬信號,測試系統(tǒng)硬件通過接收地面測試軟件的指令控制數字和模擬信號的輸出,對衛(wèi)星電子設備施加激勵信號,取得電子設備在指定激勵下的響應,并把響應作為測試結果返回給測試系統(tǒng).
在圖1的測試系統(tǒng)組成結構中,影響地面測試軟件可靠性和并發(fā)性的最核心部分是測試過程處理程序,該程序提供3類外部接口完成地面測試軟件的并發(fā)處理:①與硬件板卡的接口;②與數據庫的接口;③與用戶的接口.軟件運行過程中,外部接口對軟件功能和實時性的需求不同,用戶界面接口需要的響應時間一般是百毫秒級,硬件數據訪問一般是納秒級或者更快,而數據庫訪問主要涉及磁盤訪問和檢索指令,只有當大量數據寫入或檢索時才需要較長時間.衛(wèi)星電子設備測試系統(tǒng)中涉及的硬件接口形式多樣,常用的有以太網、RS422串口、CAN總線、1553B總線,以及各種專用接口,而且在一個實際的測試系統(tǒng)中往往存在多種硬件接口,如果對這些復雜多樣的硬件接口處理不好,則會造成數據丟失、測試數據錯誤、用戶輸入不能響應甚至程序崩潰.因此,在星用地面測試軟件設計的關鍵是協(xié)調好各種硬件接口、數據庫訪問,以及響應用戶輸入之間的關系,保證地面測試軟件的可靠運行.
針對衛(wèi)星電子設備測試系統(tǒng)的需求,在地面測試軟件中采用多種并發(fā)機制,即多線程、消息機制、共享緩沖區(qū)、P-V操作,并在程序設計中把他們結合起來使用.
(1)多線程的程序框架
線程是Windows操作系統(tǒng)中能被調度的最小單位,與進程相比較具有資源開銷較小,且線程間通信處理簡單的特點,采用多線程進行程序設計能有效提高系統(tǒng)的并發(fā)性.在衛(wèi)星電子設備測試軟件中采用多線程結構的主要目的是保證通過訪問硬件接口實現(xiàn)可靠的數據發(fā)送、接收和處理.這種數據一般都具有某種協(xié)議和格式,在發(fā)送數據時,需要封裝一些協(xié)議信息,最終交由硬件傳輸的數據則是包含了協(xié)議信息的數據;接收數據時過程正好相反.收發(fā)數據的層次結構如圖2所示.
圖2 硬件數據收發(fā)的層次結構Fig.2 Hardware hierarchical structure for data receive and transmission
在實際的測試系統(tǒng)中,地面測試軟件需要負責多種硬件接口數據的收發(fā)和處理,因此程序中采用4類線程:①程序的主線程,用于處理用戶界面,并負責創(chuàng)建和管理其他子線程;②每個硬件板卡對應一個數據接收線程,只負責從該板卡接收數據;③一個或多個數據處理線程,負責對從硬件接收的數據進行協(xié)議解析,以及向硬件發(fā)送帶有協(xié)議的數據;④數據庫訪問線程,負責數據庫讀寫.整個地面測試軟件的結構如圖4所示,主線程不斷處理用戶輸入、顯示輸出信息,并協(xié)調各子線程的工作,其余每個線程都設置一個無限循環(huán),不斷處理各自負責的任務,在每次循環(huán)中都要自掛起一段時間,以便交出處理器時間讓其他線程能夠調度.
(2)基于共享緩沖區(qū)的數據交互
建立了多線程結構的軟件中,各線程間需要進行數據交互,例如硬件數據接收線程需要把收到的數據傳遞給數據處理線程,以便對數據進行協(xié)議解析,而數據處理線程又需要把解析好的數據傳遞給主線程以便顯示和存儲.共享存儲區(qū)是多任務間通信的主要方法,在多線程的程序中就表現(xiàn)為全局性的變量.地面測試軟件采用共享緩沖區(qū)實現(xiàn)線程間的數據交換,共享緩沖區(qū)設置如圖5所示,緩沖區(qū)采用順序循環(huán)結構,并設置讀寫兩個指針分別指示讀寫的位置,每個單元代表一個數據記錄,數據緩沖區(qū)的大小根據實際應用情況決定,當采用合適的長度時能夠可靠地實現(xiàn)數據接收.數據緩沖區(qū)的典型數據結構如圖3所示.
圖3 數據緩沖區(qū)的典型數據結構Fig.3 Tytical bata structure of data buffer
(3)基于P-V操作的共享緩沖區(qū)讀寫保護
當兩個或兩個以上的線程同時訪問共享緩沖區(qū)時,可能發(fā)生數據訪問沖突,這種情況下容易造成緩沖區(qū)中數據的不一致,因此需要引入臨界資源互斥訪問機制,P-V操作能較好地解決對共享緩沖區(qū)的互斥訪問.以兩個線程同時訪問一個共享緩沖區(qū)為例,其通過P-V操作的訪問過程如圖6所示.
圖6 兩個線程采用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)利用消息機制實現(xiàn)即時通知
多線程間采用共享緩沖區(qū)機制進行數據交互更多是一種查詢的通信方式,需要數據接收線程不斷查詢數據緩沖區(qū)中是否有新的數據達到以便進行處理,而引入消息機制則提供了線程間的類似中斷式的高效通信方式,這種方式能夠及時的把諸如數據接收完成等信息傳達給其他線程,以便能及時的處理、存儲或顯示信息.可見為了實現(xiàn)高效運行,地面測試軟件的多個線程間除了采用共享緩沖區(qū)和P-V操作進行數據交換外,還需要利用消息機制進行協(xié)調.
地面測試軟件的消息機制主要可以用于下層線程通知上層線程,即服務線程通知被服務線程.在衛(wèi)星電子設備測試系統(tǒng)中,每次測試由用戶通過地面測試軟件輸入測試指令主動發(fā)起,測試指令經過發(fā)送數據緩沖區(qū)并由數據處理線程發(fā)送給測試系統(tǒng)的硬件,測試結果的接收通過與硬件相對應的硬件數據接收線程i實現(xiàn),硬件數據接收線程i完成數據接收后可通過消息通知數據處理線程,數據處理線程完成數據處理后把結果通過消息傳遞給用戶界面,此時主線程即能夠顯示測試結果,并把數據保存到數據庫中.利用Visual C++的消息機制,可以方便的實現(xiàn)消息通信,消息機制主要由消息映射表和消息處理函數組成,消息映射表用于把指定的消息與其處理函數聯(lián)系起來,當接收到消息時自動調用消息處理函數;消息處理函數則包含了用戶實現(xiàn)的對該消息的處理程序.地面測試軟件的利用消息實現(xiàn)的通信過程和消息機制如圖7所示.
采用上述軟件設計方法,開發(fā)了某星用電子設備測試系統(tǒng)的地面測試軟件.整個測試系統(tǒng)的組成結構可參見圖1,測試系統(tǒng)與被測電子設備的連接接口有兩種:以太網和RS422串口;數據庫采用ACCESS數據庫.地面測試軟件的開發(fā)采用Visual C++6.0,軟件的組成結構如圖8所示,對網絡的訪問采用從CSocket繼承的類實現(xiàn),由于CSocket類的數據接收函數OnReceive()的消息映射也是一種并發(fā)機制,因此對網絡接口不再使用線程進行實現(xiàn);對于RS422串口數據接收采用單獨的線程;創(chuàng)建一個數據處理線程負責對以太網接口和RS422串口的數據進行處理,完成接收數據解析以及帶有幀格式數據的發(fā)送;對數據庫訪問采用單獨線程.線程之間通過帶有P-V操作的共享數據緩沖區(qū)交換數據,此外數據處理線程通過消息機制及時把數據處理情況通知主線程.
論文針對衛(wèi)星電子設備地面測試軟件需要處理多種硬件接口的特點,提出一種采用多線程、消息機制、共享緩沖區(qū)和P-V操作多種并發(fā)機制相結合的程序設計方法.地面測試軟件具體設計方法是,軟件首先建立在層次化的多線程結構之上,底層線程向上層線程提供服務,在相鄰兩層線程之間通過共享緩沖區(qū)交換數據,同時把共享緩沖區(qū)作為臨界資源進行保護,采用P-V操作進行訪問,防止出現(xiàn)數據的不同步,此外底層服務線程采用消息機制通知用戶界面數據處理的狀態(tài)和結果.最后,論文給出了一個某型號衛(wèi)星電子設備地面測試軟件的實現(xiàn),實際應用表明這種并發(fā)程序設計方法是成功和有效的.
[1] 雷訇,李強,左鐵釧.新型大功率激光光束光斑質量測試儀的軟件開發(fā)[J].北京工業(yè)大學學報,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)軟件設計與實現(xiàn)[J].工業(yè)儀表與自動化裝置,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] 黎建偉,干方建,王碩桂.基于運動控制器的數控軟件研究與開發(fā)[J].工業(yè)控制計算機,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].小型微型計算機系統(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虛擬測試系統(tǒng)軟件設計與實現(xiàn)[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