ModbusTCP协议
Modbus由MODICON公司于1979年开发,是一种工业现场总线协议标准。1996年施耐德公司推出基于以太网TCP/IP的Modbus协议:ModbusTCP。
Modbus协议是一项应用层报文传输协议,包括ASCII、RTU、TCP三种报文类型。
标准的Modbus协议物理层接口有RS232、RS422、RS485和以太网接口,采用master/slave方式通信。
ModbusTCP的数据帧可分为两部分:MBAP+PDU。
报文头MBAP
MBAP为报文头,长度为7字节,组成如下:
事务处理标识 |
协议标识 |
长度 |
单元标识符 |
2字节 |
2字节 |
2字节 |
1字节 |
内容 |
解释 |
事务处理标识 |
可以理解为报文的序列号,一般每次通信之后就要加1以区别不同的通信数据报文。 |
协议标识符 |
00 00表示ModbusTCP协议。 |
长度 |
表示接下来的数据长度,单位为字节。 |
单元标识符 |
可以理解为设备地址。 |
帧结构PDU
PDU由功能码+数据组成。功能码为1字节,数据长度不定,由具体功能决定。
功能码
Modbus的操作对象有四种:线圈、离散输入、保持寄存器、输入寄存器。
对象 |
含义 |
线圈 |
PLC的输出位,开关量,在Modbus中可读可写 |
离散量 |
PLC的输入位,开关量,在Modbus中只读 |
输入寄存器 |
PLC中只能从模拟量输入端改变的寄存器,在Modbus中只读 |
保持寄存器 |
PLC中用于输出模拟量信号的寄存器,在Modbus中可读可写 |
根据对象的不同,Modbus的功能码有:
功能码 |
含义 |
0x01 |
读线圈 |
0x05 |
写单个线圈 |
0x0F |
写多个线圈 |
0x02 |
读离散量输入 |
0x04 |
读输入寄存器 |
0x03 |
读保持寄存器 |
0x06 |
写单个保持寄存器 |
0x10 |
写多个保持寄存器 |
说明更详细的表
代码 |
中文名称 |
英文名 |
位操作/字操作 |
操作数量 |
01 |
读线圈状态 |
READ COIL STATUS |
位操作 |
单个或多个 |
02 |
读离散输入状态 |
READ INPUT STATUS |
位操作 |
单个或多个 |
03 |
读保持寄存器 |
READ HOLDING REGISTER |
字操作 |
单个或多个 |
04 |
读输入寄存器 |
READ INPUT REGISTER |
字操作 |
单个或多个 |
05 |
写线圈状态 |
WRITE SINGLE COIL |
位操作 |
单个 |
06 |
写单个保持寄存器 |
WRITE SINGLE REGISTER |
字操作 |
单个 |
15 |
写多个线圈 |
WRITE MULTIPLE COIL |
位操作 |
多个 |
16 |
写多个保持寄存器 |
WRITE MULTIPLE REGISTER |
字操作 |
多个 |
PDU详细结构
0x01:读线圈
在从站中读1~2000个连续线圈状态,ON=1,OFF=0
请求:MBAP 功能码 起始地址H 起始地址L 数量H 数量L(共12字节)
响应:MBAP 功能码 数据长度 数据(一个地址的数据为1位)
如:在从站0x01中,读取开始地址为0x0002的线圈数据,读0x0008位
00 01 00 00 00 06 01 01 00 02 00 08
回:数据长度为0x01个字节,数据为0x01,第一个线圈为ON,其余为OFF
00 01 00 00 00 04 01 01 01 01
0x05:写单个线圈
将从站中的一个输出写成ON或OFF,0xFF00请求输出为ON,0x000请求输出为OFF
请求:MBAP 功能码 输出地址H 输出地址L 输出值H 输出值L(共12字节)
响应:MBAP 功能码 输出地址H 输出地址L 输出值H 输出值L(共12字节)
如:将地址为0x0003的线圈设为ON
00 01 00 00 00 06 01 05 00 03 FF 00
回:写入成功
00 01 00 00 00 06 01 05 00 03 FF 00
0x0F:写多个线圈
将一个从站中的一个线圈序列的每个线圈都强制为ON或OFF,数据域中置1的位请求相应输出位ON,置0的位请求响应输出为OFF
请求:MBAP 功能码 起始地址H 起始地址L 输出数量H 输出数量L 字节长度 输出值H 输出值L
响应:MBAP 功能码 起始地址H 起始地址L 输出数量H 输出数量L
0x02:读离散量输入
从一个从站中读1~2000个连续的离散量输入状态
请求:MBAP 功能码 起始地址H 起始地址L 数量H 数量L(共12字节)
响应:MBAP 功能码 数据长度 数据(长度:9+ceil(数量/8))
如:从地址0x0000开始读0x0012个离散量输入
00 01 00 00 00 06 01 02 00 00 00 12
回:数据长度为0x03个字节,数据为0x01 04 00,表示第一个离散量输入和第11个离散量输入为ON,其余为OFF
00 01 00 00 00 06 01 02 03 01 04 00
0x04:读输入寄存器
从一个远程设备中读1~2000个连续输入寄存器
请求:MBAP 功能码 起始地址H 起始地址L 寄存器数量H 寄存器数量L(共12字节)
响应:MBAP 功能码 数据长度 寄存器数据(长度:9+寄存器数量×2)
如:读起始地址为0x0002,数量为0x0005的寄存器数据
00 01 00 00 00 06 01 04 00 02 00 05
回:数据长度为0x0A,第一个寄存器的数据为0x0c,其余为0x00
00 01 00 00 00 0D 01 04 0A 00 0C 00 00 00 00 00 00 00 00
0x03:读保持寄存器
从远程设备中读保持寄存器连续块的内容
请求:MBAP 功能码 起始地址H 起始地址L 寄存器数量H 寄存器数量L(共12字节)
响应:MBAP 功能码 数据长度 寄存器数据(长度:9+寄存器数量×2)
如:起始地址是0x0000,寄存器数量是 0x0003
00 01 00 00 00 06 01 03 00 00 00 03
回:数据长度为0x06,第一个寄存器的数据为0x21,其余为0x00
00 01 00 00 00 09 01 03 06 00 21 00 00 00 00
0x06:写单个保持寄存器
在一个远程设备中写一个保持寄存器
请求:MBAP 功能码 寄存器地址H 寄存器地址L 寄存器值H 寄存器值L(共12字节)
响应:MBAP 功能码 寄存器地址H 寄存器地址L 寄存器值H 寄存器值L(共12字节)
如:向地址是0x0000的寄存器写入数据0x000A
00 01 00 00 00 06 01 06 00 00 00 0A
回:写入成功
00 01 00 00 00 06 01 06 00 00 00 0A
0x10:写多个保持寄存器
在一个远程设备中写连续寄存器块(1~123个寄存器)
请求:MBAP 功能码 起始地址H 起始地址L 寄存器数量H 寄存器数量L 字节长度 寄存器值(13+寄存器数量×2)
响应:MBAP 功能码 起始地址H 起始地址L 寄存器数量H 寄存器数量L(共12字节)
如:向起始地址为0x0000,数量为0x0001的寄存器写入数据,数据长度为0x02,数据为0x000F
00 01 00 00 00 09 01 10 00 00 00 01 02 00 0F
回:写入成功
00 01 00 00 00 06 01 10 00 00 00 01
ModbusTCP协议相关推荐
- 如何快速实现西门子S7-200/300 PLC转Modbus-TCP协议与第三方数据对接
如何快速实现西门子S7-200/300 PLC转Modbus-TCP协议与第三方数据对接 引言 西门子 SIMATIC 自动化控制系统在工业控制市场应用相当广泛,凭借其安全可靠性.全集成产品线和优异的 ...
- ModbusTCP协议报文解析
ModbusTCP协议报文解析 报文格式 交互(通信)标识:2个字节 为此次通信事务处理标识符,一般每次通信之后将被要求加1以区别不同的通信数据报文. 协议标识:2个字节 表示该条指令遵循Modbus ...
- ModBusTcp协议(一)
ModBusTcp协议 简介 Modbus由MODICON公司于1979年开发,是一种工业现场总线协议标准.1996年施耐德公司推出基于以太网TCP/IP的Modbus协议:ModbusTCP. Mo ...
- ModbusTCP协议通讯设备如何快速接入物联网平台
Modbus是工业电子设备间通信的业界标准,可通过串口.以太网以及其他支持互联网协议的网络进行通信. ModbusTCP是利用以太网TCP/IP实现的Modbus通信协议,我们可以使用带网络扩 ...
- Modbus-TCP协议说明
本期视频是要说明Modbus TCP协议的相关内容.此协议是1996年施耐德公司推出的基于TCP/IP协议的Modbus协议. 协议与Modbus-RTU协议最大的不同就是,使用了在TCP/IP协议上 ...
- MODBUS-TCP协议
modbus-tcp顾名思义是基于TCP网络连接的MODBUS协议. 和RS485总线不同,TCP协议是通过设备的IP地址和端口来寻址. modbus-tcp的默认端口号是502,设备端作为TCP服务 ...
- MODBUS-TCP协议简介与编程流程图
本文主要目的是为了写一个简单的MODBUS-TCP服务器-客户端程序而记录的知识点,里面包含了编程所需要的必要背景知识和协议解析流程图. MODBUS基本数据类型 MODBUS有四种基本数据类 ...
- 用Python实现ModbusTcp协议
用Python实现ModbusTcp协议 去年2021年写了两篇用Python实现Modbus-RTU串行通信协议的文章,今年有个项目用现场上位计算机通过ModbusTcp网关来读写现场的Modbus ...
- ModbusTCP协议学习
ModbusTCP协议学习 文章目录 ModbusTCP协议学习 1.简介 2.ModbusTCP数据帧 2.1.报文头MBAP 2.2.帧结构PDU 2.2.1.功能码 2.2.2.PDU详细结构 ...
- ModbusTCP协议报文详细分析
ModbusTCP协议分析 ModbusTCP与ModbusUDP的报文格式是一样的,它们之间的区别其实就是TCP与UDP的区别,因此下面就针对ModbusTCP的协议进行分析,ModbusTCP与M ...
最新文章
- 台式机BIOS被加密后密码忘记解决办法
- Android混淆打包
- 大朗机器人餐厅在哪里_东莞餐厅惊现机器人服务员 平均每个10万元
- 图形基础 GPU架构(5)GPU vs CPU
- python 类的绑定方法和非绑定方法
- 基于优化反馈的组合在线学习
- 使用集成SOA网关的PL / SQL中的REST
- 漫画:这份程序员自画像,是不是你的?
- Microsoft Windows XP SP3安装测试手记
- vue父子组件间传值(props)
- HCIE Security 单包攻击防范 备考笔记(幕布)
- WINDOWS下如何让NPAPI插件生效
- swifty项目中pod的使用
- 优思学院|什么是六西格玛(6sigma)?六西格玛概念解释
- Schema for type Unit is not supported
- LTE语音解决方案与优化
- Shape对象和轮廓填充ShapeGeometry
- 标志logo设计/欣赏
- 【leetcode.179】最大数
- html2canvas做pdf导出时字体样式错乱