国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

一種通用MODBUS物聯(lián)網(wǎng)網(wǎng)關(guān)設(shè)計(jì)與實(shí)現(xiàn)

2019-09-05 05:48:00陳文藝張楊旭
關(guān)鍵詞:數(shù)據(jù)模型網(wǎng)關(guān)客戶端

陳文藝, 張楊旭, 楊 輝

(1.西安郵電大學(xué) 物聯(lián)網(wǎng)與兩化融合研究院, 陜西 西安 710061;2.西安郵電大學(xué) 通信與信息工程學(xué)院, 陜西 西安 710121)

物聯(lián)網(wǎng)即物物相連的互聯(lián)網(wǎng)[1]。作為一種通過(guò)信息交互以實(shí)現(xiàn)智能化識(shí)別、定位、監(jiān)控和管理的網(wǎng)絡(luò),目前廣泛應(yīng)用于智能物流、智能交通等各個(gè)領(lǐng)域[2]。網(wǎng)關(guān)作為物聯(lián)網(wǎng)中連接感知網(wǎng)絡(luò)和傳統(tǒng)網(wǎng)絡(luò)的橋梁[3],可以實(shí)現(xiàn)不同協(xié)議設(shè)備之間信息的傳遞,網(wǎng)關(guān)可以屏蔽各種底層差異,實(shí)現(xiàn)通信技術(shù)標(biāo)準(zhǔn)的互聯(lián)互通與平臺(tái)之間的數(shù)據(jù)實(shí)時(shí)同步,提高物聯(lián)網(wǎng)系統(tǒng)的可靠性與穩(wěn)定性,可以將分散在不同區(qū)域感知網(wǎng)絡(luò)的信息孤島連接在一起,完成各種傳感設(shè)備穩(wěn)定的接入、控制、數(shù)據(jù)存儲(chǔ)等,實(shí)現(xiàn)不同子網(wǎng)的信息交互和通信[4]。

目前關(guān)于物聯(lián)網(wǎng)網(wǎng)關(guān)的研究主要包含兩方面內(nèi)容。一是如何屏蔽底層網(wǎng)絡(luò),實(shí)現(xiàn)各類傳感設(shè)備的快速接入。文獻(xiàn)[5]實(shí)現(xiàn)了協(xié)議轉(zhuǎn)換、數(shù)據(jù)轉(zhuǎn)發(fā)、感知網(wǎng)絡(luò)以及網(wǎng)關(guān)的管理和控制,但缺少對(duì)感知網(wǎng)絡(luò)接入設(shè)備類型的豐富以及故障的處理[6];文獻(xiàn)[7]針對(duì)MODBUS協(xié)議中遠(yuǎn)程終端單元(remote terminal unit,RTU)模式進(jìn)行網(wǎng)關(guān)設(shè)計(jì),只是通過(guò)仿真來(lái)進(jìn)行驗(yàn)證,并沒(méi)有對(duì)網(wǎng)關(guān)實(shí)際的功能和性能進(jìn)行測(cè)試[8]。二是如何實(shí)現(xiàn)與云平臺(tái)之間數(shù)據(jù)快速、安全、穩(wěn)定的傳輸。傳統(tǒng)網(wǎng)關(guān)和物聯(lián)網(wǎng)資源平臺(tái)的通信協(xié)議有超文本傳輸協(xié)議(hypertext transport protocol,HTTP)[9]和消息隊(duì)列遙測(cè)傳輸協(xié)議(message queuing telemetry transport,MQTT)[10]。HTTP采用“請(qǐng)求-響應(yīng)”方式進(jìn)行通信,只有客戶端發(fā)起請(qǐng)求,服務(wù)端才會(huì)做出響應(yīng),服務(wù)端不能主動(dòng)向客戶端推送數(shù)據(jù)[11],其缺點(diǎn)是缺乏實(shí)時(shí)性、采用明文通信,數(shù)據(jù)傳輸并不可靠[12]。MQTT是輕量級(jí)基于代理的發(fā)布/訂閱的消息傳輸協(xié)議,其設(shè)計(jì)簡(jiǎn)單,易于實(shí)現(xiàn)[13],缺點(diǎn)是只適用資源有限的嵌入式設(shè)備,并且只能進(jìn)行小數(shù)據(jù)鏈的傳輸、帶寬低、安全性差[14]。

