李青濤,錢楓,3,王明達,王潔,祝能,王超
(1.430081 湖北省 武漢市 武漢科技大學;2.100012 北京市 中國環境科學研究院;3.264207 山東省 威海市 山東鳴川汽車集團有限公司)
隨著對重型車污染物排放監管力度的加大,國家生態環境部發布的GB 17691-2018《重型柴油車污染物排放限值及測量方法(中國第六階段)》明確規定所有國Ⅵ車型必須安裝OBD 車載終端,使用SAE J1939、ISO 15765、ISO 27145 通信協議實現OBD 車載終端與車輛CAN 總線的通訊,對發動機尾氣排放狀況進行實時監控和故障診斷[1]。
由于各個主機廠采用的通信協議類型不盡相同,致使不同車型的通信參數配置也存在較大差異[2]。整車各控制域CAN 通道通信參數一致時,車載終端系統可以快速配置相同的通信參數并實現通信,但是由于車型更新、配置升級、網絡結構優化等需求變化,整車各控制域通信機制也不斷調整,導致單個車輛的多通道CAN 總線可能存在不同的波特率、通信協議,車載終端若無法實現通信協議自適應,將導致其與車輛ECU 通訊失敗,無法起到OBD 車載終端的實時監控診斷功能[3]。目前存在的CAN總線轉換器多數是協議轉換或者是波特率轉換,功能單一,不能對CAN 總線各通信參數進行較完整的識別,且應用于車載終端系統,不僅增加成本,而且也會降低數據傳輸效率和增加誤碼率[4-5];汽車OBD 診斷儀可以識別車輛各種通信參數,但是需要手動選擇匹配,使得量產的車載監控終端安裝使用更為繁瑣。
針對當前國Ⅵ重型車適配的OBD 車載終端對CAN 總線波特率和協議類型不能進行自動識別,為了提高終端的通用性、兼容性和自適應性,設計了一種CAN 總線協議自適應算法。該算法首先通過輪詢法對CAN 總線的波特率進行準確識別;其次利用協議通信模式特征和數據包特征字符對車輛各CAN 通道總線通信協議類型進行自動識別,相對于單一的識別算法,該算法識別率和準確率更高,可以快速匹配車輛總線并進行可靠的數據通信。
OBD 車載終端遵循模塊化設計原則,旨在降低整體設計復雜程度[6]。車載終端通過CAN 數據采集模塊采集車輛實時運行數據、診斷數據、狀態參數以及其他需求信息,經加密簽名后,利用2G或4G 無線通信模塊按照國Ⅵ標準規定的通信協議上傳于網絡平臺。圖1 是終端系統硬件架構,MCU選用國產芯片GD32F403RC,負責整個系統的運行調度,具有低功耗、高集成度和高性能的特點。

圖1 終端系統結構示意圖Fig.1 Schematic diagram of terminal system structure
CAN 控制器與車輛CAN 總線的硬件連接如圖2 所示。CAN 收發器采用恩智浦公司的TJA1042 芯片,控制車輛CAN 總線信號采集工作。CAN 收發器與車輛上的CAN 總線之間采用雙絞線形成的差分信號進行異步串行通信,依靠收發器中的位定時寄存器對總線電平分位,進而實現波特率設置;利用CAN 總線協議實現數據的穩定傳輸[7-8]。

圖2 終端CAN 模塊與車輛通信示意圖Fig.2 Schematic diagram of terminal CAN module and vehicle communicationstructure
波特率參數配置在CAN 數據采集模塊的底層驅動中進行設置,根據波特率的計算公式(1)-(6),只需要合理設置BAUDPSC、BS1 和BS2 三個參數的值即可改變CAN 波特率。
式中:BaudRate——波特率;Bit_Time——位時間;tSYNC_SEG——同步段占用時間單元;tBS1——位段1總時間單元;tBS2——位段2 總時間單元;tq——最小時間單元;tpclk1——總線系統時鐘周期;BS1、BS2——位段1、位段2;BAUDPSC——CAN 總線系統時鐘預分頻系數。
MCU 內部集成的CAN 控制器功能模塊有3 種工作狀態:初始化狀態、正常通訊狀態和睡眠狀態,通信過程中處于正常通訊狀態。寄存器CAN_INTEN 是CAN 中斷使能寄存器,控制各個中斷使能位,如圖3 所示。其中位2 和位5 分別是接收FIFO0 和FIFO1 滿中斷使能位,1 使能,0 禁用;位15 為錯誤中斷使能位,1 使能,0 禁用。在CAN 處于正常通訊狀態時,分別使能寄存器CAN_INTEN 位2、位5 和位15,讀取CAN_RFIFO0 接收FIFO0 寄存器、CAN_RFIFO1 接收FIFO1 寄存器和CAN_ERR 錯誤寄存器的狀態值,判斷當前波特率是否正確。

