999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

一種輕量級物聯網網關的實現*

2015-12-15 07:57:05岑宏杰張喜生
深圳職業技術學院學報 2015年1期

岑宏杰,張喜生

(深圳職業技術學院 電子與通信工程學院,廣東 深圳 518055)

一種輕量級物聯網網關的實現*

岑宏杰,張喜生

(深圳職業技術學院 電子與通信工程學院,廣東 深圳 518055)

針對物聯網工程應用,設計了一種低成本的輕量級物聯網網關.該網關采用32位Cortex-M3微處理器STM32F107VC和開源嵌入式操作系統FreeRTOS作為系統平臺,運行FAT文件系統、TCP/IP和Modbus協議,通過RS485網絡和433MHz無線網絡采集現場傳感器數據,并可將數據存儲于SD卡,具有以太網和GPRS DTU 2種連接Internet的通信鏈路,支持通過2種鏈路上傳數據到服務器或接收服務器的遠程控制.網關成本低、功耗小、多鏈路、通信實時性好,適合應用于物聯網監測領域.

物聯網;網關;FreeRTOS;LwIP;Modbus;TCP/IP

在物聯網工程應用中,需要將不同通信接口和協議的設備進行互聯,實現現場設備的數據采集和互聯網遠傳.目前市場現有的一些網關產品,價格昂貴,數據采集端口較少,缺少對有線無線網絡混合應用的支持,在組網靈活性上有較大限制,不利于物聯網技術的推廣應用.如何在可接受的成本下,快速可靠地實現現場設備數據采集和異構網絡之間的互聯通信,是物聯網應用系統能否成功推廣的關鍵[1].

針對低成本、分布式多點監測、無線有線儀表共存的物聯網監測系統的特點,本文設計開發了一個輕量級的物聯網網關,可以低成本實現TCP/IP網絡和Modbus現場總線之間的數據互通.

1 網關硬件設計

網關具備2種數據上傳鏈路:Ethernet和GPRS,滿足數據上傳接入Internet服務器的需求.另外,由2路RS485總線、1路433MHz無線通道構成現場數據采集鏈路.其中,RS485采集有線設備數據,而433MHz無線通道負責采集無線傳感器的數據.同時支持SD卡本地存儲系統日志記錄.網關在系統中的應用如圖1所示.

網關需要具備多個通信接口和足夠的多路通信處理能力.綜合考慮成本、功耗、性能的要求,設計方案采用了意法半導體公司的STM32F107VC微處理器作為核心芯片,該處理器基于ARM Coertex-M3 32位 RISC內核,工作頻率72MHz,片上集成多個通信接口:3個SPI、5個USART、2個CAN、1個Ethernet MAC,滿足本應用的要求.高集成度有利于簡化系統設計和減低成本.芯片本身還具備3個DMA控制器,可以提高通信的數據吞吐率,減小通信延遲,提高系統實時性.此外芯片具有完備的節電模式和時鐘電源管理,能夠實現優秀的低功耗性能[2].

圖1 網關應用示意圖

網關硬件框圖如圖2所示.設計方案充分利用STM32F107提供的通信接口,使網關在低成本下實現豐富的通信接口能力.

1.1 微處理器和以太網接口電路設計

STM32F107VC芯片內部集成10/100 Ethernet MAC控制器,只需外接PHY接口芯片便可實現以太網通信.接口芯片使用TI公司的DP83848CVV.主控芯片的MAC提供了2種接口:MII和RMII,為了節省I/O資源,本設計采用只需較少信號線的RMII接口.

在RMII模式下,數據總線寬度由MII模式的4位變成2位,MAC和PHY工作時鐘頻率須由原來的25MHz提高到50MHz,通過配置STM32F107VCT內部的PLL,在芯片MCO引腳輸出50MHz時鐘提供給MAC和PHY使用,使整個系統只需1個時鐘源[2].

PCB布局時注意退耦電容靠近PHY器件放置,通過最短的路徑到電源.差分信號對TD[1:0]和RD[1:0]平行走線,以保證長度匹配,避免共模噪聲和 EMI 輻射.同時避免信號線上有交叉或者通孔,因為通孔會造成阻抗的非連續性.信號線不要跨越分割的平面,否則會造成無法預測的回路電流,使得信號質量惡化并產生EMI問題,最終造成以太網通信不穩定[3].

