MODBUS-RTU数据帧格式、报文实例
来源:互联网 发布:软件开发做账 编辑:程序博客网 时间:2024/06/01 12:26
MODBUS-RTU报文模型
一个报文就是一帧数据,一个数据帧就一个报文: 指的是一串完整的指令数据,就像上面的一串数据。
主机对从机写数据操作
如果单片机接收到一个报文那么就对报文进行解析执行相应的处理
主机对从机读数据操作
单片机接收到这串数据根据数据计算CRC校验判断数据是否正确,如果判断数据无误,则结果是:返回信息给主机,返回的信息也是有格式的:
从机对主机返回内容
这样MODBUS主机就完成了一次对从机数据的读操作,实现了通讯。
MODBUS-RTU常用功能码
数据类型
读功能码
写功能码
对象类型
离散量输入
02
单个位
线圈状态
01
05,15
单个位
输入寄存器
04
16位字
保持寄存器
03
06,16
16位字
寄存器起始地址(起始数据地址)
数据类型
参数地址,寄存器编号
离散量输入
00001~0FFFF
线圈状态
10001~1FFFF
输入寄存器
30001~3FFFF
保持寄存器
40001~4FFFF
举例:
Modbus协议中寄存器地址从1开始,而实际存储中地址从0开始。假如要读取寄存器编号为40005(4为块编号,5为modbus中寄存器地址)的寄存器的数据,则应把00
04放入报文的地址域。寄存器定义,又名码表或者信息点表,应由厂家提供的。
寄存器编号
属性
定义
系数
备注
40001
RO
A相电压
从40048中读取电压系数
40002
RO
B相电压
如要读A相电压,则应将0x00 0x00放入寄存器起始地址域中。
报文实例
1、读40005、40006两个寄存器,假设从机地址为1
下行报文:01 03 00 04 00 02 85 ca
从机地址
功能码
寄存器起始地址
读取寄存器个数
CRC校验
01
03
00 04
00 02
85 ca
上行报文:01 03 04 00 00 00 00 21 33
从机地址
功能码
返回字节个数
寄存器40005数据
寄存器40006数据
CRC校验
01
03
04
00 00
00 00
21 33
2、向40005寄存器中写入0x12,0x34,假设从机地址为1
下行报文:01 06 00 04 00 01 12 34 4a b0
从机地址
功能码
寄存器起始地址
读取寄存器个数
要写入的数据
CRC校验
01
03
00 04
00 01
12 34
85 ca
上行报文:01 06 00 04 00 01 12 34 4a b0
从机地址
功能码
寄存器起始地址
读取寄存器个数
写入的数据
CRC校验
01
03
00 04
00 01
12 34
85 ca
- MODBUS-RTU数据帧格式、报文实例
- MODBUS RTU的报文格式
- modbus tcp数据报文结构
- ModBus RTU和ModBus ASC
- Modbus Rtu通信控件
- Modbus Rtu通信控件
- Modbus Rtu通信控件
- Modbus Rtu通信控件
- Modbus Rtu 通信协议
- MODBUS RTU简例
- MODBUS RTU简例
- Modbus RTU CRC16算法
- Modbus 协议之 RTU
- Modbus-RTU入门篇
- MODBUS ASCII和RTU
- VB Modbus Rtu 读
- 关于modbus-rtu
- Modbus RTU协议说明
- 单例模式
- 中缀表达式与前缀、后缀表达式的转换
- 表达式语言
- FileWritter写入文件
- Codeforces Round #439 E. The Untended Antiquity (树状数组+随机化)
- MODBUS-RTU数据帧格式、报文实例
- 基于react+redux的轻量级框架dva初使用及应用逻辑分析
- office2016(包括其他版本)办公软件破解方式
- Linux 基本操作和相关命令
- koa2 入门及express应用迁移到koa2实例
- python里使用正则表达式的重复模式
- 用node从零开始去写一个简单的爬虫
- java写入文件的几种方法
- HTML CSS 定位 position