徐小凱,金華標(biāo)
(武漢理工大學(xué) 能源與動力工程學(xué)院,湖北 武漢 430063)
隨著國內(nèi)船舶運輸業(yè)的迅速發(fā)展,船舶大氣污染物排放量顯著增加。在當(dāng)前日益嚴格的大氣污染防治形勢下,大幅減排船舶污染物、進行有效的排放監(jiān)測監(jiān)管的需求極為迫切。[1]針對這一問題,武漢理工大學(xué)開展排放物在線監(jiān)測系統(tǒng)研究,并完成了內(nèi)河船機在線監(jiān)測系統(tǒng)硬件搭建及網(wǎng)絡(luò)后臺平臺的開發(fā)。[2]然而,內(nèi)河船機監(jiān)測系統(tǒng)數(shù)據(jù)的無線傳輸是通過移動通信網(wǎng)絡(luò)進行的,對于非遠洋類船舶[3],由于在中國的近海范圍和大多數(shù)內(nèi)河航區(qū)上移動通信網(wǎng)絡(luò)已較為發(fā)達,因而可以通過移動通信[4]進行無線傳輸。但是船舶在偏遠的內(nèi)河航區(qū)行駛時會有信號較差或沒有信號的情況,這將會造成數(shù)據(jù)的丟失和不連續(xù)。[5-6]針對這種情況,本文介紹了一種基于利用外置SD卡進行數(shù)據(jù)緩存和恢復(fù)的方法,并通過合理的軟硬件設(shè)計實現(xiàn)數(shù)據(jù)傳輸?shù)耐暾浴?/p>
內(nèi)河船機監(jiān)測系統(tǒng)整體原理框圖如圖1所示,其由數(shù)據(jù)采集模塊和無線傳輸模塊組成。數(shù)據(jù)采集模塊用于獲取主機ECU和傳感器的數(shù)據(jù),可采集的信號包括:模擬信號(4~20 mA)、數(shù)字信號(控制局域網(wǎng)(CAN)總線/串行總線),并重定義協(xié)議后以CAN擴展幀形式匯總在CAN總線上。
圖1 內(nèi)河船機監(jiān)測系統(tǒng)整體原理框圖
無線數(shù)據(jù)傳輸模塊用于解析數(shù)據(jù)和數(shù)據(jù)的無線發(fā)送,此處選用EC20-CER2.0模塊(以下簡稱EC20),EC20為嵌入式的4G通信模塊,與主控芯片(MCU)通過串口進行通信。與數(shù)據(jù)采集模塊通過CAN總線進行通信后,MCU解析打包并通過控制EC20經(jīng)由無線網(wǎng)絡(luò)傳輸至岸基軟件管理平臺。[7-8]系統(tǒng)運行過程中,若船舶行駛至信號較弱的航區(qū),MCU判斷信號差而無法傳輸時,數(shù)據(jù)將儲存至外置SD卡中,當(dāng)判斷信號強度恢復(fù)后,數(shù)據(jù)恢復(fù)發(fā)送。
系統(tǒng)通過24 V開關(guān)電源進行供電,數(shù)據(jù)采集模塊安裝在機艙內(nèi)和船機診斷接口(OBD)或傳感器相連,其中采集模塊采集的數(shù)據(jù)包括機艙溫濕度、排氣管溫度和排氣管煙氣參數(shù)(模擬量采集);通過OBD接口獲得主機機旁控制單元(ECU)的相關(guān)參數(shù)、排氣管NOx濃度。[9]無線數(shù)據(jù)傳輸模塊由于需要向室外引出天線,故安裝在駕駛室,并通過CAN總線和數(shù)據(jù)采集模塊進行通訊,嵌入在無線數(shù)據(jù)傳輸模塊上的EC20通過串口和MCU通信,其有2個作用,一個是通過其內(nèi)置接收機獲取實時的定位數(shù)據(jù),一個則是通過指令以TCP/IP協(xié)議將數(shù)據(jù)打包發(fā)送至岸基。系統(tǒng)硬件連接示意圖見圖2。
圖2 系統(tǒng)硬件連接示意圖
標(biāo)準(zhǔn)SD卡有9個引腳,工作電壓約為3.3 V,支持2種串行通信模式:SD模式(使用SDIO接口,一種外設(shè)接口)、SPI模式(使用SPI接口,一種串行接口)。系統(tǒng)可以選擇以上任一模式:SPI模式使用SPI通道且電路相對簡單,但速度較慢(kb級);SD卡模式允許4線的高速數(shù)據(jù)傳輸,用于數(shù)據(jù)量大且速度要求較快的場合(Mb級),為滿足傳輸速率要求,使用SDIO接口。
MCU自帶標(biāo)準(zhǔn)的SDIO接口,SD卡連接原理圖見圖3。圖3中,SDIO_均為引腳代號,左半部分為SD卡及管腳,右半部分為主芯片及擴展管腳,SDIO_D0、SDIO_D1、SDIO_D2和SDIO_D3為SD數(shù)據(jù)傳輸線引腳,SDIO_CK為同步時鐘線,SDIO_CMD為命令引腳線。使用自帶的SDIO接口驅(qū)動,在4位模式下最高通信速度可達48 MHz(分頻器旁路時),最高每秒可傳輸24 M字節(jié)數(shù)據(jù)(分頻系數(shù)為2)。
圖3 SD卡連接原理圖
SDIO支持3種總線模式,復(fù)位后,默認情況下,僅一位用于數(shù)據(jù)傳輸。初始化后,主機可以改變數(shù)據(jù)總線的寬度,包括4位傳輸或8位傳輸用于數(shù)據(jù)傳輸。
SDIO模式下,SD卡和MCU的通信采用應(yīng)答機制,單片機每發(fā)送一個命令,SD卡都會返回一個應(yīng)答,以告知主機該命令的執(zhí)行情況,或者返回主機需要獲取的數(shù)據(jù)。
1)初始化設(shè)計。為實現(xiàn)SDIO驅(qū)動SD卡,利用相關(guān)指令對SD卡進行初始化,也為數(shù)據(jù)的讀寫做準(zhǔn)備。
SD卡初始化流程原理圖如圖4所示,MCU上電后發(fā)送CMD0命令(對SD卡進行軟復(fù)位)。之后發(fā)送CMD8命令(用于區(qū)分SD卡的版本,不同版本卡容量不同),且只有V2.0及以后版本的SD卡才支持CMD8命令。在發(fā)送CMD8命令的時候,其可以設(shè)置VHS位,該位值確定主機供電范圍,當(dāng)主機提供了SD卡不支持的電壓范圍時,SD卡處于非活動狀態(tài),將忽略所有的總線傳輸。之后發(fā)送ACMD41命令(確認卡的操作電壓范圍),并通過HCS位來告訴SD卡,該位值表示主機是否支持高容量SDHC卡(儲存容量在2G以上的SD卡),當(dāng)收到HCS=1時,初始化即完成。
圖4 SD卡初始化流程原理圖
2)SD卡讀寫操作。在SD存儲器中,數(shù)據(jù)是以數(shù)據(jù)塊的形式進行傳輸?shù)摹D5為SDIO多數(shù)據(jù)塊讀寫,其主要流程為:從機在收到主機相關(guān)命令后,開始發(fā)送數(shù)據(jù)塊給主機,所有數(shù)據(jù)塊都帶有CRC校驗值(CRC由SDIO硬件自動處理),單個數(shù)據(jù)塊讀的時候,在收到1個數(shù)據(jù)塊以后即停止,不需要發(fā)送停止命令(CMD12)。但多數(shù)據(jù)塊讀寫時,SD卡將一直發(fā)送數(shù)據(jù)給主機,直到接收到主機發(fā)送的停止命令(CMD12)。數(shù)據(jù)塊寫操作同數(shù)據(jù)塊讀操作基本類似,只是數(shù)據(jù)塊寫的時候,多了一個繁忙判斷,新的數(shù)據(jù)塊必須在SD卡非繁忙的時候發(fā)送。
圖5 SDIO多數(shù)據(jù)塊讀寫
3)程序流程。參考《EC20通用AT指令手冊》,MCU與EC20的通信主要通過MCU向串口發(fā)送AT指令。網(wǎng)絡(luò)信號強度的獲取則通過向EC20發(fā)送問詢指令“AT+CSQ”,用來獲取信號響度,獲得返回值rssi。rssi表示信號強度指示,用來判定信號鏈接質(zhì)量,rssi使用無量綱單位dBm,rssi與信號功率P(mW)的公式如下:
rssi=(10log10P+113)/2。
(1)
通過查閱《EC20通用AT指令手冊》??傻玫絩ssi值與信號功率P對應(yīng)關(guān)系,并進行信號強度分級。需注意的是當(dāng)rssi=99 dBm時,表示檢測無信號,需要檢查SIM卡或天線是否正確安裝。
系統(tǒng)運行過程中,MCU周期性發(fā)送指令查詢網(wǎng)絡(luò)強度,若船舶行駛至信號較弱的航區(qū),MCU判斷信號較差至無法傳輸時,數(shù)據(jù)將攜帶時間戳儲存至SD卡中,當(dāng)判斷信號強度恢復(fù)后,本地緩存數(shù)據(jù)將根據(jù)時間順序和當(dāng)前數(shù)據(jù)同時進行無線發(fā)送。數(shù)據(jù)緩存流程圖如圖6所示。
圖6 數(shù)據(jù)緩存流程圖
按上述流程,SD卡初始化過程及讀寫過程均封裝在函數(shù)內(nèi),并在主函數(shù)內(nèi)調(diào)用。通過發(fā)送CSQ指令,返回信號強度信息存入緩存數(shù)組中,同時將信號強度進行分級以作為判斷條件。通過持續(xù)判定信號強度,當(dāng)需要本地緩存時,數(shù)據(jù)動態(tài)寫入SD卡扇區(qū)中;恢復(fù)發(fā)送時,若SD卡存在本地緩存數(shù)據(jù)時,將和當(dāng)前數(shù)據(jù)一起無線發(fā)送出去,同時刷新扇區(qū)。
為了測試設(shè)計的系統(tǒng)性能,通過搭建功能測試平臺,在實驗室環(huán)境下進行功能測試,為了驗證信號較差情況下數(shù)據(jù)的緩存和信號恢復(fù)后數(shù)據(jù)的重新發(fā)送,模擬數(shù)據(jù)可以設(shè)置為有規(guī)律的固定數(shù)據(jù)幀,同時模擬無線信號中斷時,當(dāng)前數(shù)據(jù)和歷史數(shù)據(jù)應(yīng)該可以被區(qū)分。
在實驗室內(nèi)搭建的測試環(huán)境中,硬件包括1臺PC機、1塊無線傳輸板、1個24 V電源和1個USB/CAN轉(zhuǎn)換器,軟件包括Keil5,CANTest、網(wǎng)絡(luò)調(diào)試助手及“花生殼”。給發(fā)送板上電使其在正常狀態(tài)下工作,利用CANTest向CAN總線輸入CAN信號以模擬采集的數(shù)據(jù),MCU無線發(fā)送數(shù)據(jù)包,通過“花生殼”將本地PC端口映射至公網(wǎng)IP以模擬岸基的遠程數(shù)據(jù)顯示,設(shè)置對應(yīng)的內(nèi)網(wǎng)IP和端口,使數(shù)據(jù)在網(wǎng)絡(luò)調(diào)試助手上顯示。模擬數(shù)據(jù)發(fā)送中斷狀態(tài)(將卡拔出,或者拆掉4G天線),待20 s后恢復(fù)數(shù)據(jù)發(fā)送,利用網(wǎng)絡(luò)調(diào)試助手驗證緩存數(shù)據(jù)與發(fā)送數(shù)據(jù)的一致性。
正常工作情況下,MCU發(fā)送長度為72字節(jié)的數(shù)據(jù)包。且第2、3個字節(jié)數(shù)據(jù)由CAN總線上ID為0x1811273d的第5、6字節(jié)獲取。通過控制在CANTest的發(fā)送功能中設(shè)置不同數(shù)據(jù)位來改變數(shù)據(jù)幀頭兩位字節(jié)數(shù)據(jù),以區(qū)別當(dāng)前和歷史數(shù)據(jù),在線狀態(tài)時數(shù)據(jù)為0xAAAA,掉線狀態(tài)時數(shù)據(jù)為0xBBBB。
系統(tǒng)正常工作后,數(shù)據(jù)包的發(fā)送頻率為1s,數(shù)據(jù)幀的第2、3個字節(jié)為標(biāo)志位。正常工作狀態(tài)發(fā)送0x1811273d(00 00 00 00 AA AA 00 00),使數(shù)據(jù)幀標(biāo)志位為AA AA(模擬當(dāng)前數(shù)據(jù)),并拆去4G天線,同時改變CAN數(shù)據(jù),發(fā)送0x1811273d(00 00 00 00 BB BB 00 00),使數(shù)據(jù)幀標(biāo)志位為BB BB(模擬歷史數(shù)據(jù)),待20 s后恢復(fù)天線連接,發(fā)現(xiàn)數(shù)據(jù)以當(dāng)前時間和歷史時間交替發(fā)送出來。
本文內(nèi)河船機排放監(jiān)測系統(tǒng)使用外置SD卡儲存電路來實現(xiàn)數(shù)據(jù)的緩存,并根據(jù)實時問詢信號強度來實現(xiàn)恢復(fù)發(fā)送機制。通過驗證,模擬信號丟失的情況下,數(shù)據(jù)可以緩存至儲存模塊中,且在信號恢復(fù)后,歷史數(shù)據(jù)和當(dāng)前數(shù)據(jù)可交替發(fā)出。