考慮到傳感數(shù)據(jù)在物聯(lián)網(wǎng)系統(tǒng)傳輸中的安全、高效和穩(wěn)定,提出一種支持MODBUS的通用物聯(lián)網(wǎng)網(wǎng)關(guān)架構(gòu)模型,該模型中采用串口作為設(shè)備接入?yún)f(xié)議,使用標(biāo)準(zhǔn)傳輸控制協(xié)議(transmission control protocol,TCP)[15]作為網(wǎng)關(guān)與設(shè)備通信協(xié)議,應(yīng)用標(biāo)準(zhǔn)WebSocket協(xié)議[16]作為網(wǎng)關(guān)與平臺(tái)通信協(xié)議,實(shí)現(xiàn)設(shè)備根據(jù)統(tǒng)一標(biāo)準(zhǔn)接入網(wǎng)關(guān)并實(shí)現(xiàn)與平臺(tái)之間信息雙向?qū)崟r(shí)交互,用實(shí)例來(lái)驗(yàn)證網(wǎng)關(guān)架構(gòu)模型的功能和性能。

1 建立物聯(lián)網(wǎng)平臺(tái)架構(gòu)

物聯(lián)網(wǎng)網(wǎng)關(guān)作為連接設(shè)備與平臺(tái)的樞紐,主要完成數(shù)據(jù)模型的建立與維護(hù)、協(xié)議的轉(zhuǎn)換、設(shè)備的接入與控制以及數(shù)據(jù)同步等。網(wǎng)關(guān)主要依賴于物聯(lián)網(wǎng)平臺(tái)進(jìn)行構(gòu)建,其中物聯(lián)網(wǎng)平臺(tái)的架構(gòu)如圖1所示。

圖1 物聯(lián)網(wǎng)平臺(tái)架構(gòu)

圖1中,物聯(lián)網(wǎng)平臺(tái)架構(gòu)由瀏覽器、手機(jī)應(yīng)用、云平臺(tái)、網(wǎng)關(guān)及設(shè)備組成,是一種人機(jī)交互的實(shí)時(shí)用戶瀏覽器/物聯(lián)網(wǎng)云平臺(tái)/物聯(lián)網(wǎng)網(wǎng)關(guān)(browser/server/model,B/S/M)系統(tǒng),其中底層設(shè)備將獲取到的數(shù)據(jù)安全、高效、穩(wěn)定的傳入網(wǎng)關(guān),網(wǎng)關(guān)對(duì)傳入的數(shù)據(jù)做相應(yīng)處理,然后將處理之后數(shù)據(jù)發(fā)往云平臺(tái),云平臺(tái)具有強(qiáng)大計(jì)算及存儲(chǔ)能力,對(duì)用戶進(jìn)行授權(quán),用戶通過(guò)瀏覽器、手機(jī)應(yīng)用等來(lái)管理物聯(lián)網(wǎng)資源。

2 構(gòu)建MODBUS網(wǎng)關(guān)架構(gòu)

設(shè)計(jì)一種通用的MODBUS網(wǎng)關(guān)架構(gòu)模型,主要目的是完成對(duì)設(shè)備的接入、控制、協(xié)議轉(zhuǎn)換、數(shù)據(jù)封裝、模型同步以及數(shù)據(jù)的上傳與下發(fā)。4層網(wǎng)關(guān)架構(gòu)模型如圖2所示。

圖2 4層網(wǎng)關(guān)架構(gòu)

圖2中,將網(wǎng)關(guān)分為網(wǎng)關(guān)內(nèi)部模塊和設(shè)備接入模塊。其中設(shè)備接入模塊包含感知接口層和協(xié)議適配層,網(wǎng)關(guān)內(nèi)部模塊包含數(shù)據(jù)模型同步層和平臺(tái)通信層,兩模塊之間采用TCP方式通信,網(wǎng)關(guān)與設(shè)備采用標(biāo)準(zhǔn)MODBUS協(xié)議進(jìn)行通信,網(wǎng)關(guān)與平臺(tái)采用標(biāo)準(zhǔn)Websocket協(xié)議進(jìn)行通信。

2.1 感知接口層

感知接口層作為MODBUS網(wǎng)關(guān)最底層,通過(guò)相應(yīng)硬件接口與物理設(shè)備連接,實(shí)現(xiàn)設(shè)備的接入及控制,感知接口層模塊架構(gòu)如圖3所示。

圖3 感知接口層模塊架構(gòu)

圖3中,感知接口層包含設(shè)備驅(qū)動(dòng)和控制兩個(gè)模塊。設(shè)備驅(qū)動(dòng)模塊主要用于實(shí)現(xiàn)設(shè)備的接入,設(shè)備控制模塊完成對(duì)設(shè)備的具體相關(guān)操作,完成對(duì)設(shè)備的接入及控制后,再通過(guò)協(xié)議適配層進(jìn)行調(diào)用。

2.2 協(xié)議適配層

協(xié)議適配層作為物聯(lián)網(wǎng)網(wǎng)關(guān)架構(gòu)中關(guān)鍵一層,主要完成協(xié)議轉(zhuǎn)換,協(xié)議適配層模塊架構(gòu)如圖4所示。

