此专栏一共6篇文章
Modbus Poll 、Modbus Slave 软件使用-CSDN博客
Modbus RTU主机代码实现——STM32-CSDN博客
Modbus RTU 从机代码实现——STM32-CSDN博客
什么是Modbus协议
是一种主从,串行通信协议
对应7层OSI模型的数据链路层与应用层
其中字符帧格式,报文帧格式——数据链路层
功能码——应用层
Modbus协议分类
Modbus RTU (Remote Terminal Unit) | 使用二进制码进行数据传输,效率高 |
Modbus ASCII | 使用ASCII码进行数据传输,可读性好,但效率低 |
Modbus TCP/IP | 它将Modbus协议封装在TCP/IP协议栈中,通过以太网传输数据 |
Modbus UDP/IP |
Modbus RTU的个人理解
Modbus定义了一块内存,及四种数据类型
这个内存分为四片空间用于存放四种数据类型
每个数据所在的空间称为寄存器,每类寄存器有65536个(至于寄存器内存放数据的含义则由用户自定义)
对各类寄存器统一编址——16位地址(0x0000 -- 0xFFFF)(有四类)
每个从机都有这样一块统一编址的内存空间
Modbus通信就是主机对从机寄存器的读写操作
但并非只有主机可以对从机寄存器进行读写操作,从机也可以对自己寄存器进行读写操作
主从
串行通信总线上只有一个主机,其余全是从机(最多247个)
每次通信都是主机发起,从机不能主动发起,(主机询问,从机应答)
从机寻址方式
主机没有地址,每个从机有唯一ID(0--247)
每次主设备发起通信所发送的报文中都包含从机ID
从机根据报文内ID与自己ID来决定是否响应
从机地址
modbus支持0--255从机寻址,但是只允许挂247个从机
0 | 1--247 | 248--255 |
广播 | 从机地址 | 保留 |
Modbus RTU 两种通信模式
广播 | 从机ID为0 | 只写 对所有从机进行写操作 主机请求,从机不响应 |
单播 | 从机ID为1--247 | 读/写 对指定从机进行读/写操作 主机请求,从机响应 |
Modbus RTU 数据类型
modbus传输的数据都是寄存器内的数据,寄存器是统一编址的
具体每个寄存器保存什么数据由用户自己定义
地址前缀 | 地址范围 0--65535 0x0000--0xFFFF | 寄存器名称 | 寄存器数据类型 | 访问类型 |
0 | 0x00000--0x0FFFF | 线圈 Coils | bool | 读/写 |
1 | 0x10000--0x1FFFF | 离散输入 Discrete Input | bool | 只读 |
2 | 0x20000--0x2FFFF | 输入寄存器 Input Register | uint16 | 只读 |
3 | 0x30000--0x3FFFF | 保持寄存器 Holding Register | uint16 | 读/写 |
Modbus RTU 功能码与异常码
功能码
Modbus功能码8bit,一共可以有256(0x00--0xFF)个功能码
其中分为公共功能码与自定义功能码
(其实可以全自定义,公共功能码只是被广泛认同使用的功能码)
Modbus常用公共功能码及使用方法
线圈 |
| ||||||||||||
离散输入 |
| ||||||||||||
输入寄存器 |
| ||||||||||||
保持寄存器 |
|
错误码与异常码
错误码 | 错误码 = 功能码 | 0x80 | ||||||||||||||||||
异常码 |
|
Modbus RTU 报文帧格式
主机请求
从机ID | 功能码 | 数据 | CRC校验 |
8bit | 8bit | N * 8bit | 16bit |
从机响应
从机ID | 功能码 | 数据 | CRC校验 |
8bit | 8bit | N * 8bit | 16bit |
从机异常
从机ID | 错误码 | 异常码 | CRC校验 |
8bit | 8bit | 8bit | 16bit |
一条报文最长256字节
对于16bit数据,要先发高字节,再发低字节
但是CRC校验码一般先发低字节,再发高字节(自己定义,只要主从一致即可)
T1.5与T3.5
Modbus RTU规定
T1.5 | 一个报文帧内,相邻字符时间间隔不得大于1.5个字符时间 用的不多,基本都能满足 |
T3.5 | 两个不同报文帧之间时间间隔要大于3.5个字符时间 用于判断一个报文帧的结束
//波特率115200 T3.5 = 1000000/115200*(1+8+0+1)*3.5 = 303us //波特率115200 T3.5 = 1000000/115200*(1+8+1+1)*3.5 = 334us
|