文章目录
使用Modbus poll&Modbus slave模拟Modbus主从通信
下载和破解搜一下都很方便,使用的时候Modbus Poll作为Master,Modbus slave作为从机,设置相同的Setup和Connection就可以进行通信了。
详细教程见博客园的一篇不错的的文章。
虚拟串口
虚拟串口,模仿串口,可以最大程度的模拟Slave与Master的通信情况,下载链接如下
链接:https://pan.baidu.com/s/1-kz_vqt8RIEo-rVQ8aA7Qw
提取码:abvx
基础知识积累
MODBUS-RTU报文模型
设备地址 | 功能代码 | 数据 | CRC校验L | CRC校验H |
---|---|---|---|---|
8bit | 8bit | N*8bit | 8bit | 8bit |
1字节 | 1字节 | 0~252字节 | 1字节 | 1字节 |
一个报文就是一帧数据,一个数据帧就一个报文: 指的是一串完整的指令数据,就像上面的一串数据。
设备地址:指的是从机地址,用于通信,为0时表示的是广播通信,如果单独通信,从设备返回消息作为回应,如果是以广播方式查询的,则不作任何回应。
功能码:主机有8个功能码,从机有4个功能码,多出来的4个功能码是主机对从机的写操作
数据格式:N个数据就有N*8bit长度,N最大值252
CRC校验位:分为高低两个字节
ADU:是这一帧所有数据,0~256字节
PDU:是功能代码+数据,0~253字节
主机对从机写数据操作
如果单片机接收到一个报文那么就对报文进行解析执行相应的处理
0x01 06 00 01 00 17 98 04
从机地址 功能号 数据地址 数据 CRC校验
主机对从机写数据操作后,从机的返回内容
接收到主机的消息后,从机会在判断是自己的消息(并且不是广播消息后)原封不动的返回接收到的消息
0x01 06 00 01 00 17 98 04
从机地址 功能号 数据地址 数据 CRC校验
主机对从机读数据操作
0x01 03 00 01 00 01 D5 CA
从机地址 功能号 数据地址 读取数据个数 CRC校验
单片机接收到这串数据根据数据计算CRC校验判断数据是否正确,如果判断数据无误,则结果是:返回信息给主机,返回的信息也是有格式的:
主机对从机读数据操作后,从机对主机返回内容
0x01 03 02 00 17 F8 4A
从机地址 功能号 数据字节个数 两个字节数据 CRC校验
这样Modbus主机就完成了一次对从机数据的读操作,实现了通讯。
Modbus-RTU常用功能码
根据下表,可以设定对应的功能码(Function)
功能码 | 英文名 | 中文名 | 解释 |
---|---|---|---|
01 | Read Coils | 读线圈 | |
02 | Read Discrete Inputs | 读离散寄存器 | |
03 | Read Hoiding Registers | 读保持寄存器 | |
04 | Read Input Registers | 读取输入寄存器 | |
05 | Write Sinqle Coil | 写线圈 | |
06 | Write Sinqle Register | 写单个寄存器 | |
15 | Write Multiple Coils | 写多个线圈 | |
16 | Write Multiple Registers | 写多个寄存器 |
关于这几个线圈/保持寄存器/离散寄存器的解释见连接https://blog.csdn.net/lingshi75/article/details/105991450