張玉杰,李 楨,馮春倩
(陜西科技大學電氣與信息工程學院,陜西 西安 710021)
數字可尋址照明接口(Digital Addressable Lighting Interface,DALI)作為一個開放的數字化智能照明控制系統,具有配置靈活、安全可靠和低成本等優點,可靈活的實現單控、組控、場景控制以及狀態反饋等功能,在燈光控制上具有專業、細致的特點,受到照明設備制造商的廣泛支持,并已成為國際電工委員會的標準。然而,傳統的DALI照明系統最多可接入64個可尋址設備,制約了DALI照明系統的應用范圍[1,2]。對DALI系統的擴展是提高系統容量、滿足大范圍照明需求的一種有效途徑。
針對以上問題,我們提出了一種基于MQTT協議的消息發布/訂閱機制實現多個DALI照明系統組網的方法,在現有的DALI子系統上接入網關,通過多個掛接在DALI系統上的網關訂閱同一主題,實現多個DALI系統的組網以及APP端對多個DALI系統的單控、組控、場景控制等,能夠有效地解決DALI系統燈具容量受限、控制規模較小的問題。
1)MQTT協議介紹。消息隊列遙測傳輸(Message Queuing Telemetry Transport,MQTT)是IBM開發的一種基于代理的輕量級發布/訂閱的消息傳輸協議,同時是一個基于TCP/IP的應用層通信協議,其設計思想是開放、簡單、輕量、易于實現[3,4]。
MQTT采用客戶端-服務器架構,基于主題訂閱/消息發布進行消息推送。MQTT的基本結構如圖1所示,它由MQTT客戶端和MQTT代理服務器組成。客戶端可以通過訂閱感興趣的消息主題來接收其他客戶端推送的消息。服務器作為發布者和訂閱者的中介,可以接收來自客戶端的網絡連接,接收客戶端發布的消息,根據主題訂閱推送消息到相應的客戶端[5]。
MQTT協議的發布/訂閱模式使消息的多個發布者與多個訂閱者之間不需要直接建立TCP連接進行通信,而是通過建立在消息代理機制中的主題作為中介互相通信。這種消息傳輸模式實現了發布者和訂閱者之間的松耦合,使系統具有可擴展性,可以支持更為動態的網絡拓撲結構[6]。

圖1 MQTT結構圖Fig.1 MQTT structure diagram
2)DALI系統介紹。DALI智能照明系統是一種主從式結構,系統由控制設備、控制裝置、DALI總線和總線電源四部分組成,系統結構如圖2所示。控制設備與控制裝置通過DALI總線接入系統,總線電源用來為總線通信提供電源。DALI協議規定了每個DALI系統最多能夠連接64個控制裝置,每個控制裝置擁有一個唯一的短地址,并且最多可設置16個邏輯組地址。控制設備可以以單播、組播、廣播的方式對控制裝置進行控制。

圖2 DALI系統結構圖Fig.2 DALI system structure diagram
由于DALI系統最多能夠連接64個控制裝置,在較大規模照明場合的應用中往往受到限制,因此本文設計將DALI系統與MQTT協議結合起來,組成一個分布式系統,以DALI系統作為底層一級控制系統,以MQTT協議構建第二級的控制系統,以此通過MQTT協議實現不同空間的多個DALI系統的組網。
DALI擴展系統是基于發布/訂閱模型和MQTT通信協議,實現多DALI系統的組網[7],系統結構如圖3所示,虛線部分為原有DALI系統,稱為DALI子系統,每個DALI子系統都有自己的控制設備和控制裝置,能獨立完成各自的燈光控制。DALI擴展系統為在現有的DALI子系統的總線上掛接DALI網關,通過MQTT服務器,以發布/訂閱的方式實現不同空間的多個DALI子系統的組網,并實現APP端對多個DALI子系統的遠程控制。

