modbus RTU协议为例
1.认识一下
- 通信协议不区分接口(设备),就像谁都可以讲中文
- 一个通信协议可以在串口,以太网,无线,蓝牙上面走
- 是协议是规约
modbus协议是一种应用层的报文传输协议,分三种
RTU
ASCII
TCP
2.存储区
目的:通信->读写
存储区 | 代号 | 范围 | 6位 |
---|---|---|---|
输出线圈 | 0 | 00001-09999 | 000001-065536 |
输入线圈 | 1 | 10001-19999 | 100001-165536 |
输出寄存器 | 4 | 40001-49999 | 400001-465536 |
输入寄存器 | 3 | 30001-39999 | 300001-365536 |
(表示最小单位)
2^16所以是65536
存储区范围:5位和6位 ->标准地址5位 扩展地址6位
第一位表示存储区
地址:
Y XXXX
Y XXXXX
如地址:
36543
03321
10894
2.读和写,如何通信
多少种动作 功能码
读输出线圈 01
读输入线圈 02
读输出寄存器 03
读输入寄存器 04
写单个输出线圈 05
写单个输出寄存器 06
写多个输出线圈 15
写多个输出寄存器 16
3.报文
modbusRTU/ASCII
报文格式:从站地址(设备编号)(1byte)+功能码(1byte)+数据(N byte)+校验(2byte)
- 对于读取来说:
从站地址(设备编号) 找谁
功能码 干嘛
数据 具体干嘛
校验 验证 - 对于写入来说:
从站地址(设备编号) 找谁
功能码 干嘛
数据 具体干嘛(写入什么数值)(更多)
校验 验证
例子:
- 发送:01 03 00 00 00 02 C4 0B
01 站地址
03 功能码 读输出寄存器 03
00 00 起始寄存器(数据)
00 02 寄存器长度(数据)
C4 0B CRC校验 - 收到:01 03 04 01 46 01 3B 5A 59
01 站地址
03 读输出寄存器
04 字节计数(返回了多少个字节)
01 46 01 3B 具体4个字节 湿度:01 46 温度:01 3B ->31.5转十进制
5A 59 CRC校验
说明书怎么写
温度的地址 40001
湿度的地址 40002
会给绝对地址,通信报文里面的就是相对地址,相对地址是从0开始的
0对应40001
但是上面例子中并没有写4,而是0001,因为功能码已经指定了寄存器不需要再重复写