王建敏 崔俊鋒 牛道恒
(北京全路通信信號研究設計院有限公司,北京 100073)
一種基于串口通信的高可靠性應用協議設計
王建敏 崔俊鋒 牛道恒
(北京全路通信信號研究設計院有限公司,北京 100073)
為解決串口通信中的數據傳輸容易出錯、可靠性差且容錯能力低等問題,設計并實現一種串口通信高可靠性應用協議,并將此協議應用在列控產品中。首先介紹串口通信協議的數據包格式,通過在數據包格式定義中設置起始標志、數據長度、校驗、結束標志等字段,保證數據傳輸的正確性與可靠性。同時對數據包的組包、接收以及解析方法進行闡述,提出對數據丟失的判斷與處理方法,并對該協議的實時性、正確性和可靠性進行分析。實踐證明,該協議有效提高了串口通信過程的正確性、可靠性以及數據傳輸的容錯能力。
串口通信;高可靠性;列控產品
串行通信接口(如RS-422、RS-232等)作為計算機與單片機的主要接口,廣泛應用于各類儀器儀表、工業監控及自動控制領域中[1]。通信協議是需要通信的雙方所達成的一種約定,它規定了通信雙方必須遵守的數據格式、同步方式、傳送速度、傳送步驟、檢錯方式及控制字符定義等內容。在列控產品應用中,需要設計嚴格、合理、規范的串口通信協議,以保證數據傳輸的可靠性及安全性。提出一種基于串口的安全通信應用協議,在提高通信可靠性及安全性的同時,使通信過程具有較高的容錯能力。
基于串口的高可靠性應用協議設計關鍵點在于數據格式定義、對丟數的判斷與處理以及容錯機制設計。本文基于文獻[2],對數據格式定義與容錯機制設計進行進一步闡述,并提出了對丟數的判斷與處理方法,詳見第3章。
串口通信中最小的信息單元是數據幀。一個幀通常包括起始位、數據位、結束位,另外,還可以包含用于檢測傳輸錯誤的“奇偶校驗位”,每個數據幀中傳輸的數據位可以有5~9個,通常選用8位(1 Byte)為一幀[2]。在實際通信過程中,數據的發送是一幀一幀地進行,當被傳輸的數據超過一幀時,如果沒有對數據幀進行必要的組包,發送出去的數據會很難被數據接收方解釋與分析,進而造成數據傳輸混亂與錯誤。因此,在通常應用中必須將數據幀組合成數據包再發送。為了保證數據傳輸的正確性,將數據包定義為如表1所示格式。

表1 應用協議數據包格式
*起始標志表示接收到一個新的數據包,該協議規定為0x7E。
*數據長度為整個數據包的字節數。設置此字段,可方便接收方識別數據包的長度并能夠準確接收和處理數據包。
*命令用來說明數據包的用途或功能。*附加數據根據命令的不同,含義不同。*校驗是對命令字段與附加數據字段的所有字節進行校驗。
*結束標志表示數據包結束,本協議規定為0x7F。
實際應用中,如果有某數據包需要被發送,則可以按照表1格式進行組合。通常命令字段取值應避免使用0x7E與0x7F,數據長度一般約為幾十Byte,因此選用0x7D作為轉義符。當附加數據字段中遇到有效數據為0x7D、0x7E、0x7F時,要對這幾個字節做轉義處理。具體做法是:把該字節擴展為2 Byte,以轉義符125(0x7D)起始,下一個字節是該字節和0x20的異或值。
例如數據發送方有如下原始數據需要發送:
*命令字段取值為0x01。
*附加數據字段為3 Byte,依次為0x7D,0x7E,0x02。
*假設校驗后得到的校驗字段取值依次為0x7F,0x03。
則組包后的原始數據包格式如表2所示(均以16進制數表示)。
太和醫院始建于1965年,如今已然成長為四省(市)交界地綜合實力最強的一家三級甲等醫院,醫院服務能力輻射周邊40多個縣市區。

表2 原始數據包格式
因為原始數據中,附加數據字段存在需要轉義的0x7D與0x7E,校驗字段存在需要轉義的0x7F,因此需對這些字節進行轉義。0x7D轉義后變為0x7D 0x5D;0x7E轉義后變為0x7D 0x5E; 0x7F轉義后變為0x7D 0x5F。由于轉義后整個數據包增加了3 Byte的轉義符(0x7D),因此數據長度需要由9變為12。轉義后的數據包格式如表3所示(均以16進制數表示),數據發送方應以如下格式將該數據包通過串口發送給數據接收方。

表3 轉義后數據包格式
根據上述分析,數據包發送流程如圖1所示。

