Modbus通讯协议常用功能码解释

这篇具有很好参考价值的文章主要介绍了Modbus通讯协议常用功能码解释。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 Modbus是一种单主站的主/从通讯模式。Modbus网络上只有一个主站,主站在Modbus网络上没有地址,从站的地址范围为0-247,其中0为广播地址,从站的实际地址范围为1-247。

代码 名称 作用
01 读取线圈状态

取得一组逻辑线圈的当前状态(ON/OFF)

02 读取输入状态 取得一组开关输入的当前状态(ON/OFF)
03 读取保持寄存器 在一个或多个保持寄存器中取得当前的二进制值
04 读取输入寄存器 在一个或多个输入寄存器中取得当前的二进制值
05 强制单线圈 强置一个逻辑线圈的通断状态
06 预置单寄存器 放置一个热定特定的二进制值到一个单寄存器中
07 读取异常状态 取得8个内部线圈的通断状态
15 强置多线圈 强置一串连续逻辑线圈的通断
16 预置多寄存器 放置一系列特定的二进制值到一系列多寄存器中
17 报告从机标识 可使主机判断编址从机的类型及该从机运行指示灯的状态

1.读取线圈状态(功能码01)

        读取从机离散量输出口的(ON/OFF)状态,不支持广播。

        查询:查询信息规定了要起始线圈线圈量,线圈的起始地址为0000H,1-16个线圈的寻址地址分为0000H-0015H(DO1=0000H,DO2=0001H,以此类推)。

        例子:从地址为17的从机读取D01至D06的状态。

读取线圈状态----查询
addr Fun D0 start reg hi D0 start reg lo D0 #of regs hi D0 #of regs lo CRC16 hi CRC16 lo
地址 功能码 起始线圈地址高8位 起始线圈地址低8位 线圈量高8位 线圈量低8位 校验高8位 校验低8位
11H 01H 00H 00H 00H

06H

XXH XXH

        响应:响应信息中的各线圈的状态与数据区的每一位的值相对应,即每个D0占用一位(1=ON,0=OFF),第一个数据字节的LSB为查询中的寻址地址,其他的线圈按顺序在该字节中由低位向高位排序,直至8个为止,下一个字节也是从低位向高位排列。若返回的线圈数不是8的倍数,则在最后的数据字节中的剩余位至字节的最高位全部填0,字节数区说明全部的字节数。

读取线圈状态----响应
addr Fun Byte count Data CRC16 hi CRC16 lo
地址 功能码 字节数 数据位 校验高8位 校验低8位
11H 01H 01H

2AH

XXH XXH

                                                                                        数据:

0 0 0 0 0 0 D02 D01
MSB 7 6 5 4 3 2 LSB

2.读取输入状态(功能码02)

        读取从机离散量输入信号(ON/OFF)的状态,不支持广播。

        查询:查询信息规定了要输入起始地址,以及输入信号的数量。输入的起始地址为0000H,1-16个输入口的地址分别为0-15(DO1=0000H,DO2=0001H,以此类推)。

        例子:从地址为17的从机读取D01至D16的状态。

读取输入状态----查询
addr Fun D0 start reg hi D0 start reg lo D0 #of regs hi D0 #of regs lo CRC16 hi CRC16 lo
地址 功能码 起始线圈地址高8位 起始线圈地址低8位 线圈量高8位 线圈量低8位 校验高8位 校验低8位
11H 02H 00H 00H 00H

10H

XXH XXH

        响应:响应信息中的各输入口的状态,分别对应于数据区中的每一位值,1=ON,0=OFF,第一个数据字节的LSB为查询中的寻址地址,其他输入口按顺序在该字节中由低位向高位排序,直至8个为止,下一个字节中的8个输入位也是从低位向高位排列。若返回的输入位数不是8的倍数,则在最后的数据字节中的剩余位直至字节的最高位全部填0,字节数区说明了全部数据的字节数。

读取输入状态----响应
addr Fun Byte count Data1 Data2 CRC16 hi CRC16 lo
地址 功能码 字节数 数据位 数据位 校验高8位 校验低8位
11H 02H 02H

33H

CCH XXH XXH

                                                                                         数据1:

DI8 DI7 DI6 DI5 DI4 DI3 DI2 DI1
MSB LSB

                                                                                         数据2:

