基于STM32的ModbusRtu通信--ModbusRtu协议(一)

在这里插入图片描述

[--------------点击下面,进入总目录索引--------------]
STM32系列精品Demo集 - 总目录


一、Modbus协议简介

Modbus是Modicon公司(现在的施耐德电气Schneider Electric)于1979年为使用可编程逻辑控制(PLC)通信而发表。Modbus已经成为工业领域通信协议的业界标准,是工业电子设备之间常用的连接方式。


二、 Modbus消息桢

Modbus消息桢包括RTU、ASCII、TCP:

  • RTU、ASCII消息桢用于异步串行传输通信
  • TCP消息桢应用于网络传输通信(本文暂不考虑)

2.1、Modbus ASCII消息帧



ASCII消息帧总结
  1、消息以冒号(:)字符(ASCII码 3AH)开始,以回车换行符结束(ASCII码 0DH,0AH)

  2、其它域可以使用的传输字符是十六进制的0…9,A…F。网络上的设备不断侦测“:”字符,当有一个冒号接收到时,每个设备都解码下个域(地址域)来判断是否发给自己的。

  3、消息中字符间发送的时间间隔最长不能超过1秒,否则接收的设备将认为传输错误。


2.2、Modbus RTU消息桢



RTU消息帧总结

  1、消息发送至少要以3.5个字符时间的停顿间隔开始,如果一个新消息在小于3.5个字符时间内接着前个消息开始,接收的设备将认为它是前一消息的延续,这将导致一个错误,因为在最后的CRC域的值不可能是正确的。

  2、整个消息帧必须作为一连续的流转输。如果在帧完成之前有超过1.5个字符时间的停顿时间,接收设备将刷新不完整的消息并假定下一字节是一个新消息的地址域。


三、Modbus Rtu地址

3.1、设备地址域

0:广播地址
1~247:用户可用地址
248~255:保留地址

3.2、PLC地址与Modbus协议地址

1、PLC地址可以理解为协议地址的变种,PLC编程中应用较为广泛。
2、PLC每个块寄存器起始地址从1开始,Modbus应用协议的中数据的起始地址从0开始编号。

PLC地址
  寄存器PLC地址指存放于控制器中的地址,PLC地址一般从1开始采用10进制描述,共有5位,其中第一位代表寄存器类型。PLC地址例如40001、30002等。

Modbus协议地址
  Modbus协议地址指Modbus通信时使用的寄存器地址,Modbus寻址地址一般从0开始编号使用16进制描述。
  PLC地址40001-------------------------------Modbus地址0x0000
  PLC地址40002-------------------------------Modbus地址0x0001
  PLC地址40003-------------------------------Modbus地址0x0002
  PLC地址30003-------------------------------Modbus地址0x0002
  上述PLC地址40003、30003对应协议地址都是0002,但是访问时是通过不同的功能码访问,所以访不存在冲突。


四、Modbus Rtu常用功能码

五、Modbus Rtu通信举例

在这里插入图片描述

5.1、读线圈状态(01)

Example:
发送: 01 01 00 00 00 19 FD C0 (读取25个线圈的状态)
接收: 01 01 04 0F 03 80 01 A8 C5
在这里插入图片描述

5.2、读输入状态(02)

Example:
发送: 01 02 00 00 00 19 B9 C0 (读取25个输入线圈的状态)
接收: 01 02 04 00 00
在这里插入图片描述

5.3、写线圈(05)

Example:05码的发送和接收相同。
发送:01 05 00 00 FF 00 8C 3A (写单个线圈的值,把地址为0的线圈置1)
接收:01 05 00 00 FF 00 8C 3A
在这里插入图片描述

5.4、读保持寄存器(03)

Example:
发送:01 03 00 00 00 03 05 CB
接收:01 03 06 01 2C 01 2C 01 2C 71 1A
在这里插入图片描述

5.5、读输入寄存器(04)

Example:
发送:
在这里插入图片描述
接收:
在这里插入图片描述

5.6、写保持寄存器(06)

Example:06码的发送和接收相同。
发送: 01 06 00 00 00 0A 09 CD (往地址为0的寄存器写入10)
接收: 01 06 00 00 00 0A 09 CD
在这里插入图片描述

5.7、写多线圈(0F)

Example:
发送: 01 0F 00 00 00 0A 02 01 01 25 68
返回: 01 0F 00 00 00 0A D5 CC
在这里插入图片描述

5.8、写多寄存器(10)

Example:
发送:01 10 00 00 00 02 04 00 01 00 02 23 AE
接收:01 10 00 00 00 02 41 C8
在这里插入图片描述

六、参考文档

https://blog.csdn.net/weixin_46490405/article/details/110879767

猜你喜欢

转载自blog.csdn.net/HostID_1993/article/details/118445158