基于I-7188 的EIB 网关的设计与实现
1.引言
eib是欧洲安装总线的简称,这是一个1990年诞生于欧洲的专用于建筑设备自动化控制的现场总线技术标准。诞生时eib技术仅获得7家厂商的支持,到1999年时会员单位已超过200家,在欧洲同类产品市场上占据了绝对的优势地位。然而随着智能家居在人们的生活中扮演着越来越重要的角色,可是在实际应用中因为缺乏规范、统一的行业标准,导致每个厂家的系统只能适应自己的标准,对于外来的产品兼容性差,使得智能家居系统的集成性能差。本文就是为了解决eib系统与智能家居系统设备之间应用集成问题,从而提出了eib网关的设计,实现复杂的eib协议与简单的自定义协议at-bus的相互转换。
协议报文结构
进行eib网关的设计,了解eib协议报文结构是非常重要的。eib协议报文结构如下图2-1所示,通过此图可以清晰看见eib的报文结构包括:控制域,源地址,目的地址,长度,数据和校验共六个部分组成。控制域:主要用来控制是否是重复报文,报文的优先级等;源地址:指发送报文的总线设备的物理地址,在通常操作中没有特殊意义;目的地址:总线设备的物理地址或者对象的组地址;长度:此字节最高位为目的地址类型选择标志,其后3bits为路由计数器,每经过一个耦合器这个数就会减1,当减为0时,报文丢弃,最后的4bits表示数据单元的字节长度;数据:包含传送到总线上的数据单元,具体说明;校验字节:整个报文数据逐位的奇校验。
下面通过一个具体例子来分析eib协议报文,例如十六进制格式的eib协议报文:bc14250400e1008116,通过分析可以知道:控制区域为bc,表示非重复报文,优先级4;源地址为1425;目标地址为0400;长度字节为e1,则说明目的地址为组地址,路由计数值为6,数据长度为1;数据为0081,报文为无标号类报文,服务类型为写入对象值,写入的值为1,校验位为16。因此本报文的意义是源地址为1425的总线设备对组地址为0400的对象发送开命令。
上面的例子是eib的标准数据类型中的开关类型,接下来介绍两个常用标准数据类型,开关类型和调光类型。
开关类型:开关类型数据只占1bit,用来控制执行器的负载的开关,当值为“1”时,执行开的命令,当值为“0”时,执行关的命令,协议外部通信机制上面介绍了eib协议报文结构,下面介绍eib协议外部通信机制,这对eib网关的设计也是至关重要的。由于总线访问单元bau(busaccessunit)的系统程序已经为外部应用定义了外部消息接口emi(externalmessageinterface),使用户可以通过配置服务原语实现eib网关对eib各层的访问。bau通过外部接口pei(physicalexternalinterface)与eib网关进行连接通信,pei的类型有很多种,为了方便此次设计中采用pei-16类型。
pei-16协议格式
pei-16通讯是串行异步的通信方式,采用的是带有硬件握手的全双工传输,一共需要接收数据rxd,发送数据txd,请求发送rts,清空发送cts和地共五根线。pei-16通信参数为:波特率9600,8为数据位,1位停止位,无校验位。pei-16消息格式的报文含一个长度字节,一个消息代码字节和用户数据三个部分。其中长度字节包含数据字节长度信息5bit和长度字节的偶校验位1bit。消息代码即为服务代码,常用服务代码见。共3页,当前第1页123
pei-16协议描述
pei-16协议的数据交换包含如下四个阶段:
1)通信请求(硬件握手)2)传输长度字节(软件握手)3)数据交换4)暂停(2条消息最小时间间隔3ms)下面给出pei-16通信时序图:其中为bcu网关接收数据时序图,为eib网关发送数据时序图。
网关总体设计
通过对eib系统的报文格式以及eib的pei-16消息格式通信时序进行了详细的介绍,接着可以进行eib网关的设计了。由于各个eib厂家都提供一个rs232通讯模块,此模块对外部的接口协议为pei-16,网关就利用此模块与eib总线通信。eib网关的应用拓扑图如图4-1所示,其中pc可用来监视eib总线数据。
硬件设计
eib网关的硬件直接采用鸿格公司生产的i-7188控制器模块,内部硬件结构如上图4-2所示。
i-7188模块采用美国amd公司的80188芯片,主频为40mhz,内部有256k的sram,512k的flashrom,2k的eeprom和rtc功能等。同时本模块还具有强大的通信功能,具有四个串口,其中com1为9线串口,非常适合用来连接eib的rs232通讯模块,com2连接at-bus总线,com3连接pc,com4为程序下载口。i-7188配有minios7嵌入式操作系统,极大提高系统的可靠性和运行的稳定性,同时给开发者提供了极为便利的开发环境和丰富的库函数,给编程带来极大方便。因此采用此模块来构建eib网关不仅可缩短设计时间和减少开发费用,而且可以降低技术风险便于提供更可靠的产品。
软件设计
eib网关主要进行at-bus协议,eib协议相互转换及总线监视功能,在程序开始之前首先初始化串口,然后对eib系统的rs232模块进行配置,使其工作在数据链路层,因为工作在链路层,消息简单和功能灵活性较大,接下来就可以进行协议之间的相互转换了。其软件总体设计框图如下图4-3所示。
pei-16协议驱动设计
pei-16协议驱动主要是完成eib网关与eib的rs232通信模块的通信,一共包含两个模块:发送数据模块,接收数据模块,这两个模块的数据处理流程分别。
eib系统rs232通信模块配置设计为了将rs232通信模块配置在数据链路层,必须使用原语,它能直接访问bau的内存,进行工作层的设置,其pei-16格式的链路层配置消息如图4-6所示。
eib数据解析与封装模块
当使eib的rs232通信模块工作在数据链路层上后,eib网关就需要解析和封装链路层数据。首先介绍如何解析eib链路层数据,这里将用到服务原语,即能监测到eib总线上的数据,假设某个开关按下,对应的灯被打开,监测到所示数据:
通过分析可以发现,长度字节为pei-16协议的头字节,因为后面共有9个字节数据,故为0xa9;消息代码0x49为原语服务代码;而用户数据为标准eib协议报文,可以对照前面分析进行参考,注意因为工作在链路层,故此报文不含校验位。
下面介绍如何封装eib链路层数据,这里将用到和两个服务原语,分别表示数据链路层发送数据请求和链路层发送数据反馈,两者对应的消息代码分别为0x11,0x4e。下面举例分析,如控制组地址为0x0100的灯关闭,只需发送如图4-8所示的格式的报文:共3页,当前第2页123