丁 磊 張宇揚 鄧杰航 張海笑
(廣東工業大學計算機學院 廣東 廣州 510006)
無線網關用于實現不同無線通信協議間的轉換和數據轉發,對解決異構網絡的通信問題具有重要的作用。常見的無線網關主要包括用于解決單一通信協議與互聯網通信問題[1-4]的無線網關,及基于嵌入式操作系統開發,可以兼容多接口、多協議及多通信標準的無線網關,例如基于MQTT協議設計的無線網關[5-6]與智能家居無線網關[7-9]。
無線網關可以實現兩個方向的數據通信:從云服務器到無線終端設備及從無線終端設備到云服務器[10]。后者往往是小數據量的采集、處理及入庫,而隨著應用的發展,從云服務器到無線終端設備的通信會出現無線終端數量多、數據流量大的情況,容易造成時延和數據擁塞,嚴重時會導致通信無法正常進行。
為使云服務器與無線終端設備實現高速、可靠的通信,并降低網關功耗,本文設計一種低功耗多路并行無線網關,實現了POST通信協議下跨越若干異質網絡的鏈路層或傳輸層之間的可靠通信,提供相鄰的兩種或若干種異質網絡的網關功能,可以使用ZigBee、BLE等一種或多種無線網絡技術與覆蓋范圍內的眾多無線終端設備交換數據,并在保證高吞吐量的前提下實現可靠、穩定且節能的通信。
無線網關應用系統的總體框架如圖1所示,包括云服務器、路由器、無線網關及無線終端設備。云服務器通過路由器將數據傳送到無線網關,無線網關將數據轉發到無線終端設備,或由無線網關定期采集無線終端設備的數據,通過路由器將數據傳送到云服務器。

圖1 無線網關應用系統總體框架
無線網關的硬件結構如圖2所示。主控單元(MCU)選用意法半導體公司的STM32F429,這是一款基于Cortex-M4內核的32位高性能處理器,主頻為180 MHz,同時單塊STM32F429芯片價格較低,具有不錯的性價比;SDRAM選用ISSI公司的64 MB IS42S16400F;Wi-Fi模塊選用上海慶科公司的EMW3162,它內置Cortex-M3微控制器,搭載嵌入TCP/IP協議棧的MiCO物聯網操作系統,波特率設置為115 200,1個停止位,無校驗;兩路UART通用異步收發器可以選用具有UART接口透明傳輸協議的任何無線終端主控模塊,包括BLE、ZigBee等流行的通信模塊,具備靈活性和可擴展性,其波特率設為115 200,1個停止位,無校驗位。

圖2 無線網關硬件結構
本文設計選用開源的嵌入式實時操作系統FreeRTOS[11-13]進行軟件開發。FreeRTOS支持三種調度方式:搶占式調度、時間片調度和合作式調度,本文設計采用搶占式調度和時間片調度混合的模式進行任務調度,不同優先級的任務采用搶占式調度,相同優先級的任務采用時間片調度,且在時間片(Tick)設定的時間結束或調用阻塞式API函數時進行任務調度,形成可變時間片的調度模式以提高程序運行的效率。
本文設計通過自定義的POST通信協議實現多協議適配,以保證異構網絡傳輸層的可靠通信。無線網關可以實現跨傳輸層的數據透明傳輸,只有跨傳輸層的通信鏈路兩端設備需要解析報文數據,而鏈路上的報文轉發設備無須解析報文數據。同時,將系統業務邏輯分離并統一到應用層管理和控制,應用層將業務邏輯分解為若干操作指令和數據,這些操作指令和數據分別下發到目標設備,目標設備按指令執行相應操作,當應用層修改業務邏輯時,只需修改這些指令和數據發送的順序即可。
1) 通信協議(POST)報文定義。報文(POST)包括報頭(Header)和數據(Data)兩部分,跨異構網絡傳輸層的可靠通信通過通信鏈路兩端設備的報文(POST)對交換流程實現。
(1) 報文對為請求報文Prequest與對應的回復報文Preply。
(2) Prequest與Preply采用統一的報文格式,且具有相同的序列號。
2) POST協議通信流程。
(1) 源設備S向目標設備D發送請求(Request)報文Prequest。報頭帶序列號;D可根據源設備地址、序列號和分塊偏移量標識該報文;報文數據段可為指令或數據;發送過程非同步、非阻塞。
(2) D向S發送對應的回復(Reply)報文Preply。報頭的序列號與對應的請求報文的序列號相同;源設備地址與目標設備地址跟Prequest對應字段相反;發送過程非同步、非阻塞;D收到Prequest后,應生成并發送Preply;S收到Preply僅表示Prequest被D成功接收,不表示D成功執行Prequest中的相關指令或操作。但Preply的數據項可帶相應的執行結果或設備狀態等信息;Preply不能用于表示跨傳輸層報文收發失敗,因存在報文在通信鏈路上丟失、嚴重延時的可能。
(3) 若S在預定的時間內沒有收到對應的Preply,則進入發送失敗處理。
(4) 支持POST協議的設備根據目標設備ID將報文轉發至目標設備。
(5) 接收到報文的設備若非目標設備,則不解析和處理報文中的數據。
1) 任務定義。
(1) 數據接收任務(Task_Recv)。實現從Wi-Fi模塊接收云服務器推送的數據,首先判斷接收數據的目標地址是否為無線網關本身,若是則無線網關本地處理,否則就將數據存儲至SDRAM的“接收緩存”。此任務的優先級最高設為6,調度器以中斷方式進行搶占式調度。
(2) 數據拷貝任務(Task_Copy)。實現將數據拷貝至SDRAM的“發送緩存”,以用于按照POST協議向目標地址的轉發,并根據UART無線設備的忙閑狀態分發轉發任務。該任務優先級設置為5。
(3) UART無線設備任務(Task_UartDevice)。最大傳輸單元(Maxim Transmission Unit,MTU)是UART無線設備進行數據拆分的參數,MCU按照MTU將“發送緩存”中的數據發送至UART設備,直至設定的數據通信結束。該任務優先級設置為4,包括兩路UART無線設備任務,以協同方式進行調度。
(4) 數據處理任務(Task_Post)。無線網關根據POST協議定義的指令進行本地處理的任務。該任務優先級設置為3。
(5) 網絡心跳任務(Task_Tick)。無線網關每60 s定時向云服務器發送心跳請求,發送的心跳包在60 s內沒有回復,則無線網關主動重連。該任務優先級設置為2。
(6) 看門狗任務(Task_Iwdg)。3 s進行一次喂狗,如果沒有喂狗成功則網關復位。該任務優先級設置為1。
(7) 空閑任務(Idle)。當上述所有任務均處于阻塞態的時候,將會運行空閑任務,為了降低網關功耗,在沒有任務需要調度時進入低功耗模式,此模式下MCU時鐘關閉,MCU內核停止運行,但外設可以根據需要保持工作。該任務優先級默認為1。
2) 雙緩沖“乒乓”存儲設計。為了協調無線終端設備的低速通信與無線網關高速數據接收的矛盾,本文設計在SDRAM中建立兩級“乒乓”緩沖數據隊列,如圖3所示。第一級緩沖存儲是“接收緩存”R1-R4,用于接收云服務器推送的數據幀,第二級緩沖存儲是“發送緩存”S1-S4,即將“接收緩存”的數據幀拷貝至其中,用于無線終端設備的數據通信。

