新闻  |   论坛  |   博客  |   在线研讨会
反馈数据分析
luker | 2016-02-25 14:30:23    阅读:1273   发布文章

在seniorDemo中传感器节点负责采集温度数据,将采集得到的数据发送到协调器,协调器接收到数据包之后通过对数据做加工后发往PC机。我们将传感器采集的数据成为环境数据。

static void sendGtwReport(gtwData_t *gtwData)
{
  uint8 pFrame[ZB_RECV_LENGTH];
  
  // //起始标志pFrame[0]=FE,
  pFrame[FRAME_SOF_OFFSET] = CPT_SOP; 
  
  // 数据(源地址+环境数据)长度
  pFrame[FRAME_LENGTH_OFFSET] = 6+SENSOR_REPORT_LENGTH;//6+9=F pFrame[1]=F
  
  // 数据类型为无线网络数据
  pFrame[FRAME_CMD0_OFFSET] = LO_UINT16(ZB_RECEIVE_DATA_INDICATION);   //pFrame[2]=46
  pFrame[FRAME_CMD1_OFFSET] = HI_UINT16(ZB_RECEIVE_DATA_INDICATION);  // pFrame[3]=87
  
  // 源地址
  pFrame[FRAME_DATA_OFFSET+ ZB_RECV_SRC_OFFSET] = LO_UINT16(gtwData->source); //pFrame[4+0]
  pFrame[FRAME_DATA_OFFSET+ ZB_RECV_SRC_OFFSET+ 1] = HI_UINT16(gtwData->source);//pFrame[4+0+1]
  
  // 数据类型为传感器数据反馈
  pFrame[FRAME_DATA_OFFSET+ ZB_RECV_CMD_OFFSET] = LO_UINT16(SENSOR_REPORT_CMD_ID); //pFrame[4+2],SENSOR_REPORT_CMD_ID=2
  pFrame[FRAME_DATA_OFFSET+ ZB_RECV_CMD_OFFSET+ 1] = HI_UINT16(SENSOR_REPORT_CMD_ID);//pFrame[4+2+1]
  
  // 环境数据的长度
  pFrame[FRAME_DATA_OFFSET+ ZB_RECV_LEN_OFFSET] = LO_UINT16(SENSOR_REPORT_LENGTH); //9
  pFrame[FRAME_DATA_OFFSET+ ZB_RECV_LEN_OFFSET+ 1] = HI_UINT16(SENSOR_REPORT_LENGTH);//0
  
  // 环境数据实体
  pFrame[FRAME_DATA_OFFSET+ ZB_RECV_DATA_OFFSET] = gtwData->temp;//温度的整数部分pFrame[4+6]
  pFrame[FRAME_DATA_OFFSET+ ZB_RECV_DATA_OFFSET+ 1] = gtwData->voltage; //电压
  pFrame[FRAME_DATA_OFFSET+ ZB_RECV_DATA_OFFSET+ 2] = LO_UINT16(gtwData->parent); //父节点地址低16位
  pFrame[FRAME_DATA_OFFSET+ ZB_RECV_DATA_OFFSET+ 3] = HI_UINT16(gtwData->parent);//父节点地址高16位
  pFrame[FRAME_DATA_OFFSET+ ZB_RECV_DATA_OFFSET+ SENSOR_TEMP2_OFFSET] = gtwData->temp_2;//温度的小数部分
  pFrame[FRAME_DATA_OFFSET+ ZB_RECV_DATA_OFFSET+ SENSOR_HUMIDITY_OFFSET] = gtwData->Humidity;//湿度,为0
  
  pFrame[FRAME_DATA_OFFSET+ ZB_RECV_DATA_OFFSET+ SENSOR_X_OFFSET] = gtwData->X_Sensor;//3D重力加速度速度,以下3项为0
  pFrame[FRAME_DATA_OFFSET+ ZB_RECV_DATA_OFFSET+ SENSOR_Y_OFFSET] = gtwData->Y_Sensor;
  pFrame[FRAME_DATA_OFFSET+ ZB_RECV_DATA_OFFSET+ SENSOR_Z_OFFSET] = gtwData->Z_Sensor;

  //帧校验序列
  pFrame[ZB_RECV_LENGTH - 1] = calcFCS(&pFrame[FRAME_LENGTH_OFFSET], (ZB_RECV_LENGTH - 2) );
  
  // Write report to UART
  HalUARTWrite(HAL_UART_PORT_0,pFrame, ZB_RECV_LENGTH);
}

由上述代码可以总结出,协调器与PC机通信的数据格式为:


D19 帧校验
D18 3D加速度Z轴
D17 3D加速度Y轴
D16 3D加速度X轴
D15 温度值小数部分
D14 湿度

D13 父地址高8位
D12 父地址低8位
D11 电压值
D10 温度值整数部分
D9 环境数据长度高8位 0
D8 环境数据长度低8位 9
D7 数据类型高8位 0
D6 数据类型低8位 2
D5 源地址高8位
D4 源地址低8位
D3 数据类型高8位 87
D2 数据类型低8位 46
D1 数据长度 F
D0 起始标志 FE

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客