圖4 協(xié)議適配層模塊架構(gòu)

圖4中,協(xié)議適配層包含協(xié)議轉(zhuǎn)化和數(shù)據(jù)包封裝與解析模塊。協(xié)議轉(zhuǎn)換模塊完成對(duì)感知接口層上傳的數(shù)據(jù)與平臺(tái)定義JS對(duì)象標(biāo)記(javascript object notation,JSON)設(shè)備數(shù)據(jù)模型之間的數(shù)據(jù)格式轉(zhuǎn)換。然后采用平臺(tái)定義的統(tǒng)一數(shù)據(jù)幀格式對(duì)數(shù)據(jù)進(jìn)行封裝與解析,若為數(shù)據(jù)上傳,則對(duì)上傳數(shù)據(jù)進(jìn)行封裝并推送數(shù)據(jù)包到TCP客戶端;若為數(shù)據(jù)下發(fā),則接收TCP客戶端下發(fā)數(shù)據(jù),完成數(shù)據(jù)包的解析。

2.3 TCP模塊

TCP模塊作為連接設(shè)備接入模塊和網(wǎng)關(guān)內(nèi)部模塊的橋梁,可實(shí)現(xiàn)設(shè)備與網(wǎng)關(guān)的全雙工通信,TCP模塊架構(gòu)如圖5所示。

圖5 TCP模塊架構(gòu)

圖5中,TCP模塊包含客戶端和服務(wù)器兩部分,兩者之間的通信采用套接字實(shí)現(xiàn),該模塊主要用于實(shí)現(xiàn)物聯(lián)網(wǎng)平臺(tái)統(tǒng)一數(shù)據(jù)幀的上傳與下發(fā)。

2.4 數(shù)據(jù)模型同步層

數(shù)據(jù)模型同步主要是指平臺(tái)網(wǎng)關(guān)和設(shè)備模型與物理網(wǎng)關(guān)數(shù)據(jù)模型保持一致的操作過(guò)程,即任何時(shí)刻只要平臺(tái)模型發(fā)生變化,對(duì)應(yīng)物理模型也要同步變化,并保持與平臺(tái)模型一致性,反之亦然。數(shù)據(jù)模型同步包含3方面作用:一是接收平臺(tái)下發(fā)數(shù)據(jù)完成平臺(tái)模型到網(wǎng)關(guān)模型同步,并按協(xié)議轉(zhuǎn)發(fā)平臺(tái)數(shù)據(jù)到相應(yīng)設(shè)備;二是接收設(shè)備上傳數(shù)據(jù),更新網(wǎng)關(guān)模型,上傳網(wǎng)關(guān)模型到平臺(tái)模型的同步包;三是監(jiān)測(cè)設(shè)備上傳的數(shù)據(jù),完成網(wǎng)關(guān)域事件處理,并上傳平臺(tái)域事件包。

2.5 平臺(tái)通信層

平臺(tái)通信層完成網(wǎng)關(guān)與平臺(tái)之間通信,采用Websocket協(xié)議實(shí)現(xiàn)網(wǎng)關(guān)與平臺(tái)所定義的機(jī)器服務(wù)器雙向?qū)崟r(shí)通信,并完成網(wǎng)關(guān)設(shè)備的認(rèn)證接入、身份驗(yàn)證、模型同步,并為計(jì)算設(shè)備推送/讀取平臺(tái)設(shè)備數(shù)據(jù)。

3 MODBUS網(wǎng)關(guān)實(shí)現(xiàn)

MODBUS網(wǎng)關(guān),主要實(shí)現(xiàn)對(duì)支持該協(xié)議的底層各種設(shè)備的互聯(lián)互通,以及與物聯(lián)網(wǎng)平臺(tái)之間的實(shí)時(shí)雙向通信。MODBUS作為主從應(yīng)答協(xié)議采用半雙工方式通信,主從通信方式如圖6所示。

圖6 主從通信方式

圖6中,主站向從站發(fā)送查詢信息,從站通過(guò)讀取主站的指令,然后根據(jù)指令回復(fù)主站相應(yīng)數(shù)據(jù)。

MODBUS協(xié)議包含RTU、ASCII、TCP 3種模式,因?yàn)榻^大部分MODBUS設(shè)備支持RTU模式,所以針對(duì)RTU模式對(duì)網(wǎng)關(guān)進(jìn)行設(shè)計(jì),該模式協(xié)議的幀結(jié)構(gòu)包含6部分內(nèi)容:起始位、設(shè)備地址、功能碼、數(shù)據(jù)、校驗(yàn)以及結(jié)束符。其中起始位占3.5個(gè)字符,設(shè)備地址和功能碼各占一個(gè)字節(jié),數(shù)據(jù)占N個(gè)字節(jié),校驗(yàn)占兩個(gè)字節(jié),結(jié)束符占3.5個(gè)字符,并且協(xié)議幀中各數(shù)據(jù)位間隔不超過(guò)1.5個(gè)字符時(shí)鐘間隔。

