王 灝,李 凱,聶瑤佳
(中國飛行試驗研究院 測試所,西安 710089)
當前飛行試驗中廣泛使用網絡化測試架構,網絡化架構下采集的參數量大、采樣率高且測試設備可采用成熟的貨架產品[1-3]。在網絡化架構中采集器將采集的數據以網絡包的形式發送至測試系統,課題需要處理的參數就分布在這些網絡包中。數據在測試系統上傳輸時可通過交換機方便地到達任何連接在交換機上的設備[4-5]。由于數據的發送、傳輸、接收的過程中會存在一定的延時,數據包在處理時就不會按照正常的時序排列,存在數據包亂序的現象。如果在數據處理的過程中不對數據進行時間同步處理,結果數據的時刻會發生錯亂,誤把其他時刻的數據當做當刻數據進行處理,就會導致結果數據不夠精確,無法保證型號數據處理的準確性[6-7]。所以需要針對網絡數據處理中存在的問題,研究網絡包數據亂序產生的原因及特點,設計并實現數據時間同步處理算法,解決網絡包數據亂序問題,為課題提供精確的試飛數據。
網絡化機載測試系統包括傳感器、采集器、交換機、記錄器、數據處理子系統、遙測發射機等設備[8]。采集器按照設定的頻率采集模擬量、數字量、總線數據、視頻數據等被測信號,然后將測得的信號打包成標準格式的網絡包數據發送,網絡包數據經過交換機發送至數據處理子系統、記錄器、遙測發射機等設備。記錄器記錄接收到的網絡包數據,遙測發射機將數據通過PCM的形式發送至地面,數據處理設備對接收到的網絡包數據包數據進行處理并存儲處理結果[9-10]。機載網絡化測試架構如圖1所示。

圖1 機載網絡化測試架構
網絡化機載測試系統具有如下幾個特點:
1)測試系統中一般有多臺采集器,每臺采集器都會發送多條網絡數據流,數據流的目的地址及端口可以通過機載信息配置文件獲取。
2)每條數據流都有各自的采樣率,各個流之間的采樣率不完全一致,采集器按照該采樣率發送數據。
3)每條網絡流的網絡包都有各自獨立的key值,該值是網絡包的唯一標識。
4)網絡包數據中包含待處理參數的碼值,通常情況下課題需要處理的參數分部在不同的網絡包中。
5)由于網絡的復雜性以及傳輸的不確定性,接收到的網絡包數據有可能存在丟包現象。
6)數據處理時需要在不同采樣率的不同網絡數據流中進行碼值提取和物理量轉化,需要接解決時間同步問題。
由機載測試系統的架構可知,數據處理子系統通過交換機接收采集器發送的網絡包數據,然后對數據進行處理。由于數據包的發送、傳輸、接收過程都會對數據包產生延時,而延時后的數據在處理時就不會按照預定的順序進行排列,這就導致了數據包之間產生亂序,所以延時是數據包亂序的根本原因。延時由三部分組成:發送延時、傳輸延時、接收延時,網絡包總延時等于這三個延時之和[11-12]。對于發送、傳輸、接收的延時原因分析如下:
對于發送延時:1)由于采集器設備性能的差異,不同采集器從數據產生到數據發送所用的時間不一樣;2)對于同一采集器的采樣率相同的兩個數據包,在發送同一時刻數據的時候會有先后順序。
對于傳輸延時:1)不同數據包的傳輸路徑的長短不完全一致,例如位于垂尾的采集器和位于機身的采集器產生的數據到數據接收設備的路徑長度顯然不同。2)網絡包從產生到接收所經過的系統節點數不完全一致,例如有些經過一級交換機到核心交換機,有些會直接進入核心交換機,這些網絡節點對數據包的產生的延遲不完全一樣。
對于接收延時:1)接收設備的性能會影響數據從到達接收設備到開始處理的時間。2)設備在接收某一個數據包時,另一個數據包到來等待接收,會對下一個包產生接收延時。
假設系統中有A、B兩個數據流,采樣率都是32,未發生延時和發生延時的數據包順序如圖2所示。其中(a)是未發生亂序的網絡包,按照時間順序依次排列;(b)是發生亂序的網絡包,由于B包比A包延時大,所以B包總是排列在A包相應時刻之后。

