KNX协议介绍
一、KNX系統拓撲結構
KNX網絡是一個完全對等(peer-to-peer)的分布式網絡,接入網絡的每個設備具有同等的地位。其網絡拓撲如下所示:
KNX 系統的最小安裝單元為線路(Line),每條線路最多可連接 64 個總線元件,可使用線路中繼器(Line Repeater)擴展為 255 個元件;當總線連接的總線元件超過 255 個或需選擇不同結構時,可利用線路耦合器(Line Coupler,)將 15 個線路連接組成一個更大的拓撲單元稱之為域(Domain);每條線通過 LC 與主干線連接,主干線需要一個系統電源設備。域耦合器(Backbone Line Coupler)又可將 15 個域相互連接組合成區(Area)。區、域、線路正對應著元件的物理地址,地址形式為 A.B.C, 而A、B、C 的范圍也是顯而易見的,總共占兩個字節,地址格式如下所示:
?
為實現總線設備間的一對多的通信,KNX 設備提供了組地址,使一個節點發出數據,具有相同組地址的多個節點都可接收并進行相應動作。同一設備可擁有多個組地址,多個設備也可擁有相同的組地址。組地址可分為二層(主群組、子群組)和三層(主群組、子群組、中間組)地址格式,地址格式如下所示:
?
二、KNX傳輸技術特點
KNX系統是一個基于事件控制分布式總線系統。KNX系統中所有的節點設備都需要連接到KNX串行傳輸連接線(即通常所謂的總線)上,通過總線來進行數據的交互和傳輸,同時數據交互和傳輸需要滿足KNX總線協議的標準規定。需發送的信息或者稱為報文必須先打包成KNX的標準報文格式,然后通過KNX總線從一個傳感器設備節點(報文發送者)傳送到一個或多個驅動器設備節點(報文接收者),這些驅動器設備節點對接收到的報文信息進行分解和分析,從而實現某種應用功能。KNX總線的介質之一是雙絞線,數據和電源共享該雙絞線,各個節點設備通過專用總線芯片來實現數據和電源能量的分離。
KNX傳輸技術采用避免碰撞的載波偵聽多路訪問協議(CSMA/CA)來作為總線的訪問控制協議,CSMA/CA協議一方面不降低總線的傳輸速率,另一方面保證總線上的報文不發生碰撞。
(1)雖然KNX總線上的所有節點設備都在偵聽并準備接收傳輸報文信息,但只有具有相應地址的節點設備才會作出響應。為了發送報文,節點設備必需先偵聽KNX總線,等待其他正在發送報文的節點設備發送完畢后才能發送報文,這被稱為載波偵聽(Carrier Sense,CS).
(2)一旦KNX總線空閑,從理論上說,每個KNX節點設備都可以啟動發送報文的過程,這被稱為多路訪問(Multiple Access,MA).
(3)但是在兩個KNX節點設備同時開始發送KNX報文信息的情況下,具有高優先級的節點設備無需延遲可繼續發送KNX報文,同時低優先級的節點設備中止發送過程,等待下次重試。如果兩個節點設備具有相同的優先級,那么物理地址較低的設備可以優先發送報文,這被稱為碰撞避免(Collision Avoidance,CA)。
三、KNX協議模型
KNX 協議遵循 ISO/OSI 七層協議規范,這使它與其他基于 ISO/OSI 模型的協議能夠很好的通信。KNX 協議對七層協議做了簡化,由物理層、數據鏈路層、網絡層、傳輸層和應用層組成,保留了會話層與表示層,下面對各層做一個簡介。
?
?
3.1 物理層(Physical Layer)
物理層實現了邏輯信號的傳輸,將數據幀的按位依次發送到總線上傳輸,當檢測到沖突時則停止并進入重傳機制。KNX 系統為商家提供不同的物理層傳輸媒介選擇,隨著路由器可用性的增強,結合強大的網絡技術,多種媒體接入、多種供應商配置的結合已成為可能。
??
KNX總線主要對雙絞線、電力線、無線射頻、IP等類型的傳輸介質進行了定義和規范,不同的傳輸介質對應于不同的介質附加單元和物理層邏輯單元。
3.2 數據鏈路層(Data Link Layer)
數據鏈路層提供媒體訪問控制和邏輯鏈路控制,確保在同一個子網中兩個或多個設備之間報文的可靠傳輸。
當進行報文的發送時,數據鏈路層主要完成以下功能:
-
將網絡層傳遞來的信息組成完整的幀
-
根據使用的特定媒體訪問協議獲得對媒體的訪問
-
使用物理層服務將報文傳輸到對等的單個或多個設備中的數據鏈路層
當進行報文接收時,數據鏈路層主要完成以下功能:
-
確定報文是否完整
-
根據目標地址決定是否將幀傳送到上一層
-
發送應答幀到傳輸方的數據鏈路層
一個KNX報文包含若干字節,最后一個字節是一個校驗字節,采用奇校驗方式,如果發送結束,被尋址的網絡節點會在13bits的間隔之后發送一個應答幀。如果有多個節點被尋址,則這些節點會完全同時發送這個應答幀,但是總線上只有一個應答幀是可見的。如果一個節點接收失敗,接收方則會發送一個負的應答幀(INAK),接收正確的節點發出個正的確認(IACK),正在忙的節點發送一個忙的應答(BUSY).BUSY可以覆蓋所有的INAK,INAK可以覆蓋所有IACK。由于應答幀沒有地址信息,發送方無法知道哪個接收方沒有收到數據,所以發送方收到一個INAK或者BUSY時會向所有節點重新發送報文。
在數據鏈路層可以產生兩種不同的數據單位,稱之為數據鏈路層協議數據單元LPDU(Link layer Protocol Data Unit),分別為消息報文(Message telegrams)和應答(Acknowledgements),下面分別介紹它們的數據格式。
(1)應答
應答是被尋址的節點收到報文后發出的消息,每個應答幀只包含一個字節,應答分為三種:
-
IACK:被尋址節點正確接收報文
-
INAK:被尋址節點未能正確接收報文
-
BUSY:設備忙
優先級為:BUSY>INAK>IACK,幀格式如下:
?
?
(2)消息報文
消息報文包含了需要在KNX總線上傳輸的信息,主要有控制字節、源地址、目的地址、長度字節、校驗字節以及數據鏈路層服務單元構成,組成如下:
?
?數據鏈路層在數據鏈路層服務數據單元(Link layer Service Data Unit,LSDU)的基礎上添加了數據鏈路層的一系列控制信息,形成了最終報文。數據鏈路層附加控制信息主要包含以下幾個方面:
-
控制字節:定義了2bits的KNX報文優先級信息和1bit的是否重復報文的信息
-
源地址:包含發送報文的節點的物理地址,由高低兩個字節組成。
-
目的地址:包含接收報文的目標節點的地址,該地址可以是物理地址也可以是組地址,由長度字節中的最高位比特決定。
-
長度:定義了1bit的目標地址類型(物理地址還是組地址)、4bits的數據鏈路層服務數據單元的長度信息、以及3bits的路由計數器信息(該信息由網絡層定義)
-
校驗字節:對整個報文所有位進行奇校驗而產生的字節
3.3 網絡層(Network Layer)
KNX網絡層只完成路由計數的功能。為了防止路由中出現死循環,網絡層設置了路由計數器。在每個數據報文中包含一個3bits的路由計數器,初始值在配置時可以設置,最大值為7。KNX報文每經過一個主干路由器或者耦合器,計數器就會自動減一,當計數值為0的時報文放棄傳輸,這樣可以解決報文死循環的問題,有效保障KNX總線的通信效率。
3.4 傳輸層(Transport Layer)
傳輸層負責端到端的數據傳輸,有兩種傳輸方式:
(1) 無連接傳輸模式:
KNX節點之間若采用無連接傳輸模式,發送節點發出的一個報文可以同時傳給一個或多個具有相同組地址的目標節點,而不必在發送節點與目標節點之間建立連接。這種一對多的傳輸模式使得傳輸報文的時間大大縮短,很好地保證了KNX系統能夠高效通信。假設KNX總線上某一節點需要同時對擁有相同組地址的多個自標節點發送報文,它只需對該組地址發送報文,并隨后接收目標節點發出的確認信號。
但是無連接傳輸模式也有其不足之處 ——KNX系統不能確認每個目標節點都收到目標報文。發送節點只需要接收到一個正確接收報文信號(IACK)同時無未能正確接收報文信號(INAK),KNX系統將認為此次傳輸成功。若其中某一目標節點脫離KNX總線,它既不能發出正確接收報文信號亦無法發出未能正確接收報文信號,那么此目標節點信號丟失并不能被KNX系統所察覺。所以無連接傳輸模式適用于對KNX報文傳輸可靠性要求不是較高的應用。
(2)連接傳輸模式:
這種方式的兩個節點通訊時都需要先建立連接,傳輸結束后再進行釋放連接。源節點根據返回的應答信號知曉目的節點的狀態,可檢測報文丟失情況。在需要進行大容量報文傳輸時及重要報文的傳輸,此方式尤為重要。
面向連接和無連接傳輸又可細分成四種不同的數據傳輸模式:
1)多播:點對多點無連接的通信模式,通過組地址進行通訊,實現一控多的場景控制等,使系統能夠高效通信;
2)廣播:點對全部無連接通信模式,使設備和域內所有設備通信;
3)點對點無連接通信:任意兩個獨立設備間的通信;
4)點對點有連接通信:在一個連接中,任意兩個設備之間可進行可靠通信
傳輸層提供了四種不同的傳輸協議數據:
1)UDT,適用于面向非連接的傳輸;
2)NDT,適用于面向連接的傳輸;
3)UCD,用于建立和中斷一個點對點的傳輸;
4)NCD,用于面向連接的數據幀的確認。
3.5 應用層(Application Layer)
應用層是KNX協議的最高層,主要完成兩種功能:第一種是提供接口給應用程序和系統程序,同時定義了一些應用服務;第二種功能是管理總線設備的通信對象,處理本身的通信傳輸和數據,完成用戶的特定功能實現。
AL 產生的最小信號單元稱為 AL 協議數據單元(Application Layer Service Unit,簡稱 APDU)。APDU 的長度為 4bits/10bits,本質是對 TL 的TPDU(TSDU)和APCI(Application Layer Protocol Control information)進行編碼和解碼工作,應用層 AL 與傳輸層 TL 之間的消息報文結構如下所示:
?
詳細的報文格式如下:
??
各個協議層需要考慮的部分:
-
數據鏈路層:控制字段(字段0),源地址(字段1和2),目的地址(字段3和4),目的地址類型(字段5第8位),報文的長度統計(字段5的1-4位)以及校驗字節(字段22)
-
網絡層:路由計數(字段5的5-7位)
-
傳輸層:決定傳輸方式(TPCI,字段6的3-8位)
-
應用層:應用層協議控制信息(APCI,字段6的1-2位和字段7的7-8位,某些應用可能還需要包括字段7的1-6位),應用層數據(字段7到字段n,n<22)
KNX報文裝配和分解流程:
四、KNX通信方式
4.1 物理地址和組地址
為了實現KNX協議的通信,KNX總線上的每個節點都擁有兩個地址:一個是物理地址(Physical address,PA),另一個是組地址(Group address,GA)。
物理地址是每個總線節點設備的身份證,它對應設備在KNX總線上的拓撲位置,由域、線、設備號組成。物理地址在設備安裝編程時分配,用來下載總線設備的應用程序、組地址以及維護工作。物理地址組成如下所示:
組地址在KNX通信機制中有著極其重要的地位,KNX節點之間的相互通信主要是通過組地址而不是物理地址實現的。組地址簡化了總線之間的通信方式,從而使得樓宇自動化中的一控多、多控一以及場景控制變得異常方便。組地址占用2個字節,其首位是0,其余15個比特為有效地址??梢酝ㄟ^兩種十進制方式來表示組地址,分別是兩段式和三段式,如圖2-7所示,兩段式格式為M/s,三段式格式為M/m/s.不同的表示方式只代表該KNX總線節點在KNX網絡中的功能概念上有所不同,其二進制數據則沒有任何改變。例如3/515和3/23代表同一個組地址,用二進制表示都是0 0011 010 00000011。
?
需要指出的是,節點的組地址和物理地址有著本質的不同,物理地址描述的是KNX系統網絡拓撲的結構,而組地址則用來表示是KNX總線節點設備在功能上的邏輯劃分。以三段式表述方式為例,第一段用來表示“空調”、“遮陽”以及“調光”三種功能,第二段可代表不同樓層的空調設備、百葉窗和燈,第三段則表示相同樓層的不同房間中的設備。
如果某個KNX總線設備只完成某項單一功能,它應該只需要一個組地址,但是如果為了實現多個功能,此總線設備可能需要多個不同的組地址。
4.2 通信對象和通信對象表
通信對象(Communication Objects)是KNX網絡通信中的通信主體。一個KNX總線節點設備通常需要多個通信對象來共同合作完成一定的功能,比如一個八路開關輸出節點設備至少需要8個開關通信對象來完成開關輸出操作,同時每一路開關輸出還可以有開關狀態通信對象來反映該路的當前輸出狀態。
為了更好地管理這些通信對象,通信對象表(Communication Object Table)被定義,該表包含節點設備中所有通信對象的信息,由用戶在EEPROM中創建。通信對象表的結構和內部數據含義如下圖所示。由圖可見,該表存儲了節點設備中通信對象的數目(Object Count)、RAM Flag表的指針(RAM Flag Table Pointer).和所有通信對象的描述(Object Descriptor)。通信對象的描述包含三個字節:(1)Data Pointer字節是一個指針,指向一個RAM或者EERROM的地址,在程序運行時,該地址空間用來臨時存儲通信對象值;(2)Config Byte字節用來配置通信對象,設置通信對象的具體通信方式;(3)Type Byte字節代表該通信對象值的數據類型。
?
?
在KNX節點發送和接收報文的過程中,每個通信對象都有一些狀態屬性,屬于臨時變量,這些臨時變量存儲在RAM標志表(RAM Flag Table)之中。上圖中也對RAM標志表也有詳細表述。RAM Flag Table是系統程序和用戶程序之間進行內部通信的橋梁。在RAM標志表中,每個通信對象通過4bits來描述通信標志的狀態,包含1bit的接收數據更新標志(Update Flag)、1bit的發送數據請求標志(Data RequestFlag)和2bits的通信狀態標志(Transmission Status)。下圖則顯示了RAM標志表在系統程序和用戶程序交互過程中的作用。
?
?
-
接收數據更新標志:用來指示用戶接收數據。
-
發送數據請求標志:用來請求相關節點向其發送數據。
-
通信狀態標志:用來指示用戶發送數據。
在上圖中,通信對象表中的通信對象值由系統程序負責更新,通信對象值通過報文從發送節點傳輸到擁有相同組地址的所有目標節點。所有接收到此報文的總線節點中相應的通信對象值被更新。在KNX系統中,一個通信對象可以通過多個組地址接收信息,但只能依靠一個單獨的組地址發送,一個節點設備中的多個通信對象可連接同一個組地址??梢娡ㄐ艑ο蟮母禄蛘咦x取都和組地址息息相關,因此系統程序必須尋找到通信對象和組地址之間的對應關系,從而KNX協議引入另外兩張表,一是關聯表(Association Table),二是地址表(Address Table)。
4.3 地址表和關聯表
地址表包含了節點設備中所有物理地址和組地址的信息,其結構如圖所示。第1個字節表示物理地址和所有組地址的個數之和,第2、3個字節表示節點設備的物理地址,接下來是各個組地址信息。每個地址都有一個連接號(connection#),從0開始,第一個組地址的連接序號是connection#1。
?
?
當系統程序接收到一個報文后,將報文中的組地址和地址表中的組地址按順序進行比較,若找到相同的組地址或者到地址表結束都未找到相同的組地址則比較停止。
關聯表描述了組地址和通信對象之間的連接關系,其結構如圖所示。第1個字節代表連接表的長度,接下來是連接表的內容,每個連接包含兩部分:
4.4 地址表、關聯表和通信對象表之間的關系
KNX總線的通信機制是由通信對象以及與之相關的通信對象表、地址表和關聯表共同構成的。地址表和通信對象表都屬于長度不定的線性表。地址表的連接號(Connection#)從0開始遞增,Connection#0代表節點設備的物理地址,第一個組地址對應Connection#1;通信對象表中的通信對象號(Communication Object#)則從1開始遞增,Communication Object#0表示RAM Flag表的指針。在關聯表中,一個通信對象號和一個連接號組成一個關聯,表示該通信對象值的更新和讀取都通過該組地址完成。下圖詳細表明了通信對象表、地址表和關聯表之間是如何聯系的。
各表之間的箭頭表面通信對象是發送還是接收的,上圖中存在以下幾種關系:
-
一個發送通信對象只允許使用一個組地址,如通信對象Object0、Object1
-
一個接收通信對象可以只和一個組地址連接,如通信對象Object2
-
一個接收通信對象可以和多個組地址連接,如通信對象Object3
-
一個組地址可以連接多個通信對象,如組地址’113‘
舉例說明
在上圖中,總線設備1E01是一個傳感器節點,包含兩個按鈕,對應的通信對象0和1,Obj.0的組地址是1/16,Obj.1的組地址是0/43。其余設備均為驅動器節點,物理地址、通信對象和組地址圖中已經詳細標明??梢?#xff0c;設備1E01中的通信對象Obj.0、設備1CFE中的通信對象Obj.0、設備1CF℉中的通信對象Obj.0都被連接到相同的組地址1/16,這意味著:如果1E01通過1/16發送一個報文,那么設備1C℉E和1CFF將更新通信對象Obj.0的值,從而控制電動機的停止或者啟動。同理,設備1E01中的通信對象Obj.1、設備11EF中的通信對象Obj.0、設備11EE中的通信對象Obj.0都被連接到相同的組地址0/43,這表明:如果1E01通過0/43發送-個報文,那么設備11EF和11EE將更新通信對象Obj.0的值,從而控制燈的開啟或者關閉。
總結
- 上一篇: JAVA API帮助文档
- 下一篇: ORM是什么?如何理解ORM