黃 攀,江學(xué)煥
(湖北汽車工業(yè)學(xué)院 電氣與信息工程學(xué)院,湖北 十堰 442002)
當(dāng)前,新能源汽車充電機(jī)都是通過CAN 通信來控制其充電啟停及設(shè)置其充電電壓與電流等參數(shù)。而充電機(jī)維修測(cè)試設(shè)備作為一種通用檢修設(shè)備,也需要通過發(fā)送不同充電機(jī)對(duì)應(yīng)的不同CAN協(xié)議來輔助控制充電機(jī)的工作狀態(tài)。但該測(cè)試設(shè)備投入市場(chǎng)后,隨著充電機(jī)種類的增多以及CAN通信協(xié)議的更新,針對(duì)不同型號(hào)的充電機(jī),需頻繁完善測(cè)試設(shè)備的系統(tǒng)功能并適配不同CAN 協(xié)議,才能與之正常通信。因此需要一種方便快捷的固件及CAN協(xié)議更新方案。
傳統(tǒng)系統(tǒng)更新方案中的ISP 編程需要一定的操作技術(shù),并不適合普通用戶的使用。而ICP編程需要使用仿真器。相比之下,IAP升級(jí)方案無需專業(yè)人士指導(dǎo),更加方便快捷[1]。通過IAP技術(shù)構(gòu)建基于藍(lán)牙傳輸?shù)腛TA 框架用于該設(shè)備的固件更新。由于不同型號(hào)充電機(jī)的協(xié)議定義不同,需要傳輸其特定波特率數(shù)值、ID、數(shù)據(jù)等參數(shù)信息實(shí)現(xiàn)對(duì)應(yīng)CAN 協(xié)議的更新[2]。此外,通過微信小程序建立的藍(lán)牙連接還能對(duì)設(shè)備進(jìn)行實(shí)時(shí)監(jiān)控,獲取其電源或負(fù)載的信息,如電流、電壓,以及一些異常等信息。
對(duì)于IAP升級(jí)技術(shù),國(guó)內(nèi)外學(xué)者提出了多種實(shí)現(xiàn)方案,其中有陳以安等[3]設(shè)計(jì)的STM32固件遠(yuǎn)程升級(jí)系統(tǒng),實(shí)現(xiàn)了利用WiFi 模塊接入網(wǎng)絡(luò)實(shí)現(xiàn)的軟件更新。陳鋒等[4]設(shè)計(jì)的STM32 遠(yuǎn)程固件更新系統(tǒng),實(shí)現(xiàn)了利用485 總線的固件在線更新方案。牛軍浩[5]的STM32 固件遠(yuǎn)程升級(jí)系統(tǒng)則實(shí)現(xiàn)了基于GPRS的應(yīng)用遠(yuǎn)程程序更新。對(duì)于以上方案,在本應(yīng)用場(chǎng)景下,使用WiFi 需要單獨(dú)網(wǎng)卡以及路由器或AP設(shè)備。上位機(jī)程序位于Windows端不利于實(shí)際使用場(chǎng)景。而GPRS的功耗較高,需要單獨(dú)的SIM卡。本文基于微信小程序的藍(lán)牙傳輸方案,成本低廉,使用方便,功耗更低,不易受到干擾,且通過無線傳輸就能實(shí)現(xiàn)單片機(jī)的IAP固件升級(jí)。
2.習(xí)近平新時(shí)代中國(guó)特色社會(huì)主義思想與經(jīng)典馬克思主義一脈相承。習(xí)近平是一位堅(jiān)定的馬克思主義者。哥斯達(dá)黎加廣大陣線副總書記羅西奧·阿爾法羅指出,“習(xí)近平新時(shí)代中國(guó)特色社會(huì)主義思想延續(xù)了馬克思主義的辯證思想?!盵4]美國(guó)的羅斯·特里爾指出:“習(xí)近平高度重視馬克思主義哲學(xué),依然把馬克思主義哲學(xué)作為共產(chǎn)黨人前進(jìn)的強(qiáng)大思想武器,要求各級(jí)干部把馬克思主義哲學(xué)作為看家本領(lǐng)?!盵5]委內(nèi)瑞拉統(tǒng)一社會(huì)主義黨副主席亞當(dāng)·查韋斯指出:“中國(guó)共產(chǎn)黨堅(jiān)持真理,修正錯(cuò)誤,把習(xí)近平新時(shí)代中國(guó)特色社會(huì)主義思想寫進(jìn)《黨章》,這使21世紀(jì)馬克思主義更展現(xiàn)出強(qiáng)大的真理力量,是馬克思主義運(yùn)用到當(dāng)代中國(guó)的最好體現(xiàn)?!盵6]
系統(tǒng)的總體架構(gòu)分為3 個(gè)部分[6]:微信小程序、服務(wù)管理系統(tǒng)、充電機(jī)測(cè)試設(shè)備,如圖1所示。
圖1 系統(tǒng)總體架構(gòu)框
微信小程序是面向充電機(jī)維修人員的交互平臺(tái),無需安裝卸載和運(yùn)行速度快的特點(diǎn)使得其在低配置智能手機(jī)上也能良好運(yùn)行?;谖⑿牌脚_(tái)的特性也使其能夠服務(wù)于任何智能手機(jī)用戶。此外,智能手機(jī)微信的普及性使得很多用戶都可以使用小程序,節(jié)約了用戶的使用成本。
小程序的服務(wù)實(shí)現(xiàn)由系統(tǒng)層、邏輯層、視圖層3 個(gè)部分組成。系統(tǒng)層包含3 個(gè)基本功能:網(wǎng)絡(luò)請(qǐng)求、藍(lán)牙連接和本地存儲(chǔ)。網(wǎng)絡(luò)請(qǐng)求的目的是為了從服務(wù)器獲取管理員預(yù)先上傳的固件更新包或是用戶需要的CAN 協(xié)議,將這些數(shù)據(jù)下載到本地需要使用本地存儲(chǔ),最后將這些數(shù)據(jù)通過建立藍(lán)牙連接的方式從本地傳輸?shù)綔y(cè)試設(shè)備的單片機(jī)。邏輯層使用輕量級(jí)的腳本語言JavaScript開發(fā)來實(shí)現(xiàn)邏輯處理功能。視圖層則使用微信開發(fā)工具官方提供的標(biāo)簽語言WXML,樣式語言WXSS 開發(fā),完成數(shù)據(jù)接收和頁面渲染[7]。
管理員通過輸入管理員賬號(hào)和密碼進(jìn)入服務(wù)管理系統(tǒng),該系統(tǒng)功能主要包括文件管理和日志分析。管理員可對(duì)文件進(jìn)行上傳、下載、移動(dòng)、刪除等操作,同時(shí)支持目錄的創(chuàng)建和刪除。
(1)藥物治療依從性:也就是遵醫(yī)行為,采用評(píng)價(jià)高血壓患者服藥依從的4個(gè)問題來確定:當(dāng)您服藥自覺癥狀更壞時(shí),是否曾停藥?是否有時(shí)不注意服藥?是否有忘記服藥的經(jīng)歷?當(dāng)您自覺癥狀改善時(shí),是否曾停藥?4個(gè)問題回答均為“否”即為依從性佳。(2)觀察治療前后兩組收縮壓與舒張壓變化情況。
圖2 小程序的功能結(jié)構(gòu)
設(shè)備監(jiān)控功能主要是將測(cè)試設(shè)備的電源電壓、電源電流、負(fù)載電壓、負(fù)載電流以及異常狀態(tài)等信息顯示在小程序頁面上。當(dāng)用戶選擇查詢信息時(shí),小程序會(huì)以1 次∕s的頻率向測(cè)試設(shè)備端發(fā)送查詢請(qǐng)求,測(cè)試設(shè)備每接收一次請(qǐng)求都會(huì)返回一組用于存儲(chǔ)設(shè)備狀態(tài)的數(shù)據(jù),直至用戶主動(dòng)發(fā)送停止查詢的命令。該界面還支持手動(dòng)寫入?yún)?shù)發(fā)送至測(cè)試設(shè)備上,用于控制測(cè)試設(shè)備的電壓和電流等信息,設(shè)備監(jiān)控流程如圖7所示。
微信小程序代碼的功能實(shí)現(xiàn)由小程序的入口文件app.js、公共配置文件project.config.json、頁面配置文件page.json、各個(gè)頁面的文件夾如HomePage、MonitoringFountion 等組成。每個(gè)頁面都有各自的js、json、wxml、wxss 文件。整體功能結(jié)構(gòu)如圖2所示。
服務(wù)管理系統(tǒng)的功能使用Java 語言開發(fā),數(shù)據(jù)庫使用MySQL,頁面顯示使用常見的前端開發(fā)語言HTML、CSS、以及JavaScript語言,整個(gè)系統(tǒng)采用SpringBoot 框架進(jìn)行設(shè)計(jì),API 框架則是使用Swagger UI,它允許任何人可視化API資源并與之交互,將特定的URL 提供給前端代碼即可。系統(tǒng)整體部署在阿里云ESC服務(wù)器上[8],使用B∕S結(jié)構(gòu),管理服務(wù)的功能結(jié)構(gòu)圖如圖3所示。
圖3 服務(wù)功能結(jié)構(gòu)
維修測(cè)試設(shè)備采用的藍(lán)牙模塊為JDY-18透?jìng)髂K,基于藍(lán)牙4.2的協(xié)議標(biāo)準(zhǔn)進(jìn)行工作,頻段為2.4 GHz的范圍,調(diào)制方式為GFSK,最大發(fā)射功率0 dB,最大發(fā)射距離60 m[9],功耗低,不易受到干擾,通過簡(jiǎn)單的配置即可將BLE藍(lán)牙應(yīng)用到產(chǎn)品中。
翻譯過程研究的新動(dòng)向——《翻譯過程研究的創(chuàng)新與拓展》評(píng)析 ………………………………… 孫志明(5.109)
燒錄方案通過IAP 技術(shù)實(shí)現(xiàn)。又稱為應(yīng)用編程技術(shù)[10],指的是單片機(jī)在程序運(yùn)行時(shí)對(duì)Flash 重新編程運(yùn)行,也就是用程序修改程序,使用該技術(shù)可以在設(shè)備售出后對(duì)設(shè)備方便地進(jìn)行系統(tǒng)升級(jí)。要實(shí)現(xiàn)該功能需編寫設(shè)備的核心功能代碼(APP啟動(dòng)程序)和啟動(dòng)代碼(BootLoader 程序),目的是通過BLE 的USART 接收程序或數(shù)據(jù)[11],實(shí)現(xiàn)對(duì)固件的升級(jí)更新。
APP 啟動(dòng)程序和BootLoader 程序分別存儲(chǔ)在單片機(jī)內(nèi)部Flash 存儲(chǔ)器的不同地址,一般Boot-Loader存放在從0開始的幾個(gè)扇區(qū),然后是APP程序。為了防止在燒寫過程中出現(xiàn)異常問題,在Flash中另外有一個(gè)區(qū)域存放APP備份程序。
將單片機(jī)內(nèi)部Flash 存儲(chǔ)器劃分為幾個(gè)部分,如圖4所示。其中,BootLoader程序放在起始位置,應(yīng)用程序區(qū)用于存放新的APP 程序,程序備份區(qū)用于存放備份APP 程序,數(shù)據(jù)保存區(qū)用于長(zhǎng)期保存數(shù)據(jù),即斷電后不會(huì)丟失。
圖4 Flash存儲(chǔ)器的劃分
1.3.1 BootLoader程序
設(shè)備通電并通過藍(lán)牙成功連接小程序后,小程序向設(shè)備端發(fā)送查詢版本信息的請(qǐng)求,在收到響應(yīng)后將其與從服務(wù)器端獲取的版本信息進(jìn)行比較。若存在可用更新,則向設(shè)備端發(fā)送升級(jí)請(qǐng)求,設(shè)備端在收到請(qǐng)求后寫下升級(jí)標(biāo)志并將其發(fā)送至小程序端,然后跳轉(zhuǎn)至BootLoader。小程序則從服務(wù)器端讀取應(yīng)用程序文件,并將讀取的數(shù)據(jù)通過藍(lán)牙送到設(shè)備端,設(shè)備端的BootLoader程序?qū)邮盏臄?shù)據(jù)進(jìn)行校驗(yàn)后,將無誤的應(yīng)用程序?qū)懭隖lash中,置位標(biāo)志信息并將PC指針指向應(yīng)用程序區(qū)的首地址,啟動(dòng)該程序。若校驗(yàn)未通過,則啟動(dòng)備份APP程序[12]。
BootLoader在接收正確的程序時(shí),會(huì)將程序的長(zhǎng)度app_length 保存在Flash 中,若需要備份數(shù)據(jù)或是恢復(fù)數(shù)據(jù),只需訪問Flash中指定區(qū)域首地址,按照長(zhǎng)度app_length逐個(gè)讀取,再逐個(gè)備份或恢復(fù)到指定的區(qū)域即可。
1.3.2 APP程序
一開始,大人們還不知道有我的存在,一度把學(xué)生升到初二后出現(xiàn)的消極、暴躁、低沉情緒歸類于“反叛”,把成績(jī)下滑,注意力不集中等問題歸類于“笨拙”。
另一方面,為了服務(wù)于小程序端的CAN 協(xié)議更新和監(jiān)控功能,APP程序要能接收來自小程序端的CAN 協(xié)議更新請(qǐng)求,根據(jù)請(qǐng)求中的CAN 協(xié)議參數(shù),更新與充電機(jī)之間使用的CAN協(xié)議,從而與不同型號(hào)的充電機(jī)進(jìn)行通信來控制充電機(jī)的啟停、設(shè)置電流和電壓等參數(shù),并將相關(guān)信息傳輸至小程序端,展示在用戶界面上。
APP程序由單片機(jī)程序開發(fā)人員制作,使用工具轉(zhuǎn)化為Bin文件,由服務(wù)器管理員通過服務(wù)管理系統(tǒng)上傳至指定路徑,為小程序端提供服務(wù)。該程序不僅包含用戶需要實(shí)現(xiàn)的功能,還要能聯(lián)合BootLoader程序提示用戶可能出現(xiàn)的錯(cuò)誤信息,獲取Flash 中的APP 版本信息并響應(yīng)來自小程序端獲取APP 版本信息的請(qǐng)求,以及在收到升級(jí)請(qǐng)求后對(duì)BootLoader的跳轉(zhuǎn)等。
微信小程序是用戶,即維修人員的應(yīng)用端,為保證操作簡(jiǎn)單,整體設(shè)計(jì)簡(jiǎn)潔,根據(jù)功能的不同進(jìn)行合理的分類,主要分為首頁和監(jiān)控功能兩個(gè)頁面,用戶進(jìn)入小程序后所有功能均直接展示在這兩個(gè)頁面,通過點(diǎn)擊程序按鈕或在輸入框輸入數(shù)值的方式進(jìn)行操作。
例如在《三袋麥子》這節(jié)閱讀課的尾聲,教師讓學(xué)生對(duì)小豬、小猴、小牛進(jìn)行評(píng)價(jià),鼓勵(lì)學(xué)生勇敢表達(dá)自己的意見。然而,老師對(duì)學(xué)生的回答評(píng)價(jià)機(jī)械,缺乏教育機(jī)智,造成學(xué)生乃至課堂的尷尬。相信不少教育者見到此案例頗有熟悉之感:
協(xié)議傳輸功能則是小程序從服務(wù)器端獲取可選擇的CAN 協(xié)議列表后,用戶從中選擇測(cè)試設(shè)備需要的協(xié)議,通過網(wǎng)絡(luò)請(qǐng)求從服務(wù)器下載至本地,再通過藍(lán)牙將協(xié)議參數(shù)傳輸?shù)綔y(cè)試設(shè)備進(jìn)行處理。協(xié)議傳輸流程如圖8所示。
航拍三維場(chǎng)景展現(xiàn),即對(duì)航拍數(shù)據(jù)進(jìn)行處理,將得到的DEM、正射影像在三維場(chǎng)景地圖中展現(xiàn)的過程。傳統(tǒng)的展現(xiàn)過程,一般包含以下步驟:
真菌是一類真核生物,現(xiàn)已發(fā)現(xiàn)有幾萬種。常見的真菌主要是蕈類、霉菌和酵母。歷史上,真菌曾被認(rèn)為和植物的關(guān)系很近,甚至曾被植物學(xué)家誤認(rèn)為是一類植物。
圖5 微信小程序界面
監(jiān)控功能頁面如圖5B所示,主要包括:查詢?cè)O(shè)備信息功能、狀態(tài)信息欄、修改設(shè)備參數(shù)功能以及CAN協(xié)議更新功能。
2.1.1 系統(tǒng)更新功能
用于更新測(cè)試設(shè)備的固件程序。在開始前,需打開手機(jī)的藍(lán)牙權(quán)限,點(diǎn)擊掃描按鈕,獲取附近所有藍(lán)牙設(shè)備列表,點(diǎn)擊需要連接的設(shè)備。待連接成功后,點(diǎn)擊系統(tǒng)更新按鈕,查詢是否存在更新信息,若存在則向設(shè)備端發(fā)送升級(jí)請(qǐng)求并開始下載更新包,待小程序通過網(wǎng)絡(luò)請(qǐng)求成功將更新包從服務(wù)器下載至本地,并收到設(shè)備端響應(yīng)的標(biāo)志信息后,系統(tǒng)更新按鈕會(huì)變成傳輸代碼按鈕,點(diǎn)擊傳輸代碼,小程序通過藍(lán)牙將暫存在本地的更新包數(shù)據(jù)傳輸至設(shè)備端,傳輸過程中會(huì)顯示傳輸進(jìn)度。待傳輸完畢,設(shè)備端在BootLoader程序的引導(dǎo)下就能自動(dòng)實(shí)現(xiàn)系統(tǒng)更新。系統(tǒng)更新流程如圖6所示。
圖6 系統(tǒng)更新流程
2.1.2 設(shè)備監(jiān)控功能
在用戶使用更新服務(wù)前,單片機(jī)程序開發(fā)人員將通過測(cè)試的固件更新包交給后端服務(wù)器管理員,由管理員上傳至服務(wù)器指定路徑中,因此需要一個(gè)服務(wù)管理系統(tǒng)供管理員使用。
圖7 設(shè)備監(jiān)控流程
2.1.3 協(xié)議傳輸功能
小程序首頁如圖5A所示,主要包括:藍(lán)牙掃描功能、附近藍(lán)牙設(shè)備列表、系統(tǒng)更新和設(shè)備監(jiān)控按鈕。
圖8 協(xié)議傳輸流程
系統(tǒng)更新過程中,小程序與BootLoader之間采用的通信協(xié)議為Ymodem 協(xié)議,該協(xié)議從Xmodem協(xié)議改進(jìn)而來,是一個(gè)錯(cuò)誤糾正協(xié)議。每次發(fā)送數(shù)據(jù)包后,都要等待接收方返回的確認(rèn)信息,才能發(fā)送下一個(gè)數(shù)據(jù)包[13]。該協(xié)議發(fā)送文件被分為起始幀、數(shù)據(jù)幀、結(jié)束幀,每一幀都有CRC16(Xmodem)校驗(yàn)碼,高位在前,低位在后,以確保數(shù)據(jù)傳輸?shù)目煽啃浴?/p>
現(xiàn)在,我們的物質(zhì)條件比蘇明娟小時(shí)候不知要好多少,可我們有些人只是喊著夢(mèng)想的口號(hào),遇到困難就退縮,吃不得一點(diǎn)苦。看看“大眼睛”,再想想自己,我們有什么理由不努力拼搏?
Ymodem協(xié)議的傳輸是由設(shè)備端發(fā)起的。設(shè)備端是數(shù)據(jù)接收方。在其開始啟動(dòng)升級(jí)操作時(shí),會(huì)向小程序端發(fā)送升級(jí)指令,其數(shù)值為:0x43,小程序端在收到該指令后開始傳輸更新包,首先傳輸起始幀,長(zhǎng)度為133字節(jié),包含幀頭、包號(hào)、包號(hào)反碼、文件名稱、文件大小、填充區(qū)、CRC校驗(yàn)位。在收到設(shè)備的正響應(yīng)后傳輸數(shù)據(jù)幀,數(shù)據(jù)幀長(zhǎng)度為1 029字節(jié)或133字節(jié),長(zhǎng)度根據(jù)最后一包的數(shù)據(jù)處理情況而定。數(shù)據(jù)幀包含:幀頭、包號(hào)、包號(hào)反碼、有效數(shù)據(jù)、CRC校驗(yàn)位。在依次傳輸完所有數(shù)據(jù)幀后傳輸結(jié)束幀,結(jié)束幀長(zhǎng)度為133字節(jié),不攜帶數(shù)據(jù),包含:幀頭、包號(hào)、包號(hào)反碼、數(shù)據(jù)區(qū)、CRC校驗(yàn)位[13]。該協(xié)議的數(shù)據(jù)結(jié)構(gòu)以及傳輸過程如表1所示:
表1 Ymodem協(xié)議數(shù)據(jù)結(jié)構(gòu)以及傳輸過程
監(jiān)控與CAN協(xié)議傳輸功能由于不涉及較大數(shù)據(jù)的傳輸,指令相對(duì)簡(jiǎn)單,故使用自定義通信協(xié)議,小程序端和測(cè)試設(shè)備端之間采用問答方式通信,小程序端發(fā)出指令包,測(cè)試設(shè)備端返回應(yīng)答包。測(cè)試設(shè)備端不主動(dòng)向小程序端發(fā)數(shù)據(jù)。
(2)針對(duì)柱塞總成的潤(rùn)滑問題,要定期加注潤(rùn)滑油,保證更好的潤(rùn)滑、保養(yǎng)效果,使注水泵在高效低耗的狀態(tài)下運(yùn)行。
通信方式為無線串行異步方式(藍(lán)牙∕RS232串口),默認(rèn)波特率115 200 bps,8 位數(shù)據(jù)位和1 位停止位,無奇偶校驗(yàn)位。
在進(jìn)行系統(tǒng)固件更新的操作后,小程序顯示代碼傳輸完畢如圖9 所示,待測(cè)試設(shè)備燒錄完成,程序可成功運(yùn)行,選擇并傳輸CAN協(xié)議,最后測(cè)試設(shè)備正常啟動(dòng)。
圖9 微信小程序代碼傳輸界面
在進(jìn)行設(shè)備監(jiān)控功能相關(guān)操作后,小程序如圖10 所示,成功獲取電源電壓、電源電流等信息,并與測(cè)試設(shè)備端屏幕顯示的信息一致。
圖10 測(cè)試設(shè)備狀態(tài)信息
同時(shí),開始寫入?yún)?shù)測(cè)試,將寫入對(duì)象設(shè)置為電源,模式為內(nèi)部電源,電壓217 V。提交后顯示設(shè)置成功,并且測(cè)試設(shè)備端屏幕顯示的電壓和設(shè)備回讀上傳給小程序的均為217 V,與輸入數(shù)值一致。
圖2所示為小曲拐四桿機(jī)構(gòu)模型,其中1為連接電動(dòng)機(jī)的偏心主軸,3、4、5為3個(gè)小曲拐,6為機(jī)架,2為連接偏心主軸與小曲拐的動(dòng)盤。機(jī)構(gòu)有5個(gè)活動(dòng)構(gòu)件,8個(gè)旋轉(zhuǎn)副,其中有2個(gè)虛約束,則需要去掉虛約束,由此得到的機(jī)構(gòu)的自由度計(jì)算公式為:
本文針對(duì)充電機(jī)維修測(cè)試設(shè)備方便更新和維護(hù)這一目的,探討了其固件升級(jí)、CAN協(xié)議更新的方法。提出了帶OTA功能的充電機(jī)測(cè)試設(shè)備的小程序設(shè)計(jì),以較低的成本和便捷實(shí)用的方式實(shí)現(xiàn)了基于微信小程序的測(cè)試設(shè)備固件與協(xié)議數(shù)據(jù)更新和對(duì)測(cè)試設(shè)備的實(shí)時(shí)監(jiān)控,以便設(shè)備升級(jí)和適配不同型號(hào)充電機(jī)。從功能測(cè)試結(jié)果來看,程序運(yùn)行良好,更新速度快,藍(lán)牙傳輸穩(wěn)定。該方案能夠便捷地進(jìn)行軟件功能擴(kuò)展和數(shù)據(jù)更新,很大程度上減少維護(hù)需要的成本,并且安全可靠,具有一定的應(yīng)用前景。