引言
機載慣導模擬器是某型飛機任務訓練模擬器的一個重要的分系統(tǒng),它為訓練者提供自動導航的仿真環(huán)境,使其盡快掌握慣性導航系統(tǒng)的操作過程。為了保證慣導模擬器的正常工作,完成模擬操作、特情模擬、通信、燈檢和計算導航參數(shù)等功能,正確設計數(shù)據(jù)通信軟件尤為重要。
數(shù)據(jù)通信總體設計方案
數(shù)據(jù)通信軟件完成慣導模擬器與導航計算機之間的串口通信(RS422串口),包括串口初始化、串口中斷、打包數(shù)據(jù)、解包數(shù)據(jù)等子程序單元。
導航計算機與慣導模擬器之間的串行通信硬件連接如圖1所示。由于兩者之間進行的是小批量的數(shù)據(jù)通信,在硬件設計時采用RXD,TXD,GND三線制,將導航計算機和慣導模擬器的發(fā)送數(shù)據(jù)線TXD與接收數(shù)據(jù)線RXD交叉連接,二者的地線一GND直接相連,而其它信號線均不用,而采用軟件握手的零MODEM(調制解調器)方式,這樣既實現(xiàn)了預定任務又簡化了電路設計,節(jié)約了成本。
數(shù)據(jù)通信軟件設計必須解決以下三個方面的問題:(1)通信可靠,即保證慣導模擬器與導航計算機之間的通信數(shù)據(jù)不丟失、不混亂;(2)保證慣導模擬器與導航計算機開機順序不同時,它們之間傳遞的數(shù)據(jù)不丟失且邏輯正確;(3)在上面兩點的基礎上,盡量提高傳輸速度,保證模擬的實時性和真實性。
通信程序設計
通信協(xié)議制訂
本通信協(xié)議設計基于幀傳輸方式。為了使數(shù)據(jù)快速可靠地傳輸,將每一幀數(shù)據(jù)唯一對應一命令幀。傳輸數(shù)據(jù)所執(zhí)行的流程如下:
(1)導航計算機讀數(shù)據(jù)時,遵循“讀命令一等數(shù)據(jù)一報告”過程,即下達一讀命令并等待接收數(shù)據(jù),再根據(jù)所接收數(shù)據(jù)的正誤向應用程序報告此命令的執(zhí)行情況:
(2)導航計算機寫數(shù)據(jù)時,遵循“寫命令一等回應一報告”過程,即下達一寫命令,此時所要寫的數(shù)據(jù)含于此命令中,等待慣導模擬器發(fā)來的“已正確接收”的回應信號,并向應用程序報告此命令執(zhí)行完畢。
傳輸過程中,如果導航計算機或慣導模擬器所接收任何一幀信號出現(xiàn)錯誤,均會向對方發(fā)送重發(fā)此幀信號的請求,如果連續(xù)三次傳輸失敗則退出通信并向應用程序報告。
信號幀分類及格式
數(shù)據(jù)通信時所使用的信號幀有:讀命令幀、寫命令幀、數(shù)據(jù)幀、正響應幀、重發(fā)命令幀、放棄命令幀。
以讀命令幀格式為例:其格式如表1所示。
其他信號幀與讀命令幀類似,規(guī)定了具體格式和字節(jié)定義。
通信協(xié)議的處理流程
1.數(shù)據(jù)分幀與數(shù)據(jù)重組
應用程序發(fā)送的數(shù)據(jù)作為一個“流”放在發(fā)送緩沖區(qū)中,由通信協(xié)議進行分幀,切割進行發(fā)送,在接收端分幀的數(shù)據(jù)去掉幀頭重新組合到接收緩沖區(qū)中,交給應用程序處理。發(fā)送過程如圖2、接收過程如圖3所示。
2.慣導模擬器通信協(xié)議流程
其流程如圖4所示。首先,慣導模擬器應用程序打開串口并通知通信開始,然后根據(jù)讀寫類型發(fā)送不同的命令幀,最后接收導航計算機所發(fā)送的數(shù)據(jù)并檢驗該數(shù)據(jù)是否正確。若正確,則判斷所接收命令幀的類型并進行不同的響應,若錯誤則要求重發(fā)。




