以modbus协议为通讯协议的电表解析总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chapterchou/article/details/53894913

一、 初识modbus
Modbus 协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。Modbus 协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一控制器请求访问其它设备的过程,如果回应来自其它设备的请求,以及怎样侦测错误并记录。它制定了消息域格局和内容的公共格式。

目前,Modbus 有下列三种通信方式:
1.以太网,对应的通信模式是Modbus TCP。
2.异步串行传输(各种介质如有线RS-232-/422/485/;光纤、无线等),对应的通信模式是 Modbus RTU 或 Modbus ASCII。
Modbus 的ASCII、RTU 协议规定了消息、数据的结构、命令和应答的方式,数据通讯采用Maser/Slave方式。
3.高速令牌传递网络,对应的通信模式是Modbus PLUS。

文档所采用的是第一种。
二、 Modbus的具体含义
先来简单分析一条MODBUS-RTU报文,例如:01 06 00 01 00 17 98 04
01 06 00 01 00 17 98 04
从机地址 功能号 数据地址 数据 CRC校验

这一串数据的意思是:把数据 0x0017(十进制23) 写入 1号从机地址 0x0001数据地址。

1、报文
一个报文就是一帧数据,一个数据帧就一个报文: 指的是一串完整的指令数据,就像上面的一串数据。

2、CRC校验
意义:例如上面的 98 04 是它前面的数据(01 06 00 01 00 17)通过一算法计算出来的结果,其实就像是计算累加和那样。(累加和:就是010600010017加起来的值,然后它的算法就是加法)。
作用:在数据传输过程中可能数据会发生错误,CRC检验检测接收的数据是否正确。比如主机发出01 06 00 01 00 17 98 04,那么从机接收到后要根据01 06 00 01 00 17 再计算CRC校验值,从机判断自己计算出来的CRC校验是否与接收的CRC校验(98 04主机计算的)相等,如果不相等那么说明数据传输有错误这些数据不能要。

3、功能号
意义:modbus 定义。
最常用功能码:
下面“线圈”“寄存器”其实分别直的就是“位变量”“16位变量”
01 (0x01) 读线圈
02 (0x02) 读离散量输入
03 (0x03) 读保持寄存器
04(0x04) 读输入寄存器
05 (0x05) 写单个线圈
06 (0x06) 写单个寄存器
15 (0x0F) 写多个线圈
16 (0x10) 写多个寄存器

三、 ZigBee modbus的报文格式及通讯过程
1. 读取多路寄存器
例如:读取环境温度值

这里写图片描述

  1. 读取开关量输出状态
    这里写图片描述

总结:一般主机的报文包括流水号(1字节),MAC(6字节),从机地址(1字节),功能码(1字节),起始地址(2字节),读取开关量数量(2字节),功能码(2字节)。
从机包括流水号(1字节),MAC(6字节),从机地址(1字节),功能码(1字节),数据长度(1字节),开关状态(2字节),功能码(2字节)。

  1. 通讯过程

    扫描二维码关注公众号,回复: 3925571 查看本文章

    这里写图片描述
    主站与插座的通信协议为 MODBUS 协议。
    上位机将 MODBUS 封包按照 【一个字节的流水号, 6 个字节的 RJ45 主站设备 MAC 值, 给插座的 MODBUS 封包】重新包装,送给 RJ45 无线主站;RJ45 无线主站收到这个格式的封包,确认 MAC 值正确后,就会检查MODBUS 封包的第一个字节 (插座的 ID, 即寄送目的方) , 然后通过无线 zigbee 网络将上位机传来的 MODBUS封包,完全不动的转给该 ID 的插座(透明转发) 。同样地,插座送给上位机的封包,也是由 RJ45 无线主站完全不动的送给上位机处理。

四、 硬件解析进展
1. 实时采集数据
(流水号)0A .. 0F 10 11 ..19 1A ..1F 20 ..29 2A ..2F 30…99 9A ..9F A0….
查询自组网系统状态
TX: 00 00 05 9E F4 03 4C 00 03 00 00 00 00 44 1B
RX: AA 00 05 9E F4 03 4C 00 03 32 01 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 B2 7F
(ID 1,ID 2 插座 在无线网内,正常工作中)

读取温度
TX: 00 00 05 9E F4 03 4C 01 03 00 5C 00 01 44 18
RX: AB 00 05 9E F4 03 4C 01 03 02 00 00 B8 44(0度)

读取开关量输出状态
TX: 00 00 05 9E F4 03 4C 01 01 00 00 00 10 3D C6 00 00 00 00
RX: AC 00 05 9E F4 03 4C 01 01 02 01 00 B8 6C(闭合状态)
RX: AE 00 05 9E F4 03 4C 01 01 02 00 00 B9 FC(断开状态)

设置单路开关状态
RX: 00 00 05 9E F4 03 4C FF 00
RX: 0E 00 05 9E F4 03 4C 01 05 00 00 00 00 CD CA(断开)
TX: 0E 00 05 9E F4 03 4C FF 00

RX: 00 00 05 9E F4 03 4C FF 00
RX: 0F 00 05 9E F4 03 4C 01 05 00 00 01 00 CC 5A(闭合)
TX: 0F 00 05 9E F4 03 4C FF 00

参数采集
(电压229.37,电流0.00,有功功率0.00,有功电能62.3306,功率因数0.000,CO2-0.000,用电时间1727.2,信号强度3)
TX: 00 00 05 9E F4 03 4C 01 03 00 48 00 0A 45 DB
RX: 00 00 05 9E F4 03 4C FF 00
RX: A2 00 05 9E F4 03 4C 01 03 14 59 99 00 00 00 00 00 03 0B 22 00 00 00 00 00 00 52 25 03 01 01 00
TX: A2 00 05 9E F4 03 4C FF 00

TX: 00 00 05 9E F4 03 4C 01 03 00 52 00 02 65 DA
RX: 00 00 05 9E F4 03 4C FF 00
RX: A3 00 05 9E F4 03 4C 01 03 04 00 00 43 78 CB 21
TX: A3 00 05 9E F4 03 4C FF 00

  1. 进展及问题
    能成功读取多路开关量的输出状态,并解析报文数据;能成功设置单路开关量的输出状态,并解析报文数据。
    明白报文各个数据各个字节代表的含义,但缺少具体的文档说明,无法弄清楚每个字节数字组合后的运算逻辑,具体原理还待研究。

猜你喜欢

转载自blog.csdn.net/chapterchou/article/details/53894913