0
点赞
收藏
分享

微信扫一扫

modbus 协议基础知识

中间件小哥 2022-04-25 阅读 46
网络协议

Modbus的内容是什么

协议种类
Modbus-RTU+Modbus-ASCII
Modbus-TCP
Modbus-Plus
通讯过程:
Modbus是主从方式通信,也就是说,不能同步进行通信,总线上每次只有一个数据进行传输,即主机发送,从机应答,主机不发送,总线上就没有数据通信

Modbus-RTU+Modbus-ASCII

协议是基于异步串行通信上,一般的介质有:RS-232,RS485,RS-422上,这也是工业上使用的最多的;

对于串行连接,存在两个变种,它们在数值数据表示不同和协议细节上略有不同。
Modbus RTU是一种紧凑的,采用二进制表示数据的方式,Modbus ASCII是一种人类可读的,冗长的表示方式。
RTU格式后续的命令/数据带有循环冗余校验的校验和,而ASCII格式采用纵向冗余校验的校验和。

Modbus-RTU协议

  1. 帧结构
    帧结构 = 地址 + 功能吗 + 数据 + 校验

地址: 占用一个字节,范围0-255,其中有效范围是1-247,其他有特殊用途,比如255是广播地址(广播地址就是应答所有地址,正常的需要两个设备的地址一样才能进行查询和回复)

功能码:占用一个字节,功能码的意义就是,知道这个指令是干啥的,比如你可以查询从机的数据,也可以修改数据,所以不同功能码对应不同功能.

数据: 根据功能码不同,有不同结构,在后续的实例中有说明;

校验: 为了保证数据不错误,增加这个,然后再把前面的数据进行计算看数据是否一致,如果一致,就说明这帧数据是正确的,我再回复;如果不一样,说明你这个数据在传输的时候出了问题,数据不对的,所以就抛弃了;

实战

查询 0x03
功能描述:
现在我是主机,我要查询从机地址为1的数据.

修改 0x06功能码

修改-0x10功能码

modbus RTU协议只需要看懂功能码0x03,0x06,0x10这三个基本的就已经足够了;分别回想下其数据域部分:
0x03-主机需要发送起始地址+寄存器数量,从机回复总字节数+数据;
0x06-主机发送起始地址+数据内容(因为你只需要修改一个,所以起始地址就是所要修改的地址),从机返回起始地址+数据内容
0x10-主机发送起始地址+寄存器个数+总字节数+数据,从机返回起始地址+寄存器数量

Modbus-ACSII协议

概述
一般只需要了解RTU协议,因为前面有说过,必须要有RTU协议的,所以只需要了解了RTU协议,就可以读出设备信息了,至于ACSII协议,做个大概了解

1.帧形式
对于RTU协议,比如RTU发送一个字节:0x12;
ASCII协议则需要发送2个字节:一个字节代表1,一个代表2,即31和32,才能代表0x12.
所以,acsii协议的效率比较低。

从上面的图中,看出:
1)比RTU多了起始段 :, 多个结束符CR,LF
2)地址和功能都变成了2个字节;
3)数据部分更加繁琐,但是更符合人们的查看;

 

归纳

由于Modbus-RTU和modbus-ACSII都是基于232和485链路的,所以其通讯模式半双工,一般是主机和从机的模式。其差别就是其字节的格式不同,一个是16进制的数据,一个是acsii数据。
Ascii多了帧头和帧尾,也就是说可以有用这个头尾判断一帧字节来判断是否结束;而RTU没有帧头和帧尾,所以协议里明确两帧之间要大于3.5个字节时间间隔(与波特率有关),作为一帧结束的判断依据。

在串口通信中,1个字符包括1位起始位、8位数据位(一般情况)、1位校验位(或者没有)、1位停止位(一般情况下),因此1个字符包括11个位,那么3.5个字符就是38.5个位,波特率表示的含义是每秒传输的二进制位的个位,因此如果是9600波特率,3.5个字符周期=1000/9600*38.5=4.01ms。

对于RS485来说,总线上一般允许最大32个设备。

Modbus-TCP
以太网作为介质进行传输,

Modbus-PLUS
高速令牌传递网络

 

Modbus协议规定

区号名称读写范围
0区输出线圈可读可写00001-09999
1区输入线圈只读10001-19999
3区输入寄存器只读30001-39999
4区保持寄存器可读可写40001-49999
功能码功能说明
01H读取输出线圈
02H读取输入线圈
03H读取保持寄存器
04H读取输入寄存器
05H预置单线圈
06H预置单寄存器
0FH预置多线圈
10H预置多寄存器

功能码说明
Modbus协议处理的所有数据按照存储数据的类型可分为位寄存器(1bit)和16位寄存器(16bit)。因此功能码可分为位操作和字操作两类。位操作的最小单位是bit,字操作的最小单位是两个字节。

寄存器功能码说明

 

寄存器种类说明

 

参考文档:
Modbus协议解析--小白一看就懂的协议_panda@Code的博客-CSDN博客_modbus协议详解
ModbusRTU协议数据格式_qq_37164321的博客-CSDN博客_modbusrtu通讯协议格式
标准Modbus通讯协议格式_竹影IT程序的博客-CSDN博客_modbus数据格式

举报

相关推荐

0 条评论