李祥,馮拔,葉標(biāo),劉凱
(長沙中車智馭新能源科技有限公司網(wǎng)聯(lián)應(yīng)用技術(shù)部,湖南 長沙 410006)
在政策和技術(shù)進(jìn)步的共同推動(dòng)下,全球電動(dòng)客車市場迅速發(fā)展,今年由于新冠肺炎疫情的影響,增速有所放緩,但對于出行交通的安全化、舒適化要求卻越來越高,因此整車廠在生產(chǎn)車輛的同時(shí),也必須開發(fā)相應(yīng)的網(wǎng)聯(lián)化平臺,電動(dòng)客車遠(yuǎn)程控制平臺正是在此背景下應(yīng)運(yùn)而生的[1-2]。
現(xiàn)有的GB/T 32960-2016《電動(dòng)汽車遠(yuǎn)程服務(wù)與管理系統(tǒng)技術(shù)規(guī)范》,規(guī)定了車載終端上傳到國家監(jiān)控平臺的數(shù)據(jù)格式及內(nèi)容,而電動(dòng)客車遠(yuǎn)程控制平臺在此基礎(chǔ)上,進(jìn)行了自定義的拓展。電動(dòng)客車遠(yuǎn)程控制平臺在實(shí)際開發(fā)過程中,調(diào)試人員需要對照電動(dòng)客車遠(yuǎn)程控制協(xié)議進(jìn)行人工比對解析,導(dǎo)致耗費(fèi)大量的時(shí)間且容易出錯(cuò)。
針對上述存在的問題,本文結(jié)合電動(dòng)客車遠(yuǎn)程控制協(xié)議,設(shè)計(jì)并開發(fā)了電動(dòng)客車遠(yuǎn)程控制協(xié)議解析系統(tǒng)。該系統(tǒng)包括系統(tǒng)架構(gòu)設(shè)計(jì)、系統(tǒng)功能設(shè)計(jì)、系統(tǒng)數(shù)據(jù)庫設(shè)計(jì)以及系統(tǒng)主要功能實(shí)現(xiàn)。在實(shí)際的解析過程中,此系統(tǒng)完美地解決了數(shù)據(jù)報(bào)文解析,提高了工作效率。
電動(dòng)客車遠(yuǎn)程控制協(xié)議用來規(guī)范車載遠(yuǎn)程監(jiān)控終端與電動(dòng)客車遠(yuǎn)程控制平臺端間通信數(shù)據(jù)格式[3],操作移動(dòng)手機(jī)端進(jìn)行車況查看、車輛部件控制、一鍵診斷等。其中,數(shù)據(jù)單元部分內(nèi)容為:第三鏈路狀態(tài)查詢數(shù)據(jù)單元、第三鏈路狀態(tài)設(shè)置數(shù)據(jù)單元、遠(yuǎn)程車輛控制數(shù)據(jù)單元、車輛部件控制狀態(tài)反饋數(shù)據(jù)單元、車輛部件狀態(tài)數(shù)據(jù)單元、一鍵診斷數(shù)據(jù)單元。電動(dòng)客車遠(yuǎn)程控制協(xié)議的數(shù)據(jù)包結(jié)構(gòu)及定義如表1所示。
表1 數(shù)據(jù)包結(jié)構(gòu)及定義
電動(dòng)客車遠(yuǎn)程控制協(xié)議解析系統(tǒng)除了對車載遠(yuǎn)程監(jiān)控終端與電動(dòng)客車遠(yuǎn)程控制平臺通信的數(shù)據(jù)報(bào)文進(jìn)行解析,還包括對十六進(jìn)制轉(zhuǎn)換為文本字符串、十六進(jìn)制轉(zhuǎn)換為日期、十六進(jìn)制轉(zhuǎn)換為十進(jìn)制等功能。調(diào)試人員通過CAN網(wǎng)絡(luò)采集電動(dòng)客車遠(yuǎn)程控制協(xié)議報(bào)文后,將數(shù)據(jù)包報(bào)文在WEB端電動(dòng)客車遠(yuǎn)程控制協(xié)議解析系統(tǒng)進(jìn)行解析,待解析完后將報(bào)文結(jié)果可視化展示。
電動(dòng)客車遠(yuǎn)程控制協(xié)議解析系統(tǒng)軟件架構(gòu)采用三層體系結(jié)構(gòu)[4],包括數(shù)據(jù)展示層、數(shù)據(jù)處理層、數(shù)據(jù)存儲(chǔ)層,體系結(jié)構(gòu)如圖1所示。
圖1 體系結(jié)構(gòu)
數(shù)據(jù)展示層:用戶將采集數(shù)據(jù)輸入到前臺頁面的文本域,點(diǎn)擊提交按鈕提交請求到服務(wù)端的后臺,后臺處理完后把結(jié)果返回給前臺數(shù)據(jù)頁面。數(shù)據(jù)展示層運(yùn)用HTML、CSS、BootStrap、JavaScript等技術(shù),將后臺的處理結(jié)果渲染到前臺頁面。
數(shù)據(jù)處理層:服務(wù)端接受前臺傳遞過來的報(bào)文數(shù)據(jù),根據(jù)電動(dòng)客車遠(yuǎn)程控制協(xié)議,識別命令指令,包括第三鏈路狀態(tài)查詢、第三鏈路狀態(tài)設(shè)置、遠(yuǎn)程車輛控制、車輛部件控制狀態(tài)反饋、車輛部件狀態(tài)等指令,從而進(jìn)行數(shù)據(jù)處理。
數(shù)據(jù)存儲(chǔ)層:在數(shù)據(jù)處理的過程中,既包括原始報(bào)文數(shù)據(jù)的持久化到MYSQL數(shù)據(jù)中,又包括實(shí)際業(yè)務(wù)數(shù)據(jù)的持久化,將數(shù)據(jù)持久化到磁盤中,避免數(shù)據(jù)的丟失。
電動(dòng)客車遠(yuǎn)程控制協(xié)議解析系統(tǒng)主要是幫助開發(fā)與調(diào)試人員快速解析遠(yuǎn)程控制報(bào)文,其主要功能包括第三鏈路狀態(tài)查詢報(bào)文解析、第三鏈路狀態(tài)設(shè)置報(bào)文解析、遠(yuǎn)程車輛控制報(bào)文解析、車輛部件控制狀態(tài)反饋報(bào)文解析、車輛部件狀態(tài)報(bào)文解析、一鍵診斷報(bào)文解析以及進(jìn)制轉(zhuǎn)換功能,功能設(shè)計(jì)如圖2所示。
圖2 功能設(shè)計(jì)
第三鏈路狀態(tài)查詢包括參數(shù)設(shè)置時(shí)間、參數(shù)總數(shù)、參數(shù)項(xiàng)列表,第三鏈路狀態(tài)設(shè)置也包括參數(shù)設(shè)置時(shí)間、參數(shù)總數(shù)、參數(shù)項(xiàng)列表。
遠(yuǎn)程車輛控制報(bào)文解析包括時(shí)間、命令I(lǐng)D、命令參數(shù),其中命令參數(shù)包括車輛啟動(dòng)、車輛熄火、車前門開、車前門關(guān)、車后門開、車后門關(guān)、車中門開、車中門關(guān)、空調(diào)開、空調(diào)關(guān)、小燈開、小燈關(guān)、近光開、近光關(guān)、遠(yuǎn)光開、遠(yuǎn)光關(guān)、鎖車、解鎖、電加熱開啟、電加熱關(guān)閉、喇叭開啟、喇叭關(guān)閉、駕駛模式、限制車速、限制驅(qū)動(dòng)功率、車輛蠕行開啟、車輛蠕行關(guān)閉、雙閃開啟、雙閃關(guān)閉、開始一鍵診斷、停止一鍵診斷。
車輛(部件)控制狀態(tài)反饋內(nèi)容包括控制指令下發(fā)時(shí)間、命令I(lǐng)D、控制響應(yīng)狀態(tài)、命令狀態(tài)描述,其中控制響應(yīng)狀態(tài)包括響應(yīng)控制指令成功、響應(yīng)控制指令失敗、遠(yuǎn)程控制校驗(yàn)成功、遠(yuǎn)程控制校驗(yàn)失敗、車身控制器未響應(yīng)控制請求。
車輛(部件)狀態(tài)包括數(shù)據(jù)采集時(shí)間、信息類型標(biāo)志(1)、信息體(1)、信息類型標(biāo)志(n)、信息體(n)。部件運(yùn)行狀態(tài)包括:模式、鎖車、空調(diào)、電池加熱、小燈、前大燈(近光)、前大燈、(遠(yuǎn)光)、前門、中門、后門、喇叭、駕駛模式、車速、驅(qū)動(dòng)電機(jī)功率、車輛蠕行、車輛溜車制動(dòng)百分比、車輛電制動(dòng)響應(yīng)速率、雙閃、車輛驅(qū)動(dòng)響應(yīng)速率、啟動(dòng)熄火。
車輛診斷數(shù)據(jù)包括數(shù)據(jù)采集時(shí)間、診斷數(shù)據(jù)。其中診斷數(shù)據(jù)有燈光系統(tǒng)診斷狀態(tài)、門控系統(tǒng)診斷狀態(tài)、驅(qū)動(dòng)散熱系統(tǒng)診斷、驅(qū)動(dòng)系統(tǒng)診斷、儲(chǔ)能散熱系統(tǒng)診斷、轉(zhuǎn)向診斷、泵氣系統(tǒng)診斷、空調(diào)診斷、燈光系統(tǒng)故障代碼、門控系統(tǒng)故障代碼、驅(qū)動(dòng)散熱系統(tǒng)故障代碼、儲(chǔ)能散熱系統(tǒng)故障代碼、驅(qū)動(dòng)系統(tǒng)故障代碼、儲(chǔ)能系統(tǒng)故障代碼、轉(zhuǎn)向系統(tǒng)故障代碼、泵氣系統(tǒng)故障代碼、空調(diào)系統(tǒng)故障代碼、總體診斷狀態(tài)。
電動(dòng)客車遠(yuǎn)程控制協(xié)議解析系統(tǒng)數(shù)據(jù)庫設(shè)計(jì)即數(shù)據(jù)表的設(shè)計(jì),本系統(tǒng)主要涉及的表為:原始碼流信息表(origin_data)、狀態(tài)查詢信息表(state_search)、狀態(tài)設(shè)置信息表(state_setup)、遠(yuǎn)程車輛控制信息表(remote_control)、車輛部件控制狀態(tài)反饋信息表(remote_control_feedback)、車輛部件狀態(tài)信息表(vehicle_state)、一鍵診斷信息表(oneclick_diagnosis)。
電動(dòng)客車遠(yuǎn)程控制平臺的數(shù)據(jù)報(bào)文有兩個(gè)流向:上行和下行。上行是指車載終端到電動(dòng)客車遠(yuǎn)程控制平臺的通信,下行是指電動(dòng)客車遠(yuǎn)控平臺到車載終端的通信。無論是上行還是下行,對于電動(dòng)客車遠(yuǎn)程控制協(xié)議解析系統(tǒng)來說,并無本質(zhì)上的區(qū)別,用戶在CAN網(wǎng)絡(luò)采集到的數(shù)據(jù)報(bào)文,放到電動(dòng)客車遠(yuǎn)程控制平臺進(jìn)行解析,流程如圖3所示。
圖3 流程設(shè)計(jì)
本系統(tǒng)的具體實(shí)現(xiàn)過程中,選用Java語言作為開發(fā)語言,Idea作為開發(fā)工具,Maven作為Jar包管理工具,采用流行的SpringBoot、Mybatis等框架技術(shù)。本文對遠(yuǎn)程車輛控制報(bào)文解析、一鍵診斷功能進(jìn)行詳細(xì)的實(shí)現(xiàn)描述[5]。
遠(yuǎn)程車輛控制報(bào)文解析功能的實(shí)現(xiàn),其主要流程為:采集報(bào)文、持久化報(bào)文、解析報(bào)文、展示結(jié)果。其中,采集報(bào)文的步驟為:首先通過CAN網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)的采集,然后將采集到數(shù)據(jù)報(bào)文在WEB端的電動(dòng)客車遠(yuǎn)程控制協(xié)議解析系統(tǒng)發(fā)起請求,請求到達(dá)RemoteControlController類上,進(jìn)行原始報(bào)文數(shù)據(jù)的持久化、解析報(bào)文,最后將處理的結(jié)果返回給客戶端。遠(yuǎn)程車輛控制報(bào)文解析功能實(shí)現(xiàn)如圖4所示。
圖4 車輛遠(yuǎn)程控制功能實(shí)現(xiàn)
對于一鍵診斷功能,將采集的數(shù)據(jù)報(bào)文放到電動(dòng)客車遠(yuǎn)程控制協(xié)議解析系統(tǒng)文本輸入框,點(diǎn)擊解析按鈕發(fā)送Ajax請求到后臺,請求體中包含用戶請求的參數(shù)(即數(shù)據(jù)報(bào)文),在后臺的DiagnoseStatusController程序類及getFrontMsg(String orginData)方法上,貼上@RequestMapping注解用來處理請求地址映射,而后在方法里面進(jìn)行實(shí)際的業(yè)務(wù)邏輯處理,處理完后將處理結(jié)果封裝DiagnoseStatus對象中去,再借助Gson工具類把DiagnoseStatus對象轉(zhuǎn)成json字符串,將結(jié)果返回給前臺頁面進(jìn)行結(jié)果的渲染,如圖5為一鍵診斷的具體實(shí)現(xiàn)。
圖5 一鍵診斷功能實(shí)現(xiàn)
本文在電動(dòng)客車遠(yuǎn)程控制協(xié)議的基礎(chǔ)上,對電動(dòng)客車遠(yuǎn)程控制協(xié)議解析系統(tǒng)進(jìn)行設(shè)計(jì),包括架構(gòu)設(shè)計(jì)、功能設(shè)計(jì)、數(shù)據(jù)庫設(shè)計(jì),并采用Java語言對功能進(jìn)行了實(shí)現(xiàn)。目前,電動(dòng)客車遠(yuǎn)程控制協(xié)議解析系統(tǒng)在實(shí)際的運(yùn)用過程中,調(diào)試人員采集數(shù)據(jù)報(bào)文后將報(bào)文放到電動(dòng)客車遠(yuǎn)程控制協(xié)議解析系統(tǒng),能夠很好地解析出協(xié)議的內(nèi)容,滿足實(shí)際的調(diào)試需求,提高了工作效率;同樣,也對其他系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)有很好的借鑒意義。