胡亞楠
(鶴壁職業(yè)技術(shù)學(xué)院,河南 鶴壁 458030)
隨著車(chē)聯(lián)網(wǎng)、智能汽車(chē)以及無(wú)人駕駛技術(shù)的飛速發(fā)展,汽車(chē)電器之間已不再是點(diǎn)對(duì)點(diǎn)之間的通信,整個(gè)汽車(chē)形成了一個(gè)車(chē)載網(wǎng)絡(luò)。這樣的背景下,對(duì)汽車(chē)元器件之間的傳輸速率和信息量要求提高,信息交換成為難題。CAN 總線(xiàn)在汽車(chē)領(lǐng)域應(yīng)用廣泛,技術(shù)成熟,可靠性強(qiáng),為解決上述問(wèn)題提供了可能。
軟件的設(shè)計(jì)需要穩(wěn)定、高效且便于維修,同時(shí)最大可能地降低成本。CAN 通信需要網(wǎng)絡(luò)進(jìn)行通信,而物理層、鏈路層以及應(yīng)用層都有不同的協(xié)議,這些協(xié)議規(guī)范了傳遞的策略。
CAN 軟件的設(shè)計(jì)要考慮到系統(tǒng)的擴(kuò)展性。良好的擴(kuò)展性可以極大地提高系統(tǒng)的兼容性和共享性。該系統(tǒng)主要參考SAE J1939 對(duì)CAN 總線(xiàn)的各個(gè)層級(jí)進(jìn)行了定義,同時(shí)參考SAE J1939 的編碼規(guī)則對(duì)各個(gè)節(jié)點(diǎn)進(jìn)行軟件設(shè)計(jì)。
通常情況下,節(jié)點(diǎn)采用模塊化編程設(shè)計(jì),通過(guò)模塊的編輯生成系統(tǒng)文件,然后通過(guò)指令進(jìn)行調(diào)用即可。在進(jìn)行軟件設(shè)計(jì)時(shí),需要用到相關(guān)的函數(shù),現(xiàn)介紹相關(guān)的程序函數(shù)。
1.1.1 接收子函數(shù)
子函數(shù)通常將信息儲(chǔ)存于單片機(jī)中,當(dāng)需要使用時(shí)調(diào)取相關(guān)程序即可[1]。
1.1.2 發(fā)送子函數(shù)
發(fā)送子函數(shù)是發(fā)送控制器所需要的數(shù)據(jù)[2]。系統(tǒng)狀態(tài)出現(xiàn)空閑時(shí),信息將自動(dòng)進(jìn)入主程序。
需要及時(shí)監(jiān)控車(chē)身電器的狀態(tài),那么可以采用編程的方式進(jìn)行程序控制。開(kāi)關(guān)狀態(tài)要通過(guò)單片機(jī)進(jìn)行信息處理,需要監(jiān)測(cè)相應(yīng)的開(kāi)關(guān)信號(hào)進(jìn)行判斷。輸入輸出的狀態(tài)需查詢(xún)CAN 線(xiàn)的運(yùn)行狀態(tài)。開(kāi)關(guān)節(jié)點(diǎn)需要通過(guò)相應(yīng)的代碼進(jìn)行編程記錄,而其主程序主要分為兩部分:一是檢查狀態(tài);二是將目前的狀態(tài)進(jìn)行信息傳遞。
輸入節(jié)點(diǎn)流程[3]、輸出節(jié)點(diǎn)流程[4]以及網(wǎng)關(guān)節(jié)點(diǎn)流程[5],分別如圖1、圖2 和圖3 所示。
SJA1040 的初始化是系統(tǒng)子程序的一部分,也是通信的關(guān)鍵部分。SJA1040 是將有用的信息轉(zhuǎn)換成CAN 線(xiàn)系統(tǒng)可以識(shí)別的格式,并傳至CAN 總線(xiàn)。信息傳遞有不同的域,但都需要有開(kāi)始域。開(kāi)始域意味著信息傳遞的開(kāi)始,也就是所謂的傳輸初始化。在信息傳遞過(guò)程中,還有傳遞模式的選擇、持續(xù)傳遞功能以及中斷功能等。SJA1040 寄存器的分析和設(shè)置如下[6]。
信息地址0。該寄存器為可讀寫(xiě)寄存器,設(shè)置為1 時(shí)為睡眠模式,處于模式3 時(shí)為濾波模式,處于模式2 時(shí)為自檢測(cè)模式,處于模式1 時(shí)為只聽(tīng)模式。
信息地址1。該寄存器為只寫(xiě)寄存器。當(dāng)寄存器為保留位時(shí),對(duì)寄存器沒(méi)有影響。當(dāng)寄存器為0時(shí),系統(tǒng)發(fā)送信息請(qǐng)求到處理器,處理器經(jīng)過(guò)分析處理后傳往信息端。當(dāng)寄存器為1時(shí),信息發(fā)送終止位,可以不考慮該位。當(dāng)寄存器為2時(shí),此為信息緩沖區(qū)。當(dāng)信息量很大時(shí),信息可以進(jìn)行暫時(shí)的緩沖,緩沖后進(jìn)入處理器,后續(xù)發(fā)送指令進(jìn)行工作。當(dāng)寄存器為3 時(shí),此位為信息交換位。由于CAN 線(xiàn)采用的是網(wǎng)絡(luò)通信,因此信息交換呈現(xiàn)網(wǎng)絡(luò)化。當(dāng)有工作指令時(shí),信息會(huì)迅速通過(guò)CAN 線(xiàn)進(jìn)行傳遞[7]。
上位機(jī)為監(jiān)測(cè)的主要數(shù)據(jù)來(lái)源。當(dāng)信息在CAN 總線(xiàn)上傳輸時(shí),上位機(jī)需要監(jiān)測(cè)相關(guān)數(shù)據(jù),從而確定信息傳輸情況。其中,開(kāi)發(fā)環(huán)境的編程采用WPF 編程系統(tǒng)。
WPF 是微軟推出的一款基于Windows 的用戶(hù)界面框架,為軟件設(shè)計(jì)帶來(lái)了無(wú)限可能。自問(wèn)世以來(lái),WPF 深受廣大編程愛(ài)好者的喜愛(ài),為主要的軟件編程系統(tǒng)。WPF 容易上手,操作功能強(qiáng)大,且后期增加了可視化編程語(yǔ)言,可實(shí)現(xiàn)更好的人機(jī)互動(dòng)。因此,下面簡(jiǎn)要說(shuō)明串行通信的初始化定義[8]。
本文提出了一種基于CAN 總線(xiàn)的車(chē)身電器系統(tǒng)的改造方案,完成了軟件設(shè)計(jì),著重介紹了整體的網(wǎng)絡(luò)設(shè)計(jì)、節(jié)點(diǎn)主程序設(shè)計(jì)和子程序設(shè)計(jì)、SJA1040 的初始化以及上位機(jī),能夠最大程度地輔助硬件系統(tǒng)完成整個(gè)系統(tǒng)的運(yùn)行。