STM32F030|用单片机串口和modbus poll 进行通信

由于程序中我的stm32单片机都是做的从机来和主机进行通信的,都是modbus协议通过串口来实现通信的。
之前为了调通串口,所以用的是单片机的串口和串口助手进行的通信,为了更方便的模拟主机modbus,我决定采用软件modbus poll.modbus poll 和 mosbud 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 无符号型的,和单片机程序判断接收的格式一致。
STM32F030|用单片机串口和modbus poll 进行通信
文章图片

接下来,点击connect,连接好 COM口,配置好波特率, 数据位, 校验位, 停止位。
STM32F030|用单片机串口和modbus poll 进行通信
文章图片

可以点击Display--communication 查看数据的接收和发送,或者之间点击 lol 标志。
STM32F030|用单片机串口和modbus poll 进行通信
文章图片

可以看到当发送数据 TX :10 04 00 00 00 01 32 8B的时候,
单片机的串口会回复 RX: 10 04 02 00 03 05 32
【STM32F030|用单片机串口和modbus poll 进行通信】如此,数据就完美了。
对于mosbus 协议作一点说明:
主机:TX 10(从机地址) 04(功能码)00 00(访问从机寄存器地址)00 01(寄存器个数)32 8B(16bit crc)
从机:RX 10(从机地址) 04(功能码) 02(字节长度)00 03(返回数据)05 32(16bit crc)
一个寄存器里面存放16位的数据,一个16位数据2个字节长度。


    推荐阅读