圖2 數據包亂序示例
網絡包數據亂序具有如下幾個特點:
1)單條流的網絡包數據不會產生亂序,因為單條數據流的數據是依次發送的。亂序主要體現在數據流與數據流之間,即流與流之間會產生亂序。
2)網絡數據流的亂序規律是一定的,也就是說對于確定的測試系統,數據流的亂序是按照一定的亂序規律重復出現的。
由于網絡包數據亂序,對處理時帶來的困難是:無法按照數據包的接收順序依次處理網絡包數據,否則就會把其他時刻的數據誤處理成當刻數據,所得的數據不夠精確[13-14]。所以就需要針對數據包的亂序問題,設計一套時間同步算法,使得數據處理的結果在時間上能夠對齊,保證試飛數據準確可靠。
針對機載網絡化架構下數據處理時存在的網絡包亂序問題,提出三種時間同步處理算法,并詳細比較三種算法的優缺點,最終選擇其中的一種作為機載數據處理算法進行實現。三種時間同步處理算法的詳細描述如下。
由于機載測試系統中每條網絡流的數據包的采樣率是固定的,同時課題需求的采樣率也是固定的,所以可以根據網絡包的采樣率除以課題需求的采樣率,得到網絡包每秒需要處理的個數,實際計算時對網絡包數據按照處理個數進行等間隔取數。基于半包間隔的時間同步算法的具體實現方式是:
1)分析機載信息配置文件,獲取每個網絡包的key值及采樣率;
2)分析待處理的參數,找出包含待處理參數的網絡包的key值及采樣率;假設待處理網絡包共有N個,采樣率分別為S1、S2、…、Sn;
3)根據課題需求的采樣率S,計算每個包每秒計算的次數Xi=Si/S(i=1,2, …,n)。
4)若Xi<1,則令Xi=1,這是因為實際需求的采樣率大于網絡包的采樣率時,對于每一個數據包都要進行計算。對數據進行解算時,網絡包每Xi個計算一次;
5)讀取網絡包數據并分析key值以及計算次數,若key值屬于待處理參數的key值,并且計算次數能夠整除Xi,則對該網絡包進行處理,否則不處理并讀取下一個網絡包;依次循環往復;
6)當每個網絡包都處理了一遍時,將當即網絡包時刻作為處理時刻,并將處理結果寫入結果文件。
這種時間同步處理算法的優點是實現簡單,缺點是對網絡數據的質量要求較高,不能有亂序或者丟包。若測試系統的網絡包數據沒有亂序且不存在丟包現象,則可以使用該算法,但若存在丟包或亂序,使用該算法處理的結果數據的時間就會存在偏差,丟包或亂序越嚴重,時間偏差就會越大。
對于特定的機載網絡化測試系統,網絡包的亂序是固定的,只要找到亂序的規律,再合理利用數據包亂序的規律,就可以在處理時解決亂序問題實現時間同步。該算法的核心內容是:1)找到數據包亂序的規律,即最大逆序時間,2)合理利用最大逆序時間實現時間同步。
網絡中1秒接到的數據包數量為N,他們的時間分別為T1,T2,…,Tn,計算每兩個數據包之間的時間差值△Ti=Ti+1-Ti(i=1,2, …,N-1),比較每個△Ti,得到最大值△Tmax,該值就是最大逆序時間,亂序的規律就以此逆序時間為周期反復出現的。假設數據中有A、B兩種包,采樣率都是每秒鐘64,由于數據亂序的原因,B包總是比A包晚到0.015625(1/64)秒,即 =0.015625,數據在緩存中排列方式如表1所示。

