3145|4

1

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

(赏面吃)问题过于神奇,欢迎大神进来围观 [复制链接]

本帖最后由 Jimmyy 于 2016-4-18 15:56 编辑

ZigBee问题一、问题背景:
1、Z-stack,SAMPLE工程;
2、一个协调器,一个终端设备;
3、协调器、终端设备均与STM32连接,与协调器连接的以下称为MCU1,另一个称为MCU2;(模仿无线透传传输)
4、欲实现目的:
①MCU2有数据及时通过UART传至终端设备,然后终端设备向协调器点对点发送数据,显示屏显示收到的数据;
②MCU1有数据及时通过UART传至协调器,然后协调器向终端设备广播数据,显示屏显示收到的数据。

二、出现的问题:


协调器能够收到终端设备点对点发来的数据,终端设备收不到协调器广播来的数据。

三、预解决:


1、Packet Sniffer抓包分析:


①终端设备向协调器点对点发送数据数据包情况:

描述:1、终端设备请求一次数据,协调器应答一下,然后终端设备点对点发送,协调器应答;
          2、协调器能够收到终端设备的数据;
②协调器广播数据数据包情况:




发现的问题:1、终端设备向协调器请求一次数据,协调器有时发送一个数据包,有时发送两个数据包(PS:这个数据包是期                            望发送的数据包);
                     2、协调器发送数据包后,终端设备没有应答;
                     3、终端设备收不到协调器广播来的数据。
2、ZigBee、MCU角色互换,问题仍得不到解决!


四、主要程序附件:


1、事件处理函数如下:
  1. uint16 SampleApp_ProcessEvent( uint8 task_id, uint16 events )
  2. {
  3.   afIncomingMSGPacket_t *MSGpkt;
  4.   (void)task_id;  // Intentionally unreferenced parameter

  5.   if ( events & SYS_EVENT_MSG )//事件提取
  6.   {
  7.     MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( SampleApp_TaskID );
  8.     while ( MSGpkt )
  9.     {
  10.       switch ( MSGpkt->hdr.event )
  11.       {
  12.         case CMD_SERIAL_MSG:/*串口收到数据*/
  13.             SampleApp_MyFunction_SendMessage((mtOSALSerialData_t *)MSGpkt);/*路由到空中*/
  14.         break;
  15.         
  16.         // Received when a messages is received (OTA) for this endpoint
  17.         case AF_INCOMING_MSG_CMD:/*天线收到数据*/
  18.           SampleApp_MessageMSGCB( MSGpkt );/*传送至PC端或MCU*/
  19.         break;

  20.         default:
  21.           break;
  22.       }

  23.       // Release the memory
  24.       osal_msg_deallocate( (uint8 *)MSGpkt );

  25.       // Next - if one is available
  26.       MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( SampleApp_TaskID );
  27.     }

  28.     // return unprocessed events
  29.     return (events ^ SYS_EVENT_MSG);
  30.   }
  31.   // Discard unknown events
  32.   return 0;
  33. }
复制代码
2、无线数据接收函数:
  1. void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )//接收无线数据
  2. {
  3.   switch ( pkt->clusterId )
  4.   {
  5.     #if defined (MCU)
  6.     case SAMPLEAPP_MYCLUSTERID_P2P_SendMessage:
  7.       
  8.       HalUARTWrite ( //uint8 port
  9.                     0,
  10.                     //uint8 *pBuffer
  11.                     pkt->cmd.Data,
  12.                     //uint16 length
  13.                     pkt->cmd.DataLength
  14.                     );
  15.     break;
  16.    
  17.     #elif defined (SLAVE)
  18.     case SAMPLEAPP_MYCLUSTERID_Broadcast_SendMessage:
  19.       
  20.       HalUARTWrite ( //uint8 port
  21.                     0,
  22.                     //uint8 *pBuffer
  23.                     pkt->cmd.Data,
  24.                     //uint16 length
  25.                     pkt->cmd.DataLength
  26.                     );
  27.     break;
  28.     #endif
  29.   }
  30. }