以太網RJ-45接口采用HR911105A,其自身集成了網絡變壓器,使得網關的PCB布局更緊湊簡潔.

圖2 網關硬件框圖

1.2 RS485接口電路設計

RS485標準中節點數為32,實際應用時往往存在需要連接多于32個節點設備的情況,因此,設計采用Exar公司的SP485REN總線收發器,該芯片特點是1/10單位負載,輸入阻抗≥120 kΩ,可以驅動最多400個總線節點,通信速率1Mbps.STM32F107的UART4 I/O管腳可以兼容5V電平信號,可以與工作電壓為5V的SP485REN芯片直接連接[4].

在網關的工作環境中存在高頻瞬態干擾的可能,需采取保護措施避免接口器件損壞.SP485REN芯片本身集成 ESD保護,電路還設計了PPTC和雙向TVS管來保護RS485接口,避免浪涌產生的高壓損壞接口器件.將SP485REN的收發使能端短接,通過電阻下拉到地,避免因上電期間控制端口處于懸浮狀態造成總線沖突.

1.3 其它電路

除了RS485有線網絡,網關還可通過433MHz無線網絡采集現場數據,無線通信RF收發器選用TI的CC1101芯片,硬件支持數據包處理、數據緩沖、突發數據傳輸、清晰信道評估、連接質量指示和無線喚醒等功能,集成了一個高度可配置的調制解調器,支持不同的調制格式,數據傳輸率最高可達500kbps.CC1101通過6根I/O口與STM32F107相連,實現通訊參數配置、工作模式選擇、數據通訊等.其中組成SPI接口的管腳SCLK、SO、SI、CSn負責CC1101接收模式選擇、發射模式選擇、RF信道選擇、RF功率設置、工作模式切換等,而GDO0、GDO2作為輸出管腳可以作為FIFO狀態信號輸出使用[5].在沒有以太網接入的場合,網關可以通過GPRS接入Internet,為此設計了一路RS232接口用來外接GPRS DTU,接口芯片采用ST的ST3241EB,具有±15 kV ESD保護,速率達400 kbps.

2 網關軟件設計

為了支持多種通信協議并行處理,并保證軟件的擴展性,使用開源的FreeRTOS作為操作系統,在其上完成通信驅動開發,移植FAT16文件系統和Modbus、TCP /IP協議棧,實現數據記錄、互聯網接入和網絡間的互聯通信.

軟件整體結構分為驅動層、系統層、中間層、應用層,如圖3所示.

驅動層主要負責硬件驅動,包括Timer、SPI、USART、DP83848等驅動,系統層由RTOS構成,負責整個網關各個任務的調度、通信和時間管理.中間層由FAT16、Modbus 和TCP/IP協議棧構成,提供文件系統讀寫、解析、封裝各鏈路通信數據的功能.網關的參數設置、數據記錄、GPRS DTU撥號聯網、以太網和串口報文的轉發等功能由應用層實現,主要包含串口通信任務ComTask、以太網通信任務TCPTask、數據記錄任務LogTask、參數設置任務SettingTask、撥號聯網任務DTU Task等.

2.1 Free RTOS的移植

FreeRTOS是一個基于微內核的輕量級嵌入式實時操作系統,系統主要功能包括任務管理、時間管理、信號量、消息隊列、內存管理、記錄功能等,具有源碼公開、免費授權、可移植、可裁減、調度策略靈活等的特點,可滿足很多小型嵌入式系統的應用[6].FreeRTOS的移植工作涉及以下源文件:

1)與內核有關的3個文件,分別是list.c、queue.c、tasks.c ,位于FreeRTOSSource目錄

2)內存分配文件使用heap_2.c,位于FreeRTOSSourceportableMemMang

3)與編譯器和平臺相關的代碼port.c、portmacro.h,根據網關所用的編譯器和平臺,選擇位于FreeRTOSSourceportableRVDSARM_CM3目錄下的文件.

