Modbus TCP

Modbus TCP 格式

| 事务ID | 协议ID | 长度 | 单元ID | 功能码 | 数据 |
  • 事务 ID(2 字节):用于标识请求和响应的配对。
  • 协议 ID(2 字节):通常为 0,表示 Modbus 协议。
  • 长度(2 字节):表示后续数据的字节数(不包括事务 ID、协议 ID 和长度字段)。
  • 单元 ID(1 字节):从设备的地址。对于 Modbus TCP,通常可以忽略此字段。
  • 功能码(1 字节):与 Modbus RTU 相同。
  • 数据(n 字节):根据功能码而定,包含请求或响应的数据。

示例:

发送读取保持寄存器的请求,假设事务 ID 为 1,协议 ID 为 0,单元 ID 为 1,功能码为 3,读取寄存器地址为 0,数量为 2:

| 0x00 0x01 | 0x00 0x00 | 0x00 0x06 | 0x01 | 0x03 | 0x00 | 0x00 | 0x00 | 0x02 |
  • 事务 ID(Transaction ID)0x00 0x01

    • 2 字节:用于标识请求和响应的配对。通常在每次请求时自增。
    • 在这里,它的值是 1。
  • 协议 ID(Protocol ID)0x00 0x00

    • 2 字节:表示协议类型。对于 Modbus,通常为 0,表示使用 Modbus 协议。
  • 长度(Length)0x00 0x06

    • 2 字节:表示后续数据的字节数(不包括事务 ID、协议 ID 和长度字段)。
    • 在这个例子中,后续数据的长度是 6 字节。
  • 单元 ID(Unit ID)0x01

    • 1 字节:表示从设备的地址。可以理解为设备的标识符。在这里,设备地址为 1。
  • 功能码(Function Code)0x03

    • 1 字节:表示请求的操作类型。0x03 代表“读取保持寄存器”(Read Holding Registers)。
  • 数据(Data)

    • 0x00 0x00:表示寄存器的起始地址。此处为寄存器地址 0。
    • 0x00 0x02:表示要读取的寄存器数量。在这个例子中,数量为 2。

其中功能码为一个字节,modbus定义的功能码有:

  • 01 读线圈(coils)状态,读取单个或多个
  • 02 读离散输入(discreteinputs)状态,读取单个或多个
  • 03 读保持寄存器(holdingregisters),读取单个或多个
  • 04 读输入寄存器(inputregisters),读取单个或多个
  • 05 写单个线圈(coils)状态,单个写入
  • 06 写单个保持寄存器(holdingregisters),单个写入
  • 15 写多个线圈(coils),多个写入
  • 16 写多个保持寄存器(holdingregisters),多个写入

示例:

假设你要从单元 ID 为 1 的设备读取从地址 0 开始的 10 个线圈的状态。构建的请求可能如下:| 

| 0x00 0x01 | 0x00 0x00 | 0x00 0x07 | 0x01 | 0x01 | 0x00 | 0x00 | 0x00 | 0x0A |
各字段解释:
  • 事务 ID0x00 0x01):用于标识请求,可以是任意值,通常在每次请求时自增。
  • 协议 ID0x00 0x00):通常为 0,表示 Modbus 协议。
  • 长度0x00 0x07):后续数据的字节数,这里是 7 字节(功能码和数据部分)。
  • 单元 ID0x01):表示从设备的地址。
  • 功能码0x01):表示读取线圈状态。
  • 起始地址0x00 0x00):表示从地址 0 开始读取。
  • 数量0x00 0x0A):表示要读取的线圈数量,这里为 10。

响应格式

从设备的响应将包含请求的线圈状态,格式如下:

| 事务 ID | 协议 ID | 长度 | 单元 ID | 功能码 | 字节数 | 状态 |
示例响应(假设读取到的状态为 10 个线圈的状态):
| 0x00 0x01 | 0x00 0x00 | 0x00 0x06 | 0x01 | 0x01 | 0x02 | 0xFF | 0x0A |
  • 字节数:状态数据的字节数,这里为 2 字节(10 个线圈的状态)。
  • 状态:每个线圈状态用 1 位表示,0xFF 表示所有线圈为 1,0x0A 的二进制为 00001010 表示第 1、3、5、7 个线圈为 1,其余为 0。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值