0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

工控协议之ModbusTCP报文功能码

jf_78858299 来源:众成PLC编程 作者:众成PLC编程 2023-03-23 10:01 次阅读
  • 1、01X 读取一组逻辑线圈的当前状态(ON/OFF)
  • 2、0x02 读取一组开关输入的当前状态(ON/OFF)
  • 3、0x03 读取一个或多个保持寄存器的数值
  • 5、0x05 强置一个逻辑线圈的通断状态
  • ** 6、0x06 写单个保持寄存器**
  • ** 7、0x0f 强置多个逻辑线圈的通断状态**
  • 8、0x10 写多个保持寄存器
  • 9、0x2b 读取设备ID

1、01X 读取一组逻辑线圈的当前状态(ON/OFF)

请求:MBAP 功能码 起始地址H 起始地址L 数量H 数量L(共12字节)

响应:MBAP 功能码 数据长度 数据(一个地址的数据为1位)

发送包

图片

byte[0] byte[1] 00 02 为消息号,随便指定,服务器返回的数据的前两个字和这个一样

byte[2] byte[3] 00 00 为modbus标识,强制为0即可

byte[4] byte[5] 00 06 值在06 之后所有字节的个数,大家也可以数一数哈

byte[6] 01 为站号、随便指定。

byte[7] 01 为功能码(这个是决定了要干什么事)

byte[8] byte[9] 00 00为起始地址,比如我们我们想读地址0的数据就为00,读1000地址为03 E8

byte[10] byte[11] 00 80为指定读取数据的长度,跟地址规则一样

回包

图片

注:bit是一直到127的 因为图片太大无法截到

byte[0] byte[1] 消息号,我们之前写发送指令的时候,是多少,这里就是多少。

byte[2] byte[3] 同上

byte[4] byte[5] 指后面的字节数

byte[6] 站号

byte[7] 功能码

byte[8] 指示在byte[8]后面的字节数量 在byte[8]后面就是真实数据

byte[9] 到结尾都是我们读取到的数据 因为字节是8位所以是16(0-127所占了128个bit 128/8 得出16)

列子:

读5个线圈状态

发送:00 00 00 00 00 06 01 01 00 00 00 05

接收:00 00 00 00 00 04 01 01 01 1F

回到顶部

2、0x02 读取一组开关输入的当前状态(ON/OFF)

请求:MBAP 功能码 起始地址H 起始地址L 数量H 数量L(共12字节)

响应:MBAP 功能码 数据长度 数据(长度:9+ceil(数量/8))

发送包

图片

其实大家自己看与0x01是基本一样的。只是多了个Bit Count这一个

Bit Count所代表的意思就是 读取十个数据。

回包

图片

跟0x01的回包也是一样的,可能大家伙会有些迷茫,我发包的时候是读取十个数据回包的时候Byte Count怎么会给我回复了个2呢?

细心的朋友可能也发现了、这两个单词是不一样的~一个是Bit Count 一个是Byte Count,哈哈哈哈小小的幽默 。

那这个Byte Count代表的是什么意思呢。还是字节有关。

一个字节是8位、但是10个位超过了1个字节但是不满2个字节所以占用2个字节。还有很多跟这个情况相同。

列子:

读5个输入状态

发送:00 00 00 00 00 06 01 02 00 00 00 05

接收:00 00 00 00 00 04 01 02 01 15

回到顶部

3、0x03 读取一个或多个保持寄存器的数值

请求:MBAP 功能码 起始地址H 起始地址L 寄存器数量H 寄存器数量L(共12字节)

响应:MBAP 功能码 数据长度 寄存器数据(长度:9+寄存器数量×2)

发包

图片

这边Modbus/TCP我就不再展开了、都是一样的。

这个发包也很好去理解、根据Reference这一栏还有Word Count这一栏说明是起始位置是400读取6个保持寄存器数值。

一通百通、Modbus在功能报文上基本都是一致的。

回包

图片

大家伙可能有迷茫了 怎么会是12呢 这个可怎么计算呢

我把这个Register这一栏专门的点开了,大家也都能看出来了吧。

图片

这样就跟明了了吧,Register是占了两个位所以呢 读寄存器的个数6乘2 那不就是12了吗

列子:

读取连续三个保持寄存器的数值

发送:00 00 00 00 00 06 01 03 00 00 00 03

接收:00 00 00 00 00 09 01 03 06 03 E8 13 88 02 8A

4、0x04 读取一个或多个输入寄存器的数值

请求:MBAP 功能码 起始地址H 起始地址L 寄存器数量H 寄存器数量L(共12字节)

