張國振,吳詩宇
(1.工業(yè)和信息化部裝備工業(yè)發(fā)展中心,北京 100846;2.重慶車輛檢測研究院 國家客車質(zhì)量監(jiān)督檢驗(yàn)中心,重慶 401122)
GB 17691—2018《重型柴油車污染物排放限值及測量方法(中國第六階段)》[1]于2019年開始逐步執(zhí)行,其中附錄Q要求車載終端上傳OBD、發(fā)動(dòng)機(jī)、整車、驅(qū)動(dòng)電機(jī)、車輛位置、極值、報(bào)警、電池電壓/溫度等數(shù)據(jù)。為了保證所傳OBD數(shù)據(jù)、發(fā)動(dòng)機(jī)數(shù)據(jù)格式滿足GB 17691—2018[1],通信協(xié)議和其他數(shù)據(jù)格式滿足GB/T 32960.3—2016《電動(dòng)汽車遠(yuǎn)程服務(wù)與管理系統(tǒng)技術(shù)規(guī)范 第 3 部分:通信協(xié)議及數(shù)據(jù)格式》[2],需要對(duì)遠(yuǎn)程排放管理車載終端所傳輸?shù)臄?shù)據(jù)格式和協(xié)議一致性進(jìn)行檢測。
目前,行業(yè)中針對(duì)GB 17691—2018[1]的商業(yè)檢測系統(tǒng)主要對(duì)象是排放,而對(duì)附錄Q的車載終端,需要自主開發(fā)一套軟件來完成數(shù)據(jù)格式和協(xié)議一致性的檢測,為此筆者開發(fā)了此檢測軟件。本測試軟件采用流行的軟件框架,實(shí)現(xiàn)了軟件的模塊化,具有輕便性、可維護(hù)性和可擴(kuò)展性。
移動(dòng)互聯(lián)網(wǎng)發(fā)展到今天,手機(jī)APP已成為炙手可熱的信息接收媒介。軟件主體結(jié)構(gòu)采用手機(jī)APP負(fù)責(zé)信息展示;后臺(tái)服務(wù)器負(fù)責(zé)數(shù)據(jù)庫操作、數(shù)據(jù)包接收和解析;Web端作為服務(wù)器管理人員操作的工具和界面。
由于報(bào)文數(shù)據(jù)本身對(duì)時(shí)間的同步性要求高,而手機(jī)APP、電腦Web端與后臺(tái)服務(wù)器屬于3種不同的設(shè)備,為了讓不同設(shè)備在同步的時(shí)鐘下顯示和操作,需要用到長連接來保持同步。此處長連接采用了異步非堵塞Netty框架[3]。后臺(tái)服務(wù)器與車載終端之間根據(jù)GB 17691—2018的數(shù)據(jù)格式和通信協(xié)議,采用Socket框架的長連接。軟件框架相當(dāng)于通用化的軟件模板,可在此基礎(chǔ)上進(jìn)行個(gè)性化修改,使得軟件滿足使用要求,提高軟件開發(fā)效率。主體結(jié)構(gòu)系統(tǒng)圖如圖1所示。
圖1 測試軟件主體結(jié)構(gòu)及應(yīng)用
異步非堵塞Netty框架配置了嚴(yán)格的加密和解密算法,保證了數(shù)據(jù)的安全性,并且實(shí)現(xiàn)了高性能,吞吐量更高,延遲更低;減少資源消耗;最小化不必要的內(nèi)存復(fù)制。
GB 17691—2018中規(guī)定了通信的數(shù)據(jù)格式和協(xié)議,本軟件采用未進(jìn)行封裝的Socket進(jìn)行數(shù)據(jù)操作[4]。Socket框架相比異步非堵塞Netty框架較為底層,可以按照國標(biāo)實(shí)現(xiàn)通信協(xié)議,實(shí)現(xiàn)車載終端與后臺(tái)服務(wù)器的長連接。
長連接是為了保持不同設(shè)備時(shí)鐘和數(shù)據(jù)的同步。連接后,不用每次數(shù)據(jù)傳輸交換都進(jìn)行握手,提高了通信效率。而手機(jī)APP、電腦Web端作為數(shù)據(jù)展示端和交互界面,調(diào)用服務(wù)器對(duì)其數(shù)據(jù)庫進(jìn)行操作,不需要較好的實(shí)時(shí)性,而需要較好的數(shù)據(jù)完整性和安全性,故采用更為成熟的Http協(xié)議進(jìn)行數(shù)據(jù)交互[5]。
Http協(xié)議包括請(qǐng)求和響應(yīng),大多數(shù)情況都是APP或Web端把請(qǐng)求信息按JSON格式打包成請(qǐng)求體,發(fā)給后臺(tái)服務(wù)器。服務(wù)器根據(jù)請(qǐng)求內(nèi)容,進(jìn)行數(shù)據(jù)庫操作,完成之后把數(shù)據(jù)按JSON格式打包成響應(yīng)體,發(fā)給APP或Web端。
現(xiàn)代軟件技術(shù)為了實(shí)現(xiàn)軟件的可讀性、輕便性和可維護(hù)性,需要把業(yè)務(wù)邏輯、數(shù)據(jù)和界面相分離。這樣做的好處是,比如按車輛VIN號(hào)和型號(hào)查找報(bào)文列表,都是查詢數(shù)據(jù)庫的操作,只是查詢條件的數(shù)據(jù)不一樣,業(yè)務(wù)邏輯和界面都相差不大。只要實(shí)現(xiàn)了業(yè)務(wù)邏輯、數(shù)據(jù)和界面相分離,就可以實(shí)現(xiàn)最大限度的軟件復(fù)用和輕便性[6-7]。維護(hù)起來也相對(duì)簡單,功能一致的用一個(gè)模塊實(shí)現(xiàn),每次修改只需要修改數(shù)據(jù)或界面即可,實(shí)現(xiàn)了較好的可維護(hù)性。這樣的軟件構(gòu)架也是目前最為流行的MVC(Model、View、Controller)構(gòu)架[8-10]。在APP、Web和后臺(tái)服務(wù)器程序的每一個(gè)地方都體現(xiàn)了MVC的理念,APP中的Activity頁面的構(gòu)架如圖2所示。
圖2 APP軟件中的Activity頁面構(gòu)架示意圖
后臺(tái)服務(wù)器的軟件構(gòu)架相對(duì)來說復(fù)雜一點(diǎn),主要是因?yàn)樯婕皵?shù)據(jù)庫的操作、報(bào)文數(shù)據(jù)的接收和解析,為APP和Web端提供服務(wù)。作為較為底層的程序,ODB持久層程序只負(fù)責(zé)與關(guān)系數(shù)據(jù)庫的操作。在其上,有Server層,實(shí)現(xiàn)具體的功能,如注冊(cè)用戶、用戶登錄、報(bào)文顯示、終端信息管理、長連接等功能塊。Server層之上為Controller層,相當(dāng)于總調(diào)度中心。如果手機(jī)APP發(fā)送了一個(gè)請(qǐng)求,Controller去調(diào)用一些Server功能塊,完成某個(gè)操作,Server返回了一些響應(yīng)數(shù)據(jù),再通過Controller返回給手機(jī)APP用于顯示。一種手機(jī)APP的一種請(qǐng)求對(duì)應(yīng)一個(gè)Controller調(diào)度令,Controller調(diào)度令的數(shù)量多于Server功能塊。Controller調(diào)度令和Server功能塊一起組成了MVC中的C,Model相當(dāng)于ODB持久層和關(guān)系數(shù)據(jù)庫,View相當(dāng)于數(shù)據(jù)提供的手機(jī)APP和電腦Web端。這樣也可以將后臺(tái)服務(wù)器的軟件構(gòu)架看成MVC結(jié)構(gòu),只是稍微變形而已,如圖3所示。
圖3 后臺(tái)服務(wù)器軟件構(gòu)架圖
其他軟件功能塊,如用戶登錄、用戶注冊(cè)、車載終端信息管理、檢測流程等,與以上結(jié)構(gòu)和構(gòu)架類似,本文不詳細(xì)論述。
后臺(tái)服務(wù)器調(diào)用CountrySixStandard功能塊開啟長連接線程,開啟一個(gè)端口用于接收終端發(fā)來的數(shù)據(jù),然后把全部數(shù)據(jù)放入entity中,再放入數(shù)據(jù)包對(duì)象ReceiveMessages里面。根據(jù)通信協(xié)議中的數(shù)據(jù)格式,取出數(shù)據(jù)包體。
對(duì)不同的報(bào)文類型,從數(shù)據(jù)包體(含包頭、數(shù)據(jù)體、校驗(yàn)位)中取出數(shù)據(jù)體,將其組合成不同類型的JSON數(shù)據(jù)格式(以登錄數(shù)據(jù)包為例),保存到數(shù)據(jù)庫中。
以O(shè)BD和發(fā)動(dòng)機(jī)數(shù)據(jù)格式的定義進(jìn)行每一位的解析。格式定義見表1和表2。測試軟件按OBD和發(fā)動(dòng)機(jī)數(shù)據(jù)進(jìn)行解析,需要解析的OBD數(shù)據(jù)和發(fā)動(dòng)機(jī)數(shù)據(jù)見表1和表2。
表1 OBD數(shù)據(jù)(詳見GB 17691—2018附錄Q)
表2 發(fā)動(dòng)機(jī)部分?jǐn)?shù)據(jù)(詳見GB 17691—2018附錄Q)
本文以APP為例說明,Web端不詳述。APP調(diào)用Controller調(diào)度令,取出請(qǐng)求體中的內(nèi)容,放入wrapper中,執(zhí)行數(shù)據(jù)庫的條件查詢,查到的結(jié)果放入ResultHelper中,返回給APP。
本文以測試軟件中的APP為例說明,Web端不用詳述。測試軟件的APP實(shí)現(xiàn)了車載終端報(bào)文數(shù)據(jù)解析和顯示,測試軟件測得的結(jié)果如圖4所示。
圖4 APP數(shù)據(jù)解析頁
本文開發(fā)的測試軟件可用于GB 17691—2018附錄Q中遠(yuǎn)程排放管理系統(tǒng)車載終端的軟件符合性檢測,也可用于發(fā)動(dòng)機(jī)及OBD數(shù)據(jù)的監(jiān)控。后續(xù)動(dòng)作準(zhǔn)備把數(shù)據(jù)進(jìn)行采集后,根據(jù)數(shù)據(jù)辨識(shí)得出此車輛的數(shù)學(xué)模型,并根據(jù)數(shù)學(xué)模型監(jiān)測以后運(yùn)行中的發(fā)動(dòng)機(jī)和OBD數(shù)據(jù),監(jiān)測發(fā)動(dòng)機(jī)排放的劣化程度和數(shù)據(jù)真實(shí)性等指標(biāo)。