Modbus TCP

发送报文:

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

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陶骏华

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值