4)FreeRTOS內核頭文件,文件位于FreeRTOSSourceinclude.

將以上文件放到項目的.FreeRTOS目錄下,同時將STM32 V3.5.0版本固件庫放到.Library目錄下.打開Keil MDK-ARM 的項目設置,在Target options -> C/C++ 中 Preprocessor Symbols中增加USE_STDPERIPH_DRIVER及STM32F10X_CL宏定義,在Include path 中包含相應的頭文件路徑,然后修改啟動代碼startup_stm32f10x_cl.s,在__heap_limit 區段添加:

IMPORT xPortPendSVHandler

IMPORT xPortSysTickHandler

IMPORT vPortSVCHandler

在__Vectors區段中斷向量表,將固件庫的SVCall Handler、PendSV_Handler、SysTick Handler更改為 FreeRTOS的vPortSVCHandler 、xPortPendSVHandler、xPortSysTickHandler,這3個中斷向量均在Port.c中實現,其中vPortSVCHandler 保存堆棧地址,觸發SVC軟中斷,并啟動第一個任務;xPortPendSVHandler保護上下文,實現任務切換;xPortSysTickHandler 實現系統心跳時鐘中斷,驅動系統的任務切換調度.

修改配置文件FreeRTOSConfig.h,進行必要配置,然后在MDK-ARM中添加以上文件[7-9].編譯通過后,就可在操作系統上進行網關應用層開發.

圖3 網關軟件框圖

2.2 以太網驅動和TCP / IP的移植

TCP/IP協議棧采用開源LwIP協議棧.LwIP可以在較小的RAM尺寸下,擁有完整功能的TCP 協議,適合應用在資源有限的輕量級物聯網網關中.LwIP的移植工作主要涉及源程序對于編譯器、操作系統和網絡驅動3方面的程序修改[10].

編譯器相關的移植改動,主要是添加修改文件cc.h,重新定義u8_t, s8_t, u16_t, s16_t, u32_t, s32_t, mem_ptr_t等數據類型以及結構體字節對齊宏定義.

操作系統模擬層的移植,主要是實現與操作系統相關的接口,如線程,信號量,互斥鎖,系統時間等函數.依據LwIP的sys_arch.txt描述,分別對sys_arch.h、sys_arch.c兩個文件進行修改.首先在sys_arch.h中對LwIP使用的信號量、消息隊列和線程類型重新定義,其次在sys_arch.c中,用LwIP的mailbox和semaphore函數接口形式,對FreeRTOS的queue和semaphore進行封裝.包括sys_sem_new、sys_sem_free、sys_sem_signal、sys_arch_sem_wait等信號量操作函數和sys_mbox_new、sys_mbox_free、sys_mbox_post、sys_arch_mbox_fetch等郵箱操作函數.如實現sys_mbox_post的代碼如下:

void sys_mbox_post(sys_mbox_t mbox, void *data){

while ( xQueueSendToBack(mbox, &data, portMAX_DELAY ) != pdTRUE ){}

}

該函數用于將消息發送至消息隊列中,是一個阻塞型函數,只有當消息成功發送后,函數才返回.sys_arch..其余函數的實現不一一列舉.

網絡驅動的移植主要是修改ethernetif.c文件,重新實現ethernetif_init、ethernetif_input、low_level_init、 low_level_output、low_level_input等函數.其中ethernetif_init負責指定網絡主機名和網卡描述,設置網卡MAC地址,指定發送報文函數,并調用low_level_init完成網卡硬件初始化;ethernetif_input負責讀取報文并發送給協議棧處理;low_level_init負責底層硬件初始化,low_level_output是底層硬件發送數據函數,low_level_input是底層硬件接收數據函數[11].

LwIP協議棧啟動時,先調用ethernetif_init進行初始化,該函數又調用low_level_init對網卡進行初始化.當協議棧有數據發送時,協議棧調用low_level_output進行數據發送.當有數據到達時,中斷服務ETH_IRQHandler響應并釋放信號量,平常處于阻塞狀態的以太網接收任務ethernetif_input被激活,調用low_level_input獲取網卡報文數據,并把報文數據通過消息隊列的形式發給LwIP協議棧處理,然后再給應用層任務.應用層任務通過阻塞型的Sequential API來使用LwIP的通信服務.移植之后的LwIP任務驅動模型如圖4所示.

