knx/eib通信协议的实时性分析与改进
引言 论文联盟http://
随着楼宇智能化应用越来越普及, 产生了许多楼宇智能化通信协议,其中knx/eib(konnex/electrical installation bus)通信协议应用最为广泛。knx/eib通信协议是唯一一个开放式并经过认证的标准, 2006年成为国际标准iso/iec 145433,并于2007年正式成为中国国家标准gb/z 20965—2007[1]。
在家庭或者楼宇智能环境中,对通信协议实时性传输的要求非常高。每个数据命令的发送执行都有一个期限,如果超过这个期限,将会有新的随机数据命令产生,前一条命令可能就已经失效了。换句话说,一条数据命令必须在要求的时间内得到执行,同时还要求每条数据命令的传输时延要稳定。knx/eib通信协议采用了无线通信常采用的带冲突避免的载波侦听多路存取(carrier sense multiple access/collision avoidance, csma/ca)[2]防冲突机制来解决knx/eib网络的冲突问题,但csma/ca机制导致数据命令帧传输时延抖动非常大。比如调光命令,调光命令由两条数据命令组成,两条数据命令的产生是随机的,采用csma/cs算法机制可能会使这两条数据命令发送的延迟时间不同,造成调光无法准确执行;再比如,在总线不繁忙时,一个开灯数据命令或许可以很快地得到发送执行,但是当总线繁忙时,数据命令可能为了避免冲突,回避高优先级或者同优先级优势数据命令的发送,造成很长的传输时延。WWw.133229.coM这种情况在楼宇智能环境下是不能容忍的,而且可能会因此造成严重的误操作。这也使网络的实时性降低。
本文针对knx/eib通信协议在双绞线(twisted pair, tp1)中传输的实时性问题,提出一个改进方法knx/eiba。在不改变原有的通信协议栈的基础上,将一个调度程序应用于knx/eib通信协议的应用层与用户应用程序之间。将原有的分布式平等结构划分为分级主从结构,对数据命令帧的发送进行调度。最后通过对knx/eiba进行分析及原型实现证明了该方法通过有效地减轻传输时延的抖动从而改进了协议的实时性。
在不改变原有knx/eib协议的基础上,将knx/eib各模块分为主从结构来调度数据帧的发送,减少了传输时延抖动,从而在一定程度上解决了knx/eib通信协议实时性问题。
1 knx/eib通信协议
1.1 knx/eib通信协议概述
knx/eib通信网络是一种倾向于网络管理的应用型网络。每个总线连接单元(bus coupling unit, bcu)在链路层之上具有相同的通信内核。knx/eib通信协议包含7层osi标准的通信模型。
图1为tp1下的网络拓扑结构。逻辑拓扑结构允许256个bcu安装在一条支线(line)上, 15条支线通过支线耦合器(line coupler)连接到一条总线(main line)上构成一个域(area),15个域又通过域耦合器(area coupler)连接到骨干线(backbone line)上组成整个网络[3]。
转贴于论文联盟 http://
一般情况下,每个bcu被安装进系统时被分配一个独一无二的独立地址(individual address, iadrs)。knx可以通过组地址(group address, gadrs)对bcu进行无限制分组。所有bcu可以通过发送组播式数据命令帧来进行参论文联盟http://数共享,甚至可以进行按位读写。
knx/eib数据帧格式如图2所示。octet 0中包含了数据命令帧控制信息,其中数据命令帧优先级就包含在其中。octet 1和octet 2 为数据命令帧发送源地址,其为bcu的iadrs。
1.2 knx/eib防冲突机制分析及其对实时性的影响
根据knx/eib标准(knx/eibs),若一个bcu已经开
始发送信号,则系统禁止其他bcu占用信道。当多个bcu
同时向总线上发送数据时,根据csma/ca算法,bcu要检查
每个比特, 如果物理层显示总线繁忙或者正在发生碰撞,则低优先级数据命令帧需要立刻停止传送,高优先权数据命令帧开始传送数据,高优先级数据命令帧传送完成后,低优先级数据命令帧重新开始传输判定。knx/eib通信协议中,传输数据的优先级分为四级:系统最高级(system priority)、报警级别(urgent priority)、普通级别(normal priority)和低级(low priority)。相同优先级数据命令帧将按照数据帧中包含“1”的情况来进行退让,其中“1”状态称为劣态(inferior state),“0”状态为优态(superior)。
虽然knx/eib通信协议优先级的引入,在一定程度上解决了knx/eib数据传输的实时性问题,例如高优先级报警信号可以以最快的速度传输出去,得到最有效的执行。但是在knx/eib网络中,大部分数据命令帧的优先级别都是低级,而且数据命令帧优先级别是在现场安装时通过现场安装调试软件(engineering tool software, ets)固定设置的。根据knx/eib数据帧的格式及防冲突机制,iadrs造成了bcu之间不平等关系,高iadrs数据命令帧将一直是劣势的,无法及时获得通信信道分配,低iadrs数据命令帧将一直是优势的,可以以最快的速度发送出去,甚至可以多次让同一劣势数据命令帧为自己退让,这样就造成控制命令传输时延确定性。从系统整体来看,数据命令帧传输时延的抖动非常厉害,传输时延的剧烈抖动降低了系统的实时性传输。knx/eib通信协议没有减轻传输时延抖动的措施,没有保证实时性传输的机制。
2 相关通信协议的实时性保证机制
文献[4-10]曾经对控制器局域网络(controller area network, can)、过程现场总线(profibus)、pnet和worldfip等现场总线的实时性做过分析评估。can总线通过动态改变节点的优先级,使优先级较低的节点动态提高优先级,保证各个站点有均等的机会获得总线控制权;在arcnet网络中, acrnet总线采用令牌总线(tokenbus)[11-13]方式来管理数据的传输,传输延迟根据网络节点数以及负载变化,它为网络中的各个设备提供了平等使用网络带宽的机会,acrnet总线的传输延迟抖动非常小。knx/eib可以通过类似的方式来确保每一个低级别的数据命令帧具有确定的最长延迟时间,使每个低级别数据命令帧具有均等的机会获得信道分配,减轻系统的传输时延抖动,最终达到实时性改善的目的。
3 改进knx/eib通信协议的实时性机制
为了解决knx/eib通信协议在tp1下通信实时性差的问题, knx/eiba在不改变原有knx/eib通信协议栈的基础上,通过建立调度程序,解决knx/eib实时性传输。这个调度程序运行于knx/eib应用层与用户定义的应用程序之间,在应用层之上利用knx/eib应用层提供的a_propertyvalue_write应用层服务来调度数据命令帧的发送。同时,网络结构也由原来的分布式结构,自动转换为分级主从结构。在一条支线上,支线耦合器为主模块,其他的bcu为从模块;在域结构上,域耦合器成为了主模块而支线耦合器则成为了域结构上的从模块;在骨干线上,域耦合器又成为了骨干线上的从模块;在支线上,网桥(bridge)将支线结构再次分解为多级结构,则网桥即为上一级结构的从模块,又是下一级结构的主模块。从模块不能主动发起低优先级别的数据命令帧传输,只能主动发送具有普通优先级别的通信请求帧给自己主从结构中的主模块;主模块会收集从模块发送来的通信请求,然后调用一个合适的排序算法,来决定从模块依次进行数据命令帧的传输。
3.1 调度程序的数据结构
从模块参数translation_au用来表示是否获得主模块的传输授权,当从模块中的translation_au参数为有效值时,从模块开始发送数据;否则,从模块发送请求通信的数据命令帧,向主模块申请通信授权。而主模块参数translation_dt用来判定是否需要进行信道分配。
在主模块中定义一个存储列表panding_req_list用来存储从模块的通信请求。存储列表结构体如下:
程序前
struct panding_req_list
{ … 转贴于论文联盟 http://
unsigned short addr;
unsigned char priority_tr;
…}
论文联盟http://
程序后
其中addr参数是用来存储申请通信授权的从模块的iadrs;而priority_tr是用来调度从模块的通信申请并进行排序,其初始值为256。
主模块与从模块都需要一个定时器,用来解决总线出现故障时的程序死锁。
3.2 调度程序的调度算法
调度算法的目的是对主模块中存储列表panding_req_list上的i(i=1,2,…)个通信申请进行排序,使得各个从模块获取通信信道的机会均等,使最大通信延迟时间得到确定。
调度程序的伪代码如下:
程序前
if i≤1 then
按照先入先出原则,进行调度
elseif i≥2 then
按照panding_req_list中参数priority_tr,由小到大进行调度
if panding_req_list中参数priority_tr 存在相等的 then
按照panding_req_list中参数adrr, 由大到小进行调度
endif
endif
程序后
设置iadrs值大的bcu的优先级高是为了减少劣势数据命令帧的等待时间,以及减少劣势数据帧在总线与优势数据帧发生竞争的几率,使各个从模块之间的传输延迟尽量平均。
当有一个申请被执行,该申请会从存储列表中被删除,同时调度程序将其他与执行申请addr不同的priority_tr值减1,这样做的目的是保证每一从模块在每一轮通信申请中都有机会获得通信授权。
3.3 从模块调度程序
从模块通过knx/eib通信协议中应用层a_propertyvalue_write服务向主模块申请通信信道。
a_propertyvalue_write是knx/eib通信协议中的应用层服务,属于点对点无连接通信服务。a_propertyvalue_write服务可以直接对bcu的存储空间进行精确到位的操作。在knx/eiba中,此项服务的通信优先级别被设置为普通级别。
转贴于论文联盟 http://
从模块伪代码如下:
程序前
if 有通信需求 then 论文联盟http://
if translation_au参数有效 then
向总线发送数据
translation_au参数设置为无效;
elseif translation_au参数无效 then
向主模块用a_propertyvalue_write服务发送通信请求;
启动定时器
endif
while 定时器在运行 do
if translation_au参数有效 then
向总线发送数据
translation_au参数设置为无效;
终止定时器
break;
endif
endwhile
if 如果数据还没有发出 then
强制向总线发送数据
endif
elseif 无通信请求 then
if translation_au参数有效 then
置 translation_au参数无效;
调用a_propertyvalue_write对主模块translation_dt参数设置为有效;
endif
endif
程序后
3.4 主模块调度程序
主模块调度程序的主要任务是通过knx/eib通信协议中的a_propertyvalue_write应用层服务来响应从模块的通信请求,管理translation_au参数,达到分配从模块通信信道的作用。
主模块的调度程序的伪代码如下所示:
程序前
while(1)
发送作为网桥或者路由功能的数据命令帧;
if panding_req_list列表中不为空 then
if translation_dt 有效 then
终止定时器;
调用排序算法从panding_req_list选出第一个从模块;
调用a_propertyvalue_write对从模块translation_au 参数设置为有效;
对panding_req_list其他从模块的非零priority_tr值减1;
重新启动定时器;
开启总线监听程序
endif
end if
if translation_au 无效 then
if 定时器运行终止 then
设置translation_au 有效
endif
endif
end while
程序后
总线监听程序伪代码;
程序前
while 定时器在运行 then
if 选定从模块有数据命令帧发出 do
设置translation_au 有效
计时器终止;
endif
end while
程序后
主模块收到从模块发送的通信请求后,在接受数据命令帧的过程中,确认此数据命令帧为非过滤数据命令时,立刻向上一级主模块请求通信,尽量减少数据命令帧在主模块等待时间。
3.5 网桥的设计
网桥借用原有的连接方式,将原有的支线分割成多个物理段,分割方式是可以多种多样的,如图3所示,其中的b模块就是网桥。 转贴于论文联盟 http://
网桥不具有自己的iadrs,而是映射其他bcu的iadrs。作为从模块时,映射下一级请求通信的从模块的iadrs;作为主模块时,映射支线耦合器的iadrs。网桥具有过滤功能,对于不需要传输给本级或者从级的数据论文联盟http://命令帧予以过滤,使得通信信道利用率增加。主模块接收到作为从模块的网桥的通信请求时,存储在panding_req_list中相应请求的priority_tr初始值为255,使其有较高优先级发送数据命令帧,目的是减少跨越网桥的数据命令帧在网桥的等待时间。
4 knx/eiba的分析与实现
4.1 knx/eiba的理论分析
按照knx/eiba,一条低优先级的数据命令帧从一条支线上传送到骨干网上的最大延迟时间为
tmax=tl+ta+tbb
(1)
其中tl为数据命令帧在支线上发送以及等待发送许可所需要的最大延迟时间,当支线上的所有模块同时多次发送数据,且该bcu的iadrs最大时,就产生了如下的最大延迟时间,其值为
tl=((trq+trp+ttr)×n+trq×(n-1))×m
(2)
其中:
trq为申请通信帧发送所需要的时间,trp为主模块发送通信许可帧所需要的时间,ttr为数据命令帧发送所需的时间,n为网桥分割的物理段中的bcu的数量,m为网桥分割物理段的级数。
【不通顺】ta为在域结构上数据帧所要花费的最大延长时间,为域结构上所有的支线耦合器同时多次向总线发送数据产生的延迟时间,且该数据帧的优先级最低的情况下,所产生的最大延迟时间,
ta为数据帧在域结构上传输的最大延迟时间,即域结构上所有的支线耦合器同时向总线发送数据且该数据帧的优先级最低时产生的延迟时间,其值为
ta=(trq+trp+ttr)×am+trq×(am-1)
(3)
其中am的值为域结构上所连接支线的数量。
tbb为在骨干上数据命令帧发送所需要的时间,其值为
tbb=(trq+trp+ttr)×bbm+(bbm-1)×trq
(4)
其中bbm为骨干结构上所连接域的数量。则低优先级的数据命令帧从一条支线传送到骨干网上的最大延迟时间为
tmax=(2bbm+2am+2n×m-m-2)trq+
(bbm+am+n×m)trp+(bbm+am+n×m)ttr
(5)
则此情况下系统的最大延迟时间将与接入网络的bcu数量和分级的数量有关。
knx/eibs中所有的bcu同时多次发送数据的情况下,低优势数据帧需要对高优势数据帧退让,低优势数据帧会一直无法发送,只有当高优势数据帧停止发送,低优势数据帧才可以发送,则低优势数据帧的传输延迟时间将是最大传输延迟时间,而低优势数据帧的传输延迟时间将是无法确定的。
knx/eiba的最小延迟时间为线路上只有一个bcu发送数据,没有其他数据帧进行竞争,其值为
由上面的分析可知,knx/eiba虽然牺牲了最小延迟时间,但是在最大延迟时间上要少于knx/eibs;knx/eiba的最大延迟时间与分级的数量和模块的数量有关,其最大延迟时间是确定的,而knx/eibs的最大延迟时间是不确定的;knx/eiba使数据命令帧的传输延迟的抖动范围缩小,减小了系统的传输延迟抖动。
4.2 knx/eiba的实测
通过构建knx/eib网络环境,实现knx/eiba的硬件及软件设备,分别测试了knx/eiba及knx/eibs下的数据命令帧的延迟时间。硬件方面,主模块控制芯片选用基于arm cortexm3内核的lm3s8962微控制器,从模块分别选用nec公司的upd78f0537d和ti公司的msp430两种微控制器,控制器通过uart模块连接tp_uart芯片[9]与knx/eib总线进行通信。软件方面,upd78f0537d与lm3s8962微控制器使用bim130型knx/eib通信协议内核,msp430微控制器使用bim113型knx/eib通信协议内核。同时,在knx/eib网络上加装西门子公司的usb接口模块与windows xp环境下的ets监控软件相连接。
ets监控软件用于监控统计分别在knx/eibs和knx/eiba两种方法下255个模块的数据命令帧的传输延迟时间。
4.3 对监控数据的分析
分别对采用knx/eiba与knx/eibs两种方法的系统进行监测。分别测得的5000个数据命令帧的延迟时间的分布情况如图4所示,纵轴为采集到的数据命令帧延迟时间,横轴为采集到的数据命令帧的序号。
图片
由图4(a)可知,knx/eibs采集到的传输延迟抖动非常大,虽然大部分的时间都在4s以下,但是存在传输延迟非常长的情况,而且此种情况非常多,并且这些延迟都是不能容忍的。由图4(b)可知,knx/eiba大部分的数据也分散在4s以下,但是没有像图4(a)那样的长延迟时间,最长延迟时间不会超过6.2s。由表1可知,knx/eiba在最大延迟时间、平均延迟时间上明显优于knx/eibs。通过均方差值的比较,knx/eiba的传输延迟的抖动要明显优于knx/eibs。在最小延迟时间方面,knx/eiba比knx/eibs差,但是根据
knx/eib应用场合,百毫秒级的延迟是不会影响使用效果的。平均延迟时间的降低证明系统的实时性得到了改善。 转贴于论文联盟 http://