在SampleApp中利用SendPeriodicMessage实现终端节点定时向汇聚节
更新时间:2024-06-23 00:10:01 阅读量: 综合文库 文档下载
- SampleApp应用推荐度:
- 相关推荐
在SampleApp中利用SendPeriodicMessage实现终端节点
定时向汇聚节点发送消息
在SampleApp中,SendPeriodicMessage是所有节点的定时消息,即在(一个周期+随机时间)的时间间隔内,所有工作节点向外广播一个消息。在星型网络中,我们可以修改这个定时消息,实现终端节点向汇聚节点定时发送一个消息,这个消息当然可以包含有传感器的信息。下面以发送一个字符串“Hello ZB”为例来说明这个过程。 1、 由于原来这个消息的发送目的地址是广播地址,所以要将其广播地址改为汇聚节点的地址。在一个网络形成之后,汇聚节点的地址为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; 2、 完成上述两步之后,就实现了所有节点都能向汇聚节点发送消息,当然也包括汇聚节点所以我们要将汇聚节点去掉。在函数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_timerEx为系统任务中添加一次定时消息。 3、 定时消息中发送字符串。在函数SampleApp_SendPeriodicMessage中,首先定义一个buf,
内容就为要发送的字符串,然后在AF_DataRequest发送消息函数的第4个参数改为buf的长度,第5个参数改为buff的地址(指针)即可实现数据发送。详细程序如下所示: void SampleApp_SendPeriodicMessage( void ) {
int8 buf[8]={'H','E','L','L','O',' ','Z','B'};
if ( AF_DataRequest( &SampleApp_Periodic_DstAddr, &SampleApp_epDesc, SAMPLEAPP_PERIODIC_CLUSTERID, 8,//发送的数据长度 buf,//字符串的首地址 &SampleApp_TransID, AF_DISCV_ROUTE,
AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )//发送成功 {
P1_0=!P1_0;//发送成功后,灯P1_0取反。用于标示消息是否发送成功 } else {
// Error occurred in request to send. } }
4、 汇聚节点接收周期消息并处理。前面已经将周期消息发送方定为了终端节点,接收方定为了汇聚节点,故当汇聚节点收到周期消息后会运行到SampleApp_ProcessEvent函数中的下面一段: ??
case AF_INCOMING_MSG_CMD://有消息进来,直接转入SampleApp_MessageMSGCB函数。 SampleApp_MessageMSGCB( MSGpkt );//消息处理。 break; ??
然后我们在SampleApp_MessageMSGCB函数中修改汇聚节点接收到周期消息后要做的处理:
在下面的处理中,汇聚节点收到了消息,然后将收到的消息直接发送到串口中。具体如何实现串口发送,请参考其他资料。
void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt ) {
uint16 flashTime;
devStates_t NwkState;
switch ( pkt->clusterId )//判断族ID {
case SAMPLEAPP_PERIODIC_CLUSTERID://如果是周期性消息 //在这里加入所要处理的事件
//接收数据,显示在显示屏,并发送到串口。
/**********************下面这段代码是ninesuns加的************************/ NwkState = (devStates_t)(pkt->hdr.status); // if (NwkState == DEV_END_DEVICE) {
P1_1=!P1_1; //闪灯,标示汇聚节点收到了数据
//从串口发出。
HalUARTWrite(0,pkt->cmd.Data,8); }
/**********************加入的程序结束*********************************/ break;
case SAMPLEAPP_FLASH_CLUSTERID://如果是flash消息
flashTime = BUILD_UINT16(pkt->cmd.Data[1], pkt->cmd.Data[2] ); //小灯闪烁四次
HalLedBlink( HAL_LED_4, 4, 50, (flashTime / 4) ); break; } }
5、 最简单也是最关键的,给汇聚节点下载程序时,一定要将工程选为:CoordinatorEB,给终端节点下载程序时,一定要将工程选为:EndDevicedEB。如果要实现自动建网的话,在option?C/C++compiler 中选择Preprocessor选项,在defined symbols 中注意要将HOLD_AUTO_START(禁止网络自启动)去掉。消息发送周期可以在SampleApp.h中修改。
总结:如果将发送的消息改为传感器的数据,用定时发送消息功能,就可很容易实现传感器数据的主动上传。
正在阅读:
在SampleApp中利用SendPeriodicMessage实现终端节点定时向汇聚节06-23
丰田汽车点火电路01-07
电路原理随堂练习05-22
机械厂厂庆晚会主持词精选02-23
2019磁悬浮无线机车信号系统技术规格书 - 图文09-10
中国文化的精髓作文500字06-22
辽工大asp - net报告(2)09-14
首营企业与首营品种审核管理制度05-02
统计学复习参考整理版(单选+多选)01-27
血字的研究 读书笔记 英文版09-05
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- SendPeriodicMess
- 节点
- 汇聚
- 定时
- 终端
- SampleApp
- 利用
- 实现
- age
- 大肠、肛管疾病疾病病人的护理-成人护理学-05
- 2008-2009学年南京航空航天大学各类奖学金获奖名单
- 诗词格律
- 测算企业主要经营指标公式
- 会计从业资格、会计职称继续教育考试试题(0038)
- 2016年新人教版二年级下册数学教案改
- 六年级数学上册第一单元(位置)试卷
- 绿化服务承诺及质量保证措施
- 高一英语必修1___________第二单元的课文翻译
- 北师大版一年级数学下册导学案及教学反思全套
- 浅谈中深孔直眼掏槽爆破技术在坚硬岩层中的应用
- 2012年专用真实风险管理历年试卷及详解一
- 中国土罐酒行业市场前景分析预测年度报告(目录) - 图文
- 中国电力产业投资分析及未来五年发展动向预测报告
- 届毕业实习管理规定
- 精选部编人教版小学语文一年级下册:2.我多想去看看-精品资料
- 企业文化建设的程序
- 幼儿园章程范本
- 2018年原创经典 IEC17025 2017 实验室管理之风险识别及应对控制
- 桐庐县怡合小学古诗词考级实施办法(试行)