Modbus通信协议说明
- 开源免费
- 在多种电气接口及多种通信介质中运行
-
定义
分类
种类
ModbusRtu
- ModbusASCII
- ModbusTCP
- ModbusUDP
- ModbusRtuOverTCP
- ModbusRtuOverUDP
- ModbusASCIIOverTCP
- ModbusASCIIOverUDP
ModbusRtu通信协议
目的
进行通信(本质就是读写数据)存储区分类
输出线圈
输入线圈
输入寄存器
输出寄存器 :::info 输入输出为bool类型 :::存储区范围
实际范围:
5位 标准地址
X XXXX:第一个X表示存储区域,XXXX表示地址输出线圈 0 Range:0 0001-0 9999 输入线圈 1 Range:1 0001-1 9999 输入寄存器 3 Range:3 0001-3 9999 输出寄存器 4 Range:4 0001-4 9999
6位 扩展地址
X XXXXX:第一个X表示存储区域,XXXXX表示地址
输出线圈 0 Range:0 00001-0 65536 输入线圈 1 Range:1 00001-1 65536 输入寄存器 3 Range:3 00001-3 65536 输出寄存器 4 Range:4 00001-4 65536
操作
对存储区域进行读与写
操作 功能码
读输出线圈 01 读输入线圈 02 读输出寄存器 03 读输出寄存器 04
写单个输出线圈 05 写单个输出寄存器 06 写多个输出线圈 15 写多个输出寄存器 16
协议
报文格式
从站地址(设备编号)(1 byte)+功能码(1 byte)+数据(剩余所有)+校验码(2 byte)
:::warning
对于读取来说
格式 意义
从站地址(设备编号) 找谁?
功能码 看什么?
数据 这么看?
校验码 验证这句话对不对
:::
:::warning
对于写入来说
格式 意义
从站地址(设备编号) 找谁?
功能码 干什么?
数据 这么干?
校验码 验证这句话对不对
:::
:::info
示例(十六进制)
01 03 00 00 00 02 C4 0B
站地址 操作功能 数据 起始寄存器 寄存器长度 CRC校验码
01 03 04 01 46 01 3B 5A 59
:::
内容 | 解释 |
---|---|
事务处理标识 | 可以理解为报文的序列号,一般每次通信之后就要加1以区别不同的通信数据报文 |
协议标识符 | 00 00表示Modbus TCP协议 |
长度 | 表示接下来的数据长度,单位为字节 |
单元标识符 | 可以理解为设备地址 |
ASCII 模式
每个字节(10位)的格式为:
编码系统:16进制,ASCII字符0-9,A-F。
数据位: 1位起始位。
7位数据位,首先发送最低有效位。
1位奇偶校验(注:默认偶校验是必须的,奇校验或无校验也可以使用。
1位停止位(注:使用无校验时要求2个停止位)。
帧发送方式:每个字符或字节均由从左到右顺序发送。
检验:LRC(纵向冗余校验),低位字节先发。
起始:一个‘冒号’(:)(ASCII 16进制3A)起始。
结束:以‘回车-换行’(CR,LF)对(ASCII 16进制OD和OA)结束。
RTU模式
每个字节(11位)的格式为
编码系统:8-位二进制。
数据位: 1位起始位。
8位数据位,首先发送最低有效位。
1位奇偶校验(注:默认偶校验是必须的,奇校验或无校验也可以使用)。
1位停止位(注:使用无校验时要求2个停止位).
帧发送方式:每个字符或字节均由从左到右顺序发送。
检验:循环冗余校验(CRC),低位字节先发。
起始/结束:报文帧由时长至少为3.5个字符时间的空闲间隔区分1帧数据。大于1.5个字符时间,则报文帧被认为不完整应该被接收节点丢弃。
modbus协议的ASCII模式和RTU模式的比较
协议 | 优点 | 缺点 |
---|---|---|
ASCII | 直观,简单,易调试,接收间隔时间不受限 | 效率低,如RTU传输0xF3, ASCII需要传输字符’F’和字符’3’占两个字节 |
RTU | 效率高,适合传输数据量较大的数据块 | 稍复杂,接收时间间隔不能超过3.5倍字符 |
PS:本位除特别注释数值以外,所有数值进制均为十进制