传感网应用开发(中级)网络协议报文详解

传感网应用开发(中级)网络协议帧

  • 传感网通信协议消息报文解读:
    • 一、有线通信协议消息帧
      • 1.RS485网络的Modbus协议帧
      • 2.CAN网络协议的消息帧
    • 二、无线通信协议消息报文
      • 1.LoRa网络的消息帧
      • 2.ZigBee网络的自定义协议消息帧
    • 三、汇聚节点汇聚数据上传网关消息帧
      • 1.RS485网络上传的网关的报文

传感网通信协议消息报文解读:

一、有线通信协议消息帧

1.RS485网络的Modbus协议帧

(1) 主机向从机发送请求报文:
从设备地址 + 功能码 + 数据段(寄存器地址+寄存器数量) + 差错检测区
例如请求报文为: 01 03 00 00 00 01 84 0A
What!
01 表示从设备的地址;
03 表示读保持寄存器功能(参考下图);
00 00 代表读取从设备0x0000这个寄存器开始的数据(由两个字节,16位组成);
00 01 代表读取一个寄存器的数据(常读取一个寄存器的值,由两个字节,16位组成);
84 0A 代表对前面的所有字节数据进行循环冗余校验检测,保证信息的准确性。
(以上报文均为16进制,一位十六进制能转化为4位二进制。)
-
功能码参考表3-8:传感网应用开发(中级)网络协议报文详解_第1张图片
部分常用功能码、寄存器地址、传感器如下3-28表:

传感器类型代号参考表3-28:
在这里插入图片描述

(2)从机响应报文
本机地址 + 功能码 + 数据段(数据域字节数 + 寄存器值(数据)) + 差错检测区
例如从机响应报文:01 03 02 1919 72 1E

  • 01 表示本设备的地址;
  • 03 表示读保持寄存器功能(参考表3-28);
  • 02 代表返回两个字节的数据(即返回4位十六进制数);
  • 19 19 第一个字节代表温度数据25℃,第二个字节代表湿度数据25%;
  • 72 1E 代表对前面的所有字节数据进行循环冗余校验检测。(一般调用函数计算即可)

其它的传感器传递报文格式类同

2.CAN网络协议的消息帧

(1)从机给主机发送数据报文
传感器类型 + 传感器数值 + 保留1个字节 + 本机地址 + 保留3个字节
例如CAN数据报文:03 00 05 00 06 00 00 00

  • 03 传感器类型,可参考表3-29
  • 00 05 表示传感器数据,火焰数据为5;
  • 00 保留没有使用;
  • 06 为本机地址;
  • 00 00 00 暂时保留,没有使用;

二、无线通信协议消息报文

1.LoRa网络的消息帧

(1)LoRa主机向从机发送请求报文
数据帧头 + 命令 + 网络ID号 + LoRa地址 + 校验和
例如LoRa网关请求报文:55 01 20 21 01 98
HEAD + CMD + NET_ID + LORA_ADDR + CHK;

  • 55 数据帧头(HEAD),默认为0x55;
  • 01 命令,0x01代表读传感器;
  • 21 21 网络ID号,两个字节,代表网络ID为0x2021;
  • 01 LoRa地址,代表向地址为0x01地址的LoRa节点发送请求报文
  • 98 校验和,从HEAD到CHK前一个字节的和,保留低8位

(1)LoRa从机向主机发送响应报文
数据帧头 + 命令 + 网络ID号 + LoRa地址 + 响应 + 数据域长度 + 数据域 + 校验和
HEAD + CMD + NET_ID + LORA_ADDR + ACK + LEN + DATA + CHK;

  • HEAD: 数据帧头,默认为0x55;
  • CMD: 命令,0x01=读传感器;
  • NET_ID: 网络ID号,2个字节;
  • LORA_ADDR: LoRa地址;
  • ACK:响应,0x00-响应OK,0x01-无数据,0x02-数据错误,其他预留;
  • LEN:数据长度,指定数据域DATA有多少个字节。ACK非0x00时,无此项;
  • DATA:数据域,传感器数据;
  • CHK:校验和,从HEAD到CHK前一个字节的和,保留低八位

2.ZigBee网络的自定义协议消息帧

起始位 + 命令类型 + 数据总长度 + 传感器个数 + 传感器类型 + 数据域 + 校验位
START + CMD + LEN + Count + TYPE + DATA0~DATAN + CHK

协议各个报文的协议详解:

  • 起始位(START):固定值为0xCC;
  • 命令类型(CMD):一般为0x01,获取采集数据;
  • 数据总长度(LEN):从起始位到校验位(不包括校验位)之前的字节长度;
  • 传感器个数(Count):根据传感器种类确定,如果采集温湿度个数为2;
  • 传感器类型(TYPE):0x01代表温湿度,其它参考表3-29;
  • 数据域(DATA0~DATAN):存储传感器数据;
  • 校验位(CHK):从START到CHK字节之前的累加和,然后把累加和的结果与0xFF按位与,取得低8位数据CHK的值;

三、汇聚节点汇聚数据上传网关消息帧

1.RS485网络上传的网关的报文

帧起始符 + 地址符(2个字节) + 命令码域 + 数据长度域 + 传感器类型 + 数据域(2个字节) + 校验码域
例如RS-485网络数据报文:DD 34 12 01 09 01 18 40 86

  • DD 帧起始符(START):固定为0xDD;
  • 34 12 地址域(ADDR) :汇聚节点的地址,地址的低位存在前面,高位存在后面,当前地址为从机地址0x1234;
  • 01 命令码域(CMD):0x01代表汇聚节点上传CAN网络的数据到网关,0x02代表上传RS-485网络的数据到网关;
  • 09 数据长度域(LEN):固定为0x09
  • 01 传感器类型(TYPE):01 温湿度传感器,02人体红外传感器,03火焰传感器,04可燃气体传感器,05空气质量传感器,06光敏传感器,07声音传感器,08红外传感器,09 心率传感器,10表示其它;
  • 18 40 数据域(DATA):占用两个字节,高8位代表温度传感器的温度值24℃,低8位代表湿度64%;
  • 86 校验码域(CS):采用和校验方式,计算数据域之前所有字节数据的累加和,并将累加和与0xFF按位与而保留低8位数据;

你可能感兴趣的:(传感网应用开发(中级),Linux嵌入式开发,嵌入式通信协议,网络协议,物联网,arm,经验分享)