張玉杰,李 楨,馮春倩
(陜西科技大學電氣與信息工程學院,陜西 西安 710021)
數(shù)字可尋址照明接口(Digital Addressable Lighting Interface,DALI)作為一個開放的數(shù)字化智能照明控制系統(tǒng),具有配置靈活、安全可靠和低成本等優(yōu)點,可靈活的實現(xiàn)單控、組控、場景控制以及狀態(tài)反饋等功能,在燈光控制上具有專業(yè)、細致的特點,受到照明設備制造商的廣泛支持,并已成為國際電工委員會的標準。然而,傳統(tǒng)的DALI照明系統(tǒng)最多可接入64個可尋址設備,制約了DALI照明系統(tǒng)的應用范圍[1,2]。對DALI系統(tǒng)的擴展是提高系統(tǒng)容量、滿足大范圍照明需求的一種有效途徑。
針對以上問題,我們提出了一種基于MQTT協(xié)議的消息發(fā)布/訂閱機制實現(xiàn)多個DALI照明系統(tǒng)組網的方法,在現(xiàn)有的DALI子系統(tǒng)上接入網關,通過多個掛接在DALI系統(tǒng)上的網關訂閱同一主題,實現(xiàn)多個DALI系統(tǒng)的組網以及APP端對多個DALI系統(tǒng)的單控、組控、場景控制等,能夠有效地解決DALI系統(tǒng)燈具容量受限、控制規(guī)模較小的問題。
1)MQTT協(xié)議介紹。消息隊列遙測傳輸(Message Queuing Telemetry Transport,MQTT)是IBM開發(fā)的一種基于代理的輕量級發(fā)布/訂閱的消息傳輸協(xié)議,同時是一個基于TCP/IP的應用層通信協(xié)議,其設計思想是開放、簡單、輕量、易于實現(xiàn)[3,4]。
MQTT采用客戶端-服務器架構,基于主題訂閱/消息發(fā)布進行消息推送。MQTT的基本結構如圖1所示,它由MQTT客戶端和MQTT代理服務器組成??蛻舳丝梢酝ㄟ^訂閱感興趣的消息主題來接收其他客戶端推送的消息。服務器作為發(fā)布者和訂閱者的中介,可以接收來自客戶端的網絡連接,接收客戶端發(fā)布的消息,根據(jù)主題訂閱推送消息到相應的客戶端[5]。
MQTT協(xié)議的發(fā)布/訂閱模式使消息的多個發(fā)布者與多個訂閱者之間不需要直接建立TCP連接進行通信,而是通過建立在消息代理機制中的主題作為中介互相通信。這種消息傳輸模式實現(xiàn)了發(fā)布者和訂閱者之間的松耦合,使系統(tǒng)具有可擴展性,可以支持更為動態(tài)的網絡拓撲結構[6]。
圖1 MQTT結構圖Fig.1 MQTT structure diagram
2)DALI系統(tǒng)介紹。DALI智能照明系統(tǒng)是一種主從式結構,系統(tǒng)由控制設備、控制裝置、DALI總線和總線電源四部分組成,系統(tǒng)結構如圖2所示??刂圃O備與控制裝置通過DALI總線接入系統(tǒng),總線電源用來為總線通信提供電源。DALI協(xié)議規(guī)定了每個DALI系統(tǒng)最多能夠連接64個控制裝置,每個控制裝置擁有一個唯一的短地址,并且最多可設置16個邏輯組地址??刂圃O備可以以單播、組播、廣播的方式對控制裝置進行控制。
圖2 DALI系統(tǒng)結構圖Fig.2 DALI system structure diagram
由于DALI系統(tǒng)最多能夠連接64個控制裝置,在較大規(guī)模照明場合的應用中往往受到限制,因此本文設計將DALI系統(tǒng)與MQTT協(xié)議結合起來,組成一個分布式系統(tǒng),以DALI系統(tǒng)作為底層一級控制系統(tǒng),以MQTT協(xié)議構建第二級的控制系統(tǒng),以此通過MQTT協(xié)議實現(xiàn)不同空間的多個DALI系統(tǒng)的組網。
DALI擴展系統(tǒng)是基于發(fā)布/訂閱模型和MQTT通信協(xié)議,實現(xiàn)多DALI系統(tǒng)的組網[7],系統(tǒng)結構如圖3所示,虛線部分為原有DALI系統(tǒng),稱為DALI子系統(tǒng),每個DALI子系統(tǒng)都有自己的控制設備和控制裝置,能獨立完成各自的燈光控制。DALI擴展系統(tǒng)為在現(xiàn)有的DALI子系統(tǒng)的總線上掛接DALI網關,通過MQTT服務器,以發(fā)布/訂閱的方式實現(xiàn)不同空間的多個DALI子系統(tǒng)的組網,并實現(xiàn)APP端對多個DALI子系統(tǒng)的遠程控制。
圖3 DALI系統(tǒng)擴展結構Fig.3 DALI system extension structure
1)系統(tǒng)云端接入方案實現(xiàn)。系統(tǒng)組網的關鍵在于實現(xiàn)DALI網關的云端接入,本系統(tǒng)采用云平臺為DALI網關提供各類互聯(lián)網服務。云平臺需要提供用戶管理、設備管理、數(shù)據(jù)存儲、端到端(M2M)實時通信等服務。DALI網關實現(xiàn)云平臺的接入主要包括三個步驟:第一,DALI網關接入云平臺之前,需要用戶驗證手機號或郵箱以完成用戶注冊,以得到一個合法的用戶身份;第二,通過APP與DALI網關設備進行交互,實現(xiàn)設備的注冊,并建立APP端與DALI網關設備的綁定關系;第三,DALI網關注冊成功后,獲得MQTT服務器的接入口令,與MQTT代理服務器建立連接。
2)系統(tǒng)控制方法設計。根據(jù)照明控制系統(tǒng)在實際照明場合的應用及需求,對于DALI擴展系統(tǒng)而言,可以將系統(tǒng)中的所有DALI子系統(tǒng)進行任意組合,形成不同控制規(guī)模的組控網絡。根據(jù)組控網絡中DALI子系統(tǒng)的數(shù)量,可以對DALI擴展系統(tǒng)按單播、組播和廣播控制。
擴展系統(tǒng)中的任意DALI子系統(tǒng)可以通過訂閱同一主題,組合成一個組控網絡。當用戶APP發(fā)布該主題的MQTT消息后,MQTT服務器將該消息推送到該網絡中的所有DALI子系統(tǒng)。DALI網關將接收到的主題消息解析成DALI指令,以DALI指令的形式發(fā)送到DALI子系統(tǒng),形成對該網絡中的多個DALI子系統(tǒng)的統(tǒng)一控制。圖4所示為APP與多個DALI子系統(tǒng)的組播控制示意圖,DALI網關#1、
#2訂閱了
圖4 組播控制示意圖Fig.4 Multicast control schematic diagram
DALI網關總體結構圖如圖5所示,主要由網絡接口模塊、控制器模塊和DALI接口等組成。其中網絡接口模塊主要負責接收和發(fā)送網關與MQTT服務器通信的數(shù)據(jù);控制器模塊用于實現(xiàn)MQTT協(xié)議和DALI協(xié)議,完成MQTT協(xié)議與DALI協(xié)議的轉換,以及APP端與DALI網關在云端注冊、綁定以及通信等功能;DALI接口負責滿足網關與DALI系統(tǒng)通信接口的電氣特性。
圖5 網關總體結構圖Fig.5 Gateway overall structure diagram
控制器模塊以STM32F407VET6作為主控制器,該處理器基于Cortex_M4的內核,頻率高達168 MHz,內嵌1 Mb的閃存,192 kb的SRAM,提供豐富的存儲及外設資源。
網絡接口模塊選用SMSC公司的LAN8720A作為以太網收發(fā)器,LAN8720A支持10 M/100 M以太網傳輸速率,通過標準RMII接口連接MAC層,性能高、功耗低、體積小,滿足系統(tǒng)通信的實時性要求。
DALI接口電路的目的是將微控制器的TTL電平與DALI總線電平進行轉換,實現(xiàn)通信功能。DALI使用雙線差分驅動,兩線間的壓差在9.5~22.5 V之間為高電平,在-6.5~6.5 V范圍內為低電平,并且總線電流不大于250 mA[8]。
DALI網關作為DALI系統(tǒng)組網與擴展的關鍵設備,包括的主要功能有:訂閱相關主題,接收來自該主題的消息,并將DALI子系統(tǒng)中控制裝置回復的數(shù)據(jù)幀進行處理,發(fā)布相應的主題消息;實現(xiàn)MQTT消息和DALI消息的協(xié)議轉換。
根據(jù)DALI網關的功能需求,軟件設計主要任務有以下三點:
1) DALI網關主題設計。DALI網關的主題設計是用于實現(xiàn)APP到DALI網關的數(shù)據(jù)交互,用戶APP和DALI網關之間會通過不同的數(shù)據(jù)通道來傳遞,不同的數(shù)據(jù)通道本質上是根據(jù)系統(tǒng)功能需求所預先設定的不同的MQTT主題號。本系統(tǒng)設定了如表1所示的數(shù)據(jù)通道。
表1 數(shù)據(jù)通道表
DALI網關連接上MQTT消息代理服務器后,根據(jù)主題訂閱機制進行主題的訂閱,來實現(xiàn)不同的通信功能。擴展系統(tǒng)中的每個DALI網關都訂閱了與自身ID(Device ID)相關的唯一私有主題,通過該主題可以對擴展系統(tǒng)中的DALI子系統(tǒng)實現(xiàn)一對一通信,即單播控制;
擴展系統(tǒng)中的每個DALI網關都訂閱了broadcast主題,發(fā)布該主題的消息能夠實現(xiàn)對擴展系統(tǒng)的廣播通信,即廣播控制;各DALI網關根據(jù)所屬類別,訂閱分組group_id主題,能夠實現(xiàn)一對多的組播通信,即實現(xiàn)對DALI擴展系統(tǒng)的組播控制。
2)DALI網關MQTT通信服務程序設計。DALI網關的MQTT通信服務程序主要包括連接處理模塊、心跳管理模塊、主題訂閱模塊、消息接收模塊和消息發(fā)布模塊,設計了如表2所示的通信服務程序的主要函數(shù)。
程序啟動后,網關與MQTT服務器的TCP/IP套接字建立連接,連接成功后根據(jù)自己的客戶端ID、心跳值等發(fā)送一個CONNECT消息流與通信服務器建立一個協(xié)議級別的會話,并通過心跳連接函數(shù)Mqtt_pingreq與通信服務器建立長連接。若連接不成功,則間隔一定時間通過Mqtt_reconnect函數(shù)不斷嘗試重連。MQTT連接成功后,每個DALI網關根據(jù)預先協(xié)商的主題通過Mqtt_subscribe函數(shù)進行主題訂閱,并通過Mqtt_message函數(shù)接收相應主題的消息,對消息進行解析、打包,最終把處理結果發(fā)送到DALI總線上,實現(xiàn)對總線裝置的控制。DALI網關可以周期查詢各控制裝置的狀態(tài)信息,并通過Mqtt_publish函數(shù)進行狀態(tài)信息的發(fā)布。
表2 DALI網關MQTT服務程序主要函數(shù)
3) DALI通信程序設計。DALI通信程序主要完成兩方面工作,首先是網關接收到APP端發(fā)送的指令后,將解析的結果轉換為對應的DALI指令,當檢測到DALI總線空閑時,按照DALI前向幀的數(shù)據(jù)格式發(fā)送到DALI總線上。執(zhí)行對DALI子系統(tǒng)的控制、查詢等操作,其次能夠周期查詢DALI子系統(tǒng)中各個裝置的故障狀態(tài),并將故障狀態(tài)反饋給用戶,DALI通信程序流程圖如圖6所示。
圖6 DALI通信程序流程圖Fig.6 DALI communication program flow chart
APP作為客戶端軟件終端,在完成用戶、設備信息的云端注冊及綁定的同時,實現(xiàn)對DALI擴展系統(tǒng)的控制及查詢。根據(jù)APP功能設計,其客戶端軟件界面設計包括登錄界面、主界面、用戶管理界面、設備管理界面、系統(tǒng)控制界面及故障查詢界面,客戶端APP的總體框架如圖7所示。
圖7 客戶端功能模塊的總體框架Fig.7 Framework of client function module
為測試系統(tǒng)性能,搭建了一個簡單的測試平臺,其中主要包括一部安裝了用戶APP的Android手機,基于FogCloud云的MQTT消息代理服務器,兩套DALI控制系統(tǒng),兩個DALI網關。其中APP端作為系統(tǒng)控制終端,用于控制和管理整個系統(tǒng)。FogCloud云是一個提供物聯(lián)網解決方案的云平臺,提供了設備/APP管理,消息通道等功能[9,10]。每個DALI子系統(tǒng)由DALI網關、控制裝置以及DALI電源組成,系統(tǒng)測試圖如圖8所示。
圖8 系統(tǒng)測試圖Fig.8 System test chart
完成APP端和網關在云端的注冊、綁定之后,APP端以組主題號58d376f526033af01fe32609/a2d發(fā)送調光指令時,訂閱了58d376f526033af01fe32609/a2d主題的DALI#1、#2子系統(tǒng)內的控制裝置執(zhí)行了相應的調光操作。測試結果表明,DALI擴展系統(tǒng)中的DALI網關,可以通過訂閱同一組主題實現(xiàn)APP的組播控制。
我們針對傳統(tǒng)DALI照明系統(tǒng)存在的燈具容量受限、控制規(guī)模較小的問題,在研究MQTT協(xié)議的發(fā)布/訂閱模型基礎上,以DALI網關和APP端作為MQTT通信的客戶端,通過主題訂閱與消息發(fā)布的機制,建立了APP端與DALI子系統(tǒng)間的主題關系,實現(xiàn)了APP端對多個DALI子系統(tǒng)的組網與控制。經實驗測試表明,該系統(tǒng)能夠靈活地實現(xiàn)DALI系統(tǒng)的擴展,具有較好的應用價值。