3.1 感知接口層實(shí)現(xiàn)

感知接口層包含驅(qū)動(dòng)和控制兩模塊,主要為了實(shí)現(xiàn)對(duì)MODBUS傳感設(shè)備的接入及控制,其中MODBUS主從通信模塊架構(gòu),如圖7所示。

圖7 主從通信模塊架構(gòu)

圖7中,包含協(xié)議適配層、應(yīng)用程序接口(application programming interface,API)及傳感設(shè)備3部分。為使協(xié)議適配層方便調(diào)用,采用API對(duì)驅(qū)動(dòng)模塊和控制模塊進(jìn)行封裝,其中控制模塊對(duì)應(yīng)功能模塊,用于將平臺(tái)下發(fā)的請(qǐng)求轉(zhuǎn)化為對(duì)具體設(shè)備的一系列通信操作轉(zhuǎn)化為平臺(tái)所請(qǐng)求的結(jié)果;驅(qū)動(dòng)模塊對(duì)應(yīng)串口模塊、循環(huán)冗余校驗(yàn)(cyclic redundancy check,CRC)模塊及讀寫(xiě)模塊,用于設(shè)備檢測(cè),完成對(duì)設(shè)備的接入、退出及系統(tǒng)檢測(cè)。

驅(qū)動(dòng)及控制程序流程如圖8所示。其中包含3部分內(nèi)容,一是對(duì)串口進(jìn)行初始化并對(duì)設(shè)備進(jìn)行超時(shí)檢測(cè);二是調(diào)用讀數(shù)據(jù)功能塊完成數(shù)據(jù)的讀取,并通過(guò)校驗(yàn)對(duì)數(shù)據(jù)進(jìn)行驗(yàn)證,驗(yàn)證無(wú)誤后再對(duì)數(shù)據(jù)進(jìn)行讀處理;三是讀數(shù)據(jù)處理完成后,調(diào)用寫(xiě)數(shù)據(jù)功能塊完成對(duì)數(shù)據(jù)的寫(xiě)入,檢測(cè)數(shù)據(jù)是否有錯(cuò),若沒(méi)有再對(duì)數(shù)據(jù)進(jìn)行寫(xiě)處理。完成對(duì)程序的編寫(xiě)并實(shí)現(xiàn)對(duì)設(shè)備的相應(yīng)操作。

感知接口層各模塊具體實(shí)現(xiàn)過(guò)程如下。

步驟1 驅(qū)動(dòng)。

①串口模塊是采用淘寶cnpm鏡像安裝第三方serialport模塊創(chuàng)建串口,匹配設(shè)備參數(shù)。

②CRC模塊是用于將一幀除CRC校驗(yàn)之外的數(shù)據(jù)進(jìn)行計(jì)算生成CRC校驗(yàn)碼,用于數(shù)據(jù)傳輸檢錯(cuò),以確保數(shù)據(jù)正確讀寫(xiě)。

③數(shù)據(jù)讀/寫(xiě)模塊是完成對(duì)寄存器中設(shè)備數(shù)據(jù)的讀寫(xiě)操作,供設(shè)備控制模塊調(diào)用。

步驟2 控制。

控制主要完成對(duì)MODBUS常用功能碼的封裝,實(shí)現(xiàn)對(duì)設(shè)備的相關(guān)操作,模塊中每一個(gè)函數(shù)對(duì)應(yīng)實(shí)現(xiàn)某一功能碼特定功能,實(shí)際所需哪種,直接調(diào)用其對(duì)應(yīng)函數(shù)即可。以03H功能碼為例,用于讀取保持寄存器中溫/濕度值,調(diào)用封裝好的函數(shù)readHoldRegisters(address,dataAddress,length,next)可獲取設(shè)備數(shù)據(jù),其中address代表從機(jī)地址,dataAddress代表寄存器中數(shù)據(jù)初始位,length代表寄存器長(zhǎng)度,next表示進(jìn)入下一個(gè)處理函數(shù)。本系統(tǒng)可實(shí)現(xiàn)8種常用功能碼,具體接口函數(shù)如下。

01H:readCoilsState() 讀線圈的狀態(tài)

02H:readDiscreteState() 讀離散狀態(tài)

03H:readHoldRegisters() 讀保持寄存器

04H:readInputRegisters() 讀輸入寄存器

05H:writeCoil() 寫(xiě)單個(gè)線圈

06H:writeRegister() 寫(xiě)單個(gè)寄存器

0FH:writeCoils() 寫(xiě)多個(gè)線圈

