modbus-tcp协议讲解
MODBUS功能码简介
代码 |
中文名称 |
位操作/字操作 |
操作数量 |
01h |
读线圈状态 |
位操作 |
单个或多个 |
02h |
读离散输入状态(只能读到0或1) |
位操作 |
单个或多个 |
03h |
读保持寄存器(保持寄存器可以通过06h功能写入) |
字操作 |
单个或多个 |
04h |
读输入寄存器(输入寄存器只能读取,不能通过06h功能写入) |
字操作 |
单个或多个 |
05h |
写单个线圈(线圈表示用来控制输出IO控制) |
位操作 |
单个 |
06h |
写单个保持寄存器 |
字操作 |
单个 |
0Fh |
写多个线圈 |
位操作 |
多个 |
10h |
写多个保持寄存器 |
字操作 |
多个 |
Modbus TCP介绍
示例-通过03功能码读寄存器(从寄存器00开始,读取两个值,读到01寄存器结束)
客户端发送 01 02 00 00 00 06 01 03 00 00 00 02
01 02 00 00 00 06 (固定报文头)
- 01 02: 客户端发出的检验信息, server端会将这两个字节内容复制到回应的报文第一二位.一般我们会将第一二位进行不停递加,然后根据服务器返回的相应内容, 来验证服务器回应信息的时效性
- 00 00: 表示tcp/ip 的协议的modbus的协议
- 00 06: 表示客户端发送的后面带了多少字节.
01 03 00 00 00 02(用户数据)
- 01: 表示设备地址
- 03: 表示读保持寄存器功能码
- 00 00: 表示客户端读取的寄存器起始地址
- 00 02: 表示读取的寄存器值个数(由于为02,所以会读出寄存器00h和01h的值)
返回值如下图所示:
服务器返回值 01 02 00 00 00 07 01 03 04 04 7B 00 FF
- 01 02: 服务器回应的检验信息
- 00 00: 表示tcp/ip 的协议的modbus的协议
- 00 07: 表示服务器发送的后面带了多少字节.
- 01: 表示设备地址
- 03: 表示功能码
- 04: 表示后面发送的寄存器00的字节长度
- 04 7B: 表示寄存器00的值
- 00 FF: 表示寄存器01的值
示例-06功能码写单个寄存器(向寄存器03地址里写值)
客户端发送 01 02 00 00 00 06 01 06 00 03 00 FF
01 02 00 00 00 06 (固定报文头)
- 01 02: 客户端发出的检验信息
- 00 00: 表示tcp/ip 的协议的modbus的协议
- 00 06: 表示客户端发送的后面带了多少字节.
01 06 00 03 00 FF (用户数据)
- 01: 表示设备地址
- 06: 表示写单个保持寄存器功能码
- 00 FF: 表示写入寄存器03h的值为0xFF
返回值如下图所示:
服务器返回 01 02 00 00 00 06 01 06 00 03 00 FF
后面的06 00 03 00 FF:表示客户端使用06功能码成功向寄存器03h分别写入了0xFF值
示例-10功能码写多个寄存器(向寄存器03~06地址里写不同值)
客户端发送 01 02 00 00 00 10 01 10 00 03 00 04 08 FF FF 00 0A 00 0F 00 06
01 02 00 00 00 10 (固定报文头)
- 01 02: 客户端发出的检验信息
- 00 00: 表示tcp/ip 的协议的modbus的协议
- 00 10: 表示客户端发送的后面带了多少字节.
01 10 00 03 00 04 08 FF FF 00 0A 00 0F 00 06 (用户数据)
- 01: 表示设备地址
- 10: 表示写多个保持寄存器功能码
- 00 03: 表示客户端写入的寄存器起始地址
- 00 04: 表示写入的寄存器值个数(由于为04,所以会写入寄存器03h~06h的值)
- 08: 表示后面写入的字节个数
- FF FF: 表示写入寄存器03h的值
- 00 0A: 表示写入寄存器04h的值
- 00 0F: 表示写入寄存器05h的值
- 00 06: 表示写入寄存器06h的值
返回值如下图所示:
服务器返回 01 02 00 00 00 06 01 10 00 03 00 04
后面的10 00 03 00 04:表示客户端使用10功能码成功向寄存器03h~06h分别写入了值
部分参考内容:https://blog.csdn.net/mikasoi/article/details/81782159
最新文章
- 【转】手把手教你把Vim改装成一个IDE编程环境(图文)
- Android复习指南
- JavaScript中经典方法
- Hadoop基础教程之重新认识Hadoop
- 20145120 《Java程序设计》实验一实验报告
- cf 283A
- KeilC51使用详解 (二)
- 防止多个UIAlertView重叠弹出
- How to get table pg_stat_user_functions.
- [Reinforcement Learning] Model-Free Prediction
- Restful levels&;HATEOAS
- npm run dev没反应
- python数据结构-如何实现用户的历史记录功能
- php类之clone 克隆
- openwrt多wan限上下行速脚本,基于qosv4,imq模块替换成ifb模块[ZT]
- 如何用R来处理数据表的长宽转换(图文详解)
- leveldb源码分析--SSTable之TableBuilder
- hdu 5038 (2014北京网络赛G 排序水题)
- 【Linux技术】autotools制作makefile过程详解
- springboot-8- 日志配置
热门文章
- Jenkins与RocketChat集成
- 39 | 从小作坊到工厂:什么是Selenium Grid?如何搭建Selenium Grid?
- 高效 MacBook 工作环境配置,超实用!
- 在 ASP.NET Web API 中使用 Attribute 统一处理异常
- Codeforces Gym100623J:Just Too Lucky(数位DP)
- Spring 核心技术(3)
- 基于SpringCloud的Microservices架构实战案例-在线API管理
- TCP/IP协议-网络编程
- Dock学习(一):容器介绍
- [leetcode] 11. Container With Most Water (medium)