DALI通信协议及地址分配原理

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

DALI协议是用于照明系统控制的开放式异步串行数字通信协议。

DALI系统采用主从式结构,系统最多可以连接64个从机单元,每个DALI从机使用唯一的个体标识地址,该地址在系统初始化时设定,使用过程中根据需要修改从机的地址;从机单元最多可分为16组(以组地址区分),每个从机可以属于几个不同的组,每组设备可以设定16个场景。

主机与从机之间使用两条信号线通信,数据采用曼切斯特编码方式编码,信号的上升沿表示“1”,下降沿表示“0”,通信速率为1.2kbaud/s。

通信过程中主机使用两种不同的数据帧格式;发送帧(主机发送到从机)和接收帧(从机发送到主机)。

DALI协议定义了用于实现系统功能的双字节指令集,指令分为标准指令和专用指令两大类。

标准指令的第一字节为地址字节,用于对DALI从机的寻址;第二字节为命令字节,用来控制寻址得到的DALI 从机。

使用标准指令,主控制器可以实现对DALI从机的分组控制、调光控制、场景设定等功能。

专用命令不包含地址字节,两字节内容都是命令码,使用广播方式发送,主要用来对DALI系统进行地址初始化。

DALI接口(限流,过流保护)
DALI 协议(数字可编址的照明接口 Digital Addressable Lighting Interface) 的新标准定义了电子镇流器和控制单元之间的数字通讯,DALI 的设计不是用于复杂的总线系统,而是用于室内的智能,高性能照明管理,注重照明的静态效果,这些功能当然可以通过合适的接口集成到建筑物管理系统中。

为了保证各厂商的 DALI 元件之间完全兼容,DALI 协议被世界标准化,并编制进 IEC60929镇流器标准中,该标准的附录E部分清楚地描述了DALI的电气特性和协议。

这就建立了在全世界销售和使用 DALI 元件的基础,无需考虑厂商、国家或技术上的不兼容,世界著名的公司都支持这个标准。

在DALI协议中,最复杂部分就是主机给DALI设备自动分配地址的过程,也是设计DALI主控制器的难点。

本人现在设计的DALI
主控制采用32位LPC2292 CPU,具有独立的2路DALI总线回路,同时使用CAN总线与其它系统连接,整个主控制器实现两种DALI总线设备的管理,包括地址分配,分组,场景设置,时间表,时序控制等功能。

下面只要讨论DALI自动分配地址过程的实现方法:
地址分配分为三种情况:
1. 所有设备重新分配地址,这种情况一般是在第一次工程调试时使用;
2. 扩展分配地址,只给没有分配地址的设备分配地址,工程上新添加设备时使用;
3. 重复地址分配,当发现存在两种相地址的设备时,这里需要重新为这两个设备重新分配地址。

而三种情况的区别只要是在分配地址协议初始化时,使用
Command 258: 1010 0101 XXXX XXXX "INITIALISE"作区分,当:
XXXX XXXX = 0000 0000 为所有设备重新分配地址;
XXXX XXXX = 1111 1111 扩展分配地址;
XXXX XXXX = 0AAA AAA1 重复地址的重新分配,其中AAAAAA为指定的重复的地址;
这里需要提及一下DALI自动分配地址的原理:(要求不同厂商生产的DALI设备必须符合DALI标准协议,并所有设备挂在同一总线上。

)在经过前面的初始化命令后,主控制器需要发送随机数产生命令RANDOMISE,这时,被初始化过的设备会产生一个24位的随机数,当然要求每个设备产生的随机数不能相同,而且不能等于0和FFFFFF,这也是个技术性的难题,以后再讨论。

在设备产生了随机数后,主机开始发送一个自己的24位数据和总线上的设备比较,找到最小随机数的设备,这时就给这个设备分配一个没有分配的最小地址,成功分配地址给该设备后,再发送一个退出命令,则这个已分配地址的设备退出初始化状态,不再响应主机的比较命令。

重复以上过程,直至找到所有DALI设备。

分配地址过程需要使用到的命令有:
258 1010 0101 XXXX XXXX INITIALISE (初始化)
259 1010 0111 0000 0000 RANDOMISE(产生随机数)
260 1010 1001 0000 0000 COMPARE(比较主机数据与随机数大小)
261 1010 1011 0000 0000 WITHDRAW(退出比较命令)
264 1011 0001 HHHH HHHH SEARCHADDRH(主机数据高字节)
265 1011 0011 MMMM MMMM SEARCHADDRM(主机数据中节)
266 1011 0101 LLLL LLLL SEARCHADDRL(主机数据低节)
267 1011 0111 0AAA AAA1 PROGRAM SHORT ADDRESS(编程地址)
268 1011 1001 0AAA AAA1 VERIFY SHORT ADDRESS(校验地址)
从上面地址分配的原理可以看到,在这个分配的过程中,最只要是主机24位数据和DALI设备24随机数比较的问题。

如何才找到最小的随机数的设备呢?解决这个问题是关键。

比较两个数据的大小方法很多,本人在这里只要采用是2分算法。

实现步骤如下:
1. 主机发送FFFFFF与DALI设备比较,因为DALI设备产生的随机肯定比FFFFFF要小的,如果总线上存在没有分配地址的设备,则肯定回答YES。

否则NO。

2. 在上一步中得知总线上有没有分配地址的设备后,采用2分算法比较主机数据和随机数。

2分法其数为 8,4,2,1.,0,三字节的数据按半字节划分为6个半字节数,从最高的半字节,假设开始时值Y=8,如果有DALI设备回答YES,则将现值减去2分法其数的下一个数,修改为Y=Y-4,如有DALI设备回答NO,则将现值加上2分法其数的下一个数,修改Y=Y+4, 直到2分法其数的值小于1为止。

如:比较最高半字节:
比较的数据DALI设备回答2分法修改半字节值
80 00 00 ―> YES 8-4=4
40 00 00 ―> YES 4-2=2
20 00 00 ―> NO 2+1=3
30 00 00 ―> NO 其数小于1了,这半字节比较完成这里得到该半字节的值为3,接下来比较下一个半字节。

38 00 00 ―> NO 8+4=C
3C 00 00 ―> NO C+2=E
3E 00 00 ―> YES E-1=D
3D 00 00 ―> NO 其数小于1了,这半字节比较完成这里得到该半字节的值为D,接下来比较下一个半字节。

最高字节比较完成,接下使用同样的方法比较中字节和低字节即可。

这样就可以找到最小的随机数的设备.
3. 找到最小的随机数的设备后,使用PROGRAM SHORT ADDRESS命令给这个设备分配一个地址。

4. 完成地址分配后,使用WITHDRAW退出命令,使已分配地址的设备退出比较命令。

5. 重复以面步骤,比较找到其它的DALI设备。

直至到发送FFFFFF都没有设备回答YES为止。

本人采用上面的方法,同时对2组DALI总线上的64个设备进行自动地址分配,
在总线正常工作的情况下,15分钟内可以找到所有设备。

在实现工程应用中,也
有时出现找不齐设备的情况,那需要多扫描几次了。

结合在工程的上实践经验,本人觉得DALI使用自动分配地址的功能是一种低成
本的设计方案,其实最好的最简单的工程应用还是使用拨码开关设置地址合理,
这样更便于工程维护和工程更改。

相关文档
最新文档