文章仅作为对Modbus的简单了解,如果错误,还请留言指正,谢谢

最近公司项目需要使用到Modbus协议,特意去了解了一下,以下是简单的总结

一、Modbus协议是什么

Modbus协议是工业控制领域的通讯协议,说白了就是为了机器之间通讯用的

可能有人对于通讯协议还不是很了解,那我们可以将其拆分为通讯和协议两部分,通讯就是交流沟通的意思,就像你和你的朋友平时聊天对话一样,机器之间的沟通就称之为通讯,那既然是沟通,就一定要遵守一个规范吧,就比如我们都是中国人,聊天的时候大多数都是讲普通话的,总不能你讲阿拉伯语,我讲英语吧,可以这么说,双方都认可并且遵守的规约便是协议,所以通讯协议就是机器之间沟通的共同遵守的约定

二、Modbus存储区

既然是需要沟通交流了,那是不是要有点“墨水”才能更好地交流呢?总不能像一张白纸一样,啥也不知道,别人问话就一直保持沉默吧。

机器之间的沟通同样如此,就比如机器A问机器B:“B同学,你最近都在干啥呢?”,这时机器B就会把它最近的数据发送给A。那涉及到数据这一块,不可能无中生有吧,这样子就需要有一个容器要盛放一些预先存储好的数据,而根据存储内容和可进行的操作可以分为以下四种容器(即存储区)

区号

存储区

可以进行的操作

存储内容

0

输出线圈

可读只写

布尔值,一般表示开关状态

1

输入线圈

只读

布尔值,一般表示开关状态

3

输入寄存器

只读

16位数据,可以表示为温度/湿度等

4

输出寄存器

可读可写

16位数据,可以表示为温度/湿度等

三、功能码

A机器找B机器时,要想B机器干活,A机器就得让B机器明白A想让B干啥吧(读或者写),总不能我让你往东你偏偏往西吧。这就得讲到功能码了。功能码描述你要对谁(存储区) 进行是什么操作(读/写)

如果你对读和写很陌生,请看该段落,写的过程可以比如老师和学生探讨问题,学生思路想错了,老师会去指正这个错误,这时学生对这道题的思路发生了改变,这就是一个写的过程。而你从你的朋友口中得知最近谁谁谁怎么样了,谁谁谁去哪工作了,这就是一个读的过程。

功能码(注意:0x标识数据是16进制的)

功能说明

0x01

读输出线圈

0x02

读输入线圈

0x03

读输出寄存器

0x04

读输入寄存器

0x05

写单个输出线圈

0x06

写单个输出寄存器

0x0F

写多个输出线圈

0x10

写多个输出寄存器

四、协议报文!!!重点

大多数网络协议归根到底就是为了明确报文的格式,也就是你发送数据和接受数据的格式,就像请假条有请假条的格式,邀请函有邀请函的格式,保证书有保证书的格式。而Modbus协议也有自己的报文格式

先了解一下,Modbus协议实际上可以分为三种Modbus RTU、Modbus ASCII,Modbus TCP

Modbus RTU会主流一点,这里就将Modbus RTU吧

Modbus RTU协议格式:  

站地址(1 byte)

功能码(1 byte)

数据(n byte)

校验码(2 byte)

站地址: 可以简单理解为设备的大概位置

功能码:对哪种设备(线圈/寄存器)进行哪种操作(读/写)

数据:一些没有规定好的内容,就比如你要去读哪个线圈(第一个还是第九百个)、读多少个线圈,又或者是读到的数据是什么,这些都记录在数据中

校验码:提供校验功能,主要是为了提高数据的安全性

参考网址:详解Modbus通信协议---清晰易懂_Z小旋的博客-CSDN博客_modbus通讯协议