本文摘要:摘要:為了使物聯(lián)網(wǎng)網(wǎng)關(guān)連接多個(gè)串口設(shè)備且能夠并行處理來自串口的數(shù)據(jù),設(shè)計(jì)了一個(gè)支持多路串口設(shè)備連接、在線配置串口參數(shù)的物聯(lián)網(wǎng)網(wǎng)關(guān)。網(wǎng)關(guān)部署在RaspberryPi開源硬件平臺。軟件基于開源的Kura框架,使用OSGi插件技術(shù)進(jìn)行開發(fā),功能模塊將來自不同串口的
摘要:為了使物聯(lián)網(wǎng)網(wǎng)關(guān)連接多個(gè)串口設(shè)備且能夠并行處理來自串口的數(shù)據(jù),設(shè)計(jì)了一個(gè)支持多路串口設(shè)備連接、在線配置串口參數(shù)的物聯(lián)網(wǎng)網(wǎng)關(guān)。網(wǎng)關(guān)部署在RaspberryPi開源硬件平臺。軟件基于開源的Kura框架,使用OSGi插件技術(shù)進(jìn)行開發(fā),功能模塊將來自不同串口的數(shù)據(jù)按照不同的主題以消息的形式發(fā)送到云端,模塊之間使用事件通信,網(wǎng)關(guān)與云端采用MQTT技術(shù)實(shí)現(xiàn)數(shù)據(jù)通信,Kura實(shí)現(xiàn)了串口的可視化配置。實(shí)際應(yīng)用表明,該系統(tǒng)可以穩(wěn)定、可靠地工作,達(dá)到了設(shè)計(jì)要求。
關(guān)鍵詞:串口通信;MQTT;OSGi;Kura
0引言
在早期的設(shè)備中,大多使用串口與控制器進(jìn)行通信,而控制器對串口設(shè)備數(shù)據(jù)的讀取,一般采用輪詢的方式,在對實(shí)時(shí)性要求比較高的場合,這種方式無法有效地滿足系統(tǒng)要求[1 ̄3],串口參數(shù)一旦配置完成,無法對其進(jìn)行動態(tài)配置。物聯(lián)網(wǎng)技術(shù)的發(fā)展,要求對設(shè)備進(jìn)行統(tǒng)一的管理和控制,控制器不僅能快速獲取設(shè)備數(shù)據(jù),還要求通過網(wǎng)絡(luò)與云平臺通信。由于串口控制器功能比較單一,如果需要連接外網(wǎng),還要配置通信模塊,且編程復(fù)雜,系統(tǒng)的靈活性和可擴(kuò)展性也不能滿足實(shí)際使用的要求。針對這些問題,本文提出一種動態(tài)可配置串口物聯(lián)網(wǎng)網(wǎng)關(guān)。網(wǎng)關(guān)上運(yùn)行可配置、可插拔的OSGi(OpenServicesGatewayinitiative)插件,插件實(shí)現(xiàn)多個(gè)串口設(shè)備的數(shù)據(jù)采集和通信功能。
由于OSGi插件具有動態(tài)和并行的特性,與網(wǎng)關(guān)相連的串口設(shè)備可以獨(dú)立、并行地與網(wǎng)關(guān)進(jìn)行數(shù)據(jù)通信。網(wǎng)關(guān)運(yùn)行通信模塊,對通信數(shù)據(jù)遵循消息隊(duì)列遙測傳輸協(xié)議(MessageQueuingTelemetryTransport,MQTT)協(xié)議進(jìn)行格式轉(zhuǎn)換,并將來自不同串口設(shè)備的數(shù)據(jù)封裝成消息的形式,發(fā)布到不同的主題上。
1Kura平臺及插件機(jī)制
Kura是Eclipse基金會發(fā)布的物聯(lián)網(wǎng)項(xiàng)目,用于構(gòu)建IoT(InternetofThings)網(wǎng)關(guān)框架。
Kura由基本服務(wù)、遠(yuǎn)程連接服務(wù)、網(wǎng)絡(luò)配置、用戶管理界面等模塊組成。它支持基于事件的消息通信機(jī)制,可以在不同組件之間通過事件進(jìn)行通信。Kura可在樹莓派等多種硬件平臺上部署。Kura使用OSGi技術(shù)實(shí)現(xiàn)模塊設(shè)計(jì)和管理。OSGi基于構(gòu)件的軟件設(shè)計(jì)方法和面向服務(wù)的模塊化設(shè)計(jì)思想,定義了一個(gè)開放、統(tǒng)一的體系結(jié)構(gòu)[4]。OSGi采用層次結(jié)構(gòu),其中OSGi內(nèi)核框架、bundle(插件)和服務(wù)是其核心要素。插件是OSGi框架下模塊化設(shè)計(jì)的主要體現(xiàn)。在形式上,插件就是一個(gè)Jar文件,OSGi所有基本服務(wù)和功能模塊,都是通過插件實(shí)現(xiàn)的。插件之間實(shí)現(xiàn)物理隔離,系統(tǒng)運(yùn)行期可以遠(yuǎn)程安裝、啟動、升級和卸載,實(shí)現(xiàn)軟件熱插拔、多版本控制。利用插件的動態(tài)模塊化、面向服務(wù)架構(gòu)等特性[5],用戶可以很方便地創(chuàng)建自己的功能插件,并集成到系統(tǒng)中實(shí)現(xiàn)網(wǎng)關(guān)功能,可根據(jù)需要對功能模塊擴(kuò)展[6 ̄7]。
2MQTT協(xié)議
MQTT是一種基于TCP/IP的議通信協(xié)議,為低帶寬、不穩(wěn)定網(wǎng)絡(luò)環(huán)境中的物聯(lián)網(wǎng)應(yīng)用提供可靠的網(wǎng)絡(luò)服務(wù)[8]。由于其在網(wǎng)絡(luò)連接、可靠性、靈活性及成本等方面突出的優(yōu)點(diǎn),目前已經(jīng)被國際標(biāo)準(zhǔn)化組織采用,成為物聯(lián)網(wǎng)行業(yè)的一個(gè)標(biāo)準(zhǔn)。MQTT協(xié)議使用發(fā)布/訂閱消息模式,提供一對多的消息分發(fā)服務(wù)。MQTT協(xié)議由客戶端和代理服務(wù)器兩部分組成,代理服務(wù)器主要完成消息路由功能,它連接了多個(gè)客戶端,客戶端是消息的發(fā)布者和接收者。
3系統(tǒng)設(shè)計(jì)及實(shí)現(xiàn)
3.1硬件結(jié)構(gòu)
網(wǎng)關(guān)采用開源硬件樹莓派3B。樹莓派集成四個(gè)USB接口和WiFi模塊,可以直接通過USB接口與底層設(shè)備連接,若連接設(shè)備數(shù)量較多,也可以使用USB ̄hub對串口擴(kuò)展。樹莓派使用WiFi與MQTT消息代理服務(wù)器連接。將串口獲取的數(shù)據(jù)上傳到云端,實(shí)現(xiàn)設(shè)備端到云端的數(shù)據(jù)傳送。由于網(wǎng)關(guān)與底層設(shè)備通過標(biāo)準(zhǔn)的USB串口連接,同時(shí)與云端的通信也是基于WiFi技術(shù)實(shí)現(xiàn),這時(shí)網(wǎng)關(guān)的硬件連接基于標(biāo)準(zhǔn)化的接口,系統(tǒng)擴(kuò)展和連接都很方便,具有更強(qiáng)的適應(yīng)性。
3.2軟件設(shè)計(jì)
3.2.1軟件整體框架
軟件設(shè)計(jì)基于Kura框架,采用符合OSGi4標(biāo)準(zhǔn)規(guī)范的模塊化設(shè)計(jì),用Java語言編程實(shí)現(xiàn)[9]。每一個(gè)bundle可以獨(dú)立進(jìn)行開發(fā)和部署。插件根據(jù)需要調(diào)用OSGi和Kura提供的基礎(chǔ)服務(wù)。插件需要實(shí)現(xiàn)的主要功能是與串口設(shè)備的連接和與云端服務(wù)器的通信,這兩部分功能分別由串口bundle和通信bundle具體實(shí)現(xiàn)。其次,還需要實(shí)現(xiàn)插件的動態(tài)配置和可視化管理以及插件之間的通信。
(1)串口bundle。串口bundle實(shí)現(xiàn)與多路串口設(shè)備連接,并根據(jù)串口設(shè)備的不同動態(tài)配置串口通信數(shù)據(jù)格式、波特率等參數(shù),串口bundle還要支持設(shè)備的熱插拔和在線升級。(2)通信bundle。根據(jù)數(shù)據(jù)來源不同,通信bundle按照不同的主題將數(shù)據(jù)以消息的形式發(fā)送到MQTT代理服務(wù)器。
(3)插件的可視化管理。bundle需要實(shí)現(xiàn)Con ̄figurableComponent接口,調(diào)用Kura框架提供的可配置服務(wù),配置參數(shù)來自XML文件。(4)網(wǎng)關(guān)連接的串口可動態(tài)設(shè)置。網(wǎng)關(guān)支持多串口設(shè)備同時(shí)連接到一個(gè)網(wǎng)關(guān),每一個(gè)串口的參數(shù)信息可以動態(tài)改變,包括串口名稱、波特率等。且要求在串口設(shè)備工作時(shí)動態(tài)完成不同設(shè)備之間的切換,即實(shí)現(xiàn)所謂的熱插拔。(5)串口bundle與通信bundle之間的通信。插件之間的通信采用基于事件的實(shí)時(shí)通信。串口bundle將實(shí)時(shí)獲取的數(shù)據(jù)以事件的方式發(fā)送給通信bundle。
3.2.2系統(tǒng)設(shè)計(jì)及實(shí)現(xiàn)
(1)串口bundle串口bundle需要與底層串口設(shè)備連接,由于不同設(shè)備的波特率及數(shù)據(jù)格式各異,在設(shè)計(jì)插件時(shí),必須將串口bundle設(shè)計(jì)成可動態(tài)可配置的。串口bundle的功能實(shí)現(xiàn),需要調(diào)用OSGi容器和Kura框架提供的一些功能插件。串口bundle主要依賴連接服務(wù)和事件管理服務(wù)。同時(shí),它也提供可配置服務(wù),供Web管理程序使用。串口bundle啟動時(shí),引用一個(gè)連接服務(wù)的實(shí)例,建立與串口設(shè)備的邏輯連接。隨后讀取串口配置文件,串口配置參數(shù)作為插件的元數(shù)據(jù),以XML文件的形式保存,串口bundle根據(jù)這些參數(shù)設(shè)置串口的工作模式。
為實(shí)現(xiàn)串口數(shù)據(jù)收發(fā),在串口bundle中啟動一個(gè)新線程用來監(jiān)聽串口,接收來自串口設(shè)備的數(shù)據(jù),這些數(shù)據(jù)被封裝成事件,每一個(gè)事件與一個(gè)主題相關(guān)聯(lián),對于通信bundle來說,這個(gè)主題也是區(qū)分不同串口bundle的一個(gè)主要依據(jù)。借助于事件管理服務(wù),由OSGi容器負(fù)責(zé)事件的路由分發(fā)。由于插件繼承了可配置接口,可對外發(fā)布Con ̄figurableComponent服務(wù),當(dāng)插件激活后,插件的運(yùn)行狀態(tài)出現(xiàn)在Web管理界面,通過可視化界面可以對串口插件的參數(shù)進(jìn)行動態(tài)配置。同時(shí),插件的生命周期也可以在這里統(tǒng)一管理。
(2)通信bundle
通信bundle基于Kura內(nèi)置的MQTTservice,根據(jù)連接MQTT代理服務(wù)器的不同可以在可視化界面中配置MQTT服務(wù)代理的參數(shù)。通信bundle接收來自串口bundle的事件。通過解析事件的主題,提取出來自串口bundle的數(shù)據(jù),并根據(jù)事件主題,建立相應(yīng)的消息主題。
(3)插件間通信
插件之間的通信使用事件實(shí)現(xiàn),這是一種松耦合的通信方式,最大限度地減少了插件之間的依賴性。OSGi提供了事件管理服務(wù),具體實(shí)現(xiàn)時(shí),插件需要應(yīng)用OSGi框架內(nèi)置的事件管理服務(wù)。管理服務(wù)采用發(fā)布/訂閱模型。事件發(fā)布者將要傳輸?shù)臄?shù)據(jù)封裝成事件的形式,并以特定的主題向外發(fā)布。由OSGi框架對事件進(jìn)行管理,將事件向所有訂閱該主題的訂閱者發(fā)布。訂閱者實(shí)現(xiàn)事件監(jiān)聽接口,接收特定主題,對事件進(jìn)行解析,獲得發(fā)布者發(fā)送的數(shù)據(jù)。
4系統(tǒng)測試
4.1測試環(huán)境
網(wǎng)關(guān)硬件使用開源硬件平臺RaspberryPi,運(yùn)行Linux操作系統(tǒng)。Kura框架采用4.1版本,測試時(shí)同時(shí)連接了四個(gè)USB串口設(shè)備,每臺設(shè)備工作在不同的波特率下。為實(shí)現(xiàn)遠(yuǎn)程配置,使用PC在局域網(wǎng)內(nèi)與網(wǎng)關(guān)連接,登錄Web服務(wù)器進(jìn)入管理界面對插件進(jìn)行可視化管理。使用WMQTT ̄utility客戶端訂閱云端數(shù)據(jù)。
4.2功能測試
通信bundle根據(jù)串口數(shù)據(jù)的來源不同將數(shù)據(jù)發(fā)布到不同的主題上,可以選擇不同的MQTT代理服務(wù)器將消息發(fā)布到局域網(wǎng)或云端。這里測試了兩種不同的代理服務(wù)器設(shè)置,分別是Kura內(nèi)置的ApacheActiveMQArtemis代理服務(wù)器和Eclipse提供的MQTT測試代理服務(wù)器。測試結(jié)果表明,在兩種不同的網(wǎng)絡(luò)環(huán)境中,插件都能夠很好地工作。
5結(jié)論
本文設(shè)計(jì)并開發(fā)了一種動態(tài)可配置多路串口的網(wǎng)關(guān),網(wǎng)關(guān)軟硬件都基于開源項(xiàng)目,具有可擴(kuò)展性強(qiáng)、開發(fā)快捷、使用靈活等特點(diǎn)。解決了網(wǎng)關(guān)與早期設(shè)備的聯(lián)網(wǎng)問題,在快速網(wǎng)關(guān)原型設(shè)計(jì)中具有一定的實(shí)用價(jià)值。系統(tǒng)的插件設(shè)計(jì)方法,也為未來網(wǎng)關(guān)兼容更多的底層設(shè)備和通信協(xié)議提供了一種有效的方法。
參考文獻(xiàn)
[1]胥飛燕,鄭華容,周宦銀,等.基于FPGA的多串口控制器的設(shè)計(jì)與實(shí)現(xiàn)[J].物聯(lián)網(wǎng)技術(shù),2017,7(10):31 ̄32.
[2]王春媚.多串口并行通信數(shù)據(jù)傳輸系統(tǒng)設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2017,40(4):86 ̄90
[3]孫廣明,唐建.基于高可靠CPCI接口的4通道串口設(shè)計(jì)[J].電子設(shè)計(jì)工程,2017,25(23):90 ̄93.
[4]佘俊,鐘保強(qiáng),高鵬.基于OSGi的SOA應(yīng)用架構(gòu)搭建模塊化的企業(yè)應(yīng)用平臺研究與實(shí)現(xiàn)[J].自動化與儀器儀表,2016,6:156 ̄157.
通信方向論文投稿刊物:《現(xiàn)代電子技術(shù)》(半月刊)分為“通信與信息技術(shù)”和“計(jì)算機(jī)與電子器件”兩個(gè)版本。值此創(chuàng)刊30周年之際,《現(xiàn)代電子技術(shù)》堅(jiān)持“重質(zhì)量,有特色,守信譽(yù)”的辦刊方針基礎(chǔ)上,大力提高本刊的學(xué)術(shù)水平和質(zhì)量,為推進(jìn)科技進(jìn)步,為信息產(chǎn)業(yè)及電子行業(yè)發(fā)展做出更多貢獻(xiàn)。
轉(zhuǎn)載請注明來自發(fā)表學(xué)術(shù)論文網(wǎng):http:///dzlw/21985.html