圖3 CAN_INTEN 中斷使能寄存器Fig.3 CAN_INTEN interrupt enable register
汽車CAN 總線上廣泛使用高速CAN:250 kB/s和500 kB/s[9],考慮到車載終端與車輛匹配使用的特性,車載終端僅需要檢測車輛總線上這2 種波特率即可。波特率自適應流程如圖4 所示,在自動識別波特率過程中,控制器不斷讀取錯誤寄存器的狀態值并進行判斷,若有錯誤中斷發生,說明當前波特率不正確,錯誤寄存器累加計數,當計數值大于設定的錯誤報文閾值時,設置波特率參數,切換波特率;若無錯誤中斷發生,說明當前波特率正確,波特率匹配成功。

圖4 波特率自動識別圖Fig.4 Baud rate automatic identification diagram
協議類型主要通過不同協議通信模式特征進行區分。SAE J1939 協議、ISO 15765 協議和ISO 27145 協議均以開放式系統互聯參考模型為基礎進行制定,相比OSI 的7 層協議,3 種診斷協議在物理層、數據鏈路層、網絡層和應用層進行詳細規定,并且各有不同,總線通信機制也具有很大差別[10-13]。如圖5所示,對于SAE J1939 協議,通訊報文多以廣播形式發送于CAN 總線,對于特定需求的消息報文,需要節點請求相應PGN 來獲取;對于ISO 15765 協議和ISO 27145 協議,所有通信報文是基于請求-回復型的通信機制,需要節點周期間隔性請求信息才能獲取數據。因此,根據總線上報文通信模式特征即可區分是廣播型SAE J1939 協議還是請求-回復型ISO 15765 或ISO 27145 協議。

圖5 廣播型協議和請求-回復型協議消息傳輸機制對比Fig.5 Comparison of broadcast and request-reply protocol message transmission mechanisms
如表1 所示,可以根據各協議通信模式特征的不同,先區分出廣播型協議和請求-回復型協議。對于廣播型協議如SAE J1939 協議,車輛各個電控節點會周期性向CAN 總線上發送數據,當波特率匹配一致時,終端會接收到相應報文,終端以此來初步區分廣播型和請求-回復型協議。

表1 通信模式特征區分Tab.1 Communication mode feature distinction
對于請求-回復型協議ISO 15765 協議和ISO 27145 協議,利用特征字匹配算法對數據流中的凈荷內容的更深層次的掃描和匹配,識別數據報文中的指紋信息,與已定義的特征字進行匹配比對,進而確定協議類型。ISO 27145 協議雖然基于ISO 15765 協議制作,但是兩者在一些固定的參數標識符上存在較大不同,因此可以根據靜態特征標識符進行區分[14],ISO 15765 協議和ISO 27145 部分服務標識符SID 和參數標識符PID 對比如表2 所示。

表2 ISO 15765 協議和ISO 27145 部分SID 和PID 對比Tab.2 Comparison of partial SID and PID between ISO 15765 protocol and ISO 27145
依據不同數據流的傳輸規則,特征字匹配識別存在單幀識別與多幀識別的差別,單包識別通過單幀報文匹配即可確定協議類型,多幀報文匹配則需多次檢驗比對才能準確辨別協議類型。本文特征字匹配識別主要考慮多幀報文的識別,報文特征字匹配處理流程如圖6 所示,通過逐包分析和匹配的識別技術,對CAN 總線協議能做到比較準確的識別。

圖6 特征字匹配處理流程Fig.6 Feature word matching processing flow
自適應算法的核心思想是根據車輛上多通道CAN 總線通信參數的差異動態匹配車載監控終端的波特率和通信協議,各通信參數配置格式如表3所示。