表1 數據排列
表中每一行代表一個逆序時間周期 ,每填滿一個周期的緩存,就可以正確處理一次網絡包數據,比如0.015625時刻收到的A2與B1,將數據暫時存放在緩存快1,0.031250時刻收到的A3和B2,將數據放在緩存快2,這時可以將緩存快1的A2和緩存快2的B2結合就可以處理出來正確的參數。
基于最大逆序的時間同步處理算法的優點是可以通過找出最大逆序時間并合理利用亂序規律解決時間亂序的問題;但缺點是該方式實現起來比較復雜,同時對于網絡數據的容錯能力較弱,假如數據包亂序較為嚴重,找到最大逆序時間以及利用亂序規律都比較困難。
由于網絡包數據按照一定的頻率發送至測試系統,所以特定網絡包不會發生亂序,接收到的該網絡包是以特定的時間間隔按序排列,網絡包時間間隔的一半稱為半包間隔。課題需求的采樣率是確定的,可以根據需求的采樣率算出每秒中需要處理的時刻,在這些時刻的左右半包時間間隔之內,肯定有且只有一個網絡包數據,處理該網絡包的數據就可得到該時刻的參數值。
例如網絡中A包的采樣率為16,需求參數的采樣率為8,可以計算出A包的半包間隔halfPackGap=1000/16/2=15.625,需求的采樣率時刻的毫秒值分別為:000、125、250、325、500、625、750、875。只要讀取到的網絡包時刻點距這些時刻的時間差小于半包間隔就對數據包進行處理。基于半包間隔時間同步處理算法示例如圖3所示,圖中上面的時刻表示需求的采樣率時刻,下面的時刻表示網絡包數據真實采樣率,灰色部分表示需求采樣率時刻附件的半包時間間隔,若網絡包時刻落在灰色部分就進行處理。

圖3 基于半包間隔時間同步處理算法示例
基于半包間隔的時間同步處理算法的優點是算法清晰明了且實現簡單,只需要對網絡包中的時間與待處理時間進行比較就可以實現時間同步;此外該算法的容錯能力比較強,若網絡中存在丟包、亂序等現象,由于進行了網絡包的時間判斷所以不會發生錯亂,更不會影響后面時刻數據包的處理。
由于測試系統中的丟包、亂序現象時有發生,考慮到算法的易實現性、對數包的容錯能力等因素,選擇基于半包半包間隔的時間同步處理算法作為機載網絡數據時間同步處理算法。
利用基于半包間隔時間同步處理算法處理數據時,按照一秒的數據量為單位進行處理,該過程需要經過三個步驟:設置數據緩沖區、處理數據、結果數據存儲。數據緩沖區主要用于存儲數據處理的中間結果,避免頻繁的I/O操作,緩沖區的合理設置對于數據處理至關重要[15];數據處理的過程就是按照基于半包時間間隔的數據處理算法處理網絡包數據,并將處理結果放入數據緩沖區中;結果數據存儲就是將緩存中存儲的網絡包數據寫入到結果文件中。
為了存儲數據處理的中間結果,設置圖4所示的緩沖區,該緩沖區為一個數組,用于存放一秒鐘的數據處理結果,前三個元素分別存放時、分、秒,后面的元素按照參數的采樣率的大小依次存放,假如參數采樣率為8,每8個元素存放一個參數一秒的結果,這8個元素分別存放000、125、250、325、500、625、750、875時刻的處理結果。