10H:writeRegisters() 寫(xiě)多個(gè)寄存器

圖8 驅(qū)動(dòng)及控制程序流程

3.2 協(xié)議適配層實(shí)現(xiàn)

協(xié)議適配層包含協(xié)議轉(zhuǎn)換和數(shù)據(jù)封裝與解析兩個(gè)模塊。協(xié)議轉(zhuǎn)換完成MODBUS傳感設(shè)備數(shù)據(jù)與平臺(tái)定義JSON格式設(shè)備數(shù)據(jù)模型的格式轉(zhuǎn)換,數(shù)據(jù)封裝是將JSON數(shù)據(jù)模型按照物聯(lián)網(wǎng)平臺(tái)定義的統(tǒng)一數(shù)據(jù)幀格式進(jìn)行封裝。主要采用JSON格式數(shù)據(jù),具體包含3種類型:設(shè)備認(rèn)證、設(shè)備心跳和設(shè)備數(shù)據(jù)更新。各類型所對(duì)應(yīng)的相關(guān)函數(shù)、JSON數(shù)據(jù)格式及具體功能如下。

(1)設(shè)備認(rèn)證

①認(rèn)證函數(shù)及JSON格式數(shù)據(jù)模型如下。

devCertificate(gid,did,userkey,function(err)

{//應(yīng)答消息處理

})

sendDoc = {

msgType : string, // devCertificate操作

gwid : gid, //網(wǎng)關(guān)ID

devid : did, //設(shè)備ID

userkey : userkey //用戶秘鑰

}

②功能:設(shè)備發(fā)送認(rèn)證請(qǐng)求消息到網(wǎng)關(guān),網(wǎng)關(guān)認(rèn)證通過(guò)后激活設(shè)備,設(shè)備處于on狀態(tài)。

(2)設(shè)備心跳

①心跳函數(shù)及JSON格式數(shù)據(jù)模型如下。

devHeartBeat(did,function(err){

//應(yīng)答消息處理

})

sendDoc = {

msgType : string, // devHeartBeat操作

devid : did, //設(shè)備ID

n : num //心跳包序列號(hào)

}

②功能:設(shè)備定時(shí)發(fā)送心跳消息到網(wǎng)關(guān),用于檢測(cè)設(shè)備在線狀態(tài)。

(3)設(shè)備數(shù)據(jù)更新

①數(shù)據(jù)更新函數(shù)及JSON數(shù)據(jù)模型如下。

devUpdateData(did,doc,loc,function(err){

//應(yīng)答消息處理

})

sendDoc = {

msgType : string, //devUpdataData操作

devid : did, //設(shè)備ID

v : num, //數(shù)據(jù)點(diǎn)值(溫度)

time : string}

②功能:添加更新設(shè)備數(shù)據(jù)到JSON格式設(shè)備數(shù)據(jù)模型,并同步網(wǎng)關(guān)設(shè)備數(shù)據(jù)模型。

3.3 TCP通信實(shí)現(xiàn)

作為連接網(wǎng)關(guān)和設(shè)備之間的通信協(xié)議,TCP通信主要包含客戶端和服務(wù)器的建立兩部分內(nèi)容,具體TCP通信實(shí)現(xiàn)流程如圖9所示。

圖9 TCP通信實(shí)現(xiàn)流程

TCP通信實(shí)現(xiàn)步驟如下。

步驟1 建立TCP客戶端,通過(guò)使用socket套接字將協(xié)議轉(zhuǎn)換所生成的3種類型的物聯(lián)網(wǎng)平臺(tái)統(tǒng)一幀格式的完整數(shù)據(jù)包發(fā)送到TCP服務(wù)端。

步驟2 調(diào)用node.js原生net模塊[17],構(gòu)建TCP服務(wù)器,監(jiān)聽(tīng)來(lái)自TCP客戶端事件,當(dāng)客戶端套接字連接到服務(wù)端時(shí)觸發(fā)連接事件。通過(guò)socket監(jiān)聽(tīng)事件[18],若監(jiān)聽(tīng)到結(jié)束事件,刪除網(wǎng)關(guān)列表對(duì)應(yīng)網(wǎng)關(guān);若監(jiān)聽(tīng)到關(guān)閉事件,關(guān)閉網(wǎng)關(guān);若監(jiān)聽(tīng)到數(shù)據(jù)事件,對(duì)一幀完整數(shù)據(jù)包里的JSON數(shù)據(jù)的解析,將解析到的JSON數(shù)據(jù)上傳至數(shù)據(jù)模型同步層,再作相應(yīng)處理。

3.4 數(shù)據(jù)模型同步層實(shí)現(xiàn)