DI16 DI15 DI14 DI13 DI12 DI11 DI10 DI9
MSB LSB

3.读取保持寄存器(功能码03)

        读取从机保持寄存器的二进制数据,不支持广播。

        查询:查询信息规定了要的保持寄存器起始地址及保持寄存器的数量,保持寄存器寻址其实地址为0000H,寄存器1-16所对应的地址分别为0000H-0015H。

        例子:从17号从机读3个采集到的基本数据U1、U2、U3,U1的地址为0000H,U2的地址为0001H,U3的地址为0002H。

读取保持寄存器----查询
addr Fun Data start addr hi Data start addr lo D0 #of regs hi D0 #of regs lo CRC16 hi CRC16 lo
地址 功能码 寄存器起始地址高8位 寄存器起始地址低8位 寄存器数量高8位 寄存器数量低8位 校验高8位 校验低8位
11H 03H 00H 00H 00H

03H

XXH XXH

        响应:响应信息中的寄存器数据位二进制数据,每个寄存器分别对应2个字节,第一个字节为高位值数据,第二个字节为低位数据。

        读取U1、U2、U3(U1=03E8H,U2=03E7H,U3=03E9H)的响应。

读取保持寄存器----响应
addr Fun Byte count Data1 hi Data1 lo Data2 hi Data2 lo Data3 hi Data3 lo CRC16 hi CRC16 lo
地址 功能码 字节数 数据1高8位 数据1低8位 数据2高8位 数据2低8位 数据3高8位 数据3低8位 校验高8位 校验低8位
11H 03H 06H

03H

E8H 03H E7H 03H E6H XXH XXH

4.读取输入寄存器(功能码04)

        读取从机输入寄存器中的二进制数据,不支持广播。

        查询:查询信息规定了要寄存器起始地址及寄存器的数量,寻址起始地址为0,寄存器1-16所对应的地址分别为0000H-0015H。

        例子:请求17号从机的0009寄存器。

读取输入寄存器----查询
addr Fun D0 addr hi D0 addr lo D0 #of regs hi D0 #of regs lo CRC16 hi CRC16 lo
地址 功能码 寄存器起始地址高8位 寄存器起始地址低8位 寄存器数量高8位 寄存器数量低8位 校验高8位 校验低8位
11H 04H 00H 08H 00H

03H

XXH XXH

        响应:响应信息中的寄存器为每个寄存器分别对应2个字节,第一个字节为高位数据,第二个字节为低位数据。

读取输入寄存器----响应
addr Fun Byte count Data hi Data lo CRC16 hi CRC16 lo
地址 功能码 字节数 数据位 数据位 校验高8位 校验低8位
11H 04H 02H

00H

0AH XXH XXH

5.强制单线圈(功能码05)

        强制单个线圈为ON或OFF状态,广播时,该功能可强制所有从机中同一类型的线圈均为ON或OFF状态。

        该功能可跨过控制器内存的保护状态和线圈的禁止状态。线圈强制状态一直保持有效直至下一个控制逻辑作用于线圈为止。控制逻辑中无线圈程序时,则线圈处于强制状态。

        查询:查询信息规定了需要强制一个单独线圈的类型,线圈的起始地址为0000H,1-16个线圈的寻址地址分为0000H-0015H(DO1=0000H,DO2=0001H,以此类推)。

        由查询数据区中的一个常量,规定请求线圈的ON/OFF状态,FF00H值请求线圈处于ON状态,0000H值请求线圈处于OFF状态,其他值对线圈无效,不起作用。

        例子:请求17号从机开D01的ON状态。

强制单线圈----查询
addr Fun D0 addr hi D0 addr lo Value hi Value lo CRC16 hi CRC16 lo
地址 功能码 寄存器地址高8位 寄存器地址低8位 寄存器值高8位 寄存器值低8位 校验高8位 校验低8位
11H 05H 00H 00H FFH

00H

XXH XXH

          响应:对这个命令请求的正常响应是在D0状态改变后传送接收到的数据。

强制单线圈----响应
addr Fun D0 addr hi D0 addr lo Value hi Value lo CRC16 hi CRC16 lo
地址 功能码 寄存器地址高8位 寄存器地址低8位 寄存器值高8位 寄存器值低8位 校验高8位 校验低8位
11H 05H 00H 00H FFH

00H

XXH XXH

