单片机学习小组
直播中

efwedfd

8年用户 1069经验值
擅长:EMC/EMI设计
私信 关注

如何用单片机串口和modbus poll进行通信?

如何用单片机串口和modbus poll进行通信

回帖(1)

万腾龙

2022-2-22 11:10:36
由于程序中我的stm32单片机都是做的从机来和主机进行通信的,都是modbus协议通过串口来实现通信的。

之前为了调通串口,所以用的是单片机的串口和串口助手进行的通信,为了更方便的模拟主机modbus,我决定采用软件modbus poll.  modbus poll 和 mo***ud slave 可以配套使用,在同一台电脑运行的时候,需要使用虚拟串口,并且分别连上两个虚拟串口,才能实现通信。但是在这里我们是为了调试单片机的从机功能,因此我们只用modbus poll来模拟主机,单片机来模拟从机设备发送modbus协议数据。

Modbus Poll :Modbus主机仿真器,用于测试和调试Modbus从设备。该软件支持Modbus RTU、ASCII、TCP/IP。

Modbus Slave: Modbus从设备仿真器,可以仿真32个从设备/地址域。每个接口都提供了对EXCEL报表的OLE自动化支持。

假设,单片机的串口引脚TX RX通过USB_TTL接到电脑后,电脑会显示当前串口为COM7,那么modbus poll也连接上COM7,不需要再虚拟串口了。关于其配置如下。在Setup里面确定好 从机号,功能号,要读取从机的寄存器地址,要读取从机寄存器的个数,以及每次发送数据间隔的时间。Display发送的数据格式我选的是unsigned 无符号型的,和单片机程序判断接收的格式一致。



接下来,点击connect,连接好 COM口,配置好波特率, 数据位, 校验位, 停止位。



可以点击Display--communication 查看数据的接收和发送,或者之间点击 lol 标志。



可以看到当发送数据 TX :10 04 00 00 00 01 32 8B的时候,

单片机的串口会回复 RX: 10 04 02 00 03 05 32

如此,数据就完美了。

对于mo***us 协议作一点说明:

主机:TX 10(从机地址) 04(功能码)  00 00(访问从机寄存器地址)  00 01(寄存器个数)   32 8B(16bit crc)

从机:RX 10(从机地址) 04(功能码) 02(字节长度)  00 03(返回数据)  05 32(16bit crc)

一个寄存器里面存放16位的数据,一个16位数据2个字节长度。



举报

更多回帖

发帖
×
20
完善资料,
赚取积分