• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于通信的列車控制系統(tǒng)數(shù)據(jù)采集與解析軟件的設(shè)計與實現(xiàn)*

      2018-11-02 06:35:18白廣爭白廣良
      城市軌道交通研究 2018年10期
      關(guān)鍵詞:配置文件線程交換機

      白廣爭 李 亮 白廣良

      (1.中國鐵道科學(xué)研究院通信信號研究所,100081,北京;2. 中國石油遼河油田興隆臺采油廠,124011,盤錦 //第一作者,助理研究員)

      CBTC(基于通信的列車控制)系統(tǒng)包括CBI(計算機聯(lián)鎖)、ATS(列車自動監(jiān)控)、VOBC(車載控制器)、ZC(區(qū)域控制器)和DCS(數(shù)據(jù)通信)等子系統(tǒng)[1]。各子系統(tǒng)之間實時進行各種控制信息及反饋信息的交互,各子系統(tǒng)內(nèi)部實時完成自身邏輯功能運算。為了深入分析各子系統(tǒng)自身邏輯運算的準確性及系統(tǒng)間信息交互的可靠性,從系統(tǒng)的角度而言,需要開發(fā)一套對整個CBTC系統(tǒng)進行實時數(shù)據(jù)抓包并根據(jù)接口協(xié)議進行解析的軟件,為工程測試人員提供參考。

      文獻[2]是在Wireshark的基礎(chǔ)上通過腳本嵌入二次開發(fā)實現(xiàn)的應(yīng)用協(xié)議解析。本文所介紹的軟件,其開發(fā)基于C# 語言,包含了數(shù)據(jù)抓包解包的過程。本文描述了解決軟件開發(fā)過程中出現(xiàn)的一些關(guān)鍵問題的思路。軟件主要完成局域網(wǎng)內(nèi)數(shù)據(jù)抓包、接口解析配置文件設(shè)計與讀取、數(shù)據(jù)記錄與歷史查詢、界面顯示等功能。

      1 數(shù)據(jù)抓包

      CBTC系統(tǒng)一般采用交換機組建局域網(wǎng)。為了實現(xiàn)抓取流經(jīng)交換機的所有數(shù)據(jù),需要做兩方面的工作:一是設(shè)計數(shù)據(jù)抓包機制,二是對交換機進行端口鏡像配置。

      1.1 數(shù)據(jù)抓包機制

      在硬件方面,網(wǎng)卡的工作模式分為廣播模式、多播傳送、直接模式和混雜模式等。默認情況下,網(wǎng)卡只接收廣播幀和發(fā)至本終端的幀[3]。只有采用混雜模式,網(wǎng)卡才能接收局域網(wǎng)絡(luò)內(nèi)所有發(fā)送至本終端的數(shù)據(jù)包,實現(xiàn)監(jiān)視捕獲網(wǎng)絡(luò)信息的目的。在軟件方面,通過調(diào)用Sharpcap應(yīng)用類庫進行底層網(wǎng)卡的操作。CBTC系統(tǒng)采用A、B雙網(wǎng)組建局域網(wǎng),分別由兩臺交換機管理。因此,在同一終端上,可采用兩個網(wǎng)卡分別抓取兩臺交換機上的數(shù)據(jù),數(shù)據(jù)抓包機制如圖1所示。

      圖1 數(shù)據(jù)抓包機制

      為了避免多個線程同時操作某一塊內(nèi)存,引起并發(fā)性問題,需要在數(shù)據(jù)存入緩存的過程中設(shè)置互斥鎖?;コ怄i的原理為:當(dāng)線程n需要操作某一被鎖定的內(nèi)存時,必須首先獲取鎖,然后才能進行該內(nèi)存操作;當(dāng)線程n正在操作某一內(nèi)存時,該內(nèi)存則被置于鎖定狀態(tài),其他線程不能再對其進行操作;當(dāng)線程n操作某一內(nèi)存結(jié)束后,需要釋放鎖,從而允許其他線程進行相關(guān)操作。

      1.2 交換機端口鏡像配置

      由于交換機不會把收到的每個數(shù)據(jù)信息都以廣播的方式發(fā)送到其他所有端口,而是根據(jù)MAC地址表進行智能轉(zhuǎn)發(fā)。因此,經(jīng)過1.1節(jié)的配置仍無法實現(xiàn)在一個端口上抓取局域網(wǎng)內(nèi)的所有數(shù)據(jù)。通過端口鏡像配置方法,能夠?qū)⒍鄠€端口的數(shù)據(jù)流鏡像到同一個端口上,這樣,局域網(wǎng)數(shù)據(jù)抓包條件就能從物理上得到保證。

      為了完成端口鏡像配置,首先,交換機需具有網(wǎng)絡(luò)管理功能;其次,由于不同型號交換機的配置命令不同,因此對不同的交換機采用與其相應(yīng)的配置命令進行配置。

      2 數(shù)據(jù)包解析

      對于從交換機上獲得的數(shù)據(jù)包,需要獲取應(yīng)用層數(shù)據(jù),并根據(jù)接口協(xié)議進行解包,從而提供給測試人員進行驗證。本軟件的數(shù)據(jù)包解析由XML配置文件和文件讀取程序(解包程序)兩個模塊完成。

      2.1 XML配置文件

      通常情況下,隨著工程的深入和細化,一些接口協(xié)議、工程數(shù)據(jù)等都會有所改動,為了降低這種改變對程序開發(fā)的影響,同時也為了提高開發(fā)效率,減少程序開發(fā)工作量,接口協(xié)議及工程數(shù)據(jù)等需要以配置文件的方式提供,以便于后期的維護。本解析軟件采用XML文件對CBTC系統(tǒng)中的接口協(xié)議進行描述。

      XML文件格式能跨平臺使用,具有良好的可擴展性,適合面向?qū)ο蟮某绦蜷_發(fā)。XML提供的是樹形層次結(jié)構(gòu),可以很方便地定位某個功能塊[4]。針對CBTC各子系統(tǒng)接口協(xié)議,本軟件采用5層節(jié)點的XML文件來描述。第1層為標(biāo)志數(shù)據(jù)方向的節(jié)點,如ZC→VOBC等;第2層為標(biāo)志數(shù)據(jù)包類型的節(jié)點,如列車控制信息、列車注冊請求報文等;第3層為普通節(jié)點,如ZC_ID等應(yīng)用層字段含義;第4層為被控節(jié)點,如某號道岔的信息等;第5層為表示被控節(jié)點屬性的子節(jié)點,如道岔定位、反位信息等。

      其中,普通節(jié)點又分為非控制類型節(jié)點和控制類型節(jié)點兩類,設(shè)置節(jié)點屬性control來區(qū)分這兩種類型。若control為0,表示該節(jié)點為非控制類型節(jié)點。對于該類節(jié)點,只需獲取其中各屬性的值,如每個字段的長度、字段含義描述等。若control為1,表示該節(jié)點為控制類型節(jié)點。對該類節(jié)點的處理方式是,根據(jù)控制節(jié)點的值對被控節(jié)點進行操作。例如,假設(shè)數(shù)據(jù)包中包含N個道岔信息,則通過道岔控制節(jié)點獲取N值,然后對描述道岔的被控節(jié)點進行N次循環(huán)讀取。XML配置文件整體結(jié)構(gòu)如圖2所示。

      圖2 XML配置文件結(jié)構(gòu)設(shè)計示意圖

      采取這種設(shè)計模式能夠?qū)BTC系統(tǒng)的所有接口協(xié)議文件轉(zhuǎn)化為XML配置文件,供解包程序統(tǒng)一調(diào)用。若后期協(xié)議中需要增加新的字段,只需增加新的節(jié)點,文件結(jié)構(gòu)及解包程序均不需改變;若出現(xiàn)新的控制條件或控制類型時,可以通過調(diào)整control的值做進一步擴展。

      2.2 解包程序

      XML配置文件的解包程序,首先獲取數(shù)據(jù)包的源ID、目的ID和數(shù)據(jù)類型等包頭信息,讀取XML配置文件,并據(jù)此查找與該數(shù)據(jù)包的數(shù)據(jù)方向和類型相同的方向節(jié)點和類型節(jié)點。在此基礎(chǔ)上,對數(shù)據(jù)包中其他各字段按節(jié)點逐個進行解析。XML配置文件解包程序讀取流程如圖3所示。

      圖3 XML配置文件解包程序流程圖

      為了提高程序的實時響應(yīng)能力,在抓包過程中,并不對應(yīng)用層數(shù)據(jù)全部進行實時解包,而是只獲取包頭的一些必要信息,如時間、PacketID、數(shù)據(jù)包類型等,并進行數(shù)據(jù)分類存儲,以便于以后的查詢操作。只有在離線情況下,才響應(yīng)測試人員的查詢記錄請求,調(diào)用解包程序?qū)ο鄳?yīng)的數(shù)據(jù)包進行解包處理。

      3 數(shù)據(jù)存儲設(shè)計

      為了方便測試,提高軟件的可用性,降低數(shù)據(jù)庫對環(huán)境配置的要求,本項目采用SQLite數(shù)據(jù)庫。該數(shù)據(jù)庫是一種開源的嵌入式關(guān)系型數(shù)據(jù)庫,與Oracle復(fù)雜的客戶-服務(wù)器模式不同,SQLite整個數(shù)據(jù)庫都在一個單一文件中,可以直接通過程序來創(chuàng)建數(shù)據(jù)庫文件及表單,并進行相關(guān)的數(shù)據(jù)庫操作。另外,SQLite還具有處理速度快、支持跨平臺、能與多種程序語言相結(jié)合等優(yōu)點。

      從網(wǎng)絡(luò)上抓取到的數(shù)據(jù)均需存入數(shù)據(jù)庫,若每獲得一條數(shù)據(jù)即進行一次存儲操作,頻繁連接和斷開數(shù)據(jù)庫比較耗時,存儲速度就無法滿足實時性要求。通常情況下,對于實時數(shù)據(jù)都采取集中式存儲方式。

      本文介紹的軟件設(shè)置了兩個緩存區(qū),輪流接收抓取的數(shù)據(jù),并在緩存區(qū)滿時各自進行存儲。緩存區(qū)的大小與抓包速率有關(guān),若單位時間內(nèi)從局域網(wǎng)上抓到的數(shù)據(jù)包較多,則需要設(shè)計較大的緩存區(qū)。通過顯式啟動事務(wù)的方法將緩存中的數(shù)據(jù)批量插入數(shù)據(jù)庫,能夠大大提高存儲效率。

      存儲機制分定量存儲和定時存儲兩種方式。定量存儲是指在程序中開辟固定大小的緩存區(qū),當(dāng)緩存區(qū)滿時,執(zhí)行數(shù)據(jù)存儲過程。這種存儲機制便于控制內(nèi)存的合理運用,但存儲周期是不確定的,需要根據(jù)緩存區(qū)大小和網(wǎng)絡(luò)內(nèi)數(shù)據(jù)流量來計算;定時存儲是指每間隔固定的時間進行一次存儲,這種存儲機制在存儲周期上是固定的,但需定義動態(tài)緩存區(qū),不利于內(nèi)存管理。本文介紹的軟件采用定量存儲的方式。

      根據(jù)以上設(shè)計思路,設(shè)存儲周期為T,網(wǎng)絡(luò)抓包速率為v,單個緩沖區(qū)大小為s,則三者滿足如下的關(guān)系:

      T=s/v

      (1)

      設(shè)每次存儲事務(wù)的執(zhí)行時間為t,若要保證有足夠的時間存儲數(shù)據(jù),則須滿足如下的要求:

      t≤T

      (2)

      存儲速率根據(jù)程序的抓包速率來設(shè)計。存儲速率要略大于抓包速率,這樣既能避免內(nèi)存溢出,又能有效減少資源占用。

      根據(jù)式(1)、式(2)的關(guān)系,v、s與t之間的關(guān)系需滿足:

      tv

      (3)

      當(dāng)式(3)的條件滿足時,能有效避免內(nèi)存溢出。同時,若式(3)右端遠大于左端,則會造成內(nèi)存資源的浪費或數(shù)據(jù)庫連接資源的浪費。

      為了提高程序的實時性,抓包線程負責(zé)將抓取的數(shù)據(jù)包放入緩存中,并調(diào)用解包頭程序,將更新界面顯示和存儲事務(wù)交由數(shù)據(jù)存儲線程處理。設(shè)置兩個緩存區(qū)進行數(shù)據(jù)的輪流接收與存儲,同一時刻只能由其中一個緩存區(qū)負責(zé)數(shù)據(jù)接收,當(dāng)該緩存區(qū)存滿后才能由另一個緩存區(qū)進行數(shù)據(jù)接收,具體的控制流程如圖4所示。

      圖4 數(shù)據(jù)接收及存儲流程圖

      4 軟件總體結(jié)構(gòu)及界面

      以上描述了軟件所涉及到的主要功能模塊,軟件采用基于Winform的C# 語言編程,整體運作流程如圖5所示。

      軟件界面提供實時數(shù)據(jù)抓包顯示,用Listview控件顯示。用戶選擇某一包的數(shù)據(jù)記錄,軟件界面相應(yīng)顯示該數(shù)據(jù)包的解析信息。也可以通過設(shè)置篩選條件進行選擇性顯示。該軟件具有歷史數(shù)據(jù)查詢、Excel導(dǎo)入/導(dǎo)出等功能。

      圖5 主程序控制流程圖

      通過應(yīng)用驗證,軟件在Intel Core i5-4590四核8 G內(nèi)存的終端上運行,能夠滿足CBTC系統(tǒng)的需求,沒有出現(xiàn)漏包現(xiàn)象,抓包及處理效率能夠跟上系統(tǒng)內(nèi)數(shù)據(jù)包的產(chǎn)生速度。

      5 結(jié)語

      本文闡述了抓包、存儲及離線解析CBTC系統(tǒng)局域網(wǎng)內(nèi)數(shù)據(jù)的軟件的設(shè)計過程。該軟件的研發(fā)有助于提高CBTC系統(tǒng)接口測試效率,加快問題定位,提高測試質(zhì)量。按照本文介紹的設(shè)計方法開發(fā)的軟件具有擴展性好、開發(fā)效率高、通用性強等特點,這些設(shè)計方法對于其他類似應(yīng)用系統(tǒng)的開發(fā)具有一定的借鑒意義。

      在此基礎(chǔ)上的進一步研究工作是:通過統(tǒng)計所抓取數(shù)據(jù)包的類型來判斷CBTC系統(tǒng)實時網(wǎng)絡(luò)狀態(tài);通過修改數(shù)據(jù)包內(nèi)容,模擬某一子系統(tǒng)向其他子系統(tǒng)發(fā)送錯誤數(shù)據(jù)包,實現(xiàn)故障注入等功能。

      猜你喜歡
      配置文件線程交換機
      提示用戶配置文件錯誤 這樣解決
      搭建簡單的Kubernetes集群
      互不干涉混用Chromium Edge
      忘記ESXi主機root密碼怎么辦
      修復(fù)損壞的交換機NOS
      使用鏈路聚合進行交換機互聯(lián)
      淺談linux多線程協(xié)作
      PoE交換機雷擊浪涌防護設(shè)計
      羅克韋爾自動化交換機Allen-Bradley ArmorStratix 5700
      自動化博覽(2014年9期)2014-02-28 22:33:16
      Linux線程實現(xiàn)技術(shù)研究
      仪征市| 巴林右旗| 郯城县| 增城市| 同心县| 永年县| 莆田市| 柘城县| 陆良县| 阿坝县| 昂仁县| 湟中县| 重庆市| 尼勒克县| 外汇| 高尔夫| 红桥区| 新营市| 余庆县| 安塞县| 遵义市| 商丘市| 旌德县| 乌审旗| 策勒县| 屯昌县| 青阳县| 赤城县| 剑川县| 凤台县| 佛学| 揭东县| 长岭县| 泽库县| 运城市| 南江县| 北安市| 宜君县| 涟水县| 乐至县| 永仁县|