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协议相关推荐

  1. 如何快速实现西门子S7-200/300 PLC转Modbus-TCP协议与第三方数据对接

    如何快速实现西门子S7-200/300 PLC转Modbus-TCP协议与第三方数据对接 引言 西门子 SIMATIC 自动化控制系统在工业控制市场应用相当广泛,凭借其安全可靠性.全集成产品线和优异的 ...

  2. ModbusTCP协议报文解析

    ModbusTCP协议报文解析 报文格式 交互(通信)标识:2个字节 为此次通信事务处理标识符,一般每次通信之后将被要求加1以区别不同的通信数据报文. 协议标识:2个字节 表示该条指令遵循Modbus ...

  3. ModBusTcp协议(一)

    ModBusTcp协议 简介 Modbus由MODICON公司于1979年开发,是一种工业现场总线协议标准.1996年施耐德公司推出基于以太网TCP/IP的Modbus协议:ModbusTCP. Mo ...

  4. ModbusTCP协议通讯设备如何快速接入物联网平台

      Modbus是工业电子设备间通信的业界标准,可通过串口.以太网以及其他支持互联网协议的网络进行通信.   ModbusTCP是利用以太网TCP/IP实现的Modbus通信协议,我们可以使用带网络扩 ...

  5. Modbus-TCP协议说明

    本期视频是要说明Modbus TCP协议的相关内容.此协议是1996年施耐德公司推出的基于TCP/IP协议的Modbus协议. 协议与Modbus-RTU协议最大的不同就是,使用了在TCP/IP协议上 ...

  6. MODBUS-TCP协议

    modbus-tcp顾名思义是基于TCP网络连接的MODBUS协议. 和RS485总线不同,TCP协议是通过设备的IP地址和端口来寻址. modbus-tcp的默认端口号是502,设备端作为TCP服务 ...

  7. MODBUS-TCP协议简介与编程流程图

      本文主要目的是为了写一个简单的MODBUS-TCP服务器-客户端程序而记录的知识点,里面包含了编程所需要的必要背景知识和协议解析流程图. MODBUS基本数据类型   MODBUS有四种基本数据类 ...

  8. 用Python实现ModbusTcp协议

    用Python实现ModbusTcp协议 去年2021年写了两篇用Python实现Modbus-RTU串行通信协议的文章,今年有个项目用现场上位计算机通过ModbusTcp网关来读写现场的Modbus ...

  9. ModbusTCP协议学习

    ModbusTCP协议学习 文章目录 ModbusTCP协议学习 1.简介 2.ModbusTCP数据帧 2.1.报文头MBAP 2.2.帧结构PDU 2.2.1.功能码 2.2.2.PDU详细结构 ...

  10. ModbusTCP协议报文详细分析

    ModbusTCP协议分析 ModbusTCP与ModbusUDP的报文格式是一样的,它们之间的区别其实就是TCP与UDP的区别,因此下面就针对ModbusTCP的协议进行分析,ModbusTCP与M ...

最新文章

  1. 台式机BIOS被加密后密码忘记解决办法
  2. Android混淆打包
  3. 大朗机器人餐厅在哪里_东莞餐厅惊现机器人服务员 平均每个10万元
  4. 图形基础 GPU架构(5)GPU vs CPU
  5. python 类的绑定方法和非绑定方法
  6. 基于优化反馈的组合在线学习
  7. 使用集成SOA网关的PL / SQL中的REST
  8. 漫画:这份程序员自画像,是不是你的?
  9. Microsoft Windows XP SP3安装测试手记
  10. vue父子组件间传值(props)
  11. HCIE Security 单包攻击防范 备考笔记(幕布)
  12. WINDOWS下如何让NPAPI插件生效
  13. swifty项目中pod的使用
  14. 优思学院|什么是六西格玛(6sigma)?六西格玛概念解释
  15. Schema for type Unit is not supported
  16. LTE语音解决方案与优化
  17. Shape对象和轮廓填充ShapeGeometry
  18. 标志logo设计/欣赏
  19. 【leetcode.179】最大数
  20. html2canvas做pdf导出时字体样式错乱

热门文章

  1. 2021年电力电缆作业考试题库
  2. python句柄无效_python免注册调用大漠出现错误句柄无效
  3. MySQL中varchar,varbinary的区别
  4. JavaWeb网上购物系统项目源码+论文
  5. 我自己的 psftp-cmd
  6. 是什么的简称_全国各地区车牌号简称,说说你们那的车牌是什么?
  7. ECSHOP 大商创 对接易支付接口
  8. 计算机视觉论文-2021-06-01
  9. 离散数学思维导图 - 集合论,命题逻辑,谓词逻辑,二元关系,特殊关系,图论,树
  10. 通过分析词性进行人名、地名、组织的替换,生成新的狗屁不通文章