响应:MBAP 功能码 数据长度 寄存器数据(长度:9+寄存器数量×2)

发送

图片

这个意思也就是 从0的位置读取10个输入寄存器的数值。

一通百通、有时候这些协议的原理我们没必要去搞明白,我们只要是知道这一块代表什么有什么用处我该如何去利用这一块这样就足够。

没必要去研究它如何工作如何交互(其实说白了 万变不离其宗 大部分的协议交互还是 挥手 握手)

看每个人的需求吧,可能有些工作是必须要吃透协议那只能硬着头皮去看了。

扯远了。

回包

图片

这个也很好看明白了,还是跟0x03一样。没有变化。

列子:

读5个输入寄存器的数值

发送:00 00 00 00 00 06 01 04 00 00 00 05

接收:00 00 00 00 00 0D 01 04 0A 00 00 00 01 00 02 00 03 00 04

回到顶部

5、0x05 强置一个逻辑线圈的通断状态

请求:MBAP 功能码 输出地址H 输出地址L 输出值H 输出值L(共12字节)

响应:MBAP 功能码 输出地址H 输出地址L 输出值H 输出值L(共12字节)

发包

图片

05 是功能码, 00 00是我们指定的地址,如果我们想写地址1000,那么就为 03 E8,后四位是规定线圈的通断状态。

那么上面发包的意思就是 在00 00这个位置 指定线圈通断状态为 断开。

举个例子:

写入地址100为通: 00 00 00 00 00 06 FF 05 00 64 FF 00

写入地址1000为断:00 00 00 00 00 06 FF 05 03 E8 00 00

回包

图片

各位也发现了,回包和发包是一样的,因为在你写入的操作中,是不带读取数据的,所以服务器会直接复制一遍你的指令并返回。

例子:强置一个逻辑线圈的通断状态

发送:00 00 00 00 00 06 01 05 00 00 FF 00

接收:00 00 00 00 00 06 01 05 00 00 FF 00

回到顶部

6、0x06 写单个保持寄存器

请求:MBAP 功能码 寄存器地址H 寄存器地址L 寄存器值H 寄存器值L(共12字节)

响应:MBAP 功能码 寄存器地址H 寄存器地址L 寄存器值H 寄存器值L(共12字节)

发包

图片

这个也不用过多的介绍了吧。在00 00位置 写入 00 00

回包

图片

也是一样的,服务器会直接复制一遍你的指令并返回。

回到顶部

7、**0x0f **强置多个逻辑线圈的通断状态

请求:MBAP 功能码 起始地址H 起始地址L 输出数量H 输出数量L 字节长度 输出值H 输出值L

响应:MBAP 功能码 起始地址H 起始地址L 输出数量H 输出数量L

发送

图片

Bit Count 10是要写的个数

** 回包**

图片

都一样,直接说例子吧。

例子:强置一串连续逻辑线圈的通断

发送:00 00 00 00 00 0B 01 0F 00 00 00 02 04 FF 00 00 00

发送:00 00 00 00 00 06 01 0F 00 00 00 02

回到顶部

8、**0x10 **写多个保持寄存器

请求:MBAP 功能码 起始地址H 起始地址L 寄存器数量H 寄存器数量L 字节长度 寄存器值(13+寄存器数量×2)

响应:MBAP 功能码 起始地址H 起始地址L 寄存器数量H 寄存器数量L(共12字节)

发送

图片

Word count为 要写的个数

Byte count 为 要写入的数目 1个word等于2个bytes

后面 00 00 每组为写入的数值

回包

图片

也是一样的,写了十个那么就返回十。

列子:

向起始地址为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

回到顶部

9、0x2b 读取设备ID

发送

图片

byte[0]byte[1] 消息号 随便指定

byte[2]byte[3] modbus的标识

byte[4]byte[5] 在此之后的长度

byte[6] 站号

byte[7] 功能码

byte[8] 功能类型 这里是读取设备ID

byte[9] 读什么 这里是读设备标识

byte[10] 设备名称.

回包

图片

跟发包一样。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • MODBUS
    +关注

    关注

    28

    文章

    1450

    浏览量

    75728
  • TCP
    TCP
    +关注

    关注

    8

    文章

    1275

    浏览量

    78337
  • 工业协议
    +关注

    关注

    0

    文章

    8

    浏览量

    5464
