文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.2016.03.016
中文引用格式: 董坤,陳波,趙中全. 基于Contiki和有源RFID的設備管理系統的實現[J].電子技術應用,2016,42(3):57-60.
英文引用格式: Dong Kun,Chen Bo,Zhao Zhongquan. Implementation of equipment management system based on Contiki OS and active RFID[J].Application of Electronic Technique,2016,42(3):57-60.
0 引言
隨著物聯網技術的不斷發展,物聯網成為了繼互聯網之后網絡技術發展的又一次高潮,物聯網技術正在實現網絡技術的最后一公里——人與物的連接、物與物的連接。在物聯網發展的技術框架下又有WSN和RFID兩種主要技術,并出現了許多將這兩種技術融合的方式[1],通過結合兩種技術的優點,可以提高融合系統在特定應用下的功能[2]。在眾多應用領域中,實現人對大量物品管理和監測是非常重要的一種應用需求。本文采用WSN節點和RFID閱讀器融合的方式[1]實現了一種設備管理系統,將Contiki無線傳感器網絡協議棧和國家軍用2.45G空中接口協議[6](國軍標)相融合,實現了具有RFID標簽收集功能的網絡節點,以及基于LWIP和Contiki操作系統的邊緣路由器和基于國軍標的RFID標簽。
1 系統總體設計
該系統分為邊緣路由器、閱讀器節點、RFID標簽三大部分,如圖1所示。
邊緣路由器有自己對外的IPv4地址和對內部網的IPv6地址,內部網絡是以邊緣路由器為根的簇狀網絡,邊緣路由器負責IPv4協議到IPv6協議的轉換以及數據的匯聚和傳輸。內部IPv6簇狀網絡是一個多跳網絡,閱讀器節點可以作為中繼節點或者末端節點。閱讀器節點和標簽之間的通信遵循國軍標。用戶通過Web中間件訪問本系統。
2 邊緣路由器設計
2.1 硬件設計和Contiki操作系統的移植
邊緣路由器硬件結構如圖2所示,分為三部分:LPC4337的主處理器、以太網控制器和支持802.15.4的CC2520射頻模塊。本系統使用eclipse和gcc編譯器搭建的開發環境,邊緣路由器、閱讀器節點和RFID標簽三者的開發可以同時在Contiki源碼目錄下進行。由于LPC4337處理器并沒有得到Contiki系統的支持,所以必須將Contiki系統移植到邊緣路由器平臺。Contiki系統組成如圖3。
Contiki系統移植[4]需要準備啟動文件、鏈接腳本、底層驅動庫文件和用于工程管理的makefile文件。圖4所示為移植系統的存儲布局。在FLASH中,從開始依次是中斷向量表、代碼段、只讀數據段、初始化數據段。啟動程序將初始化數據段搬移到SRAM1的相應位置,SRAM1開始部分空間保留給棧,將未初始化數據段BSS的存儲內容清0。所有程序段的起始地址在鏈接腳本中指定。
2.2 LWIP協議棧和Contiki協議棧的融合
邊緣路由器的主要功能是完成IPv4到IPv6的協議轉換。本系統使用LWIP協議棧接入外界網絡,Contiki協議棧運行IPv6,使用代理服務器的方式完成協議轉換。
圖5所示為邊緣路由器協議棧,右邊部分為Contiki協議棧,左邊部分為LWIP協議棧。Contiki協議棧的組成由下往上依次為802.15.4射頻物理層、Contiki radio duty cycle層、802.15.4鏈路層、6LoWPAN適配層、IP層(IPv6)、TCP/UDP/ICMPv6層,最后是上層基于ICMPv6的RPL路由協議和其他應用。LWIP協議棧是支持以太網鏈路層的標準TCP/IP協議棧。Contiki radio duty cycle層是Contiki操作系統中為了實現節點的低功耗而加入的一層,由于邊緣路由器需要較高的處理能力并且是電源供電,所以邊緣路由器協議中的這一層是關閉的。6LoWPAN[5]適配層完成IPv6包頭的壓縮和解壓以及數據包的分片和重組。
應用層的代理服務器負責協議的轉換。客戶與代理服務器通過TCP連接,代理服務器與網絡中的節點在約定的端口上使用UDP通信。用戶連接代理服務器,使用獲取網絡節點命令獲取網絡中可達節點的IP地址,隨后用戶可以發起對指定節點的訪問。代理服務器接收用戶帶有指定訪問節點IP地址的數據,根據目的節點地址進行數據的轉發。用戶與代理服務器使用本系統定義的命令格式。如圖6所示命令格式,服務碼字段一個字節,用來表示當前服務,不同服務期內的命令不能交疊;類型字段一個字節,表示當前的命令類型,不同的命令類型會決定在傳輸地址之后是否攜帶附加的命令;地址個數表示在命令擴展部分開始有幾個地址。
2.3 邊緣路由器的工作過程
邊緣路由器和閱讀器節點之間通過RPL協議組網,多個Contiki線程通過消息傳遞的方式相互協作構成邊緣路由器代理服務器。使用LWIP的raw API和lwtcpserver_process線程構成代理服務器的數據接收和初步解析部分。udp_server_process構成了代理服務器的數據解析與分發部分。邊緣路由器和節點之間通過udp通信,udp_server_process作為網絡中唯一的udp服務器運行在邊緣路由器中。工作過程如圖7所示。只有當邊緣路由器和節點組網完成后用戶才能通過代理服務器獲得關于網絡節點的有效數據。當udp_server_process接收到網絡匯聚到的數據包后,通過lwtcpserver_process將數據返回給訪問客戶端。lwip_process線程用來維持LWIP的正常工作。
3 閱讀器節點的設計
閱讀器節點硬件使用CC2538 SOC芯片,更方便電池供電和安裝部署。Contiki提供了對CC2538的支持,所以設計節點時不需要移植Contiki系統。節點連接了無線傳感器網絡和RFID系統。在無線傳感器網絡系統中,節點作為末端節點或者中繼節點,在RFID系統中,節點是RFID閱讀器,所以閱讀器節點設計的主要工作是將RFID協議棧和Contiki協議棧進行融合。本系統中使用的RFID國軍標協議棧,由于設備管理系統中涉及的管理參數較少,系統中刪減了國軍標中文件傳輸處理部分,只保留標簽盤點和基本控制參數的傳輸部分。RFID系統最關鍵的部分就是標簽的盤點,本系統中在將國軍標協議棧與Contiki協議棧融合的同時,在Contiki系統下實現了RFID國軍標的二進制樹防碰撞算法和收集算法[6]。
3.1 國軍標協議棧和Contiki協議棧的融合
閱讀器節點協議棧如圖8所示,第二層的GJB-contikirdc層一方面將數據包傳遞到上層,另一方面在國軍標協議沒有被觸發時運行Contiki的duty cycle機制以降低功耗。GJBmac層完成國軍標鏈路層的組包和解包。GJBnetwork層根據不同類型的國軍標協議包完成組包和上層多路轉發。由邊緣路由器發來的閱讀器控制命令通過Contiki協議棧,在上層應用中解析,執行相應的國軍標協議動作,喚醒標簽或向已收集到的標簽發送控制命令。閱讀器節點命令執行的結果將會回復給邊緣路由器。
圖9所示為邊緣路由器發給閱讀器節點的請求盤點命令和盤點完成之后節點向邊緣路由器返回的命令。當邊緣路由器收到用戶客戶端指令時,客戶端指令已經封裝了完整的控制指令。邊緣路由器只要確定目的節點地址,復制轉發該盤點指令即可。當閱讀器節點向邊緣路由器返回盤點結果時,由于協議支持的無線數據包最大只有128字節,為避免分包,盤點結果包中規定TAGID數目不超過4個。盤點結果包會多次發送,直到剩余標簽數為0。當盤點的標簽ID傳輸結束后,邊緣路由器再將整合后的結果返回給用戶客戶端。
3.2 閱讀器節點的工作過程
閱讀器節點和邊緣路由器之間使用Contiki協議棧通過UDP通信。節點和邊緣路由器在系統初始化時綁定指定端口,在系統通過RPL協議組網完成之后,通信就能夠開始。
節點的主要工作是收到命令后執行收集標簽動作,這是國軍標協議的核心。節點的工作由四個線程協作完成,分別是udp_client_process(UDP客戶端線程)、GJB_conframeprocess(國軍標接入線程)、GJB_collectframeprocess(國軍標標簽收集線程)和GJB_Revprocess(國軍標數據分發線程)。
如圖10所示,當閱讀器節點通過Contiki協議棧接收到命令數據時,向udp_client_process發送TCPIP_EVENT消息,該線程接收到消息執行指定的動作(主要功能在這里完成)。開始時的數據一定是盤點指令,此時向GJB_conframeprocess發送PROCESS_EVENT_CONNECT消息發起對標簽的盤點。在盤點的過程中直接調用國軍標協議棧的發送函數發送數據。國軍標協議棧收到數據時向國軍標分發線程發送PROCESS_EVENT_MSG消息,分發線程根據數據包的類型決定向接入線程或收集線程發送RPOCESS_EVENT_MSG消息。接入線程和收集線程就是以上述方式接收數據。通過盤點,閱讀器節點獲得標簽信息生成標簽對象。節點中有標簽對象的收集隊列和緩存隊列,當緩存隊列為空時,收集線程將收集到的標簽對象同時加入到收集隊列和緩存隊列中,當下一次啟動盤點時,若已經緩存標簽則直接從緩存隊列中獲取標簽。盤點過程結束時,收集線程向udp_client_process線程發送PROCESS_EVENT_RESPOND消息,udp服務器線程將收集隊列的標簽信息發送出去,并將收集隊列中的標簽對象刷入緩存隊列中,緩存隊列每十分鐘清空一次。
4 標簽
標簽硬件使用CC2538單芯片。標簽的設計是將Contiki協議棧完全替換為只有解包組包功能的一層,在其上實現國軍標協議的標簽狀態機[6]。標簽有唯一的64位ID號,該ID在部署系統前需要與所管理的設備綁定。當多個閱讀器節點同時盤點標簽時會出現沖突。本系統規定最多只有四個閱讀器節點可以同時盤點標簽,同時工作的不同閱讀器節點分配不同的信道,當標簽醒來監聽就緒指令時,收到的就緒指令中指定標簽的工作信道,標簽被哪個閱讀器節點喚醒就跳轉到該閱讀器指定的工作信道中繼續工作,工作完成后恢復到原來的監聽信道。
5 系統測試
在單純的無線傳感器網絡中,每個節點需要周期性地傳輸數據以維持網絡,并且傳輸的組網數據包都大于50字節。將RFID引入到網絡末端,除了標簽每秒蘇醒1 ms監聽,不需要周期性的傳輸組網信息。標簽的工作取決于用戶的訪問,用戶的訪問并不是經常發生的。整個系統只有少部分節點需要組網,這就減少了一部分系統功耗。
6 結論
本文介紹了Contiki操作系統和有源RFID的融合過程,移植了Contiki系統到邊緣路由器平臺,重點說明了邊緣路由器和閱讀器節點的工作過程,最后介紹了標簽和防沖突方法。所實現的系統具有拓撲結構簡單,網絡規模小,對節點處理能力要求低,功耗更低的特點。
參考文獻
[1] 聶濤,陸陽,張鵬,等.RFID和WSN在物聯網下協同機制的分析[J].計算機應用研究,2011,28(6):2006-2007.
[2] 李斌,李文峰.WSN和RFID技術的融合研究[J].計算機工程,2008,34(9):127-128.
[3] CULLER D.RPL:IPv6 routing protocol for low-power and lossy networks[S].IETF RFC6550.2012.
[4] 冀宇鑫,楊冬,秦雅娟,等.基于WSNs平臺的Contiki通用移植方法研究[J].計算機技術發展,2012,22(11):135-136.
[5] SHELLY Z,BORMANN C.6LOWPAN:無線嵌入式物聯網[M].北京:機械工業出版社,2015.
[6] GJB7377-2.2011.軍用射頻識別空中接口協議:2.45GHz參數[S].2011.