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

modbus tcp 协议相关推荐

  1. C#上位机与台达PLC通信,modbus TCP协议

    C#上位机与台达PLC通信,modbus TCP协议. 1.真实使用项目,该程序框架完整,适合在此基础上开发项目. 2.使用VS2019开发. 3.项目还涉及到halcon视觉检测功能. YID:76 ...

  2. 如何使用python读取modbus/TCP协议数据

    文章目录 前言 一.modbus_tk是什么? 二.modbus_tk的使用步骤 三.使用modscan测试 四.32位无符号短整型数据转为64位float数据 五.总结 前言 在做项目的时候,需要使 ...

  3. 力控 串口服务器 虚拟串口,M4系列串口服务器与力控组态软件MODBUS TCP 协议通信--有人物联网.pdf...

    M4系列串口服务器与力控组态软件MODBUS TCP 协议通信--有人物联网.pdf M4 系列串口服务器与力控组态软件MODBUS TCP 协议通信 M4系列串口服务器与力控组态软件MODBUS T ...

  4. Mcgs跟转接小板(用电脑模拟)收发数据(通过Modbus Tcp协议)

    1.Mcgs跟转接小板(用电脑模拟)收发数据(通过Modbus Tcp协议),转化为后台需要的数据格式 2.调试工具:Modbus Poll  , 3. 所有端口配置为同一个,配置好本地和远程ip地址 ...

  5. C# Modbus TCP协议客户端设计工程源码带注释,开源 dll文件,支持访问多个服务器,多线程实现,西门子C# Simens PPI Master

    西门子C# Simens PPI Master C# Modbus TCP协议客户端设计工程源码带注释,开源 dll文件,支持访问多个服务器,多线程实现 renfengli2010

  6. Modbus tcp协议学习总结

    Modbus=报文头(MBAP)+帧结构(PDU) 注意:据说RTU和TCP的差距就是效验码,具体我也没有操作,所以这里介绍的只有TCP相关内容.看这个章节的时候最好下载Modbus Slave(服务 ...

  7. Modbus和Modbus/TCP协议

    Modbus和Modbus/TCP协议 文章目录 Modbus和Modbus/TCP协议 一. 概述 二. 协议规范 (1) Modbus应用协议 (2)通用Modbus帧结构--协议数据单元(PDU ...

  8. Modbus TCP协议解析

    在之前的文章中,我们介绍了Modbus RTU协议的内容和实现方法.最近在进行网络通讯的时候又用到了Modbus TCP协议,因此这里把自己对Modbus TCP的了解总结一下. 文章目录 一.Mod ...

  9. C# modbus TCP协议应用

    C# modbus TCP协议应用 协议简介 Modbus由MODICON公司(现施耐德公司)于1979年开发,是一种工业现场总线协议标准.主要分为了RTU,ASCII,TCP三种协议类型.本文我们只 ...

  10. DI计数器Modbus TCP协议2路PWM输出WiFi模块

    产品特点: ● 3路开关量输入,2路开关量输出 ● DI每一路都可用作计数器或者频率测量 ● DO每一路都可独立输出PWM信号 ● 支持Modbus TCP 通讯协议 ● 内置网页功能,可以通过网页查 ...

最新文章

  1. MySQL这样写UPDATE语句,劝退
  2. 学习js权威指南第五站 ---- 数组
  3. 获取文件夹所占空间的大小
  4. 5月22日云栖精选夜读:PHP学习路线图
  5. ActiveMQ整合spring
  6. 使用 yield 减少内存消耗
  7. 【IntelliJ】IntelliJ IDEA常用设置及快捷键以及自定义Live templates
  8. DAC8563芯片参考手册重要内容总结
  9. request用法_3分钟短文:说说Laravel页面会话之间的数据保存Session用法
  10. python--pexpect
  11. 超60万人抢购!魅族这波营销火了
  12. C++ 'dynamic_cast' and Java 'instanceof' 使用对比
  13. 西瓜书+实战+吴恩达机器学习(十六)半监督学习(半监督SVM、半监督k-means、协同训练算法)
  14. Vue 过滤器/watch/computed
  15. 最适合程序员的电脑是什么?
  16. 软件产品需求分析报告
  17. Bitvise SSH Server超过登录失败次数锁定IP配置
  18. 机器学习中常见知识点总结
  19. Thinkphp5关联模型的定义与使用
  20. 光伏行业报告:N型发展推动POE胶膜应用,POE产业链进入红利期

热门文章

  1. Functional ALV系列 (06) - 数据导出至Excel
  2. ArcGIS镶嵌影像数据集 掩膜显示
  3. C语言 | 输出4个数字字符,每个数字空一格
  4. (GEM)Gradient Episodic Memory for Continual Learning论文笔记
  5. word中插入公式的快捷键_如何使用插入键在Word中插入复制的内容
  6. 青藏高原对我国气候的影响
  7. java 中 format的不同用法
  8. 隐藏PPT2003与PPT2007幻灯片中的声音图标
  9. Drawable的详细使用分析
  10. 2016年应届生求职日记