网站大量收购闲置独家精品文档,联系QQ:2885784924

在SampleApp中利用SendPeriodicMessage实现终端节点定时向汇聚节点发送消息.doc

在SampleApp中利用SendPeriodicMessage实现终端节点定时向汇聚节点发送消息.doc

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
在SampleApp中利用SendPeriodicMessage实现终端节点定时向汇聚节点发送消息

在SampleApp中利用SendPeriodicMessage实现终端节点定时向汇聚节点发送消息 在SampleApp中,SendPeriodicMessage是所有节点的定时消息,即在(一个周期+随机时间)的时间间隔内,所有工作节点向外广播一个消息。在星型网络中,我们可以修改这个定时消息,实现终端节点向汇聚节点定时发送一个消息,这个消息当然可以包含有传感器的信息。下面以发送一个字符串“Hello ZB”为例来说明这个过程。 由于原来这个消息的发送目的地址是广播地址,所以要将其广播地址改为汇聚节点的地址。在一个网络形成之后,汇聚节点的地址为0x0000,这个地址是固定的,所以在初始化函数SampleApp_Init中找到这个目的地址并改成0x0000: //默认为0xFFFF,即广播地址,这里改成了0x000 SampleApp_Periodic_DstAddr.addr.shortAddr = 0x0000;//源程序为0xFFFF,即广播地址 2、单单改了这个地址还不够,需要将地址模式也要修改,就在上述语句的上面有这么一条语句: // Broadcast to everyone ---------地址模式 SampleApp_Periodic_DstAddr.addrMode = (afAddrMode_t)AddrBroadcast; 很明显,地址模式为广播地址模式,我们将其修改为16位短地址模式,程序如下: SampleApp_Periodic_DstAddr.addrMode= (afAddrMode_t)Addr16Bit;// 原为AddrBroadcast; 完成上述两步之后,就实现了所有节点都能向汇聚节点发送消息,当然也包括汇聚节点所以我们要将汇聚节点去掉。在函数SampleApp_ProcessEvent中,有如下一段程序: //如果是三种状态之一则按正常间隔启动定时器 if ( (SampleApp_NwkState == DEV_ZB_COORD)//协调器,即汇聚节点 || (SampleApp_NwkState == DEV_ROUTER)//路由器 || (SampleApp_NwkState == DEV_END_DEVICE) )//终端节点 { // Start sending the periodic message in a regular interval. //按正常间隔启动一个定时器 osal_start_timerEx( SampleApp_TaskID, SAMPLEAPP_SEND_PERIODIC_MSG_EVT, SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT ); } else { //设备不在网络中的不做任何处理 // Device is no longer in the network } break; 我们只需要终端节点向汇聚节点发消息,故把if条件中的协调器和路由器两个选项去掉,如下所示: if ( SampleApp_NwkState == DEV_END_DEVICE)//如果是终端节点,则按正常间隔启动定时器 { // Start sending the periodic message in a regular interval. //按正常间隔启动一个定时器 osal_start_timerEx( SampleApp_TaskID, SAMPLEAPP_SEND_PERIODIC_MSG_EVT, SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT ); } else { //设备不在网络中的不做任何处理 // Device is no longer in the network } 这样,就实现了终端节点定时消息的产生,因为它每次都调用osal_start_

文档评论(0)

haihang2017 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档