圖3 DALI系統擴展結構Fig.3 DALI system extension structure
1)系統云端接入方案實現。系統組網的關鍵在于實現DALI網關的云端接入,本系統采用云平臺為DALI網關提供各類互聯網服務。云平臺需要提供用戶管理、設備管理、數據存儲、端到端(M2M)實時通信等服務。DALI網關實現云平臺的接入主要包括三個步驟:第一,DALI網關接入云平臺之前,需要用戶驗證手機號或郵箱以完成用戶注冊,以得到一個合法的用戶身份;第二,通過APP與DALI網關設備進行交互,實現設備的注冊,并建立APP端與DALI網關設備的綁定關系;第三,DALI網關注冊成功后,獲得MQTT服務器的接入口令,與MQTT代理服務器建立連接。
2)系統控制方法設計。根據照明控制系統在實際照明場合的應用及需求,對于DALI擴展系統而言,可以將系統中的所有DALI子系統進行任意組合,形成不同控制規模的組控網絡。根據組控網絡中DALI子系統的數量,可以對DALI擴展系統按單播、組播和廣播控制。
擴展系統中的任意DALI子系統可以通過訂閱同一主題,組合成一個組控網絡。當用戶APP發布該主題的MQTT消息后,MQTT服務器將該消息推送到該網絡中的所有DALI子系統。DALI網關將接收到的主題消息解析成DALI指令,以DALI指令的形式發送到DALI子系統,形成對該網絡中的多個DALI子系統的統一控制。圖4所示為APP與多個DALI子系統的組播控制示意圖,DALI網關#1、
#2訂閱了

圖4 組播控制示意圖Fig.4 Multicast control schematic diagram
DALI網關總體結構圖如圖5所示,主要由網絡接口模塊、控制器模塊和DALI接口等組成。其中網絡接口模塊主要負責接收和發送網關與MQTT服務器通信的數據;控制器模塊用于實現MQTT協議和DALI協議,完成MQTT協議與DALI協議的轉換,以及APP端與DALI網關在云端注冊、綁定以及通信等功能;DALI接口負責滿足網關與DALI系統通信接口的電氣特性。

圖5 網關總體結構圖Fig.5 Gateway overall structure diagram
控制器模塊以STM32F407VET6作為主控制器,該處理器基于Cortex_M4的內核,頻率高達168 MHz,內嵌1 Mb的閃存,192 kb的SRAM,提供豐富的存儲及外設資源。
網絡接口模塊選用SMSC公司的LAN8720A作為以太網收發器,LAN8720A支持10 M/100 M以太網傳輸速率,通過標準RMII接口連接MAC層,性能高、功耗低、體積小,滿足系統通信的實時性要求。
DALI接口電路的目的是將微控制器的TTL電平與DALI總線電平進行轉換,實現通信功能。DALI使用雙線差分驅動,兩線間的壓差在9.5~22.5 V之間為高電平,在-6.5~6.5 V范圍內為低電平,并且總線電流不大于250 mA[8]。
DALI網關作為DALI系統組網與擴展的關鍵設備,包括的主要功能有:訂閱相關主題,接收來自該主題的消息,并將DALI子系統中控制裝置回復的數據幀進行處理,發布相應的主題消息;實現MQTT消息和DALI消息的協議轉換。
根據DALI網關的功能需求,軟件設計主要任務有以下三點:
1) DALI網關主題設計。DALI網關的主題設計是用于實現APP到DALI網關的數據交互,用戶APP和DALI網關之間會通過不同的數據通道來傳遞,不同的數據通道本質上是根據系統功能需求所預先設定的不同的MQTT主題號。本系統設定了如表1所示的數據通道。

