在航空電子系統中RS422是一種常見的異步串行總線,可同時實現互連設備雙方的發送與接收,且靈活、簡單、可移植性強。然而由于RS422總線對傳輸數據缺少限制,數據格式多變,在異步傳輸的過程中極易出現數據不完整、丟包、錯誤解析等情況。文章針對這一問題提出了一種RS422總線通信數據管理及解析方法,針對不同格式的數據,設計出通用的解包算法。該方法在機載系統多型產品中實際運用,總線通信穩定有效。
關鍵詞:RS422總線;數據管理;解包算法
RS422總線采用差分傳輸方式,具有全雙工的特性,即具有4根信號線,接收發送互不干擾。通信雙方在同一周期內完成數據互換,根據指定長度即可獲取正確的數據包。然而當雙方設備的任務周期出現偏差,底層數據接收晚于上層應用調度時,常常會出現半包數據丟失,找不到包頭包尾等問題[1]。RS422總線普遍應用于各類場景,其包頭、包尾、校驗位、計算方式、長度等多變且難以統一[2],甚至消息數量也存在不確定性,不同應用需求導致開發者多次重復開發,費時費力,沒有形成一套統一的配置管理方法。電子通信環境復雜,總線數據傳輸可能出現偶發干擾,從而引入非正常數據[3],因此組包過程需要具備一定的抗冗余能力,保證在不丟包的基礎上正確解析[4]。
1串行通信協議
UART是一種異步全雙工串行通信協議,因為沒有參考時鐘信號,所以通信的雙方必須約定串口波特率、數據位寬、奇偶校驗位、停止位等配置參數,從而按照相同的速率方式進行通信。異步通信以一個字符為傳輸單位,通信中兩個字符間的時間間隔是不固定的,然而在同一個字符中的兩個相鄰位的時間間隔是固定的,可通過波特率進行設置,即每秒傳送的二進制位數。每一個傳送字符包含1個起始位,8個數據位,1個奇偶校驗位,1個停止位,如圖1所示。圖1串行通信協議數據格式在實際通信中,起始位常發送一個邏輯“0”信號,表示傳輸字符的開始。數據位可以是8位的邏輯“0”或“1”,一般采用小端傳輸,即LSB先發,MSB后發。在數據位后加上奇偶校驗位,使得字符中邏輯“1”的位數為偶數(偶校驗)或奇數(奇校驗)。停止位是一個字符的結束標志,可以是1位、1.5位、2位的高電平,用于保持雙方同步,停止時間間隔越長,傳送的容錯能力就越強。針對上述協議,RS422總線的初始化配置至少應包含表1內容,其中循環標志設定了總線的工作狀態。
2數據管理配置
根據串行通信協議特點,針對不同應用進行統一的開發管理,本文對RS422總線的收發數據進行了如下配置,詳見表2,具體包括通道號、消息標識、包長、包頭、包尾、校驗類型、停止位等,可采用結構體的形式在初始化階段進行配置。需要說明的是,表2為應用層數據設置,上述表1位傳輸協議配置。開發者可根據自身需求,對各配置項進行裁剪增添。RS422總線是在RS232總線基礎上發展而來的,不同于RS232總線點對點的通信規范,RS422總線支持同一線路單機發送、多機接收,且其特有的電氣特性使傳輸距離和傳輸速率得以提升。“一對多”式通信協議不僅可以提升傳輸效率,還能在一定程度上節約網絡資源,此時就需要對軟件的收發通道進行合理編號,用以區分不同的發送源數據。另外,通過設置消息標識符,接收方可對消息進行篩選,有目的地進行數據包解析。包長、包頭、包尾限定出一個完整的數據段,校驗和則用于保證數據的正確性,防止因受干擾而出現數據錯亂,一般有加和及補碼兩種方式。
3數據收發流程
發送數據時,首先利用表2中的發送結構體進行數據配置,設置包頭、包尾、標識符、消息長度等相關信息,然后根據校驗類型,向待發送數據包填寫校驗和,最后調用發送驅動,讀取UART線狀態寄存器,當發送FIFO存儲器不為空時保持等待,直到條件滿足后逐字節寫入發送保持寄存器。數據接收過程涉及數據存儲、整合、解析、組包等,具體流程見圖2。首先應判斷當前通道接收的消息數量是否單一,若單一則直接獲取序號,進行接收解包流程,若不為一,則需通過標識位判斷是否為目標消息。在確認待接收數據為目標消息后,根據包頭、包長、校驗位等進行解包,解包算法詳見下一章節。
4數據解包算法
本節以某型直升機機電系統RS422總線通信為背景,介紹一種普適性較高的解包算法,開發者可根據實際應用中的數據特性,進一步細化。首先建立一個適當容量的環形緩沖區,軟件實現可采用結構體,包含讀、寫指針,一維數組,數組長度,并在讀寫過程中循環遍歷數組元素。由于RS422總線是異步串行通信,收發時差可能導致數據缺失,故需要將每周期接收到的數據依次存放在環形緩沖區,并在接收數據長度大于目標數據長度后,進行搜索解包。環形緩沖區利用寫指針進行存儲,讀指針進行解析,解包成功后讀指針將跳過當前數據包,以避免重復解析,如此循環首尾相接。圖3所示為環形緩沖區,目標包頭為0xAA55,標識位0x01,消息長度0x08,check為補碼校驗位。當環形緩沖區(a)的數據長度大于目標數據包長度時,開始從strat處搜索解包,讀取前4個字節,讀指針移動見(b),依次判斷包頭、字節長度是否正確,若正確則進行校驗和計算,讀指針移動至(e),根據校驗結果取出或丟棄當前數據包。當包頭判斷錯誤時,讀指針需要回退3個字節,如(c)所示,此時需要考慮0xAAAA55的情況。當包頭正確,字節長度錯誤時,讀指針需要回退2個字節,如(d)所示,此時需要考慮0xAA55AA55的情況,以避免丟包。當接收消息不唯一時還需要判斷標識位,同理可利用上述方法,但需要注意讀指針回退的字節長度。另外,環形緩沖區每次寫入和讀出都需要判斷是否發生溢出,即讀、寫指針移動到存儲數組的最后一個字節時,返回起始strat位置,重新開始下一輪的解析。
5結語
本文研究了一種RS422總線通信數據管理及解析方法,對使用RS422總線遇到的常見問題進行了分析,并針對接收丟包、重復開發、缺乏統一管理等問題設計了一套通用的管理解析方法。依次介紹了數據管理配置、發送接收流程以及解包算法。經實際工程驗證,該方法有效解決了丟包等問題,并在一定程度上提升了開發效率,可應用于不同的需求場景。
參考文獻:
[1]姬進.一種通用可配置RS422總線管理技術[J].電子測試,2018,000(003):164-165.
[2]邢達波,艾波.機載RS422總線采集技術應用研究[J].中國科技信息,2016,000(021):73-74.
[3]邢達波,李鐵林,艾波.機載RS422總線數據異常分析研究[J].中國科技信息,2017(2):28-29.
[4]王彥慶,寧亞峰,谷計劃.淺論機載RS422總線采集技術應用研究[J].工程技術(引文版),2017(1):00312-00312.
作者:宋丫 寧慧君 白曦
相關論文