數(shù)據(jù)模型同步層包含數(shù)據(jù)上傳和下發(fā)的同步,主要是指平臺(tái)虛擬網(wǎng)關(guān)和設(shè)備數(shù)據(jù)模型與物理網(wǎng)關(guān)和設(shè)備數(shù)據(jù)保持一致的操作過(guò)程,具體實(shí)現(xiàn)步驟如下。

步驟1 設(shè)備數(shù)據(jù)上傳,通過(guò)接收來(lái)自客戶端的事件并做相應(yīng)的處理,設(shè)備數(shù)據(jù)上傳步驟如圖10所示。

圖10中,TCP服務(wù)端監(jiān)聽(tīng)來(lái)自TCP客戶端data事件所上傳的設(shè)備JSON數(shù)據(jù),通過(guò)判斷數(shù)據(jù)類型來(lái)做相應(yīng)處理。若為設(shè)備認(rèn)證,經(jīng)平臺(tái)通信層發(fā)送消息到平臺(tái)完成設(shè)備兩次認(rèn)證;若為心跳,經(jīng)平臺(tái)通信層發(fā)送心跳到平臺(tái);若為設(shè)備數(shù)據(jù)更新,同步更新設(shè)備數(shù)據(jù)到平臺(tái)。

圖10 設(shè)備數(shù)據(jù)上傳步驟

步驟2 平臺(tái)數(shù)據(jù)下發(fā),通過(guò)接收來(lái)自平臺(tái)的事件并做相應(yīng)的處理,平臺(tái)數(shù)據(jù)下發(fā)設(shè)備控制消息如圖11所示。

圖11 平臺(tái)數(shù)據(jù)下發(fā)設(shè)備控制消息

圖11中,網(wǎng)關(guān)通過(guò)客戶端監(jiān)聽(tīng)來(lái)自平臺(tái)的事件。若監(jiān)聽(tīng)到連接事件則與平臺(tái)建立連接,連接成功后接收平臺(tái)下發(fā)的數(shù)據(jù)到數(shù)據(jù)模型同步層,經(jīng)TCP模塊、設(shè)備控制和驅(qū)動(dòng)模塊轉(zhuǎn)發(fā)平臺(tái)數(shù)據(jù)到設(shè)備,完成對(duì)底層設(shè)備的控制操作;若監(jiān)聽(tīng)到斷開(kāi)事件,則斷開(kāi)與平臺(tái)之間的連接。

3.4 平臺(tái)通信層實(shí)現(xiàn)

構(gòu)建基于WebSocket協(xié)議的socket.io客戶端將解析后的數(shù)據(jù)上傳至云平臺(tái),實(shí)現(xiàn)數(shù)據(jù)模型同步更新。分別對(duì)解析到設(shè)備認(rèn)證、心跳請(qǐng)求、設(shè)備數(shù)據(jù)更新3類消息類型作相應(yīng)處理,具體處理流程如下。

步驟1 設(shè)備認(rèn)證,通過(guò)兩次握手實(shí)現(xiàn),兩次握手實(shí)現(xiàn)步驟如圖12所示。

圖12 兩次握手實(shí)現(xiàn)步驟

圖12中,網(wǎng)關(guān)和平臺(tái)進(jìn)行兩次握手已達(dá)到設(shè)備的認(rèn)證。首次握手,網(wǎng)關(guān)向平臺(tái)發(fā)送網(wǎng)關(guān)和設(shè)備認(rèn)證識(shí)別號(hào),平臺(tái)接收到數(shù)據(jù)后,生成驗(yàn)證隨機(jī)數(shù),發(fā)送到網(wǎng)關(guān);二次握手,網(wǎng)關(guān)對(duì)隨機(jī)數(shù)和用戶秘鑰一起加密,平臺(tái)認(rèn)證成功返回網(wǎng)關(guān)和設(shè)備模型到網(wǎng)關(guān),兩次握手結(jié)束。

步驟2 用設(shè)備心跳來(lái)判斷網(wǎng)關(guān)從屬設(shè)備狀態(tài),若為off,將其設(shè)為on,開(kāi)啟網(wǎng)關(guān)設(shè)備,通過(guò)socket.io將更新的設(shè)備狀態(tài)上傳至云平臺(tái)。

步驟3 設(shè)備數(shù)據(jù)更新,通過(guò)利用Websocket協(xié)議中socket.emit方法將設(shè)備的數(shù)據(jù)發(fā)送至云平臺(tái),同步更新設(shè)備數(shù)據(jù)模型。

4 測(cè)試

測(cè)試包含功能及性能測(cè)試兩部分,功能測(cè)試完成API接口測(cè)試和設(shè)備數(shù)據(jù)上傳與平臺(tái)控制命令下發(fā)測(cè)試;性能測(cè)試通過(guò)增加測(cè)試數(shù)據(jù)完成對(duì)整個(gè)系統(tǒng)的丟包率、時(shí)延等各種性能參數(shù)的測(cè)試。