6.预置单寄存器(功能码06) 

        把一个值预置到一个保持寄存器中,广播时,该功能把值预置到所有从机的相同类型的寄存器中。

        该功能可跨过控制器的内存保护。使寄存器中的预置值保持不变。只能由控制器的下一个逻辑信号来处理该预置值。若控制逻辑中无寄存器程序时,则寄存器中的值保持不变。

        查询:查询信息规定了要预置寄存器的类型,寄存器寻址起始地址为0000H,寄存器1所对应的地址为0000H。

        例子:请求17号从机0040H的值为2177.

预设单寄存器----查询
addr Fun Data start addr hi Data start addr lo Value hi Value lo CRC16 hi CRC16 lo
地址 功能码 寄存器地址高8位 寄存器地址低8位 数据高8位 数据低8位 校验高8位 校验低8位
11H 06H 00H 40H 0AH

9DH

XXH XXH

        响应:对于预置单寄存器请求的正常响应是在寄存器值改变以后 将接受到的数据传送回去。

预设单寄存器----响应
addr Fun Data start addr hi Data start addr lo Value hi Value lo CRC16 hi CRC16 lo
地址 功能码 寄存器地址高8位 寄存器地址低8位 数据高8位 数据低8位 校验高8位 校验低8位
11H 06H 00H 40H 0AH

9DH

XXH XXH

7.读取异常状态(功能码07) 

        读从机中8个不正常状态线圈的数据,某些线圈号已在不同型号的控制器中预定义,而其他的线圈由用户编程,作为有关控制器的状态信息,如“machien ON/OFF”,“heads retraced”,(缩回标题),“safeties satisfied”(安全性满意),“error conditions”(存在错误条件)或其它用户定义的标志等。该功能码不支持广播。

        该功能码为存取该类信息提供了一种简单的方法,不正常线圈的类型是已知的(在功能代码中不需要线圈类型)预定义的不正常线圈号如下:

控制器型号 线圈 设定
M84,184/384,584,984 1-8 用户定义
484 257 电池状态
258-264 用户定义
884 761 电池状态
762 内存保护状态
763 R10工况状态
764-768 用于预定义

          查询:请求读从机设备17中的不正常状态。

读取异常状态----查询
addr Fun CRC16 hi CRC16 lo
地址 功能码 校验高8位 校验低8位
11H 06H XXH XXH

        响应:正常响应包含8个不正常的线圈状态,为一个数据字节,每个线圈一位。LSB对应为最低线圈类型的状态。

        按查询要求返回响应:

读取异常状态----响应
addr Fun D0 Data CRC16 hi CRC16 lo
地址 功能码 数据 校验高8位 校验低8位
11H 06H 6DH XXH XXH

        该例子中,线圈数据为6DH(二进制0110,1101),从左到右(最高位至最低位)的线圈状态分别为:OFF-ON-ON-OFF-ON-ON-OFF-ON。若控制器型号为984,这些位表示线圈8至1的状态;若控制器型号为484则表示线圈264至257的状态。

8.强制多线圈(功能码15) 

        按线圈的顺序把各线圈强制成ON或OFF。广播时,该功能代码可对各从机中相同类型的线圈起强制作用。

        该功能代码可跨过内存能保护和线圈的进制状态线圈。保持强制状态有效,并只能由空、感知器的下一个逻辑来处理。若无线圈控制逻辑程序时,线圈将保持强制状态。

        查询:查询信息规定了被强制线圈的类型,线圈的起始地址为0000H,1-16个线圈的寻址地址分为0000H-0015H(DO1=0000H,DO2=0001H,以此类推)。

        查询数据区规定了被请求线圈的ON/OFF状态,如数据区的某位值为“1”表示请求的响应线圈状态为ON,位值为“0”,则为OFF状态。

        例子:请求从机设备17中一组10个线圈为强制状态,起始线圈为20(则寻址地址为19或13H),查询的数据为2个字节,CD01H(二进制1100 1101 0000 0001)响应线圈的二进制位排序如下:

Bit: 1 1 0 0 1 1 0 1 0 0 0 0 0 0 0 1
Coil: 27 26 25 24 23 33 21 20 - - - - - - 29 28

        传送的第一个字节CDH对应线圈为27-20,LSB对应线圈20,传送的第二个字节为01H,对应的线圈为29-28,LSB为对应线圈28,其余未使用的位均填“0”。

