本發(fā)明屬于物聯(lián)網(wǎng)智能網(wǎng)關(guān)技術(shù)領(lǐng)域,尤其涉及一種多數(shù)據(jù)協(xié)議轉(zhuǎn)換的物聯(lián)網(wǎng)智能網(wǎng)關(guān)。
背景技術(shù):
物聯(lián)網(wǎng)是指通過信息感知節(jié)點(diǎn),按照相互約定的協(xié)議將傳感器、執(zhí)行器或者嵌入式設(shè)備與互聯(lián)網(wǎng)連接起來,進(jìn)行信息交換與通信,以實現(xiàn)智能化識別、定位、跟蹤、監(jiān)控和管理。物聯(lián)網(wǎng)在近幾年迅猛發(fā)展,各種各樣的基于物聯(lián)網(wǎng)的應(yīng)用應(yīng)運(yùn)而生。物聯(lián)網(wǎng)應(yīng)用十分廣泛,工業(yè)生產(chǎn)、環(huán)境保護(hù)、軍隊布防、倉儲管理、智能家居、社交網(wǎng)絡(luò)、醫(yī)療研究等各個方面都需要借助物聯(lián)網(wǎng)設(shè)備和應(yīng)用來進(jìn)一步提高效率。
物聯(lián)網(wǎng)應(yīng)用通過傳感器間接或者直接將設(shè)備運(yùn)行狀態(tài)以及數(shù)據(jù)上傳到云服務(wù)器,便可以利用云計算和大數(shù)據(jù)等先進(jìn)技術(shù)手段對數(shù)據(jù)進(jìn)行處理,從而為用戶更好的服務(wù),方便更好的利用控制設(shè)備。
在物聯(lián)網(wǎng)環(huán)境中,分布著成千上萬的數(shù)據(jù)節(jié)點(diǎn),每個節(jié)點(diǎn)都在不停的更新數(shù)據(jù)。由于數(shù)據(jù)信息完全分散,節(jié)點(diǎn)支持?jǐn)?shù)據(jù)傳輸協(xié)議不盡相同,給數(shù)據(jù)收集、數(shù)據(jù)查詢帶來很大的難度。顯然,如果不對數(shù)據(jù)進(jìn)行綜合采集,將會產(chǎn)生很大的網(wǎng)絡(luò)開銷,而且不便于管理,傳輸效率、傳輸安全也得不到保障。在這種情況下,我們需要一種設(shè)備能同時通過近場通訊和遠(yuǎn)程通訊的方式對設(shè)備進(jìn)行管理,不同協(xié)議之間進(jìn)行轉(zhuǎn)換,包括節(jié)點(diǎn)配置、數(shù)據(jù)采集、數(shù)據(jù)處理、設(shè)備控制等功能,這就是物聯(lián)網(wǎng)智能網(wǎng)關(guān)。綜上所述,本發(fā)明主要實現(xiàn)以下功能,設(shè)備管理,多協(xié)議接入功能,協(xié)議轉(zhuǎn)換與標(biāo)準(zhǔn)數(shù)據(jù)傳輸協(xié)議。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的在于提供一種多數(shù)據(jù)協(xié)議轉(zhuǎn)換的物聯(lián)網(wǎng)智能網(wǎng)關(guān),解決了物聯(lián)網(wǎng)應(yīng)用中多節(jié)點(diǎn),多協(xié)議設(shè)備,接入物聯(lián)網(wǎng)云平臺,效率低,復(fù)雜度高的困局。支持多種協(xié)議的設(shè)備接入和物聯(lián)網(wǎng)協(xié)議數(shù)據(jù)上傳到云平臺,從而方便其在工業(yè)和城市物聯(lián)網(wǎng)項目中的推廣和移植。本發(fā)明加入了設(shè)備管理與配置模塊,極大的方便了用戶的使用。
基于物聯(lián)網(wǎng)技術(shù)的智能網(wǎng)關(guān),包括以下功能,設(shè)備管理,多協(xié)議接入,協(xié)議轉(zhuǎn)換與標(biāo)準(zhǔn)數(shù)據(jù)格式數(shù)據(jù)傳輸。為了實現(xiàn)前述功能,本發(fā)明包括以下技術(shù)方案:
物聯(lián)網(wǎng)智能網(wǎng)關(guān)包括嵌入式硬件平臺,操作系統(tǒng)和應(yīng)用軟件三部分。
所述嵌入式硬件平臺主要由嵌入式處理器和外部設(shè)備組成。嵌入式處理器采用TI(德州儀器)am3352處理器,該處理器采基于ARM Cortex-A8架構(gòu),擁有二級高速緩存,通用內(nèi)存接口(支持DDR/DDR2/DDR3),通用存儲接口,內(nèi)部集成了兩個千兆以太網(wǎng)鏈路層接口功能(以太網(wǎng)接口1,以太網(wǎng)接口2),6個UART(串口),2個McSPI,3個I2C接口和一個Jtag接口。外部設(shè)備包括512MDDR3內(nèi)存,512Mnandflash存儲器,一個網(wǎng)口,一個藍(lán)牙模塊,一個WIFI模塊,一個CAN模塊,4個485模塊
所述藍(lán)牙模塊、WIFI模塊和4個485模塊分別通過UART接口與嵌入式處理器連接;DDR3連接到通用內(nèi)存接口;nandflash連接的通用存儲接口;網(wǎng)口連接到以太網(wǎng)接口1;CAN模塊用MCP2510CAN控制芯片實現(xiàn),通過McSPI接口與嵌入式處理器連接。
所述操作系統(tǒng)為開源的linux3.2.0系統(tǒng),通過Jlink仿真器和Jtag接口,將TI提供的uboot和linux3.2.0燒錄到nandfalsh中,然后將TI提供的接口驅(qū)動安裝完畢,實現(xiàn)操作系統(tǒng)在硬件中的部署,同時為應(yīng)用軟件運(yùn)行提供了必要環(huán)境。
所述應(yīng)用軟件主要實現(xiàn)業(yè)務(wù)功能,由三部分組成包括:多協(xié)議數(shù)據(jù)接入系統(tǒng)、網(wǎng)關(guān)內(nèi)部管理系統(tǒng)、網(wǎng)關(guān)內(nèi)部數(shù)據(jù)緩存系統(tǒng)。應(yīng)用軟件是基于linux操作系統(tǒng)的應(yīng)用開發(fā)。通過gcc編譯器將應(yīng)用軟件編譯為可執(zhí)行文件,后通過串口下載到linux操作系統(tǒng)中,并設(shè)置應(yīng)用軟件隨操作系統(tǒng)自動啟動。
所述多協(xié)議數(shù)據(jù)接入系統(tǒng)中由4個Connecter模塊組成。所述Connecter為本發(fā)明提出的抽象概念,每一個Connecter實現(xiàn)一種協(xié)議數(shù)據(jù)交互和解析。Connecter為接入設(shè)備和協(xié)議以及包含的動作的抽象,每個Connecter就是一個智能體。它可以根據(jù)配置,自動識別設(shè)備,進(jìn)行數(shù)據(jù)讀寫,數(shù)據(jù)解析,將數(shù)據(jù)傳遞給需要的Connecter。在計算機(jī)系統(tǒng)中每個Connecter也是一個進(jìn)程。這樣就可以根據(jù)硬件接口增加或者刪減Connecter,可以做到靈活擴(kuò)展網(wǎng)關(guān)功能。本發(fā)明目前支持CanConnecter、ModBusConnecter、MQTTConnecter、HttpConnecter四種,但可以根據(jù)硬件和協(xié)議定制添加Connecter。
所述網(wǎng)關(guān)內(nèi)部管理系統(tǒng)簡稱CMS(Connecter Management System),主要用來做Connecter的管理。由于每個Connecter都是單獨(dú)的進(jìn)程,這樣Connecter的啟動,暫停,停止,等一系列的操控需要專門的系統(tǒng)做管理。CMS根據(jù)客戶端的json配置文檔,來啟動需要的Connecter,并分配Connecter運(yùn)行的json配置文檔。這樣每個啟動的Connecter,就會按照用戶的定義運(yùn)行起來。
由上可知網(wǎng)關(guān)運(yùn)行需要配置文檔,本發(fā)明配置文檔采用json格式。常見的配置文件格式一般有ini,xml,lua或者是一般的text文件,這些格式比較突出的一個問題就是數(shù)據(jù)格式過于冗余,而且功能不夠強(qiáng)大,不支持正則匹配,或者實現(xiàn)解析文件的代碼過多,效率不高等等。而已經(jīng)在web前端流行的json數(shù)據(jù)交互格式,簡潔易用日益成為新的交換格式的標(biāo)準(zhǔn)。
所述網(wǎng)關(guān)內(nèi)部緩存系統(tǒng)采用高性能的Redis內(nèi)存數(shù)據(jù)庫,由于每個Connecter是一個獨(dú)立的進(jìn)程,那么Connecter之間的數(shù)據(jù)交互,就涉及到了進(jìn)程間的通信。常見的進(jìn)程間的通信用管道,信號量,消息隊列,共享內(nèi)存,套接字(socket)通信等。經(jīng)過分析本發(fā)明采用基于套接字的Redis內(nèi)存數(shù)據(jù)庫做數(shù)據(jù)緩沖。Redis是一個key-value存儲系統(tǒng)。它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)、zset(sorted set--有序集合)和hash(哈希類型)。這些數(shù)據(jù)類型都支持push/pop、add/remove及取交集并集和差集及更豐富的操作,而且這些操作都是原子性的。本發(fā)明主要采用Redis基本string存儲,做一對一的Connecter之間的通信,一對多的Connecter模型中采用Redis訂閱發(fā)布模式,這樣一個Connecter向Redis服務(wù)器發(fā)布數(shù)據(jù),那么訂閱此數(shù)據(jù)的Connecter都可以接收到數(shù)據(jù)。
本發(fā)明與傳統(tǒng)網(wǎng)關(guān)不同的地方在于,本發(fā)明支持現(xiàn)有流行的物聯(lián)網(wǎng)協(xié)議MQTT與數(shù)據(jù)平臺進(jìn)行交互。MQTT使用發(fā)布/訂閱消息模式,提供一對多的消息發(fā)布,解除應(yīng)用程序耦合,對負(fù)載內(nèi)容屏蔽的消息傳輸,小型傳輸,開銷很小(固定長度的頭部是2字節(jié)),協(xié)議交換最小化,以降低網(wǎng)絡(luò)流量。作為一種優(yōu)化方案本發(fā)明也支持HTTP協(xié)議,HTTP協(xié)議已經(jīng)成為互聯(lián)網(wǎng)上應(yīng)用最為廣泛的協(xié)議。HTTP協(xié)議穩(wěn)定,安全,但是開銷大,而MQTT輕巧,快速,二者可以互補(bǔ)。作為優(yōu)化方案在與平臺交互的數(shù)據(jù)格式采用json格式,json數(shù)據(jù)有一個個鍵值對組成,我們可以方便的定義數(shù)據(jù),賦予數(shù)據(jù)更多含義,比如數(shù)據(jù)包括數(shù)據(jù)來源,數(shù)據(jù)物理含義,數(shù)據(jù)單位,數(shù)據(jù)長度等等,這樣云平臺對數(shù)據(jù)利用更加方便。
附圖說明
圖1為網(wǎng)關(guān)硬件模塊連接圖。
圖2為本發(fā)明基于物聯(lián)網(wǎng)技術(shù)的智能網(wǎng)關(guān)整體結(jié)構(gòu)圖。
圖3為本發(fā)明網(wǎng)關(guān)內(nèi)部抽象結(jié)構(gòu)圖。
圖4為本發(fā)明CMS內(nèi)部交互圖。
圖5為本發(fā)明內(nèi)部Connecter內(nèi)部數(shù)據(jù)流圖(直接存儲)。
圖6為本發(fā)明內(nèi)部Connecter內(nèi)部數(shù)據(jù)流圖(訂閱發(fā)布)。
圖7為本發(fā)明Connecter程序流程圖。
具體實施方式
為了使技術(shù)人員更好的理解本發(fā)明方案,下面將結(jié)合附圖,對本發(fā)明進(jìn)行清晰,較為詳盡的說明。
參照附圖2所示為本發(fā)明整體框架,可見本發(fā)明包括底層和上層(應(yīng)用層),底層即硬件和操作系統(tǒng)。
本發(fā)明硬件核心板采用TI am3352核心板,am3352功能強(qiáng)大,定位工業(yè)控制。外圍實現(xiàn)485,CAN,WIFI,藍(lán)牙,網(wǎng)口硬件模塊,硬件模塊連接圖如附圖1,各模塊與處理器通過電路板銅線電連接。
操作系統(tǒng)采用剪裁的linux3.2.0,linux3.2.0系統(tǒng)穩(wěn)定,比較簡潔,運(yùn)行速度快等特點(diǎn)。使本發(fā)明從底層上對上層應(yīng)用,有強(qiáng)大的支持。
有前述可知應(yīng)用軟件包括多協(xié)議數(shù)據(jù)接入系統(tǒng),網(wǎng)關(guān)管理模塊和數(shù)據(jù)緩存系統(tǒng)。根據(jù)接入關(guān)系應(yīng)用層又可以劃分為下行接入層,業(yè)務(wù)層,上行接入層。下行接入層和上行接入層都屬于多協(xié)議數(shù)據(jù)接入系統(tǒng)。下行接入層主要與設(shè)備側(cè),上行接入側(cè)主要與物聯(lián)網(wǎng)云平臺交互側(cè),業(yè)務(wù)層由網(wǎng)關(guān)管理系統(tǒng)和數(shù)據(jù)緩存系統(tǒng)實現(xiàn),主要包括網(wǎng)關(guān)內(nèi)部安全管理,數(shù)據(jù)存儲,Connecter之間的通信。
有前述可知本發(fā)明主要集中在上層應(yīng)用的開發(fā),由發(fā)明內(nèi)容可知本發(fā)明對網(wǎng)關(guān)進(jìn)行抽象內(nèi)部主要包括,Connecter和CMS系統(tǒng),以及內(nèi)存緩存redis,詳見附圖3。
有前述可知CMS系統(tǒng)為智能網(wǎng)關(guān)的核心,由附圖4可知,他接收客戶端的配置文檔,并按照配置文檔啟動用戶需要的Connecter,并生成Connecter的配置文檔,這樣每個Connecter就會按照自己的配置文檔運(yùn)轉(zhuǎn)起來。前述可知本網(wǎng)關(guān)的配置文檔采用json文檔,作為整個網(wǎng)關(guān)的配置文檔project.json,其格式如下所示:
有上述可知網(wǎng)關(guān)的配置文檔主要有json數(shù)組組成,數(shù)組的每個json成員有三部分組成包括設(shè)備協(xié)議,設(shè)備初始化配置,設(shè)備要執(zhí)行的任務(wù)。作為示例上述配置文檔只列舉了modbus設(shè)備Connecter的配置,CMS讀取讀取json數(shù)組的每一個成員,由devattr,獲取其鍵值為modbus,這時候系統(tǒng)就會啟動MbConnecter,并把其配置文檔中的INIT,OP讀出來寫入到modbus.json,作為MbConnecter的配置文檔。這樣MbConnecter就可以按照配置文檔運(yùn)轉(zhuǎn)起來。
上述中的INIT項表示modbus-rtu協(xié)議的配置項包括波特率,停止位,超時時間等,OP項中的OP1,OP2表示此Connecter有兩個任務(wù),OP1中“orientation”表示數(shù)據(jù)對于設(shè)備操作是讀與寫,“operate”Modbus協(xié)議對對設(shè)備操作的指令,“startaddr”表示讀數(shù)據(jù)的起始地址,“l(fā)en”表示讀數(shù)據(jù)的長度,“timerefresh”表示數(shù)據(jù)刷新的頻率,“DF_index”表示寫入redis數(shù)據(jù)庫中的地址名字。OP1任務(wù)的具體中的意思是從寄存器0開始讀2個寄存器的值并以鍵值為“10001001”寫入redis數(shù)據(jù)庫。
有前述可知,CMS讀取工程配置文檔,生成用戶定義的Connecter,本發(fā)明Connecter進(jìn)程間通信采用redis內(nèi)存數(shù)據(jù)庫。Redis功能強(qiáng)大已經(jīng)在高并發(fā)服務(wù)器中廣泛應(yīng)用,當(dāng)然由于嵌入式設(shè)備的環(huán)境特殊,這就需要將Redis源碼交叉編譯,然后將其應(yīng)用和依賴導(dǎo)入設(shè)備中。本發(fā)明利用Redis數(shù)據(jù)庫進(jìn)行交互過程如附圖5,附圖6所示,附圖5展示的是利用redis最基本的數(shù)據(jù)存儲功能每個Connecter讀取設(shè)備數(shù)據(jù)寫入Redis,并從Redis中讀取需要的數(shù)據(jù)。這種模式特別適合大量數(shù)據(jù),且數(shù)據(jù)實時要求不是很高的場合。
由附圖6可知本發(fā)明Connecter通信的另一種方式采用Redis訂閱發(fā)布功能實現(xiàn)一個Connecter的數(shù)據(jù)可以被多個Connecter訂閱獲取。如圖所示,MbConnecter發(fā)布主題為“100000”,內(nèi)容為設(shè)備數(shù)據(jù),WIFIConnecter和CloudConnecter訂閱了“100000”主題,可以幾乎同時接受到數(shù)據(jù),這樣數(shù)據(jù)實時性得到了很好的保障。當(dāng)然每個Connecter都可以訂閱需要的主題,這種方式,在傳遞控制命令信息和實時性要求較高的數(shù)據(jù)時實用性很高。
綜上所述本發(fā)明利用Redis內(nèi)存數(shù)據(jù)庫為網(wǎng)關(guān)內(nèi)部書交互提供兩種方式,互為補(bǔ)充,把網(wǎng)關(guān)的性能發(fā)揮到最大,直接存儲方式提供大量數(shù)據(jù)交互,可以應(yīng)用在數(shù)據(jù)量大數(shù)據(jù)變化慢的場合,訂閱發(fā)布交互方式可以應(yīng)用于實時性高,一對多的場合。
由前述可知Connecter是本發(fā)明的重要組成部分,結(jié)合附圖7給其內(nèi)部工作原理詳盡介紹。Connecter首先解析配置文檔,獲取設(shè)備初始化數(shù)據(jù),和任務(wù)隊列。然后依據(jù)設(shè)備初始化數(shù)據(jù)對設(shè)備進(jìn)行初始化,然后按照任務(wù)隊列的任務(wù)配置,執(zhí)行操作。由于每個任務(wù)的刷新時間不一致,任務(wù)要按照規(guī)定的刷新時間規(guī)律執(zhí)行,所以Connnecter包含一個計時線程,依據(jù)任務(wù)隊列的刷新時間來調(diào)度任務(wù)執(zhí)行。計時線程主要任務(wù)是記錄時間進(jìn)度,判斷時間是否等于刷新時間,觸發(fā)要執(zhí)行的任務(wù)。
所有的任務(wù)的只包含兩個動作讀與寫,讀寫是相對于外部設(shè)備來說的,寫過程就是從Redis取回數(shù)據(jù)寫入設(shè)備,讀過程就是從設(shè)備獲取數(shù)據(jù)寫入Redis。就這樣Connecter依據(jù)配置在計時線程的合理調(diào)度下不停地運(yùn)轉(zhuǎn)著。
有前述可知本發(fā)明在數(shù)據(jù)上傳云端采用現(xiàn)有流行HTTP協(xié)議和物聯(lián)網(wǎng)協(xié)議MQTT,雖然作為數(shù)據(jù)上傳應(yīng)用層但是在網(wǎng)關(guān)內(nèi)部都抽象為HTTPConnecter和MQTTConnecter的概念,其運(yùn)行原理如上。但要在網(wǎng)關(guān)內(nèi)部移植庫函數(shù)和配置環(huán)境才能保證協(xié)議客戶端正常工作。
作為優(yōu)化方案本發(fā)明網(wǎng)關(guān)內(nèi)部數(shù)據(jù)交互格式統(tǒng)一封裝為json格式,格式和配置文檔類似,這樣方便管理與數(shù)據(jù)轉(zhuǎn)換,同時也有利于平臺解析數(shù)據(jù)。