根據模型,首先實現以太網中斷服務程序.當接收到數據引發中斷時,ISR內釋放s_xSemaphore信號量后清除相應標志位:

void ETH_IRQHandler(void){

portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;

if ( ETH_GetDMAFlagStatus(ETH_DMA_FLAG_R) == SET){ /* Frame received */

5)索緒爾的結構符號學強調符號與所指的事物之間的雙項關系,而弗雷格等人在此基礎上加入的意義項,使這雙項關系變成符號——意義——事物的三項關系。詳見參考文獻[25]:361-362.

/* Give the semaphore to wakeup LwIP task */

xSemaphoreGiveFromISR( s_xSemaphore, &xHigherPriorityTaskWoken );

}

ETH_DMAClearITPendingBit(ETH_DMA_IT_R); /* Clear the interrupt flags. */

ETH_DMAClearITPendingBit(ETH_DMA_IT_NIS); /* Clear the Eth DMA Rx IT pending bits */

if( xHigherPriorityTaskWoken != pdFALSE ){ /* Switch tasks if necessary. */

portEND_SWITCHING_ISR( xHigherPriorityTaskWoken );

}

然后定義以太網接收任務ethernetif_input,在任務內等待s_xSemaphore信號量,然后調用low_level_input獲取數據,再使用指針s_pxNetIf->input指向的處理函數tcpip_input將數據發送到消息隊列.

void ethernetif_input( void * pvParameters ){

struct pbuf *p;

f

or( ;; ) {

if(xSemaphoreTake(s_xSemaphore, macBLOCK_TIME_WAITING_FOR_INPUT)==pdTRUE) {

p = low_level_input( s_pxNetIf );

if (ERR_OK != s_pxNetIf->input( p, s_pxNetIf)) {

pbuf_free(p);

p=NULL;

}

}

}

}

在low_level_init中創建ethernetif_input任務,建立MAC控制器和DMA的通道.

此外,PHY和MAC界面的時鐘信號由STM32F107的 MCO引腳提供,所以需要配置MCO輸出50MHz時鐘、STM32F107的RMII接口管腳、MAC控制器的10M/100M自適應、硬件CRC、DMA收發等,這些工作由init_ethernet函數完成.網關程序在上電后,啟動LwIP協議棧之前,需要先調用init_ethck和init_ethernet進行基本硬件配置.完成以上工作就可實現LwIP在網關中運行.

2.3 UART驅動和Modbus RTU / TCP開發

網關支持外接GPRS DTU和Modbus RTU串行鏈路,需要開發串口驅動.驅動采用DMA中斷方式,可以充分發揮STM32F107的硬件性能,減少CPU等待時間,提高通信吞吐率.在串口初始化時配置DMA通道,將發送DMA設為普通模式,而接收DMA設為環形模式.因為串口通信工作在半雙工模式下,因此收發可共用緩沖區以節省RAM開銷.

在定時中斷中查詢DMA緩沖區數據,當大于Modbus報文幀間隔時間數據指針沒有變化且數據不為零時,則將收到的報文數據通過消息隊列發送給Modbus協議棧,由協議對報文進行解析、校驗,并根據功能碼、數據單元進行事務處理.處理完后,返回響應報文,如果需要轉發,則將數據交給TCP Task處理.

圖4 LwIP任務驅動模型

對Modbus TCP報文的接收,是在502端口創建TCP偵聽任務,當收到報文時,將報文通過消息隊列發給協議棧處理.

在FreeRTOS和LwIP基礎上,實現Modbus RTU/TCP應用層協議相對簡單,主要是根據協議標準,對報文字段進行解析、封裝、事務處理.Modbus TCP報文的MBAP頭部UnitID就是RTU的SlavID,當報文校驗無誤后,PDU部分可以在串行鏈路和TCP端口間直接轉發.由于TCP是基于可靠連接的服務,Modbus TCP報文可以不帶CRC校驗域[12].