3.導航計算機通信協(xié)議流程
其流程如圖5所示。當導航計算機接收到慣導模擬器的數(shù)據(jù)時,串口事件驅動應用程序執(zhí)行該通信流程。開始應用程序判斷所接收的數(shù)據(jù)是否正確,若正確則根據(jù)所接收數(shù)據(jù)的幀類型進行不同的響應,若錯誤則向慣導模擬器發(fā)送重發(fā)命令幀,要求重發(fā)該幀數(shù)據(jù)。
導航計算機串口通信程序設計
慣導模擬系統(tǒng)是基于HDOSE(基于HLA分布式面向對象仿真引擎)的系統(tǒng),導航計算機平臺為Windows操作系統(tǒng),且仿真應用程序采用Vc++開發(fā),因此通信程序采用Windows環(huán)境下的高級編程語言進行開發(fā)。
本設計采用Windows API(應用程序接口)函數(shù),在導航計算機程序中,采用異步通信方式。
打開串口
在Windows中,串口和其他通信設備作為文件處理,串口的打開、關閉、讀取以及寫入所用的函數(shù)與操作文件的函數(shù)相同。通信會話由調用CreateFile函數(shù)打開串口開始,CreateFile以讀訪問權限、寫訪問權限或讀寫訪問權限打開串口,并設定了異步操作方式還是同步操作方式。
初始化串口
串口初始化包括對波特率、數(shù)據(jù)位、停止位、奇偶校驗位、i/o緩沖大小以及超時等參數(shù)進行設置。在調用API函數(shù)進行串口初始化時,波特率、數(shù)據(jù)位、奇偶校驗、停止位的信息包含于一個自定義的文件結構中,而超時方面的信息則包含于COMMTIMEOUTS結構中。在用CreateFile打開串行口后,可以調用GetCommState函數(shù)來獲取串行口的初始配置。要修改串行口的配置應該先修改自定義的文件結構,然后再調用SetCommState函數(shù)用指定的自定義的文件結構來設置串行口。
讀寫串口
初始化完成以后,根據(jù)通信協(xié)議合理安排讀/寫函數(shù)ReadFile和WriteFile以讀寫各種握手信息和數(shù)據(jù)信息。其中何時讀取慣導模擬器發(fā)送的數(shù)據(jù)信息及應答信息是最重要的。此時采取事件驅動法,即設置通信資源上的事件掩碼為EV RXCHAR,當接收到一個字符并放入緩沖區(qū)后即通知應用程序。
關閉串口
通信完畢,調用CloseHandle函數(shù)關閉串口。
慣導模擬器串口通信程序設計
慣導模擬器處理器為PCI04,軟件平臺為MS DOS,主體應用程序采用c語言編寫。通信程序采用匯編語言。
慣導模擬器串口程序模塊的功能包括:串口打開及初始化,將端口輸入數(shù)據(jù)存入接收隊列以及將發(fā)送隊列的數(shù)據(jù)輸出,如圖6。當“接收器數(shù)據(jù)寄存器就緒”中斷產(chǎn)生時,相應的中斷子程序直接從UART數(shù)據(jù)寄存器讀取字符,送到當前接收隊列尾指針指向的單元,并使尾指針增1,退出返回主程序:當“發(fā)送器保持寄存器為空”中斷產(chǎn)生時,相應的中斷子程序從當前發(fā)送隊列頭指針讀出隊列字符,直接送UART的保持寄存器,并使頭指針增l,返回主程序。對接收隊列和發(fā)送隊列數(shù)據(jù)的處理由主程序完成。
串口初始化
初始化程序完成:確定數(shù)據(jù)的傳輸幀格式、波特率以及UART操作方式(程序查詢I/O還是通信中斷I/O)。本程序選擇中斷方法進行通信。
中斷函數(shù)
當慣導模擬器串口接收一個數(shù)據(jù)時,自動調用該中斷函數(shù)。中斷函數(shù)的功能是將外部輸入的一個字節(jié)的數(shù)據(jù)存入接收隊列。
結語
根據(jù)導航計算機和慣導模擬器硬件與軟件平臺的特點,分別采用Windows環(huán)境下的高級編程語言和匯編語言完成了導航計算機和慣導模擬器的串口通信程序的設計。多年應用表明,通信程序設計合理,功能強大,工作穩(wěn)定可靠,完全可以滿足模擬器的通信需求。