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协议英文版或中文版。

Modbus通讯协议常用功能码解释相关推荐

  1. modbus通讯协议详解(转载)

    转载自:https://www.cnblogs.com/The-explosion/p/11512677.html modbus通讯协议详解 1.Modbus 协议简介  Modbus协议是一种已广泛 ...

  2. 基于modbus协议的工业自动化网络规范_工控学堂:解读Modbus通讯协议「宜收藏」...

    作为工控人,Modbus通讯协议想必都不陌生,Modbus通讯协议可以说是工业自动化领域应用最为广泛的通讯协议,因为他的开放性.可扩充性和标准化使他成为通用工业标准. 1979年施耐德电气制定了一个用 ...

  3. modbus通讯协议详解

    1.Modbus协议简介 Modbus协议是一种广泛应用于当今工业控制领域的通用通信协议.通过此协议,控制器相互之间.或者控制器经由网路(如以太网)可以和其他设备之间进行通信.Modbus协议使用的是 ...

  4. Modbus通讯协议学习文档

    1 什么是Modbus通讯协议 Modbus是一种串行通信协议,是Modicon公司(现在的施耐德电气Schneider Electric)于1979年为使用可编程逻辑控制器(PLC)通信而发表.Mo ...

  5. STM32移植modbus通讯协议简明教程

    目录 一.本文讨论内容 二.工具与源码 三.Modbus概述 四.Modbus-RTU通讯协议 五.完成Modbus输入输出代码 六.完成Modbus逻辑功能 七.测试与验证 一.本文讨论内容 本文简 ...

  6. 一文搞懂物联网Modbus通讯协议

    简介: 一般来说,常见的物联网通讯协议众多,如蓝牙.Zigbee.WiFi.ModBus.PROFINET.EtherCAT.蜂窝等.而在众多的物联网通讯协议中,Modbus是当前非常流行的一种通讯协 ...

  7. 协议:Modbus通讯协议详细

    1.Modbus通讯协议详细解释 https://blog.csdn.net/rxiang12/article/details/79125813 2.Modbus通信协议详解 https://blog ...

  8. Modbus通讯协议

    https://baike.baidu.com/item/Modbus%E9%80%9A%E8%AE%AF%E5%8D%8F%E8%AE%AE/5972462?fromtitle=ModBus& ...

  9. modbus rtu与计算机通讯,Modbus通讯协议原来是这么回事!看完秒懂了

    原标题:Modbus通讯协议原来是这么回事!看完秒懂了 [www.gkwo.net]工程师必备网站 导语:ModBus网络是一个工业通信系统,由带智能终端的可编程序控制器和计算机通过公用线路或局部专用 ...

最新文章

  1. kernfs_link_sibling
  2. JustForex开始提供比特币和比特币现金支付方式
  3. datagridview控件读写mysql数据库表格的方法_C#读写Access数据库、表格datagridview窗体显示代码实例...
  4. VTK:Math之HomogeneousLeastSquares
  5. Nginx 内置变量,细化规则,真实IP获取及限制连接请求
  6. nx二次开发c语言,NX二次开发-UFUN API函数编程基础
  7. 動態設定GridView的列寬
  8. android 按钮顶级效果_Android 中按钮的点击效果
  9. 【目标检测】目标检测中的多尺度检测(Multi-Scale),FPN,RPN
  10. 利用R语言进行具有周期性的时间序列分析
  11. vue前端使用xlsx和 xlsx-style 导出excel,并修改样式
  12. powerbi导入地图_PowerBI地图可视化的那些套路
  13. 大数据软件的国内镜像
  14. web项目034-----JS模版引擎
  15. 计算机专业考研青岛,青岛大学(专业学位)计算机技术考研难吗
  16. [附源码]计算机毕业设计JAVA基于JSP社区生鲜配送系统
  17. Quartz配置参考
  18. Java 2 实用教程
  19. 杰理AC692X---AD按键介绍
  20. 如何用VS2017生成可执行文件

热门文章

  1. 如何压缩jpg图片的大小?可以一键压缩图片的软件有哪些?
  2. 华为HCIE RS笔记-17以太网技术PPoE
  3. 计算机的假桌面,给电脑桌面放个假!极品桌面抢先评测
  4. 前端开发 Atom 编辑器插件安装和配置
  5. 微软体验计划无法连接服务器,Microsoft的常见问题_云平台服务-AWS云服务
  6. 自然语言处理(NLP) vs 自然语言理解(NLU)
  7. 宝刀不老:Flash歌曲播放网站MP3地址隐藏机制完全破解
  8. 为什么 没4k万 别来找我
  9. 基于NE555的方波信号发生器
  10. 关于生意参谋数据采集分析人员,我们的采集程序是否可以使用另一种方式,更不用大改之前所写的代码