收藏 人收藏

    评论

    相关推荐

    图文详解ModbusTCP协议

    Modbus由MODICON公司于1979年开发,是一种工业现场总线协议标准。1996年施耐德公司推出基于以太网TCP/IP的Modbus协议ModbusTCP。Modbus协议是一
    发表于 11-16 11:31 3.6w次阅读

    ModbusTCP转Profinet主站网关控制汇川伺服驱动器配置案例

    ModbusTCP Client 通过 ModbusTCP 控制 Profinet 接口设备,Profinet 接口设备接入 DCS/工控机等
    的头像 发表于 10-27 09:05 717次阅读
    <b class='flag-5'>ModbusTCP</b>转Profinet主站网关控制汇川伺服驱动器配置案例

    怎么使用stm32的LWIP协议栈进行报文调度算法的开发?

    各位朋友好,我的导师要求我设计一个新的报文调度算法,能够实现不同优先级的报文在发送的过程中,实现高优先级报文的低延时和低抖动。要求使用stm32的LWIP协议栈进行
    发表于 04-07 04:35

    Modbus TCP协议学习笔记分享

    公司于1979年开发,是一种工业现场总线协议标准。1996年施耐德公司推出基于以太网TCP/IP的modbus协议modbusTCP。Modbus协议是一项应用层
    发表于 07-01 10:36

    网络管理NMT与特殊协议报文

    网络管理NMT、特殊协议报文、过程数据对象PDO和服务数据对象SDO的报文ID分配
    发表于 08-23 06:11

    采用ModbusRTU或ModbusTCP通讯协议与下位机进行通信

    上位机如触摸屏采用ModbusRTU或ModbusTCP通讯协议与下位机如单片机通过串口或网络通信时,需要解析上位机报文Modbus寄存器读写的单位是字Word,读写Map表元素长度必须为字的整数倍
    发表于 02-24 07:00

    ModbusTCP转CanOpen网关助力工控行业

    在工业自动化领域,协议转换网关一直扮演着至关重要的角色。其中,modbustcp转canopen网关以其独特的优势,成为不同设备间通信的桥梁。这款网关将modbus TCP协议的设备与CANopen
    发表于 12-11 10:53

    ICMP控制报文协议

    TCP-IP详解卷2 ICMP控制报文协议,学习TCP很好的资料。欢迎下载。
    发表于 05-09 14:13 0次下载

    关于MODBUSRTU通讯协议的提问?

    而modbus分为两种协议:即串口协议(modbusrtu)和网口协议modbustcp协议,一般的
    的头像 发表于 08-23 16:36 7970次阅读

    一文知道ModbusTCP协议和上位机编写

    Modbus由MODICON公司于1979年开发,是一种工业现场总线协议标准。Modbus协议是一项应用层报文传输协议,包括ASCII、RTU、TCP三种
    发表于 11-20 10:52 4386次阅读
    一文知道<b class='flag-5'>ModbusTCP</b><b class='flag-5'>协议</b>和上位机编写

    ModbusTCP报文详解

    ModbusTCP报文详解是工业控制常用的一种协议,通过对Modbus报文的理解,能很快提升自己的实际应用能力。
    发表于 06-07 15:15 4次下载

    一文详解ModbusTCP协议

    Modbus由MODICON公司于1979年开发,是一种工业现场总线协议标准。1996年施耐德公司推出基于以太网TCP/IP的Modbus协议ModbusTCP。Modbus协议是一
    的头像 发表于 07-26 10:51 6140次阅读
    一文详解<b class='flag-5'>ModbusTCP</b><b class='flag-5'>协议</b>

    智能楼宇系统canopen协议ModbusTCP协议进行通讯

    ModbusTCP网关设备应该具备以下功能:接收来自CANopen协议设备的信号;将这些信号转换为Modbus TCP协议格式;通过以太网接口将转换后的信号发送到Modbus TCP
    的头像 发表于 01-03 15:17 217次阅读

    智能楼宇系统canopen协议ModbusTCP协议进行通讯

    ModbusTCP网关设备应该具备以下功能:接收来自CANopen协议设备的信号;将这些信号转换为Modbus TCP协议格式;通过以太网接口将转换后的信号发送到Modbus TCP
    的头像 发表于 01-03 15:20 185次阅读
    智能楼宇系统canopen<b class='flag-5'>协议</b>与<b class='flag-5'>ModbusTCP</b><b class='flag-5'>协议</b>进行通讯

    【实用篇】ModbusTCP协议详解

    ModBusTcp与串行链路Modbus的数据域是一致的,具体数据域可以参考串行Modbus。这里给出几个ModbusTcp的链路解析说明,辅助新人分析报文
    的头像 发表于 01-14 11:13 1106次阅读
    【实用篇】<b class='flag-5'>ModbusTCP</b><b class='flag-5'>协议</b>详解