劉 彪,張進智,張 巧,王睿喬,李明樂,喬邦江
(1.國營長虹機械廠 電子車間,廣西 桂林 541000;2.中國兵器裝備集團制導航空彈藥研究開發中心 導航室,湖南 長沙 410100)
隨著科學技術的發展,串口通訊廣泛應用在制導控制[1]、導航[2-3]、工業自動化[4]等領域,當前大多數儀器設備在進行數據的傳輸時,都采RS-232或RS-422串口通訊方式[5-7]。為了保證數據傳輸的保密性和正確性,很多儀器設備采用增加幀頭、幀ID、幀長度、校驗和、幀尾對數據進行封裝;校驗和包括單字節累加求和,CRC校驗等。目前還沒有形成統一、規范的通訊接口數據協議[8],因此,對于接收數據的測試顯控系統設計而言,不同的設備必須對應不同的軟件系統,給程序設計帶來麻煩,花費大量人力、物力研制的軟件系統只能應用于特定的系統,若用于其它系統的接收測試,必須進行重新設計,或者對代碼進行大量的修改。這不僅增加了單位的人力、時間成本,還影響了單位的整體測試效率。
基于上述問題,研究并開發了一種通用的串口協議數據解析與顯控系統。該系統分為協議自動生成軟件和數據解析及顯示軟件。該系統將串行接口中傳輸的數據流協議與接收軟件分離,可以根據使用需要,制定不同的通訊協議,再通過數據解析軟件將串行接口中的數據流與協議匹配,將數據解析、記錄并顯示。
現以慣性導航系統為例,介紹一種協議的基本格式,如圖1所示。

圖1 協議的基本格式
幀頭通常包含兩個字符[9],用來判斷一個數據包的開始,該文給出的幀頭式是7E7E。幀長度一般是指除去幀頭、幀長度本身、校驗和之外的其它數據字節數。幀ID通常是判斷輸出的是哪一類數據包,由于相同接口,有可能輸出不同的數據。以慣性導航系統為例,同一接口有可能輸出Inertial Measurement Unit (IMU)的數據,比如角速度信息、加速度信息、溫度信息等;也有可能輸出慣導解算的數據,例如慣導時標、經度、緯度、高度、速度(北向、東向、地向)、姿態(俯仰、橫滾、偏航)等信息,幀ID用來區分同一接口輸出的不同數據包。校驗和一般情況下包括單字節累加求和、CRC校驗[10-11]等,單字節累加求和、CRC校驗都是指除去幀頭、幀長度本身、校驗和之外的其它數據字節數的累加和或CRC,幀尾代表了一幀數據的結束[12-13],通常幀尾用0xcc表示。表1給出一幀完整的IMU數據協議。

表1 IMU協議
數據解包是從接收的數據流中拿出正確的數據幀,其中拿出一幀正確的數據,關鍵的是幀頭、幀長度、幀ID和校驗和四個字段;準確無誤地解析出具體的數值(如X軸加速度),則需知道具體數據項的字節數、數據類型和當量LSB[14]。
在此,給出一種通用的數據協議解析算法,如圖2所示,解析過程如下:

圖2 解析算法示意圖
定義三個緩存存儲數據流pRXStrm、RXBuf和RXBuff,將待解析字節流中指定起始位置及數量的字節拷貝至臨時字節數組中,即將緩存pRXStrm復制到緩存RXBuf里,定義兩個位置索引變量CBP(已被放入解析緩存的字節數)和CBL(未被放入解析緩存的字節數),初始值都為0;對RXBuf里的數據流進行遍歷,判斷幀頭,如果幀頭匹配,將幀頭存入RXBuff中,CBP+1,如若不匹配,停止,繼續尋找幀頭,直到匹配到幀頭,當判斷完整個RXBuf里的數據,沒有匹配到幀頭,跳出遍歷,錯誤幀計數+1;判斷幀ID,如果幀ID匹配,將幀ID存入RXBuff中,CBP+1,如若不匹配,停止,繼續尋幀ID,直到匹配到幀ID,當判斷完整個RXBuf里的數據,沒有匹配到ID,跳出遍歷,錯誤幀計數+1;判斷幀長度,如果幀長度匹配,將幀長度存入RXBuff中,CBP+1,CBL=幀長度-CBP,循環將剩余字節存入RXBuff中,存入一個字節,CBP+1,CBL-1,直到CBL減為1,0,判斷校驗和、幀尾;全部匹配后一幀數據解析成功,幀長度、校驗和、幀尾有一項匹配不成功,跳出循環,CBP置0,錯誤幀計數+1;依次類推,解析緩存里的所有數據。
這里設置兩個緩存,是為了防止數據量過大,還沒有解析緩存區就被覆蓋的問題。
通常情況下,大多數單位都是根據特定的產品,制定相應的通訊協議,不同的產品配備了不同的通訊測試軟件,協議更改后,必須重新修改程序解析代碼[15],同時部分解析系統的解析算法通用性不高,解析稍微有變,整個數據處理段要進行大量修改與調試[16-17],浪費了大量的時間與精力。
該系統與其它系統最大的不同在于即使一個不懂編程的人,也可以使用該系統采集與測試多種不同設備的數據,為日常的數據采集與測試工作帶來了極大便利。
該系統分為協議自動生成軟件和數據解析及顯示軟件。系統軟件采用C#語言,開發工具為VS2010,系統的工作流程如圖3所示。

圖3 協議生成與解析流程
協議自動生成軟件根據功能可以分為:協議的編輯功能(包括主協議的編輯和位協議的編輯)、協議的保存功能、快速輔助生成協議功能、協議的讀取功能、協議的修改功能。
該軟件的協議編輯、修改和讀取顯示功能是基于DataGridView控件實現的,該控件支持大量的自定義和細致格式設置,具有靈活的大小調整和選擇功能,同時還具備更好的性能及更豐富的事件模型。
為了方便操作人員編輯,該軟件具有快速輔助生成協議功能,根據不同的關鍵字和字段數生成所需的協議,然后進行編輯,可以提高效率,輔助協議生成功能界面如圖4所示。

圖4 輔助協議勾選界面
以上關鍵字,可以根據待測設備協議自由配置,沒有的字段可以不用勾選。勾選相應的關鍵字并填寫字段數,協議就會在主界面顯示出來;
點擊主界面菜單,可選擇進入協議編輯界面,用戶在此界面可以制定所需的數據協議。
其中,界面上部為主協議編輯區,用戶根據自身需求和界面編輯提示制定主協議各數據字段的數據要求。
界面下部為位協議編輯區,如果主協議中有數據字段需要位解析,則可以在主協議區勾選“是否位解”,并在本區進行位協議制定。
當協議編輯完成,確認無誤后,可以點擊保存協議按鈕,協議將會保存為.xml文件,如圖5所示。XML稱之為元語言,它能夠方便地表示結構化數據,自身具有的樹形結構和節點之間的父子層級關系,可以很好地支持協議的增減替換,并對設備本身的協議按照字段分塊,規定最小解析單位,使得XML可以作為描述和傳輸數據的主要手段。

圖5 XML協議描述文件
解析協議的數據結構用于映射當前XML文件中的標簽和標簽中的屬性值,并且按照XML文件中的標簽順序對解析節點進行排列組合。
協議以.xml格式保存在本地硬盤后,當點擊打開協議文件選擇以保存好的協議文件,該協議就可以顯示在協議的編輯區,同時可以對該協議進行修改并保存,變化不大的協議可以稍微進行修改,而不需要重新編輯,以減少工作量。
數據解析及顯示軟件主要實現了數據協議框架文件的載入、數據協議顯控界面動態生成、數據匹配正則表達式的生成、串口數據流實時解析與屏顯、數據流記錄和數據幀記錄等功能。軟件需和協議自動生成軟件配套使用,數據協議框架文件的有效性由協議自動生成軟件保證。
軟件主界面如圖6所示。

圖6 數據解析及顯示軟件主界面
其中,界面左上部為串口參數配置區,用于配置數據接收串口參數。可配置波特率范圍:9 600~921 600;校驗位:奇校驗、偶校驗、無校驗;數據位:6,7,8;停止位:1,1.5,2。
界面左中部為接口數據統計區,可以顯示當前數據接口接收到的數據幀數量、數據幀校驗錯誤計數、接收數據的字節數和發送數據的字節數。
界面左下部為時間顯示區,顯示當前系統的日期與時間,精確到秒。
界面中間為主協議數據顯示區,最多可顯示10種不同的數據幀。根據用戶定義的協議內容,可顯示數據協議中每一個字段的名稱、值和度量單位。
界面右上部為位協議數據顯示區,最多可顯示3種位協議字段。當主協議中有需要位解析的字段時,用鼠標選中即可在本區顯示該字段的位協議數據解析信息。
使用時,用戶首先點擊系統菜單,載入所需協議框架文件,彈出協議選擇界面,如圖7所示。

圖7 協議框架文件載入界面
協議框架選擇確認后,在圖7所示界面點擊“確定”按鈕,即可將協議框架設定的內容在主界面的主協議數據顯示區動態生成。與此同時,軟件也會將選中協議框架的內容轉換為數據解析時所需的匹配正則表達式。
將接收的數據字節填充到待匹配字符緩存區,遍歷主協議成員項列表的集合,獲取當前主協議成員項列表,解析正則表達式規則,獲取匹配結果和匹配長度,判定返回值,如果返回值>0 (獲取成功),獲取當前校驗和狀態信息及校驗和成員項是否存在,若存在,計算所匹配字節流的校驗和,判定函數返回值>0(成功),分組依次判定校驗和計算返回值長度(返回長度依次定義為1,2,4,8)。如果長度為1,判斷校驗和計算是否正確;如果長度為2,將校驗和字節數組轉化為短整型校驗和并判斷;如果長度為4,將校驗和字節數組轉化為整型校驗和并判斷;如果長度為8,將校驗和字節數組轉化為長整型校驗和并判斷,校驗和正確,根據主協議成員項列表對匹配到的字節流數據進行解析,將解析后的主協議成員項列表中的數據項發送記錄儀,進行保存。
位協議成員項數據解析方法:判定當前位成員項列表的初始化狀態,若已初始化,獲取當前位成員項的值,聲明關鍵值數組和實際物理意義數組,獲取當前位段的位長度(位)并初始化關鍵值掩碼,根據當前位段的位長度,設置對應的關鍵值掩碼,計算當前位段的關鍵值,獲取當前位段關鍵值字符串和實際物理意義字符串,實例化正則表達式匹配類并進行匹配,匹配成功,將匹配結果存入關鍵值列表,匹配失敗,跳出循環,遍歷關鍵值列表和實際物理意義列表,解析位成員項數據,計算位成員項列表數據,屏顯數據轉換成指定格式的字符串值并顯示在對應的控件中。
只要數據接口中有對應協議格式的數據流傳輸,軟件便會自動將數據內容匹配解析并顯示在主界面中對應的數據顯示區域內。同時,軟件也會自動將接收到的數據保存為數據文件,包括數據流原始數據與解析后的數據幀。
該文對某型慣性導航系統進行驗證,通過本系統作為數據采集向終端設備發送命令,接收、解析并保存終端設備上發出的數據。終端設備可成功接收到來自本系統的數據和指令,且本系統可以接收到終端設備傳輸的數據且解析成功,并將解析的數據通過客戶端進行展示,如圖8所示。

圖8 某型組合導航系統驗證展示
該文對通用的協議組包和解析原理進行了深入的分析與研究,設計了一種通用串口數據協議解析與顯控系統,系統可以在較大程度上提高串行接口數據解析相關領域的工作效率,降低了其技術門檻,真正意義上實現了協議與軟件的分離。對任意一種新數據協議,該通用數據解析平臺實現了不修改源程序代碼,可以接收到不同的系統的數據輸出,并進行顯示。程序與導航系統、測量設備進行了實際的測試,實踐證明,正確配置協議文件之后,都能收到正確的數據結果。用戶使用該系統時,按照協議正確填寫配置信息后,便能夠與系統進行通訊。在設備驗收與測試中, 具有很強的通用性。