复制代码
3、串口数据发送函数:
  1. void SampleApp_MyFunction_SendMessage( mtOSALSerialData_t *cmdMsg )
  2. {
  3.   #if defined (PC)/*MCU对SLAVE广播*/
  4.   if ( AF_DataRequest( &SampleApp_Broadcast_DstAddr, &SampleApp_epDesc,
  5.                        //A valid cluster ID as specified by the Profile
  6.                        SAMPLEAPP_MYCLUSTERID_Broadcast_SendMessage,
  7.                        //Number of bytes of data pointed to by next param
  8.                        *cmdMsg->msg,//取出头字节
  9.                        //A pointer to the data bytes to send
  10.                        cmdMsg->msg+1, //指向发送的数据
  11.                        &SampleApp_TransID,
  12.                        AF_DISCV_ROUTE,
  13.                        AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )
  14.   {
  15.   }
  16.   
  17.   #elif defined (SLAVE)/*SLAVE对MCU点播数据*/
  18.   if ( AF_DataRequest( &SampleApp_P2P_DstAddr, &SampleApp_epDesc,
  19.                        //A valid cluster ID as specified by the Profile
  20.                        SAMPLEAPP_MYCLUSTERID_P2P_SendMessage,
  21.                        //Number of bytes of data pointed to by next param
  22.                        *cmdMsg->msg,//取出头字节
  23.                        //A pointer to the data bytes to send
  24.                        cmdMsg->msg+1, //指向发送的数据
  25.                        &SampleApp_TransID,
  26.                        AF_DISCV_ROUTE,
  27.                        AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )
  28.   {
  29.   }
  30.   #endif
  31.   else
  32.   {
  33.     // Error occurred in request to send.
  34.   }
  35. }
复制代码


新人小白,若有问的不妥的地方,还请大家多多包涵,也恳请大家帮忙查找问题,谢谢大家!



此帖出自无线连接论坛

最新回复

本帖最后由 fyaocn 于 2016-5-5 08:18 编辑 1、这个问题描述还需要很多条件:用那个版本的Zigbee,用哪种协议栈或者是自己建立的,时序和设置是否符合技术手册说明。协议栈免费提供的往往制定硬件设备,需要符合其定制的参数。 2、目前看应答没有问题,硬件OK,协议栈OK。因为,终端发广播连接信号已经被接受并连接,zigbee是执行多次握手协议的(视版本),所以主从之间的包交换肯定是Pass了才会后面点对点通讯成功。 3、问题在应用上。如4楼所述是最大可能,就是参数设定不符合自己的要求,因为参数会很多,需要对照。 4、还有一个可能是时序出了问题。对于zigbee,丢包很正常,因为功能设定就是自组网,所以不要求稳定连接。因此,发送和接受时序,信号强度都有关系,即使功能设计很好,但是如果在终端的接受波形区间,没有收到并处理好协调器的包,就死连接不上,而且信号强度小了,也视为无效包。zigbee可以根据信号强度进行三角定位的。 总之,先看设定参数,然后要分析时序,最后没办法了,还要排除射频的信号问题。越到后面越难排查,逻辑正确不能保证信号正确,另外,如果确实需要,最好先用模拟程序测试zigbee的组网,然后再开始程序设计,如果速成成,从厂家的例程修改,并理解。  详情 回复 发表于 2016-5-5 08:16
点赞 关注(1)
 

回复
举报

1173

帖子

3

TA的资源

五彩晶圆(初级)

沙发
 
这个不懂,帮顶
此帖出自无线连接论坛
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
不懂,希望有大神解答,也能来学习学习,帮顶
此帖出自无线连接论坛
 
 
 

回复

3238

帖子

5

TA的资源

五彩晶圆(中级)

4
 
你的终端处于休眠模式,每次醒来向父节点请求数据,你在-DRFD_RCVC_ALWAYS_ON=TRUE,默认情况下是终端节点不接受父节点发送给他的应用层数据。
此帖出自无线连接论坛
个人签名淘宝:https://viiot.taobao.com/Q群243090717
多年专业物联网行业经验,个人承接各类物联网外包项目
 
 
 

回复

359

帖子

9

TA的资源

一粒金砂(高级)

5
 
本帖最后由 fyaocn 于 2016-5-5 08:18 编辑

1、这个问题描述还需要很多条件:用那个版本的Zigbee,用哪种协议栈或者是自己建立的,时序和设置是否符合技术手册说明。协议栈免费提供的往往制定硬件设备,需要符合其定制的参数。
2、目前看应答没有问题,硬件OK,协议栈OK。因为,终端发广播连接信号已经被接受并连接,zigbee是执行多次握手协议的(视版本),所以主从之间的包交换肯定是Pass了才会后面点对点通讯成功。
3、问题在应用上。如4楼所述是最大可能,就是参数设定不符合自己的要求,因为参数会很多,需要对照。
4、还有一个可能是时序出了问题。对于zigbee,丢包很正常,因为功能设定就是自组网,所以不要求稳定连接。因此,发送和接受时序,信号强度都有关系,即使功能设计很好,但是如果在终端的接受波形区间,没有收到并处理好协调器的包,就死连接不上,而且信号强度小了,也视为无效包。zigbee可以根据信号强度进行三角定位的。
总之,先看设定参数,然后要分析时序,最后没办法了,还要排除射频的信号问题。越到后面越难排查,逻辑正确不能保证信号正确,另外,如果确实需要,最好先用模拟程序测试zigbee的组网,然后再开始程序设计,如果速成成,从厂家的例程修改,并理解。
此帖出自无线连接论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
快速回复 返回顶部 返回列表