强制多线圈----查询
addr Fun D0 addr hi D0 addr lo D0 #of regs hi D0 #of regs lo Byte count Value hi Value lo CRC16 hi CRC16 lo
地址 功能码 起始地址高8位 起始地址低8位 寄存器数量高8位 寄存器数量低8位 字节数 数据高8位 数据低8位 校验高8位 校验低8位
11H 0FH 00H 13H 00H

0AH

02H CDH 01H XXH XXH

        响应:正常响应返回从机地址,功能码,起始地址以及强制线圈数。

强制多线圈----响应
addr Fun D0 addr hi D0 addr lo D0 #of regs hi D0 #of regs lo CRC16 hi CRC16 lo
地址 功能码 寄存器地址高8位 寄存器地址低8位 寄存器值高8位 寄存器值低8位 校验高8位 校验低8位
11H 0FH 00H 13H 00H

0AH

XXH XXH

9.预置多寄存器(功能码16) 

        把数据按顺序预置到各寄存器中,广播时该功能代码可把数据预置到全部从机中的相同类型King的寄存器中。

        该功能代码可跨过控制器的内存保护,在寄存器中的预置值一直保持有效,只能由控制器的下一个逻辑来处理寄存器的内容,控制逻辑中无该寄存器程序时,则寄存器中的值保持不变。

        查询:查询信息规定了要预置寄存器的类型,寄存器寻址起始地址为0000H,寄存器1所对应的地址为0000H。

        例子:请求17号从机0040H的值为178077833.(十六进制为 0A9D 4089)

预设多寄存器----查询
addr Fun Data start reg hi Data start reg lo D0 #of regs hi D0 #of regs lo Byte count Value hi Value lo Value hi Value lo CRC16 hi CRC16 lo
地址 功能码 寄存器起始地址高8位 寄存器起始地址低8位 寄存器数量高8位 寄存器数量低8位 字节数 数据高8位 数据低8位 数据高8位 数据低8位 校验高8位 校验低8位
11H 10H 00H 40H 00H

02H

04H 40H 89H 0AH 9DH XXH XXH

         响应:对于预置单寄存器请求的正常响应是在寄存器值改变以后将接受到的数据传送回去。

预设多寄存器----响应
addr Fun Data start reg hi Data start reg lo D0 #of regs hi D0 #of regs lo CRC16 hi CRC16 lo
地址 功能码 寄存器起始地址高8位 寄存器起始地址低8位 寄存器数量高8位 寄存器数量低8位 校验高8位 校验低8位
11H 10H 00H 40H 00H

02H

XXH XXH

10.报告从机标识(功能码17) 

        返回一个从机地址控制器的类型,从机的当前状态,以及有关从机的其他说明,不支持广播。

        查询:请求报告从机设备17的表示ID和状态。

报告从机标识----查询
addr Fun CRC16 hi CRC16 lo
地址 功能码 校验高8位 校验低8位
11H 11H XXH XXH

        响应:正常响应格式,数据内容对应每台控制器的类型。

addr Fun byte Count Slave ID Run Indicator Status Additfional Data CRC16 hi CRC16 lo
地址 功能码 字节数 校验高8位 校验低8位
11H 11H XXH XXH XXH XXH XXH

XXH

         从机ID总结

                数据区第一个字节为Modicon控制器返回的从机ID

Slave ID Controller
0 Micro 84
1 484
2 184/384
3 584
8 884
9 984

                特注:详细信息见Modbus协议英文版或中文版。文章来源地址https://www.toymoban.com/news/detail-403801.html

