当前位置: 首页 > 工具软件 > Modbus-c# > 使用案例 >

Modbus TCP

公孙锋
2023-12-01

发送报文:

Modbus tcp 发送报文是由报文头(MBAP)和帧结构(PDU)组成的。

MBAP由7个字节组成:

00 00 00 00 00 06 01

00 00 事务处理标识,每次通讯后数字加一用来区分不同通信的报文(所以每次通信都不一样)。

00 00 协议标识符,当前00 00表示modbus TCP协议。

00 06 长度,表示PDU的数据由6个字节组成(就是说06后面还有6个字节)

01   单元标识(就是设备地址)。

PDU由功能码和数据组成: 

01 00 13 00 10   

01 功能码。

00 13 起始地址(从00 13地址开始读,因为是16进制所以起始地址是00019)

00 10 数据长度(因为16进制,所以0010要读16个位,00019~00034)。

完整的一个TCP modbus发送报文:00 00 00 00 00 06 01 01 00 13 00 10

注意:假如功能码是03,起始地址还是00 13,那内部地址就是40019

接收报文:

00 00 00 00 00 05 01 01 02 3C 25

00 05后面还有5个字节。

以上其它都一样,02 代表字节计数。

3C 25 代表读取的值(转换二进制就是00111010 00100101,前8为代表00019~00026,后8位代表00028~00034)。

常见的功能码:

功能码

名称

功能

对应的地址类型

01

读线圈状态

读位(读N个bit)...读从机线圈寄存器,位操作

0x

02

读输入离散量

读位(读N个bit)...读离散输入寄存器,位操作

1x

03

读多个寄存器

读整形、字符型、状态字、浮点型(读N个words)...读保持寄存器,字节操作

4x

04

读输入寄存器

读整形、状态字、浮点型(读N个words)...读输入寄存器,字节操作

3x

05

写单个线圈

写位(写一个bit)...写线圈寄存器,位操作

0x

06

写单个保持寄存器

写整形、字符型、状态字、浮点型(写一个words)...写保持寄存器,字节操作

4x

0F

写多个线圈

写位(写N个bit)...强置一串连续逻辑线圈的通断

0x

10

写多个保持寄存器

写整形、字符型、状态字、浮点型(写N个words)...把具体的二进制强制装入一串连续的保持寄存器

4x

设备类型

读写属性

应用定义

功能码(16进制)

Modbus协议地址

内部地址

0x

可读可写

输出线圈

01、05、0F

0000起到FFFF

000001到065536

1x

只读

输入线圈

02

0000起到FFFF

100001到165536

3x

只读

输入寄存器

04

0000起到FFFF

300001到365536

4x

可读可写

保持寄存器写的时候功能码多为10

03、06、10

0000起到FFFF

400001到465536

5x

可读可写

同4x是保存寄存器,但在32位字节的时候要高低位互换。

03、06、10

0000起到FFFF

500001到565536

6x

可读可写

同4x,但在写的时候功能码要设为06。

03、06、10

0000起到FFFF

600001到665536

 类似资料:

相关阅读

相关文章

相关问答