Modbus协议功能码分析

Modbus TCP 协议

1 ModbusTCP数据帧

ModbusTCP的数据帧可分为两部分:MBAP+PDU。

1.1 报文头MBAP

MBAP为报文头,长度为7字节,组成如下:

事务处理标识 协议标识 长度 单元标识符
2字节 2字节 2字节 1字节
事务处理标识 :可以理解为报文的序列号,一般每次通信之后就要加1以区别不同的通信数据报文。
协议标识符 :00 00表示ModbusTCP协议。
长度 :表示接下来的数据长度,单位为字节。
单元标识符 :可以理解为设备地址。

1.2 帧结构PDU

PDU由功能码+数据组成。功能码为1字节,数据长度不定,由具体功能决定。

1.2.1 功能码

modbus的操作对象有四种:线圈、离散输入、输入寄存器、保持寄存器。

线圈:PLC的输出位,开关量,在MODBUS中可读可写
离散量:PLC的输入位,开关量,在MODBUS中只读
输入寄存器:PLC中只能从模拟量输入端改变的寄存器,在MODBUS中只读
保持寄存器:PLC中用于输出模拟量信号的寄存器,在MODBUS中可读可写
根据对象的不同,modbus的功能码有:
在这里插入图片描述

1.2.2PDU详细结构

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
Tx:11 CC 00 00 00 09 01 0F 00 00 00 0A 02 0F 00 数据长度000A(10)个,地址为0000,数据为 00 0000 1111
Rx:11 CC 00 00 00 06 01 0F 00 00 00 0A

0x02:读离散量输入
从一个从站中读1~2000个连续的离散量输入状态

请求:MBAP 功能码 起始地址H 起始地址L 数量H 数量L(共12字节)
响应:MBAP 功能码 数据长度 数据(长度:9+ceil(数量/8))
如:从地址0x0000开始读10个离散量输入
Tx:12 A3 00 00 00 06 01 02 00 00 00 0A
Rx:12 A3 00 00 00 05 01 02 02 00 00

0x04:读输入寄存器
从一个远程设备中读1~2000个连续输入寄存器

请求:MBAP 功能码 起始地址H 起始地址L 寄存器数量H 寄存器数量L(共12字节)
响应:MBAP 功能码 数据长度 寄存器数据(长度:9+寄存器数量×2)
如:读起始地址为0x0000,数量为10个寄存器数据
Tx:15 C4 00 00 00 06 01 04 00 00 00 0A
Rx:15 C4 00 00 00 17 01 04 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

0x03:读保持寄存器
从远程设备中读保持寄存器连续块的内容

请求:MBAP 功能码 起始地址H 起始地址L 寄存器数量H 寄存器数量L(共12字节)
响应:MBAP 功能码 数据长度 寄存器数据(长度:9+寄存器数量×2)
如:TX:读起始地址为0x0000,数量为10(0x000A)个寄存器数据
RX:回地址为0x0000,字节长度为0x14,数据为12 0 33 26562 33 0 55 78 0 56
Tx:19 D8 00 00 00 06 01 03 00 00 00 0A
Rx:19 D8 00 00 00 17 01 03 14 00 0C 00 00 00 21 67 C2 00 21 00 00 00 37 00 4E 00 00 00 38

0x10:写多个保持寄存器
在一个远程设备中写连续寄存器块(1~123个寄存器)

请求:MBAP 功能码 起始地址H 起始地址L 寄存器数量H 寄存器数量L 字节长度 寄存器值(13+寄存器数量×2)
响应:MBAP 功能码 起始地址H 起始地址L 寄存器数量H 寄存器数量L(共12字节)
如:读起始地址为0x0000,数量为10(0x000A)个寄存器数据 字节长度20(0x14)数据为 12 0 33 26562 33 0 55 78 0 56
Tx:17 52 00 00 00 1B 01 10 00 00 00 0A 14 00 0C 00 00 00 21 67 C2 00 21 00 00 00 37 00 4E 00 00 00 38
Rx:17 51 00 00 00 06 01 10 00 00 00 0A

0x06:写单个保持寄存器
在一个远程设备中写一个保持寄存器

请求:MBAP 功能码 寄存器地址H 寄存器地址L 寄存器值H 寄存器值L(共12字节)
响应:MBAP 功能码 寄存器地址H 寄存器地址L 寄存器值H 寄存器值L(共12字节)
如:向地址是0x0000的寄存器写入数据0x0017(23)
Tx:1A B9 00 00 00 06 01 06 00 00 00 17
Rx:1A B9 00 00 00 06 01 06 00 00 00 17

  • 3
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Modbus协议是一种用于工业自动化通信的通信协议。它定义了一种客户端/服务器架构,其中客户端发送请求给服务器来读取或写入数据。Modbus协议支持多种功能,其中一部分是用于FTP(文件传输协议)的。 Modbus FTP功能包括: 1. 功能0x14:读文件记录。该功能用于从服务器读取文件记录,以便在客户端上进行分析或处理。 2. 功能0x15:写文件记录。该功能用于向服务器写入文件记录,以便在客户端上进行存储或更新。 3. 功能0x16:屏蔽写文件记录。该功能用于在指定偏移位置写入文件记录的部分内容。 4. 功能0x17:读文件记录请求。该功能用于向服务器发出读请求,以获取指定文件记录的内容。 Modbus FTP报文是在Modbus RTU或Modbus TCP协议中使用的数据格式。该报文由多个字节组成,包括功能、数据地址和数据内容等。报文的具体格式如下: 1. 功能:占用1个字节,用于指示请求或响应的操作类型。 2. 数据地址:占用2个字节,用于指示要读取或写入的数据的起始地址。 3. 数据内容:占用多个字节,用于存储待读取或写入的数据。 Modbus FTP报文的结构取决于具体的功能和操作类型。例如,读文件记录的报文包括读操作的功能、文件记录的起始地址和要读取的数据长度等。 总而言之,Modbus FTP功能用于在Modbus协议中执行文件传输操作,其报文是用于请求和响应的数据格式。这些功能和报文可供开发者使用,以实现在Modbus网络中的文件传输功能

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值