协议不区分接口
协议又称为规约

Modbus通信协议说明

  • 开源免费
  • 在多种电气接口及多种通信介质中运行
  • 报文帧简单紧凑

    定义

    Modbus是一种应用层的报文传输协议,

    分类

    ModbusRtu
    ModbusASCII
    ModbusTCP

    种类

  • 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
:::

ModBus协议帧格式(RTU、ASCII、TCP/IP)

内容 解释
事务处理标识 可以理解为报文的序列号,一般每次通信之后就要加1以区别不同的通信数据报文
协议标识符 00 00表示Modbus TCP协议
长度 表示接下来的数据长度,单位为字节
单元标识符 可以理解为设备地址

image.png

ASCII 模式

每个字节(10位)的格式为:
编码系统:16进制,ASCII字符0-9,A-F。
数据位: 1位起始位。
7位数据位,首先发送最低有效位。
1位奇偶校验(注:默认偶校验是必须的,奇校验或无校验也可以使用。
1位停止位(注:使用无校验时要求2个停止位)。
帧发送方式:每个字符或字节均由从左到右顺序发送。
检验:LRC(纵向冗余校验),低位字节先发。
起始:一个‘冒号’(:)(ASCII 16进制3A)起始。
结束:以‘回车-换行’(CR,LF)对(ASCII 16进制OD和OA)结束。
image.png

RTU模式

每个字节(11位)的格式为
编码系统:8-位二进制。
数据位: 1位起始位。
8位数据位,首先发送最低有效位。
1位奇偶校验(注:默认偶校验是必须的,奇校验或无校验也可以使用)。
1位停止位(注:使用无校验时要求2个停止位).
帧发送方式:每个字符或字节均由从左到右顺序发送。
检验:循环冗余校验(CRC),低位字节先发。
起始/结束:报文帧由时长至少为3.5个字符时间的空闲间隔区分1帧数据。大于1.5个字符时间,则报文帧被认为不完整应该被接收节点丢弃。
image.png
image.png

modbus协议的ASCII模式和RTU模式的比较

协议 优点 缺点
ASCII 直观,简单,易调试,接收间隔时间不受限 效率低,如RTU传输0xF3, ASCII需要传输字符’F’和字符’3’占两个字节
RTU 效率高,适合传输数据量较大的数据块 稍复杂,接收时间间隔不能超过3.5倍字符

PS:本位除特别注释数值以外,所有数值进制均为十进制