到了这里,关于Modbus通讯协议常用功能码解释的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 嵌入式 STM32 通讯协议--MODBUS

    目录 一、自定义通信协议 1、协议介绍 2、网络协议 3、自定义的通信协议  二、MODBUS通信协议 1、概述 2、MODBUS帧结构  协议描述 3、MODBUS数据模型   4、MODBUS事务处理的定义 5、MODBUS功能码  6、功能码定义   7、MODBUS数据链路层 8、MODBUS地址规则  9、MODBUS帧描述 10、MODBUS两种

    2024年02月11日
    浏览(42)
  • python 与PLC 基于 modbus tcp 协议通讯

    Modbus是一种串行通信协议,是工业领域通信协议的业界标准,是工业电子设备之间常用的连接方式。最近在工作中需要上位机python程序和PLC做通讯,就测试了下使用modbus tcp 通讯。         目前实际测试结果是与西门子PLC/信捷PLC都可以正常通讯使用,但是看到网上说可以传输

    2024年02月17日
    浏览(28)
  • MODBUS TCP转CCLINK IE协议网关cclink通讯异常的处理方法

    你是否曾经遇到过需要将不同的设备连接到一个统一的网络中?或者你是否曾经遇到过设备之间的通讯协议不兼容的问题?捷米的JM-CCLKIE-TCP通讯网关就是为解决这些问题而设计的。   JM-CCLKIE-TCP通讯网关是一款自主研发的CCLINK IE FIELD BASIC从站功能的通讯网关,它的主要功能是

    2024年02月12日
    浏览(28)
  • MODBUS RTU协议原理及功能码解析

    目录                         第一部分 MODBUS RTU协议原理 1.1 简介 1.2 RTU传输模式 1.3 MODBUS报文帧 1.4 CRC校验                 第二部分 MODBUS RTU模式下功能码解析 2.1 Modbus-RTU协议简介 2.2 部分功能码名词解释 2.3 部分功能码解析 01功能码 –读线圈状态 0

    2024年02月02日
    浏览(33)
  • 搬运机器人RFID传感器CNS-RFID-01|1S的RS485(MODBUS|HS协议)通讯连接方法

    搬运机器人RFID传感器CNS-RFID-01|1S支持RS485通信,可支持RS485(MODBUS RTU)协议、RS485-HS协议,广泛应用于物流仓储,立库 AGV|无人叉车|搬送机器人等领域,常用定位、驻车等,本篇重点介绍CNS-RFID-01|1S RFID传感器的RS485通信连接方法。 CNS-RFID-01|1S RFID传感器 1、RS485连接方法 用线缆

    2024年02月04日
    浏览(38)
  • 常用通讯协议比较

    dubbo与http1.0的区别 二进制协议 :Dubbo使用自定义的二进制协议,而HTTP 1.0使用文本,发送一条相同的消息,http1.0会有更大的网络开销。 连接复用 :Dubbo采用单一的多路复用NIO长链接,每个请求都有一个对应的请求id,一个连接上可以进行多次并行处理请求和响应。HTTP 1.0默认

    2024年02月10日
    浏览(24)
  • 物联网常用通讯协议

    一、物联网通信协议分为两大类 1.接入协议: 一般负责子网内设备间的组网及通信 2.通讯协议: 主要是运行在传统互联网TCP/IP协议之上的设备通讯协议,负责设备通过互联网进行数据交换及通信。 二、物理层、数据链路层协议 1、远距离蜂窝 通信 (1)2G/3G/4G通信协议,分别指

    2024年02月10日
    浏览(46)
  • STM32硬件库(非HAL库)实现MODBUS RTU协议的03,06功能码(读以及与单个发送)

    本人软件工程专业,关于硬件只有408的基础,后续学习发现一些博主所讲以及b站上所给的教程并不是很清晰,故编写此文档供大家查看。 如果我说的地方哪里有问题,希望大家可以给出意见!(●ˇ∀ˇ●) 参考文档: Modbus通讯协议常用功能码解释_modbus功能码_Lee139499的博客

    2024年02月03日
    浏览(23)
  • 常用通讯协议(UART、RS232、RS485、IIC、SPI)简单介绍

    目录 常用通讯协议随笔 通讯基础 UART UART存在的问题: RS232 接口 信号 电平转换 RS232存在的问题 RS485 信号 接口 电平转换 RS485的优势 IIC IIC总线通讯过程 IIC总线寻址方式 起始信号和停止信号 字节传输于应答 同步信号 典型IIC时序 SPI SPI寻址方式 SPI总线通讯过程 极性和相位

    2024年02月02日
    浏览(29)
  • Modbus RTU通讯实例:安科瑞电表通讯

    方法有两种,一种是从电表的侧面直接查看,端子为30、31分A、B两种,A+、B-接USB线的相应位置如下图 第二则是从用户手册里读取,有需要的朋友可以私信我,无偿。 我用的是dtech的usb2.0转422RS485线,一般在内部就有二维码,可以下载出来串口驱动 我这里使用的是HslCommunica

    2024年02月14日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包