圖4 數據緩沖區的結構
設置三個這樣的緩沖區,分別用于存儲上一秒、本秒、下一秒的結果數據,這是因為網絡數據中存在亂序現象,當本秒最開始的數據到來之后,有可能還會有上一秒最后時刻的數據;同樣地當本秒的最后時刻到來之時,有可能下一秒最開始時刻的數據就會提前到來。設置三條這樣的緩沖區就能夠把所有的數據結果存儲下來,不會存在結果數據丟失的情況。
根據半包間隔時間同步的處理思想,設計基于半包間隔的時間同步處理算法的具體處理流程如下:
1)分析機載信息配置文件,獲取每個網絡包的key值及采樣率;
2)分析待處理參數列表,在機載信息配置文件里找到待處理數據包的key值及采樣率;
3)若需要處理的網絡包書數量為N,采樣率分別為S1、S2、…、Sn,計算每個數據包的半包時間間隔ΔTi=1000/Si/2。
4)根據待處理參數的采樣率K計算每秒中要處理的時刻值,T={T0、T1、…、Tk-1},其中Ti=[1000/K]*i。
5)讀取網絡包數據,分析網絡包數據的K值,若不需要處理則跳過讀取下一個網絡包,若需要處理,分析網絡包的時間,判斷時間屬于本秒、上一秒還是下一秒時間,然后分析該時刻是否在需求采樣時刻的半包時間間隔內,若不在則跳過讀取下一個網絡包,若是則判斷該網絡包屬于第幾個采樣時刻,對網絡包數據進行碼值提取及物理量轉化后,將值放在緩存中特定的位置。
6)循環重復步驟5)的過程,當緩存滿時將該緩存的數據寫入到結果文件中。
當緩存中的數據寫滿后,要將數據寫入到結果文件中,然后對緩沖區進行清零并變更三個緩沖區的時間狀態。一般情況才,上一秒的緩沖區最先被寫滿,當上一秒緩沖寫滿后,將該緩沖區的數據寫入到結果文件中,然后對該緩沖區進行清零,接下來變更三個緩沖區的狀態:上一秒緩沖接收下一秒數據,本秒緩沖接收上一秒數據,下一秒緩沖接收當刻數據,如此循環往復,保證了數據能夠一直進行正確的緩存。
利用C語言實現了基于半包間隔的時間同步處理算法,在實驗中測試該算法的有效性,需要驗證兩個方面的內容:一是數據結果的時間同步性,二是處理結果的準確性。
系統中存在A、B、C三個數據包,采樣率分別為16、32、64,三個數據包中分別有P1、P2、P3三個參數,處理的采樣率為8,利用該算法進行兩次數據處理:一是將三個參數放在一起一塊處理,二是將三個參數單獨各處理一次。進行兩次處理的原因是:由于單個網絡包不會存在亂序問題,單獨處理某個特定的網絡包,可以驗證數據處理結果的準確性。三個參數一塊處理所得結果如圖5所示,三個參數單獨處理所得結果的時間與數值和圖5的時間與數值皆相同。

HH:MM:SS:MSS P1 P2 P3 09:08:12:000 2.350 3.125 -1.375 09:08:12:125 2.475 3.264 -1.422 09:08:12:250 2.600 3.387 -1.573 09:08:12:375 2.654 3.422 -1.632 09:08:12:500 2.725 3.564 -1.698 09:08:12:625 2.800 3.633 -1.712 09:08:12:750 2.850 3.689 -1.823 09:08:12:875 2.900 3.722 -1.875
圖5 數據處理結果
數據處理結果表明:單獨處理時結果數據的時間與一塊處理所得結果時間一致,驗證了該算法解決了網絡包亂序問題,保證了數據處理時間同步性。此外,單獨處理時所得數據的數值和一塊處理時的數值一致,驗證了該算法能夠得到準確的數據結果,保證了數據處理的準確定。
本文首先介紹了機載網絡化測試架構并分析了網絡包亂序產生原因及其特點,針對網絡包亂序問題提出了三種時間同步處理算法,詳細分析并比較了三種時間同步處理算法的內容及優缺點,最終選擇基于半包間隔的時間同步處理算法作為機載實時數據處理算法,并給出了該算法的具體實現過程。試驗結果表明該算法能有效解決機載網絡數據處理時間同步問題,并給出精確的處理結果。