2.4 SD驅動和文件系統移植

網關支持SD卡和文件系統,以保存數據記錄.STM32F107本身不帶SDIO接口,所以采用SPI模式接口讀寫SD卡.SD卡驅動實現MSD_WriteByte、MSD_ReadByte、MSD_ReadBlock,MSD_WriteBlock等函數,完成讀寫字節和塊功能.文件系統采用FAT16格式,使用HCC Embedded的FAT SL文件系統進行移植.移植工作主要是實現物理介質接口函數,修改配置頭文件和系統時間函數.接口函數包括:磁盤初始化F_DRIVERINIT、獲取磁盤信息F_GETPHY、讀扇區F_READSECTOR、寫扇區F_WRITESECTOR、讀磁盤狀態F_GETSTATUS、卸載磁盤F_RELEASE.使用SD卡的讀寫函數重新實現這些接口函數.然后在配置頭文件config_fat_sl.h頭文件中定義4個常量F_FS_THREAD_AWAR、F_MAX_LOCK_WAIT_ TICKS 、F_MAXPATH、F_SECTOR_SIZE,分別含義為多線程可重入、最大阻塞節拍、最長文件名和扇區大小.在psp_rtc.c中實現系統時間函數psp_getcurrenttimedate,就可在文件系統實現時間戳.經過以上修改后文件系統就可以運行了[13].

測試和應用結果表明,該網關進行TCP/IP和串行鏈路間的網絡轉發,通信穩定可靠,數據轉發延遲小,系統響應速度快,實時性強,整個系統的通信效率高,設備運行良好,具有較高的性價比.

[1] 朱洪波,楊龍祥,朱琦.物聯網技術進展與應用[J].南京郵電大學學報(自然科學版),2011(01):1-6.

[2] STMicroelectronics Inc. Reference manual of STM32F107xx advanced ARM-based 32-bit MCUs Rev15[M/OL].[2014-10-13]. http://www.st.com/ st -web-ui/static/active/en/resource/technical/document/r eference_manual/CD00171190.pdf.

[3] TI Inc. DP83848C PHYTER Commercial Temperature Single Port 10/100 Mb/s Ethernet Physical Layer Transceiver Rev.E[M/OL].(2008-05-8)[2014-10-13].http://www.ti.com/lit/ds/symlink/dp83848c.pdf.

[4] EXAR Inc. 1/10th Unit Load RS-485 Transceiver Version 1.0.0[M/OL].[2014-10-13]. https://www.exar.com/ common/content/document.ashx?id=1583&languageid=1033.

[5] TI Inc. CC1101 Low-Power Sub-1 GHz RF Transceiver Rev.I [M/OL].(2013-11-05)[2014-10-13]. http:// www. ti.com/lit/ds/symlink/cc1101.pdf.

[6] Real Time Engineers Ltd. FreeRTOS[DB/OL]. [2014-10-13].http://www.freertos.org/index.html.

[7] Real Time Engineers Ltd .FreeRTOS Quick Start Guide [DB/OL]. [2014-10-13].http://www.freertos.org/Free-RTOS-quick-start-guide. html

[8] 趙震奇.FreeRTOS在數據采集傳輸系統中的設計與應用[J].寧波職業技術學院學報,2013(06):84-88.

[9] 張龍彪,張果,王劍平,等.嵌入式操作系統FreeRTOS的原理與移植實現[J].信息技術,2012(11):31-34.

[10] Free Software Foundation, Inc. lwIP - A Lightweight TCP/IP stack-Summary[DB/OL].[2014-10-13].http:// savannah.nongnu.org/projects/lwip/.

[11] 王祖云,楊思國,王建偉,等.嵌入式LwIP協議棧的移植與測試研究[J].計算機與數字工程,2014(02):272-275.

[12] GB/T 19582-2008. 基于Modbus協議的工業自動化網絡規范[S].

[13] Real Time Engineers Ltd. FreeRTOS+FAT SL[DB/OL]. [2014-10-13].http://www. freertos.org/FreeRTOS-Plus /FreeRTOS_Plus_FAT_SL/FreeRTOS_Plus_FAT_SL.shtml.

