Modbus通讯协议理论

时间:2024-04-17 17:29:54

Modbus协议:

Modbus协议是应用于电子控制器上的一种通用语言,通过此协议,可以实现控制器互相之间或通过网络(总线式的)实现通信。这是工控行业应用最广泛的通讯协议,没有之一。

Modbus协议的特点:

1.协议标准开放、公开发表且无版权要求。

2.支持多种电气接口,包括RS232、RS485、TCP/IP等,还可以在各种介质上传输,如双绞线、光纤、红外、无线等。

3.消息帧格式简单、紧凑、通俗易懂。用户理解和使用简单,厂商容易开发和集成,方便形成工业控制网络。

Modbus协议的分支:

ModbusRTU \ ModbusASCII    ModbusTCP \ ModbusUDP

特性 RTU模式 ASCII模式
编码 二进制 ASCII(打印字符:0-9,a-z,A-Z)
每个字符位数 起始位:1bit 起始位:1bit
  数据位:8bits 数据位:7bits
  奇偶校验(可选):1位 奇偶校验(可选):1位
  停止位:1或2位 停止位:1或2位
报文校验 CRC(循环冗余校验) LRC(纵向冗余校验)

 

 

 

 

 

 

 

 

 

 

 

RTU报文简单,传输快,应用广泛,ASCII唯一的好处是数据容易读懂;

ModbusTCP 和ModbusUDP的区别就是TCP和UDP的区别;

一般用RTU走串口,TCP走网口。

Modbus协议在串行链路上的报文格式:

(任意一帧报文都遵循的原则)

小于3.5个字符的报文间隔时间 地址 功能码 数据 CRC校验 小于3.5个字符的报文时间间隔
1*byte 1*byte N*bytes 2*bytes

 

 

 

没有结束符,靠时间判断。

ModbusRTU报文格式:从站地址+功能码+数据位+校验位。

Modbus协议的四个存储区:

1、输出线圈——Q区                   布尔类型             可读可写              0区       00001

2、输入线圈——I区                     布尔类型             只读不可写          1区       10001

3、输入寄存器——PIW区           寄存器类型          只读不可写          3区       30001

4、输出寄存器——PQW区          寄存器类型         可读可写              4区       40001

Modbus协议的功能码:

功能码:不同的功能码代表做不同的事情;

● 读取输出线圈            0×01

● 读取输入线圈            0×02

● 读取输入寄存器         0×03

● 读取输出寄存器         0×04

● 写单个线圈                0×05

● 写多个线圈                0×0F 

● 写单个寄存器            0×06

● 写多个寄存器            0×10

Modbus协议的机制

一发一回,主从机制;

示例:

主站想读从站输出线圈            功能码:0×01

读哪个从站                              从站地址:0×11

读哪个位置开始读,读多少     开始地址,读取长度

主站发送——Tx:11 01 13 00 1B  XXXX

从站返回——Rx:11 01 04 CD 6B B2 05 XXXX

主站询问报文格式
从站地址 功能码 起始地址(高位) 起始地址(低位) 线圈数量(高位) 线圈数量(低位) CRC
0×11 0×01 0×00 0×13 0×00 0×1B ××××

 

 

 

 

含义:读取11H(17)号从站输出线圈,起始地址=0013H=19,19是索引号,对应地址00020;线圈数=001BH=27;结束地址=00020+27-1=00046。

即读11H(17)号从站输出线圈00020---00046,共27个线圈状态(因为传输的最小单位是字节,27个线圈需要4个字节)。

 

从站应答报文格式
从站地址 功能码 字节计数 线圈状态20-27 线圈状态28-35 线圈状态36-43 线圈状态44-46 CRC
0×11 0×01 0×04 0×CD 0×6B 0×B2 0×05 ××××

 

 

 

 

含义:返回11H(17)号从站输出线圈00020---00046,共27个线圈状态,分别是CD 6B B2 05;

CD=1100 1101  对应  00020-00027                  6B=0110 1011  对应  00028-00035

B2=1011 0010  对应  00036-00043                   05=0000 0101  对应  00044-00046