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