ZigBee中Profile(规范),Cluster(簇)

在zigbee规范中,引入了profile, cluster的概念。profile和cluster的翻译没有统一的标准,这里暂时定为规范和簇。个人认为,ZigBee引入profile,cluster的概念,是为了统一应用,使不同厂家、不同设计者的产品可以兼容使用。

Profile说明

ZigBee网络进行数据传输都是建立在应用规范的基础上。规范profile可以理解成一套规定,每个应用应该是对应一个profile ID,每个profile ID可以应用于某项具体的应用,例如自动家居、楼宇自动化等。。

ZigBee联盟已经规定了profile的使用,整个应用规范可以分为公共规范(Public profile)和制造商规范(Manufacturer Specific profile)。公共规范的ID号为:0x0000-0x7FFF,制造商的为:0xBF00-0xFFFF。

其中公共规范已经规定了常见的各种应用,以下是摘录的部分公共规范。

Profile ID Profile Name 应用名称(翻译)
0101 Industial Plant Monitoring(IPM) 工业用植物检测
0104 Home Automation(HA) 家居自动化
0105 Commercial Building Automation(CBA) 商业楼宇自动化
0107 Telecom Applications(TA) 电信应用
0108 Personal Home&hospital Care(PHHC) 个人家庭医院护理
0109 Advanced Metering Initiative(AMI) 先进的计量倡议??

比如home automation public profile就规定了智能家居都要做什么,当然用户也可以规定一个自己的profile。

     协议栈本身也有一个profile,就是Zigbee Device Profile,也就是ZDP了,这里规范了一个zigbee节点都要具备那些功能,比如路由能力啊,网络发现能力啊,各个协议层都要做什么啊。——摘抄

Cluster说明

ZigBee在一个profile的规范下,又提出了cluster的概念。

综合profile和cluster,可以这样理解,一个具体的应用(例如智能家居系统)有大量细节上的小规范(例如电灯的控制:开灯、关灯等),这个规范即成为簇(cluster)。

举例说明,home automation 的public profile已经规定了调光器应该有哪些cluster,如:Color Control Cluster,Ballast Configuration Cluster 等。不同的cluster有不同的命令:

[cpp]  view plain copy
  1. /*****************************************/  
  2. /* Color Control Cluster Commands   */  
  3. /*****************************************/  
  4. #define COMMAND_LIGHTING_MOVE_TO_HUE                    0x00  
  5. #define COMMAND_LIGHTING_MOVE_HUE                           0x01  
  6. #define COMMAND_LIGHTING_STEP_HUE                           0x02  
  7. #define COMMAND_LIGHTING_MOVE_TO_SATURATION                     0x03  
  8. #define COMMAND_LIGHTING_MOVE_SATURATION                    0x04  
  9. #define COMMAND_LIGHTING_STEP_SATURATION                        0x05  
  10. #define COMMAND_LIGHTING_MOVE_TO_HUE_AND_SATURATION     <span style="white-space:pre">      </span>0x06  
  11. #define COMMAND_LIGHTING_MOVE_TO_COLOR                          0x07  
  12. #define COMMAND_LIGHTING_MOVE_COLOR                             0x08  
  13. #define COMMAND_LIGHTING_STEP_COLOR                             0x09  
  14. #define COMMAND_LIGHTING_MOVE_TO_COLOR_TEMPERATURE          <span style="white-space:pre">  </span>0x0a  

除了命令之外,每一个cluster还会定义一些属性,比如color control cluster有一下属性:

[cpp]  view plain copy
  1. #define ATTRID_LIGHTING_COLOR_CONTROL_CURRENT_HUE           0x0000  
  2. #define ATTRID_LIGHTING_COLOR_CONTROL_CURRENT_SATURATION    0x0001  
  3. #define ATTRID_LIGHTING_COLOR_CONTROL_REMAINING_TIME            0x0002  
  4. #define ATTRID_LIGHTING_COLOR_CONTROL_CURRENT_X                 0x0003  
  5. #define ATTRID_LIGHTING_COLOR_CONTROL_CURRENT_Y             0x0004  
  6. #define ATTRID_LIGHTING_COLOR_CONTROL_DRIFT_COMPENSATION        0x0005  
  7. #define ATTRID_LIGHTING_COLOR_CONTROL_COMPENSATION_TEXT         0x0006  
  8. #define ATTRID_LIGHTING_COLOR_CONTROL_COLOR_TEMPERATURE     0x0007  
  9. #define ATTRID_LIGHTING_COLOR_CONTROL_COLOR_MODE            0x0008  

而Ballast Configuration Cluster 则有一下属性:

[cpp]  view plain copy
  1. // Ballast Information attribute set  
  2. #define ATTRID_LIGHTING_BALLAST_CONFIG_PHYSICAL_MIN_LEVEL   0x0000  
  3. #define ATTRID_LIGHTING_BALLAST_CONFIG_PHYSICAL_MAX_LEVEL   0x0001  
  4. #define ATTRID_LIGHTING_BALLAST_BALLAST_STATUS              0x0002  

这些属性反映了这个cluster下设备的状态,可以通过读写这些属性来改变其值。
总结说来,Profile规范了应该包括哪些cluster,一个cluster会有一个ID,在一个cluster下又会有很多command,也会有很多attibute,在一个cluster下面command 和attribute的ID要唯一,不同的cluster下可以重复,不同的profile下clusterID也可以重复。

ZCL的使用


 假设我们要控制一个LED,有一个远程节点(发命令控制led ),一个本地节点(接受命令并真正的让led 亮起来),那么如果引入ZCL的概念,你可以设置这个操作led 的事情是一个cluster,其下包含三个命令,

一个open,一个close,一个read attribute,灯还有一个attribute,那就是当前的status,

远程节点可以用ZCL的函数发open和close命令,也可以随时发一个read attibute命令读取本地节点led 的状态。这么做的好处是不需要再自己设计一个规定(比如:一个数据包的第几个字节表示什么。。。),而是直接调用ZCL即可实现,这对于command和attribute数量很少的应用不见得有多大好处,但是当command和attribute数量很多的时候,引入ZCL会让事情变得简单。

再延伸一点儿,zigbee联盟在协议栈之外又增加了一部分操作cluster的函数,那就是zigbee cluster library,(ZCL),这里边已经以源代码的形式提供了操作联盟规范的那些public profile下的函数,主要功能包括一些command的transmit,response,indicate以及confirm等,还有读写attribute的一些操作函数。所以在理解了ZCL的工作机制基础上,通过调用ZCL的函数实际上会让应用程序设计变得简单

猜你喜欢

转载自blog.csdn.net/Ankie_/article/details/76044530
今日推荐