表3 CAN 總線通信參數配置Tab.3 CAN bus communication parameter configuration
式中n 與m 均為自然數。可知共有24 種組合方式,但由于SAE J1939 只有擴展幀格式,實際上只需考慮20 種匹配方式。
CAN 總線協議自適應算法實現流程如圖7 所示。具體步驟:(1)在終端啟動自檢后,會從FLASH 配置區讀取保存的協議檢測狀態參數,若協議已經檢測成功,則直接省略檢測步驟;若未檢測成功,則開始初始化CAN 通信參數,執行協議檢測程序。(2)車載終端在尚未確定車輛總線各通信參數的情況下處于監聽檢測模式,終端在規定時間內循環監聽檢測各通道上的報文信息。(3)檢測各通道總線上是否有接收錯誤產生或者數據格式不正確或未接收到數據,如果有則表示當前波特率不匹配或協議錯誤或者總線處于空閑狀態;反之,說明當前通信通道波特率、協議類型及數據幀類型與車輛上通信參數一致。(4)若協議檢測成功,則保存當前通道的通信參數,該通道可正常通信;若還未檢測成功,則輪詢切換協議及波特率類型,直至匹配成功為止。

圖7 CAN 總線協議自適應算法實現流程Fig.7 CAN bus protocol adaptive algorithm implementation process
為提高協議檢測效率,進行以下優化:(1)依據CAN 總線波特率使用廣泛性,各通信通道的波特率默認設置為250 kB/s。(2)由于重型汽車多采用SAE J1939,故終端初始匹配的各通道協議類型均為SAE J1939。(3)自適應算法是利用輪詢遍歷方式進行檢測參數,參數檢測時間需設定上限,該項服務時間必須考慮總線信息訪問沖突、信息傳遞延時時間[15]、報文優先級及周期性報文時分調度等因素的影響,保障各個檢測部分的公平性[16]。(4)考慮到檢測過程中的軟硬件運行環境變化,設置循環檢測次數上限,到達次數上限后終端自動重啟,重新開始循環檢測,提高正確匹配性能。(5)為進一步增強OBD 車載終端的CAN 總線協議的自適應性能,對于終端出廠后未配置任何通信參數、外界干擾導致終端和車輛通信異常、車輛升級或其他原因導致總線波特率改變等特殊情況,軟件設計中加入了總線通信參數實時判斷并配置功能。
對OBD 車載終端的CAN 總線協議自適應算法實驗驗證主要利用的工具有車載24 V 電源、周立功CAN 適配器、PC 機、車載終端、仿真器和串口線束及其他線束,用CANTest 測試軟件和SecureCRT調試終端對車載終端中CAN 總線協議自適應狀態進行記錄。實驗之前,將電源、CAN 適配器、PC 機、車載終端、仿真器和串口線束連接可靠。
以重型柴油車為測試對象,針對不同車型進行測試,進一步觀察OBD 車載終端的CAN 總線協議自適應性能。終端在車輛上安裝成功后,對多通道的CAN 總線協議進行自動識別。結果表明,OBD車載終端的CAN 總線協議自適應模塊能正常滿足功能需求,實現與車輛總線協議可靠匹配,其中兩通道上的SAE J1939 協議和ISO 15765 協議自適應實驗環境和日志信息如圖8、圖9 所示,實驗結果和實車各通道總線協議一致。

圖8 實驗環境Fig.8 Lab environment
(1)本文在重型車適配的OBD 車載終端基礎上設計了一種CAN 總線協議自適應算法。通過對CAN 總線波特率輪詢識別、協議通信模式特征識別和特征字匹配識別等多種識別方法的結合大大提高了協議的識別率和準確率,利用CAN 總線協議自適應算法使終端對車輛總線通訊參數具備自動識別能力,進一步優化了OBD 車載終端的應用性能。
(2)實驗結果表明,應用CAN 總線協議自適應算法后的OBD 車載終端能在不同通道上完成各通信參數的自動識別,并可識別多種CAN 總線通信協議,實現快速匹配,適應多樣化的需求。算法系統具有較高的穩定性和實用性,大大提高OBD車載終端的實際使用性能和應用范圍。
(3)本文設計的CAN 總線協議自適應算法已廣泛應用于雄安、煙臺、義烏、西寧、杭州等地重型車的OBD 車載終端,并與山東凱馬汽車制造有限公司深度合作。實踐表明,OBD 車載終端應用CAN 總線協議自適應算法,很好地解決了重型車上出現的多通道通信參數不同導致車載終端與車輛總線適配困難的問題,具有顯著的工程實踐意義。