网站语言:

·当前位置:
   
DALI协议自动分配地址的实现
来源: | 作者:aidimmingcom | 发布时间: 2018-01-09 | 5300 次浏览 | 分享到:
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使用自动分配地址的功能是一种低成

本的设计方案,其实最好的最简单的工程应用还是使用拨码开关设置地址合理,

这样更便于工程维护和工程更改。