Implementation of Lightweight IOT Gateway

CEN Hongjie, ZHANGXisheng

(School of Electronic and Communication Engineering, Shenzhen Polytechnic, Shenzhen, Guangdong 518055, China)

In this paper, we design and implement a low cost and lightweight gatewayfor engineering application of the Internet of things, adopting STM32F107VC based on 32 bit Cortex-M3 core and open source embedded operating system FreeRTOS as the system platform, operated by FAT file system, TCP/IP and Modbus protocol. Gateway can acquire sensor data in field through RS485 or 433MHz wireless network, and store them on build-in SD memory card. It can connect Internet by using link of Ethernet or GPRS, transmit data to server, and be controlled remotely. Characterized by low cost, low power, multi-interface, and real-time, it offers a more cost-efficient solution to supervisory system in IOT.

Internet of things; Gateway; FreeRTOS; LwIP; Modbus; TCP/IP

TP391.44;TN929.5

A

1672-0318(2015)01-0012-06

10.13899/j.cnki.szptxb.2015·01, 003

2014-10-13

*項目來源:深圳職業技術學院校級重點科研項目資助(2210K3010001)

岑宏杰(1978-),男,廣西梧州人,講師,主要研究方向為嵌入式系統開發.

張喜生(1965-),男,山西代縣人,副教授,主要研究方向為軟件技術、網絡技術、移動互聯技術.

主站蜘蛛池模板: 一级一毛片a级毛片| 亚洲无码视频一区二区三区| 亚洲国产天堂在线观看| 爱色欧美亚洲综合图区| 一区二区三区毛片无码| 国产欧美一区二区三区视频在线观看| 国内精品伊人久久久久7777人| 在线看片免费人成视久网下载| 午夜国产大片免费观看| 国产精品久久久久婷婷五月| 国产丝袜无码精品| 国产成人福利在线| 久久国产精品娇妻素人| 大陆国产精品视频| 欧美在线中文字幕| 亚洲第一区精品日韩在线播放| 九九热这里只有国产精品| 亚洲精品无码日韩国产不卡| 国内熟女少妇一线天| 国内自拍久第一页| 五月天福利视频| 91精品情国产情侣高潮对白蜜| 91精品综合| 国产精品久线在线观看| 国产91精品久久| 亚洲精品视频免费| 99re经典视频在线| 2021国产精品自产拍在线观看 | 国内精自线i品一区202| 国产区在线看| 三级毛片在线播放| 亚洲欧美在线精品一区二区| 亚洲Va中文字幕久久一区| 最新日韩AV网址在线观看| 欧美中文字幕在线视频| 福利在线一区| 欧美性精品| 国产一区二区精品高清在线观看| 日本午夜三级| 亚洲天堂视频网| 久久毛片基地| 四虎精品国产AV二区| 亚洲高清国产拍精品26u| 久久综合AV免费观看| 青青极品在线| 黄色免费在线网址| 欧美成人精品在线| 色综合五月婷婷| 国产成人久久777777| 丁香婷婷久久| www.av男人.com| 大香伊人久久| 色婷婷国产精品视频| 亚洲一级毛片在线播放| 爽爽影院十八禁在线观看| 欧美福利在线| 亚洲AV免费一区二区三区| 欧美区在线播放| 国产精品xxx| 国产成人综合在线视频| 国产91小视频| 九九香蕉视频| 国产午夜精品一区二区三| 2020最新国产精品视频| 国产黑丝一区| 国产精品综合久久久| 欧美午夜在线视频| 一级香蕉视频在线观看| 日韩精品一区二区三区swag| 国产精品微拍| 国产91高跟丝袜| 亚洲女同欧美在线| 91亚洲免费视频| 少妇精品网站| 欧美午夜视频| 亚洲国产日韩欧美在线| 亚洲欧洲日韩久久狠狠爱| 欧美福利在线播放| 狠狠色婷婷丁香综合久久韩国| 青青青国产精品国产精品美女| 欧美a在线看| 国产在线视频欧美亚综合|