丁 磊 張宇揚(yáng) 鄧杰航 張海笑
(廣東工業(yè)大學(xué)計算機(jī)學(xué)院 廣東 廣州 510006)
無線網(wǎng)關(guān)用于實(shí)現(xiàn)不同無線通信協(xié)議間的轉(zhuǎn)換和數(shù)據(jù)轉(zhuǎn)發(fā),對解決異構(gòu)網(wǎng)絡(luò)的通信問題具有重要的作用。常見的無線網(wǎng)關(guān)主要包括用于解決單一通信協(xié)議與互聯(lián)網(wǎng)通信問題[1-4]的無線網(wǎng)關(guān),及基于嵌入式操作系統(tǒng)開發(fā),可以兼容多接口、多協(xié)議及多通信標(biāo)準(zhǔn)的無線網(wǎng)關(guān),例如基于MQTT協(xié)議設(shè)計的無線網(wǎng)關(guān)[5-6]與智能家居無線網(wǎng)關(guān)[7-9]。
無線網(wǎng)關(guān)可以實(shí)現(xiàn)兩個方向的數(shù)據(jù)通信:從云服務(wù)器到無線終端設(shè)備及從無線終端設(shè)備到云服務(wù)器[10]。后者往往是小數(shù)據(jù)量的采集、處理及入庫,而隨著應(yīng)用的發(fā)展,從云服務(wù)器到無線終端設(shè)備的通信會出現(xiàn)無線終端數(shù)量多、數(shù)據(jù)流量大的情況,容易造成時延和數(shù)據(jù)擁塞,嚴(yán)重時會導(dǎo)致通信無法正常進(jìn)行。
為使云服務(wù)器與無線終端設(shè)備實(shí)現(xiàn)高速、可靠的通信,并降低網(wǎng)關(guān)功耗,本文設(shè)計一種低功耗多路并行無線網(wǎng)關(guān),實(shí)現(xiàn)了POST通信協(xié)議下跨越若干異質(zhì)網(wǎng)絡(luò)的鏈路層或傳輸層之間的可靠通信,提供相鄰的兩種或若干種異質(zhì)網(wǎng)絡(luò)的網(wǎng)關(guān)功能,可以使用ZigBee、BLE等一種或多種無線網(wǎng)絡(luò)技術(shù)與覆蓋范圍內(nèi)的眾多無線終端設(shè)備交換數(shù)據(jù),并在保證高吞吐量的前提下實(shí)現(xiàn)可靠、穩(wěn)定且節(jié)能的通信。
無線網(wǎng)關(guān)應(yīng)用系統(tǒng)的總體框架如圖1所示,包括云服務(wù)器、路由器、無線網(wǎng)關(guān)及無線終端設(shè)備。云服務(wù)器通過路由器將數(shù)據(jù)傳送到無線網(wǎng)關(guān),無線網(wǎng)關(guān)將數(shù)據(jù)轉(zhuǎn)發(fā)到無線終端設(shè)備,或由無線網(wǎng)關(guān)定期采集無線終端設(shè)備的數(shù)據(jù),通過路由器將數(shù)據(jù)傳送到云服務(wù)器。
圖1 無線網(wǎng)關(guān)應(yīng)用系統(tǒng)總體框架
無線網(wǎng)關(guān)的硬件結(jié)構(gòu)如圖2所示。主控單元(MCU)選用意法半導(dǎo)體公司的STM32F429,這是一款基于Cortex-M4內(nèi)核的32位高性能處理器,主頻為180 MHz,同時單塊STM32F429芯片價格較低,具有不錯的性價比;SDRAM選用ISSI公司的64 MB IS42S16400F;Wi-Fi模塊選用上海慶科公司的EMW3162,它內(nèi)置Cortex-M3微控制器,搭載嵌入TCP/IP協(xié)議棧的MiCO物聯(lián)網(wǎng)操作系統(tǒng),波特率設(shè)置為115 200,1個停止位,無校驗;兩路UART通用異步收發(fā)器可以選用具有UART接口透明傳輸協(xié)議的任何無線終端主控模塊,包括BLE、ZigBee等流行的通信模塊,具備靈活性和可擴(kuò)展性,其波特率設(shè)為115 200,1個停止位,無校驗位。
圖2 無線網(wǎng)關(guān)硬件結(jié)構(gòu)
本文設(shè)計選用開源的嵌入式實(shí)時操作系統(tǒng)FreeRTOS[11-13]進(jìn)行軟件開發(fā)。FreeRTOS支持三種調(diào)度方式:搶占式調(diào)度、時間片調(diào)度和合作式調(diào)度,本文設(shè)計采用搶占式調(diào)度和時間片調(diào)度混合的模式進(jìn)行任務(wù)調(diào)度,不同優(yōu)先級的任務(wù)采用搶占式調(diào)度,相同優(yōu)先級的任務(wù)采用時間片調(diào)度,且在時間片(Tick)設(shè)定的時間結(jié)束或調(diào)用阻塞式API函數(shù)時進(jìn)行任務(wù)調(diào)度,形成可變時間片的調(diào)度模式以提高程序運(yùn)行的效率。
本文設(shè)計通過自定義的POST通信協(xié)議實(shí)現(xiàn)多協(xié)議適配,以保證異構(gòu)網(wǎng)絡(luò)傳輸層的可靠通信。無線網(wǎng)關(guān)可以實(shí)現(xiàn)跨傳輸層的數(shù)據(jù)透明傳輸,只有跨傳輸層的通信鏈路兩端設(shè)備需要解析報文數(shù)據(jù),而鏈路上的報文轉(zhuǎn)發(fā)設(shè)備無須解析報文數(shù)據(jù)。同時,將系統(tǒng)業(yè)務(wù)邏輯分離并統(tǒng)一到應(yīng)用層管理和控制,應(yīng)用層將業(yè)務(wù)邏輯分解為若干操作指令和數(shù)據(jù),這些操作指令和數(shù)據(jù)分別下發(fā)到目標(biāo)設(shè)備,目標(biāo)設(shè)備按指令執(zhí)行相應(yīng)操作,當(dāng)應(yīng)用層修改業(yè)務(wù)邏輯時,只需修改這些指令和數(shù)據(jù)發(fā)送的順序即可。
1) 通信協(xié)議(POST)報文定義。報文(POST)包括報頭(Header)和數(shù)據(jù)(Data)兩部分,跨異構(gòu)網(wǎng)絡(luò)傳輸層的可靠通信通過通信鏈路兩端設(shè)備的報文(POST)對交換流程實(shí)現(xiàn)。
(1) 報文對為請求報文Prequest與對應(yīng)的回復(fù)報文Preply。
(2) Prequest與Preply采用統(tǒng)一的報文格式,且具有相同的序列號。
2) POST協(xié)議通信流程。
(1) 源設(shè)備S向目標(biāo)設(shè)備D發(fā)送請求(Request)報文Prequest。報頭帶序列號;D可根據(jù)源設(shè)備地址、序列號和分塊偏移量標(biāo)識該報文;報文數(shù)據(jù)段可為指令或數(shù)據(jù);發(fā)送過程非同步、非阻塞。
(2) D向S發(fā)送對應(yīng)的回復(fù)(Reply)報文Preply。報頭的序列號與對應(yīng)的請求報文的序列號相同;源設(shè)備地址與目標(biāo)設(shè)備地址跟Prequest對應(yīng)字段相反;發(fā)送過程非同步、非阻塞;D收到Prequest后,應(yīng)生成并發(fā)送Preply;S收到Preply僅表示Prequest被D成功接收,不表示D成功執(zhí)行Prequest中的相關(guān)指令或操作。但Preply的數(shù)據(jù)項可帶相應(yīng)的執(zhí)行結(jié)果或設(shè)備狀態(tài)等信息;Preply不能用于表示跨傳輸層報文收發(fā)失敗,因存在報文在通信鏈路上丟失、嚴(yán)重延時的可能。
(3) 若S在預(yù)定的時間內(nèi)沒有收到對應(yīng)的Preply,則進(jìn)入發(fā)送失敗處理。
(4) 支持POST協(xié)議的設(shè)備根據(jù)目標(biāo)設(shè)備ID將報文轉(zhuǎn)發(fā)至目標(biāo)設(shè)備。
(5) 接收到報文的設(shè)備若非目標(biāo)設(shè)備,則不解析和處理報文中的數(shù)據(jù)。
1) 任務(wù)定義。
(1) 數(shù)據(jù)接收任務(wù)(Task_Recv)。實(shí)現(xiàn)從Wi-Fi模塊接收云服務(wù)器推送的數(shù)據(jù),首先判斷接收數(shù)據(jù)的目標(biāo)地址是否為無線網(wǎng)關(guān)本身,若是則無線網(wǎng)關(guān)本地處理,否則就將數(shù)據(jù)存儲至SDRAM的“接收緩存”。此任務(wù)的優(yōu)先級最高設(shè)為6,調(diào)度器以中斷方式進(jìn)行搶占式調(diào)度。
(2) 數(shù)據(jù)拷貝任務(wù)(Task_Copy)。實(shí)現(xiàn)將數(shù)據(jù)拷貝至SDRAM的“發(fā)送緩存”,以用于按照POST協(xié)議向目標(biāo)地址的轉(zhuǎn)發(fā),并根據(jù)UART無線設(shè)備的忙閑狀態(tài)分發(fā)轉(zhuǎn)發(fā)任務(wù)。該任務(wù)優(yōu)先級設(shè)置為5。
(3) UART無線設(shè)備任務(wù)(Task_UartDevice)。最大傳輸單元(Maxim Transmission Unit,MTU)是UART無線設(shè)備進(jìn)行數(shù)據(jù)拆分的參數(shù),MCU按照MTU將“發(fā)送緩存”中的數(shù)據(jù)發(fā)送至UART設(shè)備,直至設(shè)定的數(shù)據(jù)通信結(jié)束。該任務(wù)優(yōu)先級設(shè)置為4,包括兩路UART無線設(shè)備任務(wù),以協(xié)同方式進(jìn)行調(diào)度。
(4) 數(shù)據(jù)處理任務(wù)(Task_Post)。無線網(wǎng)關(guān)根據(jù)POST協(xié)議定義的指令進(jìn)行本地處理的任務(wù)。該任務(wù)優(yōu)先級設(shè)置為3。
(5) 網(wǎng)絡(luò)心跳任務(wù)(Task_Tick)。無線網(wǎng)關(guān)每60 s定時向云服務(wù)器發(fā)送心跳請求,發(fā)送的心跳包在60 s內(nèi)沒有回復(fù),則無線網(wǎng)關(guān)主動重連。該任務(wù)優(yōu)先級設(shè)置為2。
(6) 看門狗任務(wù)(Task_Iwdg)。3 s進(jìn)行一次喂狗,如果沒有喂狗成功則網(wǎng)關(guān)復(fù)位。該任務(wù)優(yōu)先級設(shè)置為1。
(7) 空閑任務(wù)(Idle)。當(dāng)上述所有任務(wù)均處于阻塞態(tài)的時候,將會運(yùn)行空閑任務(wù),為了降低網(wǎng)關(guān)功耗,在沒有任務(wù)需要調(diào)度時進(jìn)入低功耗模式,此模式下MCU時鐘關(guān)閉,MCU內(nèi)核停止運(yùn)行,但外設(shè)可以根據(jù)需要保持工作。該任務(wù)優(yōu)先級默認(rèn)為1。
2) 雙緩沖“乒乓”存儲設(shè)計。為了協(xié)調(diào)無線終端設(shè)備的低速通信與無線網(wǎng)關(guān)高速數(shù)據(jù)接收的矛盾,本文設(shè)計在SDRAM中建立兩級“乒乓”緩沖數(shù)據(jù)隊列,如圖3所示。第一級緩沖存儲是“接收緩存”R1-R4,用于接收云服務(wù)器推送的數(shù)據(jù)幀,第二級緩沖存儲是“發(fā)送緩存”S1-S4,即將“接收緩存”的數(shù)據(jù)幀拷貝至其中,用于無線終端設(shè)備的數(shù)據(jù)通信。
圖3 雙緩沖“乒乓”存儲結(jié)構(gòu)
3) 任務(wù)調(diào)度。本文設(shè)計通過兩路UART設(shè)備實(shí)現(xiàn)數(shù)據(jù)的并行傳輸,以提高無線網(wǎng)關(guān)的吞吐量。每路UART設(shè)備對應(yīng)兩個“發(fā)送緩存”,這樣就利用軟硬件協(xié)同形成了兩級雙緩沖“乒乓”接收及發(fā)送機(jī)制,提高了數(shù)據(jù)通信效率。任務(wù)調(diào)度流程如圖4所示。
圖4 任務(wù)調(diào)度流程
4) UART設(shè)備軟件流程。每路UART設(shè)備的狀態(tài)包括休眠、啟動、開鎖、上鎖、異常五種狀態(tài)。UART設(shè)備的數(shù)據(jù)流圖如圖5所示。
圖5 UART設(shè)備通信數(shù)據(jù)流圖
筆者團(tuán)隊研發(fā)的電子貨架標(biāo)簽系統(tǒng)(ESLS)[14-15]已經(jīng)推廣多年。ESLS由部署在云服務(wù)器的電子貨架標(biāo)簽管理系統(tǒng)(EMS)、電子貨架標(biāo)簽(ESL)、無線網(wǎng)關(guān)構(gòu)成,框架如圖6所示。EMS管理各門店的ESL、無線網(wǎng)關(guān)及ESL需要顯示的相關(guān)商品信息,當(dāng)修改商品信息時,EMS根據(jù)ESL的型號,生成ESL的顯示數(shù)據(jù),傳輸至無線網(wǎng)關(guān),無線網(wǎng)關(guān)接收數(shù)據(jù)后,將數(shù)據(jù)轉(zhuǎn)發(fā)到其管理的ESL,ESL收到數(shù)據(jù)并成功更新后,通過無線網(wǎng)關(guān)向EMS反饋更新成功信息。
圖6 電子貨架標(biāo)簽系統(tǒng)(ESLS)框架
測試平臺中云服務(wù)器與無線網(wǎng)關(guān)通過Wi-Fi通信,ESL與無線網(wǎng)關(guān)通過藍(lán)牙通信,一個貨架放置10種商品,共兩個貨架包含20個4.2寸黑白ESL。其中UART藍(lán)牙設(shè)備的MTU為180 Byte,4.2寸黑白ESL的商品信息數(shù)據(jù)為15 066 Byte,一個MTU數(shù)據(jù)藍(lán)牙通信的時間約為40 ms,一個MTU數(shù)據(jù)的傳輸時間約為10 ms,時間片(Tick)設(shè)為50 ms。
功耗及吞吐量測試結(jié)果如表1所示,藍(lán)牙通信的對比波形如圖7所示,其吞吐量曲線如圖8所示。
表1 測試結(jié)果
(a) 單路藍(lán)牙電壓波形
(b) 雙路藍(lán)牙電壓波形圖7 藍(lán)牙通信對比波形
圖8 吞吐量測試曲線
測試結(jié)果表明任務(wù)調(diào)度中嵌入低功耗模式后,功耗降低約20%,且雙路藍(lán)牙在提高近50%吞吐量的情況下并沒有引起功耗上升。
本文設(shè)計一種低功耗多路并行無線網(wǎng)關(guān),兼容Wi-Fi、ZigBee、BLE等流行的無線通信協(xié)議,基于SDRAM設(shè)計雙緩沖“乒乓”存儲體系提高了云服務(wù)器的數(shù)據(jù)推送速度,在實(shí)現(xiàn)多路UART設(shè)備并行通信的前提下,提高了無線網(wǎng)關(guān)的吞吐量。經(jīng)實(shí)際項目應(yīng)用,無線網(wǎng)關(guān)性價比高,靈活性和可擴(kuò)展性強(qiáng)。