表1 數據通道表
DALI網關連接上MQTT消息代理服務器后,根據主題訂閱機制進行主題的訂閱,來實現不同的通信功能。擴展系統中的每個DALI網關都訂閱了與自身ID(Device ID)相關的唯一私有主題,通過該主題可以對擴展系統中的DALI子系統實現一對一通信,即單播控制;
擴展系統中的每個DALI網關都訂閱了broadcast主題,發布該主題的消息能夠實現對擴展系統的廣播通信,即廣播控制;各DALI網關根據所屬類別,訂閱分組group_id主題,能夠實現一對多的組播通信,即實現對DALI擴展系統的組播控制。
2)DALI網關MQTT通信服務程序設計。DALI網關的MQTT通信服務程序主要包括連接處理模塊、心跳管理模塊、主題訂閱模塊、消息接收模塊和消息發布模塊,設計了如表2所示的通信服務程序的主要函數。
程序啟動后,網關與MQTT服務器的TCP/IP套接字建立連接,連接成功后根據自己的客戶端ID、心跳值等發送一個CONNECT消息流與通信服務器建立一個協議級別的會話,并通過心跳連接函數Mqtt_pingreq與通信服務器建立長連接。若連接不成功,則間隔一定時間通過Mqtt_reconnect函數不斷嘗試重連。MQTT連接成功后,每個DALI網關根據預先協商的主題通過Mqtt_subscribe函數進行主題訂閱,并通過Mqtt_message函數接收相應主題的消息,對消息進行解析、打包,最終把處理結果發送到DALI總線上,實現對總線裝置的控制。DALI網關可以周期查詢各控制裝置的狀態信息,并通過Mqtt_publish函數進行狀態信息的發布。

表2 DALI網關MQTT服務程序主要函數
3) DALI通信程序設計。DALI通信程序主要完成兩方面工作,首先是網關接收到APP端發送的指令后,將解析的結果轉換為對應的DALI指令,當檢測到DALI總線空閑時,按照DALI前向幀的數據格式發送到DALI總線上。執行對DALI子系統的控制、查詢等操作,其次能夠周期查詢DALI子系統中各個裝置的故障狀態,并將故障狀態反饋給用戶,DALI通信程序流程圖如圖6所示。

圖6 DALI通信程序流程圖Fig.6 DALI communication program flow chart
APP作為客戶端軟件終端,在完成用戶、設備信息的云端注冊及綁定的同時,實現對DALI擴展系統的控制及查詢。根據APP功能設計,其客戶端軟件界面設計包括登錄界面、主界面、用戶管理界面、設備管理界面、系統控制界面及故障查詢界面,客戶端APP的總體框架如圖7所示。

圖7 客戶端功能模塊的總體框架Fig.7 Framework of client function module
為測試系統性能,搭建了一個簡單的測試平臺,其中主要包括一部安裝了用戶APP的Android手機,基于FogCloud云的MQTT消息代理服務器,兩套DALI控制系統,兩個DALI網關。其中APP端作為系統控制終端,用于控制和管理整個系統。FogCloud云是一個提供物聯網解決方案的云平臺,提供了設備/APP管理,消息通道等功能[9,10]。每個DALI子系統由DALI網關、控制裝置以及DALI電源組成,系統測試圖如圖8所示。

圖8 系統測試圖Fig.8 System test chart
完成APP端和網關在云端的注冊、綁定之后,APP端以組主題號58d376f526033af01fe32609/a2d發送調光指令時,訂閱了58d376f526033af01fe32609/a2d主題的DALI#1、#2子系統內的控制裝置執行了相應的調光操作。測試結果表明,DALI擴展系統中的DALI網關,可以通過訂閱同一組主題實現APP的組播控制。
我們針對傳統DALI照明系統存在的燈具容量受限、控制規模較小的問題,在研究MQTT協議的發布/訂閱模型基礎上,以DALI網關和APP端作為MQTT通信的客戶端,通過主題訂閱與消息發布的機制,建立了APP端與DALI子系統間的主題關系,實現了APP端對多個DALI子系統的組網與控制。經實驗測試表明,該系統能夠靈活地實現DALI系統的擴展,具有較好的應用價值。