鄒慶勇, 龔元明
(上海工程技術(shù)大學(xué) 機(jī)械與汽車工程學(xué)院, 上海 201620)
隨著人們對(duì)汽車的動(dòng)力性、經(jīng)濟(jì)性、安全性、舒適性的要求越來(lái)越高,汽車用電子控制單元要實(shí)現(xiàn)的功能也日趨復(fù)雜,導(dǎo)致生產(chǎn)周期加長(zhǎng),生產(chǎn)成本提高。 目前,在開發(fā)汽車電子控制單元時(shí),比較常用的方式是采用硬件在環(huán)技術(shù),根據(jù)預(yù)定目標(biāo),快速構(gòu)建控制模型,通過(guò)硬件在環(huán)仿真不斷測(cè)試優(yōu)化,以得到所需控制策略。 控制策略執(zhí)行效果的監(jiān)測(cè)對(duì)ECU開發(fā)非常重要,有助于控制策略的參數(shù)標(biāo)定。 如果能實(shí)現(xiàn)遠(yuǎn)程向硬件在環(huán)系統(tǒng)中的控制器下載控制策略,實(shí)時(shí)監(jiān)測(cè)控制策略的執(zhí)行效果以及對(duì)控制策略相關(guān)參數(shù)進(jìn)行標(biāo)定,將極大提高汽車控制器硬件在環(huán)臺(tái)架的利用率和汽車ECU 的開發(fā)效率,因此,針對(duì)控制策略執(zhí)行效果的實(shí)時(shí)監(jiān)測(cè),本文提出了一種基于GPRS 和CAN 總線的整車控制策略遠(yuǎn)程監(jiān)測(cè)系統(tǒng),支持遠(yuǎn)程創(chuàng)建測(cè)試用例、開展測(cè)試和測(cè)試數(shù)據(jù)的實(shí)時(shí)傳輸。 介紹了整車控制策略遠(yuǎn)程監(jiān)測(cè)系統(tǒng)的組成和功能,主要描述了現(xiàn)場(chǎng)監(jiān)測(cè)終端和服務(wù)器的通信軟件設(shè)計(jì)。
整車控制策略遠(yuǎn)程測(cè)試系統(tǒng)可以作為傳統(tǒng)汽車硬件在環(huán)系統(tǒng)的補(bǔ)充,可以借助云端數(shù)據(jù)庫(kù)實(shí)現(xiàn)汽車控制策略測(cè)試方案的快速制定,通過(guò)網(wǎng)絡(luò)快速傳輸測(cè)試數(shù)據(jù)到現(xiàn)場(chǎng)監(jiān)測(cè)終端實(shí)施測(cè)試方案,并將測(cè)試結(jié)果上傳云端服務(wù)器和客戶端以便于數(shù)據(jù)的長(zhǎng)期存儲(chǔ)和結(jié)果分析。 整車控制策略測(cè)試方案的快速制定、快速實(shí)施和快速分析將縮短汽車控制策略的監(jiān)測(cè)時(shí)間,縮短控制器的開發(fā)周期。
該通信系統(tǒng)包括整車控制器硬件在環(huán)測(cè)試平臺(tái)、測(cè)試終端、云端服務(wù)器和網(wǎng)頁(yè)客戶端幾部分。 網(wǎng)頁(yè)客戶端用于顯示硬件在環(huán)臺(tái)架的選擇和測(cè)試方案的制定,云端服務(wù)器包括應(yīng)用軟件和數(shù)據(jù)庫(kù),轉(zhuǎn)發(fā)和存儲(chǔ)網(wǎng)頁(yè)客戶端和測(cè)試終端提交的數(shù)據(jù)。 測(cè)試終端用于臨時(shí)存儲(chǔ)測(cè)試用例并根據(jù)用戶的設(shè)置向硬件在環(huán)測(cè)試平臺(tái)發(fā)送測(cè)試請(qǐng)求和接收測(cè)試響應(yīng),進(jìn)而完成GPRS 模塊的驅(qū)動(dòng)[1]。 數(shù)據(jù)流程見圖1。
圖1 整車控制器遠(yuǎn)程測(cè)試系統(tǒng)數(shù)據(jù)流程Fig.1 Data flow of remote test system for vehicle controller
測(cè)試系統(tǒng)基于GPRS 和CAN 總線,由客戶端、云服務(wù)器和現(xiàn)場(chǎng)設(shè)備終端構(gòu)成,其中云服務(wù)器軟件由2 部分構(gòu)成。 一部分為以Django 為框架制作的網(wǎng)站服務(wù)器軟件,用于與網(wǎng)頁(yè)客戶端的數(shù)據(jù)通信和數(shù)據(jù)庫(kù)數(shù)據(jù)的存取,另一部分是以PyQt5 所編寫的服務(wù)端界面應(yīng)用程序,用于與現(xiàn)場(chǎng)測(cè)試設(shè)備的數(shù)據(jù)通信和數(shù)據(jù)庫(kù)數(shù)據(jù)的存取。 系統(tǒng)結(jié)構(gòu)見圖2。
圖2 整車控制器遠(yuǎn)程測(cè)試系統(tǒng)結(jié)構(gòu)Fig.2 The structure of remote test system for vehicle controller
網(wǎng)頁(yè)客戶端用于創(chuàng)建測(cè)試條例,配置CAN 通信的基礎(chǔ)參數(shù),查詢和下載測(cè)試結(jié)果。 為了實(shí)時(shí)顯示臺(tái)架的使用狀態(tài)和測(cè)試數(shù)據(jù),運(yùn)用了Asynchronous JavaScript and XML(AJAX)技術(shù),可以在異步的情況下去數(shù)據(jù)庫(kù)讀取數(shù)據(jù),然后更新部分網(wǎng)頁(yè)內(nèi)容。AJAX 使用DOM 實(shí)現(xiàn)動(dòng)態(tài)顯示和交互, 通過(guò)XMLHttpRequest 實(shí)現(xiàn)異步數(shù)據(jù)的讀取,有助于減輕服務(wù)器負(fù)擔(dān),減少用戶等待時(shí)間[2]。 網(wǎng)頁(yè)的制作還用到了HTML、CSS、JS 語(yǔ)言,共同完成了用戶的登錄、臺(tái)架選擇、測(cè)試條例的創(chuàng)建和測(cè)試結(jié)果的查詢等功能。 在遠(yuǎn)程測(cè)試時(shí)可以選用云端提供的測(cè)試條例,也可以選擇自己創(chuàng)建測(cè)試條例。 測(cè)試開始后,界面將實(shí)時(shí)顯示測(cè)試結(jié)果,用戶可以在測(cè)試結(jié)束后將測(cè)試結(jié)果下載保存至本地。 測(cè)試臺(tái)架的選擇界面和測(cè)試條例的創(chuàng)建界面見圖3、圖4。
圖3 測(cè)試臺(tái)架選擇界面Fig.3 Web page for choosing a test bench
圖4 測(cè)試條例創(chuàng)建界面Fig.4 Web page for creating test cases
由于Django 具有自帶數(shù)據(jù)庫(kù)訪問(wèn)組件和后臺(tái)管理系統(tǒng)等優(yōu)點(diǎn),構(gòu)成測(cè)試系統(tǒng)客戶端和網(wǎng)站服務(wù)端程序選擇Django 框架開發(fā)。 云端服務(wù)器平臺(tái)采用阿里云服務(wù)器,用于運(yùn)行Django 框架網(wǎng)站項(xiàng)目和PyQt5 應(yīng)用軟件,服務(wù)器軟件選擇性能穩(wěn)定、應(yīng)用廣泛的Apache 服務(wù)器,云服務(wù)器數(shù)據(jù)庫(kù)管理系統(tǒng)采用MYSQL,用于存儲(chǔ)診斷測(cè)試條例的配置信息、測(cè)試條例以及測(cè)試終端測(cè)得的整車控制器響應(yīng)數(shù)據(jù)。 服務(wù)端軟件可實(shí)現(xiàn)多終端設(shè)備的連接和數(shù)據(jù)的解析以及數(shù)據(jù)的存儲(chǔ)。
該測(cè)試終端微控制器采用意法半導(dǎo)體公司推出的STM32F103ZET6 微控制器,為了存儲(chǔ)控制器開發(fā)測(cè)試人員制定的復(fù)雜的測(cè)試條例和測(cè)試結(jié)果,終端采用SD 卡作為存儲(chǔ)模塊。 GPRS 模塊選用了芯訊通公司生產(chǎn)的SIM900A。 微控制器通過(guò)USB-TOCAN 模塊向電腦發(fā)送診斷測(cè)試報(bào)文,同時(shí)接收響應(yīng)報(bào)文存儲(chǔ)于SD 卡內(nèi)并同時(shí)通過(guò)SIM900A 模塊上傳到云端服務(wù)器[3]。 現(xiàn)場(chǎng)測(cè)試終端硬件結(jié)構(gòu)見圖5。
圖5 測(cè)試終端硬件結(jié)構(gòu)Fig.5 Hardware structure of test terminal equipment
遠(yuǎn)程控制器測(cè)試系統(tǒng)整體通信軟件的基本流程如圖6 所示。
圖6 遠(yuǎn)程測(cè)試系統(tǒng)通信軟件流程圖Fig.6 Flow chart of communication software of remote test system
終端軟件采用了模塊化的設(shè)計(jì)思想,主要分為GPRS 模塊、SD 卡存儲(chǔ)模塊、CAN 報(bào)文收發(fā)模塊。這里擬對(duì)此展開研究分述如下。
4.1.1 CAN 初始化程序
CAN 初始化包括3 部分,分別為:模塊初始化、節(jié)點(diǎn)初始化和報(bào)文初始化。 其中,模塊初始化的配置主要是時(shí)鐘頻率的選擇;節(jié)點(diǎn)初始化主要完成節(jié)點(diǎn)和工作模式的選擇以及輸入輸出引腳的設(shè)置;報(bào)文初始化主要完成幀格式、消息體ID 和數(shù)據(jù)長(zhǎng)度的設(shè)置[4]。在設(shè)置波特率和工作模式前,需要設(shè)置CAN_MCR 寄存器的INRQ 位,使CAN 進(jìn)入初始化模式。 此外,還要設(shè)置INRQ 位為0,退出初始化模式。
4.1.2 CAN 報(bào)文收發(fā)模塊程序
CAN 報(bào)文收發(fā)模塊主要完成向CAN 總線發(fā)送測(cè)試請(qǐng)求報(bào)文、接收CAN 總線響應(yīng)數(shù)據(jù)。 STM32F103ZET6 有一個(gè)CAN 控制器,通過(guò)濾波器可以過(guò)濾掉標(biāo)識(shí)符不符的CAN 報(bào)文,從而減少CPU 處理CAN 通信的開銷。
在進(jìn)行簡(jiǎn)單的CAN 初始化后,即可發(fā)送數(shù)據(jù),首先聲明一個(gè)CAN 發(fā)送報(bào)文對(duì)象,設(shè)置標(biāo)識(shí)符、幀類型、數(shù)據(jù)長(zhǎng)度、要發(fā)送的數(shù)據(jù),指定發(fā)送CAN 報(bào)文所使用的CAN 通道開始發(fā)送報(bào)文,循環(huán)檢測(cè)發(fā)送結(jié)束標(biāo)志直至發(fā)送完成。
在接收CAN 報(bào)文時(shí),先要檢查接收標(biāo)志判斷是否有新消息,若有新數(shù)據(jù)則從相應(yīng)的FIFO 中讀取CAN 報(bào)文消息,提取ID、幀類型、數(shù)據(jù)長(zhǎng)度、數(shù)據(jù)等信息,再清除接收標(biāo)志位。
主控制器在接收到響應(yīng)報(bào)文后,將判斷其響應(yīng)類型并記錄接收時(shí)間,將響應(yīng)數(shù)據(jù)、設(shè)備號(hào)和時(shí)間等信息組成一幀數(shù)據(jù)上傳至服務(wù)器。
4.1.3 SD 卡存儲(chǔ)模塊
SD 卡控制器對(duì)SD 卡的初始化和讀寫是通過(guò)借助于SD 總線完成的,SD 總線有數(shù)據(jù)線DATA0~DATA3、命令線CMD 和時(shí)鐘線CLK 等構(gòu)成[5]。 SD 控制器通過(guò)命令線將命令發(fā)到SD 卡以完成某項(xiàng)操作,并接受來(lái)自SD 卡的響應(yīng),分析后進(jìn)行下一步操作[6]。
SD 卡初始化時(shí),首先初始化與SD 卡連接的I/O 配置,上電并延時(shí)一段時(shí)間后發(fā)送CMD0 命令和CMD8 命令,判斷SD 卡是否支持SD 2.0 協(xié)議,此后發(fā)送ACMD41 命令,根據(jù)響應(yīng)判斷是標(biāo)準(zhǔn)容量SD卡、還是高容量的SD 存儲(chǔ)卡[7]。4.1.4 GPRS 模塊網(wǎng)絡(luò)通信程序
ATK-SIM900A 是ALIENTEK 推出的一款高性能工業(yè)級(jí)GSM/GPRS 模塊,支持RS232 串口和LVTTL 串口。 控制器向GPRS 模塊發(fā)送命令是通過(guò)AT 指令完成的,在進(jìn)行通信時(shí)常用到的AT 指令見表1。
表1 GPRS 通信常用的AT 指令Tab.1 AT commands commonly used in GPRS communication
通過(guò)GPRS 傳輸數(shù)據(jù)時(shí),首先確定通信的模式(TCP/UDP),然后通過(guò)AT+CIPSTART 指令發(fā)起連接,連接建立后發(fā)送AT+CIPSEND 指令,成功后再發(fā)送需要傳輸?shù)臄?shù)據(jù)。
GPRS 網(wǎng)絡(luò)通信程序主要負(fù)責(zé)測(cè)試終端和云端服務(wù)器的數(shù)據(jù)交互。 終端設(shè)備啟動(dòng)后,將通過(guò)GPRS 向云端PyQt5 服務(wù)器程序發(fā)起連接請(qǐng)求,建立連接后將終端設(shè)備信息存儲(chǔ)到數(shù)據(jù)庫(kù)以供用戶查詢各終端設(shè)備的狀態(tài)。 在用戶選擇好終端設(shè)備后,終端設(shè)備向云端服務(wù)器發(fā)出查詢用戶是否啟動(dòng)測(cè)試的指令,若用戶沒(méi)有開啟測(cè)試,將循環(huán)查詢,直至收到用戶啟動(dòng)測(cè)試的信號(hào);如果用戶已經(jīng)開啟測(cè)試,就會(huì)發(fā)出查詢用戶創(chuàng)建的測(cè)試用例和CAN 配置信息的指令,并將接收到的數(shù)據(jù)存入SD 卡。 數(shù)據(jù)接收完畢,將SD 卡中的數(shù)據(jù)取出構(gòu)建CAN 請(qǐng)求報(bào)文逐個(gè)發(fā)送至CAN 總線,當(dāng)終端設(shè)備收到CAN 總線的響應(yīng)報(bào)文后,會(huì)通過(guò)GPRS 模塊發(fā)到云端數(shù)據(jù)庫(kù),以便用戶可以即時(shí)查詢分析和下載。 測(cè)試終端和云端服務(wù)器之間的數(shù)據(jù)通信程序如圖7 所示。
圖7 測(cè)試終端和云端服務(wù)器間數(shù)據(jù)通信流程圖Fig.7 Flow chart of data communication between test terminal and cloud server
與現(xiàn)場(chǎng)終端設(shè)備通信部分服務(wù)器軟件用于監(jiān)聽各個(gè)終端設(shè)備的連接請(qǐng)求,連接成功后即可進(jìn)行數(shù)據(jù)的傳輸,且支持多設(shè)備同時(shí)連接和數(shù)據(jù)傳輸。 程序主要流程是首先監(jiān)聽終端的連接請(qǐng)求,當(dāng)有終端成功連接后創(chuàng)建一個(gè)線程單獨(dú)處理和該終端的通信。 該線程等待接收終端的數(shù)據(jù),接收到數(shù)據(jù)之后解析數(shù)據(jù)并執(zhí)行相應(yīng)的操作,主要操作有向數(shù)據(jù)庫(kù)中存入該設(shè)備的信息以表示有新終端建立了連接,在數(shù)據(jù)庫(kù)中刪除該設(shè)備信息用于表示有設(shè)備停止了使用,查詢用戶是否選擇了該設(shè)備以便于決策是否繼續(xù)定時(shí)查詢,從數(shù)據(jù)庫(kù)中取出測(cè)試條例。 軟件的主線程和子線程流程圖如圖8、圖9 所示。
圖8 服務(wù)器程序主線程流程圖Fig.8 Flow chart of main thread of server program
圖9 服務(wù)器程序子線程流程圖Fig.9 Flow chart of main sub-thread of server program
為保證數(shù)據(jù)的可靠傳輸,現(xiàn)場(chǎng)測(cè)試設(shè)備和云端服務(wù)器之間的通信采用TCP Socket 技術(shù),云端服務(wù)器將測(cè)試用例打包發(fā)向現(xiàn)場(chǎng)測(cè)試終端,測(cè)試終端在啟動(dòng)測(cè)試并收到響應(yīng)報(bào)文后會(huì)立即上傳至云端服務(wù)器。
云端服務(wù)器向現(xiàn)場(chǎng)測(cè)試設(shè)備傳輸?shù)臄?shù)據(jù)幀格式見表2。 由表2 可知,云端服務(wù)器向現(xiàn)場(chǎng)測(cè)試設(shè)備傳輸數(shù)據(jù)由設(shè)備號(hào)、數(shù)據(jù)有效個(gè)數(shù)、請(qǐng)求報(bào)文和校驗(yàn)位構(gòu)成。
表2 云端服務(wù)器向現(xiàn)場(chǎng)測(cè)試設(shè)備傳輸?shù)臄?shù)據(jù)幀格式Tab.2 Data frame format transmitted from cloud server to field test equipment
現(xiàn)場(chǎng)測(cè)試設(shè)備向云端服務(wù)器傳輸?shù)臄?shù)據(jù)幀格式見表3。 由表3 可知,現(xiàn)場(chǎng)測(cè)試設(shè)備至云端服務(wù)器傳輸數(shù)據(jù)幀中數(shù)據(jù)塊部分包含一個(gè)請(qǐng)求報(bào)文和一個(gè)響應(yīng)報(bào)文以及每個(gè)報(bào)文的發(fā)送或接受時(shí)間和ID。
表3 現(xiàn)場(chǎng)測(cè)試設(shè)備向云端服務(wù)器傳輸?shù)臄?shù)據(jù)幀格式Tab.3 Data frame format transmitted from field test equipment to cloud server
測(cè)試均在實(shí)驗(yàn)室環(huán)境下完成,終端設(shè)備通過(guò)USB-To-CAN 設(shè)備與電腦相連,電腦運(yùn)行CANTest軟件用于接收和發(fā)送CAN 報(bào)文。 首先運(yùn)行服務(wù)器軟件,打開終端設(shè)備和服務(wù)器建立連接,此時(shí)在網(wǎng)頁(yè)即可看到有新終端設(shè)備在線,選擇該設(shè)備后進(jìn)入創(chuàng)建測(cè)試條例界面,創(chuàng)建完成后點(diǎn)擊開始測(cè)試,則在CANTest 上定時(shí)收到測(cè)試請(qǐng)求報(bào)文,給出響應(yīng)報(bào)文后在網(wǎng)頁(yè)也可以實(shí)時(shí)顯示出來(lái)。 通過(guò)編寫軟件模擬終端設(shè)備向服務(wù)器軟件循環(huán)發(fā)起連接,當(dāng)連接數(shù)超過(guò)300 個(gè)時(shí),終端設(shè)備仍可以正常收發(fā)數(shù)據(jù)且無(wú)明顯網(wǎng)絡(luò)延遲。 測(cè)試結(jié)果和測(cè)試系統(tǒng)實(shí)驗(yàn)實(shí)物如圖10、圖11 所示。
圖10 測(cè)試結(jié)果顯示界面Fig.10 Web page of displaying test result
圖11 遠(yuǎn)程測(cè)試系統(tǒng)試驗(yàn)實(shí)物Fig.11 Test object of remote test system
本文研究的整車控制器遠(yuǎn)程測(cè)試系統(tǒng)采用在網(wǎng)頁(yè)客戶端創(chuàng)建測(cè)試條例,全部發(fā)送到現(xiàn)場(chǎng)終端以后再開始逐個(gè)報(bào)文的發(fā)送,在發(fā)送每幀報(bào)文的同時(shí)記錄發(fā)送時(shí)間,接收到響應(yīng)報(bào)文后也同樣記錄接收時(shí)間并連同對(duì)應(yīng)的請(qǐng)求報(bào)文一起傳輸?shù)皆贫朔?wù)器,以便客戶端查看,避免了傳統(tǒng)從服務(wù)器到現(xiàn)場(chǎng)終端發(fā)送報(bào)文帶來(lái)的網(wǎng)絡(luò)延遲問(wèn)題。 測(cè)試系統(tǒng)通過(guò)現(xiàn)場(chǎng)終端和云端服務(wù)器通信軟件的設(shè)計(jì),支持多現(xiàn)場(chǎng)終端連接云端服務(wù)器,運(yùn)行穩(wěn)定,且實(shí)時(shí)性高。 與汽車控制器硬件在環(huán)系統(tǒng)連接后即可對(duì)控制器進(jìn)行遠(yuǎn)程測(cè)試,實(shí)時(shí)讀取故障碼、汽車運(yùn)行狀態(tài)信息以便實(shí)時(shí)監(jiān)測(cè)控制器控制策略的效果,方便調(diào)整控制策略。
未來(lái)工作中,可以圍繞遠(yuǎn)程向硬件在環(huán)系統(tǒng)汽車控制器下載控制策略,遠(yuǎn)程對(duì)控制器參數(shù)進(jìn)行標(biāo)定以及多任務(wù)協(xié)同對(duì)硬件在環(huán)中各控制器控制策略同時(shí)開發(fā)展開深入的研究。