看完这个,如果还不懂Modbus,那您去撞豆腐吧

看完这个,如果还不懂Modbus,那您去撞豆腐吧

首页休闲益智豆腐接接接更新时间:2024-07-28

MODBUS协议目前存在用于串口、以太网以及其他支持互联网协议的网络的版本。

主要协议不再详细赘述,网上一找一大把,也浪费文章篇幅,相信搞工控的人,这点能力还是有的。

重要的几点:

1.Modbus分主站和从站,所有的数据内容其实都存在从站里面(相当于服务器),主站只不过是请求从站中某个地址的数据内容(读和写),也就是主站请求,从站应答。主站不发请求信号,从站屁都不能放一个,这一点对于初学者的理解十分重要,一定要心里有一个概念。

2.从站里面数据分很多的存储区,大致分为离散(就是开关量)、线圈、寄存器输入、寄存器输出。

3.主站需要去从站里面取数据,首先要知道自己去哪里取,取得数据是什么内容。(就像你要从你老婆那里偷偷的拿钱,总要知道老婆把钱放那里了吧!)

4.如果主站知道了要取什么数据了,就要有对应的指令,下面列举Modbus主要功能码,

0x01: 读线圈寄存器
0x02: 读离散输入寄存器
0x03: 读保持寄存器
0x04: 读输入寄存器
0x05: 写单个线圈寄存器
0x06: 写单个保持寄存器
0x0f: 写多个线圈寄存器
0x10: 写多个保持寄存器

5.既然功能码知道了,肯定还要知道该怎么发送请求吧,既然是MODBUS通讯协议,那就有Modbus的规则。下面我就以一个读保持寄存器来详细描述整个过程。

6.以ModbusRTU为例 03号功能码对应的发送报文如下:

主站发送

主机发送表示的内容,想要读取1号从机从0x32开始的2个寄存器的内容。

ox01: 从站地址

0x03:功能码

0x00 0x32:需要读取存储区的起始地址(从0x32)开始

0x00 0x02:需要读取的数量,要读几个存储区。

0x65 0xC4(上图列举错误):CRC校验码(不知道CRC校验是什么的,看我其他文章)

从站应答

从站应答的内容主要表示为我收到了,返回4个字节,前面2个字节是要请求的第一个寄存器数据,后面2个字节是请求的第二个寄存器数据。

6.整个发送应答就是这样一个过程。

7.如果还有人不明白的话,那我就以波形分析,串口到底是怎么发送应答的。

站地址01

串口硬件发送的规定如下:波特率9600bps,起始位1位,数据位8位,校验位1位(无校验),停止位1位

所以发送一次,一共要发8 1 1=10位

上面说到主站发送报文:01 、03、00、32、00、02、 65、 C4(都是16进制)

那要发送那么多数据,总要一个字节,一个字节来发吧(初学者,这里面会混淆),所以串口要首先发送01:怎么发01这个数据呢?

0X01的二进制:000 000 01

这里面注意几点:空闲位一直是高电平,起始位是低电平,停止位是高电平,还有一点发送数据的时候是低位先发,就是00000001 ,发送的时候是10000000.低位在前!低位在前!低位在前!

发完第一个接下去就是发第二个03、00、32、00、02、65、C4.

然后等待从站应答。

以上是个人的理解,也有助于大家能透彻理解整个过程,谢谢大家,原创不容易,且行且珍惜,记得点赞关注,我是工控小桥。

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved