天天看点

Modbus--->使用ModbusPoll、ModbusSlave、虚拟串口分析MODBUS-RTU数据帧格式、报文实例帧结构,和Modbus协议格式使用Modbus poll&Modbus slave模拟Modbus主从通信虚拟串口基础知识积累

文章目录

  • 使用Modbus poll&Modbus slave模拟Modbus主从通信
  • 虚拟串口
  • 基础知识积累
    • MODBUS-RTU报文模型
    • 主机对从机写数据操作
    • 主机对从机写数据操作后,从机的返回内容
    • 主机对从机读数据操作
    • 主机对从机读数据操作后,从机对主机返回内容
    • Modbus-RTU常用功能码
    • 寄存器起始地址(起始数据地址)

使用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)

Modbus--->使用ModbusPoll、ModbusSlave、虚拟串口分析MODBUS-RTU数据帧格式、报文实例帧结构,和Modbus协议格式使用Modbus poll&Modbus slave模拟Modbus主从通信虚拟串口基础知识积累
功能码 英文名 中文名 解释
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

寄存器起始地址(起始数据地址)

Modbus--->使用ModbusPoll、ModbusSlave、虚拟串口分析MODBUS-RTU数据帧格式、报文实例帧结构,和Modbus协议格式使用Modbus poll&Modbus slave模拟Modbus主从通信虚拟串口基础知识积累

继续阅读