圖3 雙緩沖“乒乓”存儲結構
3) 任務調度。本文設計通過兩路UART設備實現數據的并行傳輸,以提高無線網關的吞吐量。每路UART設備對應兩個“發送緩存”,這樣就利用軟硬件協同形成了兩級雙緩沖“乒乓”接收及發送機制,提高了數據通信效率。任務調度流程如圖4所示。

圖4 任務調度流程
4) UART設備軟件流程。每路UART設備的狀態包括休眠、啟動、開鎖、上鎖、異常五種狀態。UART設備的數據流圖如圖5所示。

圖5 UART設備通信數據流圖
筆者團隊研發的電子貨架標簽系統(ESLS)[14-15]已經推廣多年。ESLS由部署在云服務器的電子貨架標簽管理系統(EMS)、電子貨架標簽(ESL)、無線網關構成,框架如圖6所示。EMS管理各門店的ESL、無線網關及ESL需要顯示的相關商品信息,當修改商品信息時,EMS根據ESL的型號,生成ESL的顯示數據,傳輸至無線網關,無線網關接收數據后,將數據轉發到其管理的ESL,ESL收到數據并成功更新后,通過無線網關向EMS反饋更新成功信息。

圖6 電子貨架標簽系統(ESLS)框架
測試平臺中云服務器與無線網關通過Wi-Fi通信,ESL與無線網關通過藍牙通信,一個貨架放置10種商品,共兩個貨架包含20個4.2寸黑白ESL。其中UART藍牙設備的MTU為180 Byte,4.2寸黑白ESL的商品信息數據為15 066 Byte,一個MTU數據藍牙通信的時間約為40 ms,一個MTU數據的傳輸時間約為10 ms,時間片(Tick)設為50 ms。
功耗及吞吐量測試結果如表1所示,藍牙通信的對比波形如圖7所示,其吞吐量曲線如圖8所示。

表1 測試結果

(a) 單路藍牙電壓波形

(b) 雙路藍牙電壓波形圖7 藍牙通信對比波形

圖8 吞吐量測試曲線
測試結果表明任務調度中嵌入低功耗模式后,功耗降低約20%,且雙路藍牙在提高近50%吞吐量的情況下并沒有引起功耗上升。
本文設計一種低功耗多路并行無線網關,兼容Wi-Fi、ZigBee、BLE等流行的無線通信協議,基于SDRAM設計雙緩沖“乒乓”存儲體系提高了云服務器的數據推送速度,在實現多路UART設備并行通信的前提下,提高了無線網關的吞吐量。經實際項目應用,無線網關性價比高,靈活性和可擴展性強。