圖1 數據包發送流程圖
3.1 完整數據的數據包接收
如果在數據傳輸過程中,未發生丟數現象,則接收方可以完整地接收到發送方所發送的數據,該種情況的處理較為簡單,可以直接進行數據包的解析,詳見下述第4章節。
3.2 存在丟數的數據包接收
串口通信中偶爾會發生丟數現象,根據丟失的字段不同,對應處理方法也不同,分為以下幾種情況。
*起始標志丟失的判斷與處理
結束標志先于起始標志被數據接收方接收到,則說明起始標志丟失。該種情況因無法判斷數據包的起始標志,數據接收方應將在收到起始標志前收到所有數據全部丟棄。
當連續收到兩個起始標志時,說明與第一個起始標志對應的結束標志丟失。該種情況因無法判斷與第一個起始標志對應的結束標志,數據接收方應將接收到第二個起始標志前的所有數據均丟棄,并等待接收與第二個開始標志相對應的結束標志。
*其他數據丟失的判斷與處理
除起始標志與結束標志外,如果其他數據發生丟失,則會導致接收方所收到的校驗值,與發送方所發送的檢驗值不同。該種情況可根據具體應用,采取不同處理方式,如容忍一定次數后使系統重啟,或直接使系統重啟。
根據上述分析,數據包接收流程如圖2所示。
當數據接收方接收到起始標志與結束標志后,則認為起始標志與結束標志間的數據為一包有效數據,需對該包數據進行解析。如果整個數據包中不存在轉義字符,則說明該數據包未進行轉義,直接按照數據包定義格式解析即可;如果數據包中存在轉義字符,則需對轉義字符后的數據進行轉義,使其轉義為原始值。待需要轉義數據全部完成轉義,并更新數據包長度后,再按照數據包定義的格式進行解析。
下面以第2章中表3數據為例進一步說明。表3中附加數據字段中存在需要轉義的0x5D與0x5E字節,同樣以異或0x20的方式進行轉義后,其值為0x7D與0x7E;校驗字段中存在需轉義的0x5F字節,轉義后其值為0x7F。完成轉義的同時,需去掉轉義符0x7D,并更新數據長度。根據上述過程,對所有需要轉義字節進行轉義操作后,便可得到數據發送方所發送的原始數據,如第2章中表2所示。
根據上述分析,數據包解析流程如圖3所示。
串口通信過程中,偶爾會發生丟數現象,根據第3.2節分析,無論哪種情況發生,都會導致數據接收方無法正確獲取與解析到數據發送方所發送數據,進而會導致通信異常,影響協議可用性。為避免該種情況發生,提高協議可用性,協議制定需考慮重發機制,并設置定時器。對關鍵數據包,數據發送方發送數據包后,需在規定時間內收到針對該數據包的對方確認信息。如果超過規定時間還未收到對方確認信息,則數據發送方需重發該包。根據具體應用,可以設置重發次數,如重發一定次數后,認為系統故障,使系統重啟。容錯機制實現流程如圖4所示。

圖4 容錯機制流程圖
6.1 實時性
串口通信的實時性與通信雙方的波特率設置有關。一般應用中波特率設為9 600 bit/s,即大約每ms傳輸一個Byte即可。按照一包數據幾十個Byte計算,則傳輸一包數據約需幾十ms,具有良好的實時性,可以滿足通常應用需求。
6.2 正確性
該協議的數據包格式定義了起始標志、結束標志、數據長度字段、命令字段、校驗字段以及轉義符,同時還設計了容錯機制。通過該協議數據包格式定義與第3章節的分析可知,該協議可保證通信數據的正確性。
6.3 可靠性
通過該協議,通信雙方可以及時對數據丟失、數據錯誤等情況進行處理。對起始標志與結束標志丟失或錯誤的情況,可以通過容錯機制進行處理;對于其他字節丟失或錯誤的情況,可以通過校驗計算檢測到并進行相應處理。通過該協議數據包格式定義與第3章節的分析可知,該協議具有高可靠性,可以滿足通常應用需求。
在列控產品中,串口是各設備間較為常見的連接方式之一。本文介紹了一種基于串口的高可靠性應用協議設計方法。該設計方法已經應用到某列控產品中,經過實踐和分析證明,該協議是一種有效的、可靠的數據傳輸方法,可以滿足列控產品的高可靠性要求。同時,對其他領域需要串口通信的設備/產品的應用協議制定具有重要的借鑒意義。
[1]李瑩,賈彬.串口通信協議的設計與實現[J].電子設計工程,2012,20(7):100-103.
[2]運基信號[2006]312號 調度集中車站自律機與計算機聯鎖接口通信協議[S].
In order to solve the problems of the data transmission easily going wrong, poor reliability and fault-tolerance in serial communication, this paper presents the design of a high-reliable serial communication application protocol used for train control products. The paper presents the design of the serial communication protocol data packet format for ensuring the correctness and reliability of the data transmission through setting the start fl ag, data length, calibration and end fag in the format defi nition. At the same time, it sets forth the data packet package, receiving and analyzing methods, puts forward the judgment and processing methods of data loss, and analyzes the real-time feature, accuracy and reliability of the protocol. The practice shows that this protocol can effectively improve the correctness, reliability and the fault tolerance ability of the data transmission in serial communication process.
serial communication; high reliability; train control product
10.3969/j.issn.1673-4440.2015.01.001
2014-10-23)
鐵路總公司重點項目(2013X001-C);鐵路總公司重大課題(2003B001-A-1)