4.1 功能測(cè)試

(1)API接口測(cè)試

調(diào)用API接口中相應(yīng)函數(shù),完成對(duì)傳感器接入數(shù)據(jù)采集,溫濕度數(shù)據(jù)采集如圖13所示。

圖13 溫濕度數(shù)據(jù)采集

圖13中,實(shí)現(xiàn)對(duì)傳感器溫濕度數(shù)據(jù)的采集,規(guī)定采集間隔為5秒。以其中一組數(shù)據(jù)為例,其中溫度值為24.5℃,濕度值為48.3%RH,并增加實(shí)時(shí)采樣時(shí)間。

(2)設(shè)備數(shù)據(jù)上傳

①設(shè)備接入模塊測(cè)試

測(cè)試之前需在本平臺(tái)對(duì)設(shè)備進(jìn)行注冊(cè),平臺(tái)分配給用戶相應(yīng)網(wǎng)關(guān)ID(gwid)、設(shè)備ID(devid)和用戶秘鑰(userkey),全網(wǎng)唯一。設(shè)備數(shù)據(jù)上傳之前需要先進(jìn)行認(rèn)證,若存在有多個(gè)設(shè)備接入,則將設(shè)備注冊(cè)信息存放于單獨(dú)配置文件,便于后期更新維護(hù)。以溫度傳感(AM2301)為例進(jìn)行測(cè)試,設(shè)備接入模塊測(cè)試如圖14所示。

圖14中,設(shè)備請(qǐng)求消息包含3部分:一是設(shè)備的認(rèn)證請(qǐng)求,構(gòu)造認(rèn)證消息填充到JSON數(shù)據(jù)結(jié)構(gòu);二是設(shè)備的數(shù)據(jù)請(qǐng)求,將實(shí)時(shí)溫度填充到JSON數(shù)據(jù)結(jié)構(gòu);三是設(shè)備的心跳請(qǐng)求,心跳間隔為10秒,用于檢測(cè)設(shè)備是否在線。對(duì)構(gòu)造的3種類型請(qǐng)求按照平臺(tái)統(tǒng)一數(shù)據(jù)封裝格式進(jìn)行封裝,最后通過(guò)TCP對(duì)封裝好的buffer數(shù)據(jù)包進(jìn)行上傳。

②網(wǎng)關(guān)內(nèi)部模塊測(cè)試

作為網(wǎng)關(guān)內(nèi)部模塊,數(shù)據(jù)模型同步層及平臺(tái)通信層接收來(lái)自傳感設(shè)備3種類型數(shù)據(jù)并進(jìn)行相應(yīng)處理,網(wǎng)關(guān)內(nèi)部模塊測(cè)試如圖15所示。

圖15 網(wǎng)關(guān)內(nèi)部模塊測(cè)試

圖15中,包含3部分內(nèi)容:一是網(wǎng)關(guān)將接收到的認(rèn)證消息發(fā)送到平臺(tái)并接收到來(lái)自平臺(tái)的認(rèn)證隨機(jī)數(shù),然后對(duì)隨機(jī)數(shù)和userkey采用MD5加密,重新組包發(fā)往平臺(tái)兩次握手結(jié)束,完成設(shè)備認(rèn)證;二是設(shè)備溫度數(shù)據(jù)測(cè)試,同步更新設(shè)備數(shù)據(jù)到平臺(tái);三是心跳測(cè)試,同步更新心跳到平臺(tái)。

(3)平臺(tái)數(shù)據(jù)下發(fā)

平臺(tái)通過(guò)構(gòu)造控制命令經(jīng)網(wǎng)關(guān)發(fā)送到對(duì)應(yīng)設(shè)備,完成對(duì)設(shè)備的控制操作,平臺(tái)數(shù)據(jù)下發(fā)如圖16所示。

圖16 平臺(tái)數(shù)據(jù)下發(fā)

圖16中,包含兩部分內(nèi)容:一是網(wǎng)關(guān)解析來(lái)自平臺(tái)buffer數(shù)據(jù)獲取JSON格式設(shè)備控制命令;二是打開(kāi)設(shè)備,獲取設(shè)備溫度數(shù)據(jù),每5秒更新一次,更新后的數(shù)據(jù)會(huì)重新組包經(jīng)網(wǎng)關(guān)發(fā)往平臺(tái)實(shí)現(xiàn)數(shù)據(jù)模型的同步。

4.2 性能測(cè)試

采用Jmeter軟件取1 000個(gè)樣本,測(cè)試網(wǎng)關(guān)性能[19]。各性能參數(shù)與預(yù)期聚合報(bào)告對(duì)比如表1所示。

表1 聚合報(bào)告對(duì)比

