趙艷領(lǐng),韓丹濤,閆曉風(fēng)
(機(jī)械工業(yè)儀器儀表綜合技術(shù)經(jīng)濟(jì)研究所)
一種嵌入式KNX-Modbus TCP網(wǎng)關(guān)的實(shí)現(xiàn)方法
趙艷領(lǐng),韓丹濤,閆曉風(fēng)
(機(jī)械工業(yè)儀器儀表綜合技術(shù)經(jīng)濟(jì)研究所)
介紹了一種基于Cortex-M3處理器和Lwip協(xié)議棧實(shí)現(xiàn)嵌入式KNX-Modbus TCP網(wǎng)關(guān)的方法,該網(wǎng)關(guān)支持接收配置、自診斷、在線升級(jí)、KNX系統(tǒng)通訊、Modbus TCP通訊等功能。利用該網(wǎng)關(guān)可以實(shí)現(xiàn)KNX系統(tǒng)與具備Modbus TCP接口監(jiān)控軟件的集成。
KNX;Modbus TCP;網(wǎng)關(guān);Lwip
1990 年,由7家德國(guó)電氣產(chǎn)品制造商組成聯(lián)盟,制定了EIB(european installation bus) 技術(shù)標(biāo)準(zhǔn)。2001 年,EIBA 協(xié)會(huì)吸收了其他兩家歐洲智能電氣安裝協(xié)會(huì)Batibus 和EHS,在歐洲統(tǒng)一了智能電氣安裝技術(shù)標(biāo)準(zhǔn),也誕生了全新的標(biāo)準(zhǔn)—KNX,并成立了KNX(Konnex)協(xié)會(huì)[1]。KNX是歐洲標(biāo)準(zhǔn)、國(guó)際標(biāo)準(zhǔn),同時(shí)也是中國(guó)國(guó)家標(biāo)準(zhǔn)。KNX 總線是獨(dú)立于制造商的系統(tǒng),目前在智能家居、樓宇自動(dòng)化等領(lǐng)域得到了廣泛應(yīng)用。
Modbus協(xié)議是Modicon公司于1978年發(fā)明的,一種用于電子控制器進(jìn)行控制和通訊的通訊協(xié)議[2]。Modbus協(xié)議是全球第一個(gè)真正用于工業(yè)現(xiàn)場(chǎng)的總線協(xié)議,也是中國(guó)國(guó)家標(biāo)準(zhǔn)。 Modbus TCP協(xié)議應(yīng)用層仍然采用Modbus應(yīng)用層協(xié)議,物理鏈路上采用以太網(wǎng)接口,通信速率大大提高;采用TCP協(xié)議進(jìn)行數(shù)據(jù)的傳輸增強(qiáng)了數(shù)據(jù)傳輸可靠性;Modbus TCP協(xié)議本質(zhì)上是TCP協(xié)議之上的應(yīng)用層協(xié)議,在網(wǎng)絡(luò)層仍然可以采用IP進(jìn)行尋址,因此Modbus TCP協(xié)議不僅適用于局域網(wǎng),也適用于因特網(wǎng);由于可以使用標(biāo)準(zhǔn)的以太網(wǎng)硬件,無需使用專用硬件,因此在各個(gè)行業(yè)得到了大量的使用。
國(guó)內(nèi)在智能家居、樓宇自動(dòng)化等領(lǐng)域中,照明部分的控制基本上為KNX系統(tǒng)所壟斷,但是由于KNX系統(tǒng)難以進(jìn)行可視化監(jiān)視,而常用的監(jiān)控軟件如SCADA系統(tǒng)由于歷史的原因一般只支持Modbus TCP接口,因此KNX系統(tǒng)的透明化就需要使用集成轉(zhuǎn)換網(wǎng)關(guān)。目前,該類集成網(wǎng)關(guān)設(shè)備在國(guó)內(nèi)品種少、可靠性差,應(yīng)用上基本為國(guó)外產(chǎn)品所壟斷,價(jià)格昂貴且操作不便,而且維護(hù)成本較高。
2.1網(wǎng)關(guān)運(yùn)行機(jī)制
KNX設(shè)備/系統(tǒng)與Modbus TCP系統(tǒng)集成后,通過KNX-Modbus TCP網(wǎng)關(guān)數(shù)據(jù)可以在兩個(gè)系統(tǒng)中雙向流動(dòng),其數(shù)據(jù)交互機(jī)制如圖1所示。
2.1.1KNX到Modbus TCP數(shù)據(jù)流處理
當(dāng)KNX-Modbus TCP設(shè)備監(jiān)聽到KNX總線報(bào)文后,由KNX收發(fā)模塊對(duì)報(bào)文進(jìn)行解析并放置到自身模塊的緩沖隊(duì)列鏈表中,網(wǎng)關(guān)管理模塊獲取緩沖隊(duì)列,搜索接收到的組地址相關(guān)信息是否在配置信息列表中,若存在則更新數(shù)據(jù)值;若不存在則進(jìn)行拋棄處理。
2.1.2Modbus TCP到KNX數(shù)據(jù)流處理
1)當(dāng)帶有Modbus TCP接口的系統(tǒng)(如SCADA系統(tǒng))對(duì)KNX-Modbus TCP網(wǎng)關(guān)設(shè)備進(jìn)行寫命令操作時(shí),Modbus TCP收發(fā)模塊通過TCP接收?qǐng)?bào)文并對(duì)其解碼。根據(jù)地址區(qū)域、偏移以及其他信息查找數(shù)據(jù)信息存儲(chǔ)區(qū)域,如存在,則網(wǎng)關(guān)管理模塊根據(jù)映射關(guān)系把Modbus數(shù)據(jù)解析并封裝為KNX數(shù)據(jù)報(bào)文,通過KNX收發(fā)模塊向KNX總線上發(fā)送寫組地址數(shù)據(jù)報(bào)文。
2)網(wǎng)關(guān)正常運(yùn)行中如果診斷出KNX總線復(fù)位,則通過KNX收發(fā)模塊向KNX總線上發(fā)送讀組地址數(shù)據(jù)報(bào)文。
3)當(dāng)網(wǎng)關(guān)復(fù)位重啟正常運(yùn)行后,則通過KNX收發(fā)模塊觸發(fā),向KNX總線上發(fā)送讀組地址數(shù)據(jù)報(bào)文。
圖1 數(shù)據(jù)雙向交互機(jī)制
2.2總體設(shè)計(jì)和模塊劃分
2.2.1基礎(chǔ)軟硬件平臺(tái)選擇
根據(jù)網(wǎng)關(guān)功能需求分析以及對(duì)比國(guó)外產(chǎn)品功能和性能,把本款網(wǎng)關(guān)的性能指標(biāo)定義為最多可以支持600組地址,由于樓宇自動(dòng)化領(lǐng)域?qū)Τ杀颈容^敏感,因此基礎(chǔ)硬件平臺(tái)的選擇也很重要。
1)硬件平臺(tái)的選擇
Cortex-M3處理器以其較高的性價(jià)比得到了廣泛應(yīng)用,該嵌入式網(wǎng)關(guān)選用ST公司的STM32F207ZG作為硬件平臺(tái),使用KNX專用芯片用來進(jìn)行KNX報(bào)文的接收和發(fā)送。
2)TCP/IP網(wǎng)絡(luò)協(xié)議棧的選擇
由于Modbus TCP協(xié)議首先需要TCP協(xié)議的支持,由于嵌入式資源的限制不可能選擇一個(gè)支持整個(gè)TCP/IP協(xié)議簇的復(fù)雜協(xié)議棧。根據(jù)系統(tǒng)需求,選擇的協(xié)議棧只需要支持ARP、ICMP、UDP、TCP基礎(chǔ)協(xié)議即可。Lwip(Light weight internet protocol)是瑞士計(jì)算機(jī)科學(xué)院的一個(gè)開源的TCP/IP 協(xié)議棧實(shí)現(xiàn),其主要關(guān)注的是怎樣減少所使用的內(nèi)存和縮短代碼,這樣就可以讓Lwip 適用于資源有限的小型平臺(tái),例如嵌入式系統(tǒng)[3]。Lwip開源而且免費(fèi),網(wǎng)絡(luò)資源和相關(guān)資料較多,目前在很多設(shè)備和實(shí)踐中得到了大量使用,綜合考慮各種因素,最終選擇了Lwip作為網(wǎng)絡(luò)協(xié)議棧。
2.2.2網(wǎng)關(guān)應(yīng)用程序的實(shí)現(xiàn)
網(wǎng)關(guān)應(yīng)用程序的開發(fā)分為PC配置軟件開發(fā)和嵌入式網(wǎng)關(guān)應(yīng)用程序兩個(gè)部分。
1)PC配置軟件采用Visual C++ 6.0集成開發(fā)環(huán)境,實(shí)現(xiàn)的軟件功能主要包括對(duì)網(wǎng)關(guān)進(jìn)行參數(shù)配置、組態(tài)配置、狀態(tài)監(jiān)視、數(shù)據(jù)監(jiān)視等功能,與嵌入式網(wǎng)關(guān)應(yīng)用程序匹配使用,本文不做深入探討
2)嵌入式網(wǎng)關(guān)應(yīng)用程序采用C語言和MDK環(huán)境進(jìn)行集成開發(fā),采用模塊化設(shè)計(jì)思想,主要分為6個(gè)模塊,如圖2所示。
圖2 KNX-Modbus TCP網(wǎng)關(guān)功能模塊
(1)Modbus協(xié)議實(shí)現(xiàn)模塊:Modbus協(xié)議處理、功能碼和異常處理,主要是Modbus應(yīng)用層協(xié)議的實(shí)現(xiàn)。
(2)Modbus TCP收發(fā)模塊:基于TCP協(xié)議和502端口的網(wǎng)絡(luò)通信管理。
(3)網(wǎng)關(guān)管理模塊:管理KNX到Modbus的映射,完成數(shù)據(jù)的雙向交互。
(4)KNX收發(fā)模塊:完成KNX報(bào)文的接收、解析以及報(bào)文的封裝、發(fā)送。
(5)診斷模塊:完成設(shè)備自身信息的診斷,如網(wǎng)絡(luò)通斷診斷、KNX總線復(fù)位診斷,根據(jù)診斷結(jié)果進(jìn)行相應(yīng)的報(bào)警以及故障處置。
(6)配置服務(wù)模塊:基于UDP8000端口的PC配置軟件服務(wù)的處理。
本文著重分析Modbus協(xié)議實(shí)現(xiàn)和Modbus系統(tǒng)與KNX系統(tǒng)的映射原理兩個(gè)部分。
Modbus TCP協(xié)議規(guī)定使用TCP協(xié)議進(jìn)行通信,端口為502,在默認(rèn)狀態(tài)下,強(qiáng)制監(jiān)聽這個(gè)端口[4]。Modbus應(yīng)用層報(bào)文封裝在TCP的應(yīng)用數(shù)據(jù)區(qū)域內(nèi),如圖3所示。其應(yīng)用數(shù)據(jù)單元ADU包括報(bào)文頭和協(xié)議數(shù)據(jù)單元PDU,各個(gè)層都有相應(yīng)的控制信息,為了提高開發(fā)效率,可以采用一些開源軟件的代碼進(jìn)行復(fù)用,譬如經(jīng)常使用的Wireshark網(wǎng)絡(luò)分析工具就包含針對(duì)Modbus TCP報(bào)文解析的功能模塊。
根據(jù)網(wǎng)關(guān)功能,本文實(shí)現(xiàn)的Modbus TCP協(xié)議支持的功能碼包括:0×01(讀線圈)、0×02(讀離散量輸入)、0×03(讀保持寄存器)、0×04(讀輸入寄存器)、0×05(寫單個(gè)線圈)、0×06(寫單個(gè)寄存器)、0×0F(寫多個(gè)線圈)、0×10(寫多個(gè)寄存器)。
KNX-Modbus TCP網(wǎng)關(guān)支持Modbus協(xié)議規(guī)定的8種功能碼,網(wǎng)關(guān)負(fù)責(zé)兩個(gè)KNX系統(tǒng)與Modbus TCP系統(tǒng)的集成,因此需要兩個(gè)系統(tǒng)的映射(映射的含義是指現(xiàn)實(shí)的物理設(shè)備/系統(tǒng)在兩種協(xié)議規(guī)約的翻譯),系統(tǒng)映射采用靜態(tài)的方式,包括設(shè)備映射和點(diǎn)項(xiàng)映射兩個(gè)類別,系統(tǒng)映射原理如圖4所示。
4.1設(shè)備映射
設(shè)備映射的含義是指物理設(shè)備在不同系統(tǒng)中是怎么表示的。對(duì)于KNX系統(tǒng),物理設(shè)備的表示是物理地址,物理地址由域地址、線地址、設(shè)備地址三部分組成;Modbus TCP設(shè)備的表示可以采用IP地址(網(wǎng)關(guān)設(shè)備不支持多個(gè)IP地址的配置)、端口號(hào)、子網(wǎng)掩碼以及網(wǎng)關(guān)地址等信息。
圖3 整體報(bào)文格式
圖4 KNX-Modbus系統(tǒng)映射原理
4.2點(diǎn)項(xiàng)映射
在KNX協(xié)議中,使用組地址、數(shù)據(jù)類型、是否可讀、是否可寫、是否變化時(shí)傳輸以及是否可更新等屬性進(jìn)行數(shù)據(jù)點(diǎn)項(xiàng)的描述。Modbus協(xié)議規(guī)定了離散輸入、線圈、輸入寄存器、保持寄存器4個(gè)區(qū)域,定義了讀寫等功能碼,根據(jù)Modbus協(xié)議的規(guī)定可以確定Modbus數(shù)據(jù)點(diǎn)項(xiàng)唯一性定義:數(shù)據(jù)區(qū)域、地址偏移和數(shù)據(jù)類型。數(shù)據(jù)區(qū)域是指離散輸入、線圈、輸入寄存器、保持寄存器4個(gè)區(qū)域,地址偏移是指上述4個(gè)區(qū)域的具體存儲(chǔ)開始位置,長(zhǎng)度由數(shù)據(jù)類型決定,數(shù)據(jù)類型包括char(1字節(jié)有符號(hào))、 unsigned char(1字節(jié)無符號(hào))、short(2字節(jié)有符號(hào))、unsigned short(2字節(jié)無符號(hào))、int (4字節(jié)有符號(hào))、unsigned int(4字節(jié)無符號(hào))、float(4字節(jié)浮點(diǎn))。
1)網(wǎng)關(guān)支持的KNX系統(tǒng)數(shù)據(jù)類型
(1)開關(guān)量類型(Switch,1bit);
(2)驅(qū)動(dòng)控制類型(Drive control,1bit);
(3)優(yōu)先級(jí)類型(Priority,2bit);
(4)調(diào)光類型(Dimming,4bit);
(5)百分?jǐn)?shù)類型(Scaling,8bit);
(6)2字節(jié)浮點(diǎn)數(shù)類型(KNX所獨(dú)有Float,16bit);
(7)標(biāo)準(zhǔn)浮點(diǎn)數(shù)類型(IEEE754 Float,32bit);
(8)1字節(jié)計(jì)數(shù)器類型(Counter8,8bit);
(9)2字節(jié)計(jì)數(shù)器類型(Counter16,16bit);
(10) 4字節(jié)計(jì)數(shù)器類型(Counter32,32bit)。
2)讀寫屬性的確定原則
(1)輸入信號(hào)只能是可讀的;
(2)輸出信號(hào)是可讀可寫的;
(3)參數(shù)性的變量可以是可讀可寫的。
KNX-Modbus TCP網(wǎng)關(guān)可以方便地把KNX系統(tǒng)集成到具有Modbus TCP接口的監(jiān)控系統(tǒng)中,間接完成了KNX設(shè)備/系統(tǒng)的透明化管控,目前該設(shè)備已經(jīng)在國(guó)家電網(wǎng)北方客服中心等單位得到了應(yīng)用。
但是由于Modbus協(xié)議太過簡(jiǎn)潔,沒有相應(yīng)的行規(guī),對(duì)于數(shù)據(jù)的處理不同的廠商可能有不同的理解。因此,該網(wǎng)關(guān)使用的自動(dòng)映射方法在初期實(shí)際應(yīng)用中碰到了很多質(zhì)疑,通過用戶反饋和持續(xù)改進(jìn),易用性得到了很大的提升,這也提醒我們?cè)诋a(chǎn)品開發(fā)過程中即使沒有標(biāo)準(zhǔn)可依,對(duì)用戶使用習(xí)慣、行業(yè)事實(shí)標(biāo)準(zhǔn)等信息需要進(jìn)行深入的調(diào)研。
[1]王麟琨,王春喜,柳曉菁. KNX 技術(shù)簡(jiǎn)介及特點(diǎn)分析[J].智能建筑電氣技術(shù),2012,6 (5):79-80.
[2]史運(yùn)濤,孫德輝,李志軍,劉大,凡杰,李曉碩.基于Modbus協(xié)議的通訊集成技術(shù)研究[J].化工自動(dòng)化及儀表,2010,04:67-72
[3]張潔,傅明.Lwip協(xié)議棧在嵌入式Linux下的移植與實(shí)現(xiàn)[J].微計(jì)算機(jī)信息,2011,04:94-96.
[4]華镕.從Modbus到透明就緒-施耐德電氣工業(yè)網(wǎng)絡(luò)的協(xié)議、設(shè)計(jì)、安裝和應(yīng)用[M].北京:機(jī)械工業(yè)出版社,2009.
A Method of Implementation for Embedded KNX-Modbus TCP Gateway
ZHAO Yan-ling, HAN Dan-tao, YAN Xiao-feng
(Instrumentation Technology and Economy Institute. P. R. China)
This paper introduces a method of implementation for embedded KNX-Modbus TCP gateway based on Cortex-M3 processor and Lwip stack, the gateway has the function of receiving configuration, self-diagnosis, online-updating, communicating with KNX and Modbus TCP system and so on.You can make the integration of KNX system with monitor including the interface of Modbus TCP.
KNX; Modbus TCP; gateway; Lwip