一、KNX系统拓扑结构

KNX网络是一个完全对等(peer-to-peer)的分布式网络,接入网络的每个设备具有同等的地位。其网络拓扑如下所示:

KNX协议介绍

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总线从一个传感器设备节点(报文发送者)传送到一个或多个驱动器设备节点(报文接收者),这些驱动器设备节点对接收到的报文信息进行分解和分析,从而实现某种应用功能。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 协议对七层协议做了简化,由物理层、数据链路层、网络层、传输层和应用层组成,保留了会话层与表示层,下面对各层做一个简介。

 KNX协议介绍

 KNX协议介绍

3.1 物理层(Physical Layer)

物理层实现了逻辑信号的传输,将数据帧的按位依次发送到总线上传输,当检测到冲突时则停止并进入重传机制。KNX 系统为商家提供不同的物理层传输媒介选择,随着路由器可用性的增强,结合强大的网络技术,多种媒体接入、多种供应商配置的结合已成为可能。

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)应答

应答是被寻址的节点收到报文后发出的消息,每个应答帧只包含一个字节,应答分为三种:

优先级为:BUSY>INAK>IACK,帧格式如下:

KNX协议介绍

(2)消息报文

消息报文包含了需要在KNX总线上传输的信息,主要有控制字节、源地址、目的地址、长度字节、校验字节以及数据链路层服务单元构成,组成如下:

KNX协议介绍

 数据链路层在数据链路层服务数据单元(Link layer Service Data Unit,LSDU)的基础上添加了数据链路层的一系列控制信息,形成了最终报文。数据链路层附加控制信息主要包含以下几个方面:

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,用于面向连接的数据帧的确认。

KNX协议介绍

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 之间的消息报文结构如下所示:

KNX协议介绍

详细的报文格式如下:

KNX协议介绍  

各个协议层需要考虑的部分:

KNX报文装配和分解流程:

KNX协议介绍

四、KNX通信方式

4.1 物理地址和组地址

为了实现KNX协议的通信,KNX总线上的每个节点都拥有两个地址:一个是物理地址(Physical address,PA),另一个是组地址(Group address,GA)。

物理地址是每个总线节点设备的身份证,它对应设备在KNX总线上的拓扑位置,由域、线、设备号组成。物理地址在设备安装编程时分配,用来下载总线设备的应用程序、组地址以及维护工作。物理地址组成如下所示:

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总线节点设备在功能上的逻辑划分。以三段式表述方式为例,第一段用来表示“空调”、“遮阳”以及“调光”三种功能,第二段可代表不同楼层的空调设备、百叶窗和灯,第三段则表示相同楼层的不同房间中的设备。

如果某个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协议介绍

在KNX节点发送和接收报文的过程中,每个通信对象都有一些状态属性,属于临时变量,这些临时变量存储在RAM标志表(RAM Flag Table)之中。上图中也对RAM标志表也有详细表述。RAM Flag Table是系统程序和用户程序之间进行内部通信的桥梁。在RAM标志表中,每个通信对象通过4bits来描述通信标志的状态,包含1bit的接收数据更新标志(Update Flag)、1bit的发送数据请求标志(Data RequestFlag)和2bits的通信状态标志(Transmission Status)。下图则显示了RAM标志表在系统程序和用户程序交互过程中的作用。

KNX协议介绍

在上图中,通信对象表中的通信对象值由系统程序负责更新,通信对象值通过报文从发送节点传输到拥有相同组地址的所有目标节点。所有接收到此报文的总线节点中相应的通信对象值被更新。在KNX系统中,一个通信对象可以通过多个组地址接收信息,但只能依靠一个单独的组地址发送,一个节点设备中的多个通信对象可连接同一个组地址。可见通信对象的更新或者读取都和组地址息息相关,因此系统程序必须寻找到通信对象和组地址之间的对应关系,从而KNX协议引入另外两张表,一是关联表(Association Table),二是地址表(Address Table)。

4.3 地址表和关联表

地址表包含了节点设备中所有物理地址和组地址的信息,其结构如图所示。第1个字节表示物理地址和所有组地址的个数之和,第2、3个字节表示节点设备的物理地址,接下来是各个组地址信息。每个地址都有一个连接号(connection#),从0开始,第一个组地址的连接序号是connection#1。

KNX协议介绍

当系统程序接收到一个报文后,将报文中的组地址和地址表中的组地址按顺序进行比较,若找到相同的组地址或者到地址表结束都未找到相同的组地址则比较停止。

关联表描述了组地址和通信对象之间的连接关系,其结构如图所示。第1个字节代表连接表的长度,接下来是连接表的内容,每个连接包含两部分:

KNX协议介绍

4.4 地址表、关联表和通信对象表之间的关系

KNX总线的通信机制是由通信对象以及与之相关的通信对象表、地址表和关联表共同构成的。地址表和通信对象表都属于长度不定的线性表。地址表的连接号(Connection#)从0开始递增,Connection#0代表节点设备的物理地址,第一个组地址对应Connection#1;通信对象表中的通信对象号(Communication Object#)则从1开始递增,Communication Object#0表示RAM Flag表的指针。在关联表中,一个通信对象号和一个连接号组成一个关联,表示该通信对象值的更新和读取都通过该组地址完成。下图详细表明了通信对象表、地址表和关联表之间是如何联系的。

KNX协议介绍

各表之间的箭头表面通信对象是发送还是接收的,上图中存在以下几种关系:

举例说明

KNX协议介绍

在上图中,总线设备1E01是一个传感器节点,包含两个按钮,对应的通信对象0和1,Obj.0的组地址是1/16,Obj.1的组地址是0/43。其余设备均为驱动器节点,物理地址、通信对象和组地址图中已经详细标明。可见,设备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的值,从而控制灯的开启或者关闭。

发表回复