表1中,對(duì)網(wǎng)關(guān)性能測(cè)試的參數(shù)主要包含平均響應(yīng)時(shí)間、丟包率、錯(cuò)誤率、時(shí)延以及傳輸速率5部分,通過(guò)聚合報(bào)告分析,對(duì)比得出,實(shí)測(cè)各類參數(shù)均符合預(yù)期目標(biāo)范圍,且網(wǎng)關(guān)通信良好。

測(cè)試結(jié)果,網(wǎng)關(guān)中各模塊均以實(shí)現(xiàn)各自功能。網(wǎng)關(guān)能夠?qū)崿F(xiàn)傳感設(shè)備的接入、控制以及數(shù)據(jù)的上傳與下發(fā),并且各種性能參數(shù)均符合預(yù)期設(shè)計(jì)的目標(biāo)。MODBUS網(wǎng)關(guān)的構(gòu)建實(shí)現(xiàn)了設(shè)備與平臺(tái)之間的高效,穩(wěn)定的雙向通信。

5 結(jié)語(yǔ)

采用TCP服務(wù)器搭建技術(shù)、Socket.IO雙向通信技術(shù)、Node.js技術(shù)以及MODBUS客戶端搭建技術(shù)設(shè)計(jì)并實(shí)現(xiàn)了一種通用MODBUS物聯(lián)網(wǎng)網(wǎng)關(guān)。首先,在云平臺(tái)的基礎(chǔ)之上構(gòu)建網(wǎng)關(guān)的模型架構(gòu),將網(wǎng)關(guān)分為感知接口層,協(xié)議適配層,數(shù)據(jù)模型同步層和平臺(tái)通信層4層方便進(jìn)行實(shí)現(xiàn);其次,從網(wǎng)關(guān)的模塊化設(shè)計(jì)與通信系統(tǒng)的設(shè)計(jì)需求兩方面出發(fā),對(duì)網(wǎng)關(guān)通信系統(tǒng)設(shè)計(jì),采用MODBUS、TCP與Socket.IO的實(shí)現(xiàn)路徑,具體實(shí)現(xiàn)設(shè)備、物聯(lián)網(wǎng)網(wǎng)關(guān)及平臺(tái)三者之間的設(shè)備認(rèn)證,數(shù)據(jù)上傳與下發(fā),設(shè)備心跳3大類實(shí)時(shí)信令的雙向交互;最后,對(duì)網(wǎng)關(guān)功能和性能進(jìn)行測(cè)試。通過(guò)測(cè)試表明,網(wǎng)關(guān)可實(shí)現(xiàn)對(duì)于支持標(biāo)準(zhǔn)MODBUS協(xié)議的各類傳感設(shè)備的接入、控制以及數(shù)據(jù)的上傳與下發(fā),從而實(shí)現(xiàn)設(shè)備與平臺(tái)之間的雙向通信。通過(guò)性能對(duì)比,其丟包率、時(shí)延等各類性能參數(shù)均滿足預(yù)期標(biāo)準(zhǔn),且網(wǎng)關(guān)通信良好,基本滿足設(shè)計(jì)要求。

猜你喜歡
數(shù)據(jù)模型網(wǎng)關(guān)客戶端
基于改進(jìn)RPS技術(shù)的IPSEC VPN網(wǎng)關(guān)設(shè)計(jì)
面板數(shù)據(jù)模型截面相關(guān)檢驗(yàn)方法綜述
縣級(jí)臺(tái)在突發(fā)事件報(bào)道中如何應(yīng)用手機(jī)客戶端
孵化垂直頻道:新聞客戶端新策略
基于Vanconnect的智能家居瘦客戶端的設(shè)計(jì)與實(shí)現(xiàn)
加熱爐爐內(nèi)跟蹤數(shù)據(jù)模型優(yōu)化
LTE Small Cell網(wǎng)關(guān)及虛擬網(wǎng)關(guān)技術(shù)研究
應(yīng)對(duì)氣候變化需要打通“網(wǎng)關(guān)”
一種實(shí)時(shí)高效的伺服控制網(wǎng)關(guān)設(shè)計(jì)
客戶端空間數(shù)據(jù)緩存策略
延长县| 资中县| 玉门市| 巴彦县| 瓦房店市| 甘南县| 子长县| 信丰县| 峨眉山市| 吴川市| 望都县| 海口市| 永川市| 大城县| 哈尔滨市| 望江县| 宜章县| 平顺县| 永靖县| 丽江市| 伊川县| 广灵县| 乌鲁木齐市| 浮山县| 丰原市| 乡城县| 衡南县| 行唐县| 加查县| 辽中县| 从化市| 延庆县| 象山县| 枣阳市| 武胜县| 峨眉山市| 马关县| 仁化县| 上林县| 明光市| 盐山县|