功能码

  • 01读线圈
  • 02读离散输入
  • 03读保持寄存器
  • 04读输入寄存器
  • 05写单个线圈
  • 06写单个寄存器
  • 15写多个线圈
  • 16写多个寄存器

以下图片中的帧解析都不含站号和校验码

01读线圈

在一个远程设备中,使用该功能码读取线圈的 1 至 2000 连续状态。请求 PDU (功能码-地址-数据)详细说明了起始地址,即指定的第一个线圈地址和线圈编号。从零开始寻址线圈。因此寻址线圈 1-16 为 0-15(PLC地址一般也是这样,寄存器1在modbus协议中地址编号为0)。
根据数据域的每个比特将响应报文中的线圈分成为一个线圈。指示状态为 1= ON 和 0= OFF。第一个数据字节的 LSB(最低有效位)包括在询问中寻址的输出。其它线圈依次类推,一直到这个字节的高位端为止,并在后续字节中从低位到高位的顺序。
如果返回的输出数量不是八的倍数,将用零填充最后数据字节中的剩余比特(一直到字节的高位端)。字节数量域说明了数据的完整字节数。


*N=输出数量/8,如果余数不等于 0,那么N = N+1


将输出 27-20 的状态表示为十六进制字节值 CD,或二进制 1100 1101。输出 27 是这个字节的MSB,输出 20 是 LSB。
通常,将一个字节内的比特表示为 MSB 位于左侧,LSB 位于右侧。第一字节的输出从左至右为 27 至 20。下一个字节的输出从左到右为 35 至 28。当串行发射比特时,从 LSB 向 MSB 传输:20 . . .27、28 . . . 35 等等。
在最后的数据字节中,将输出状态 38-36 表示为十六进制字节值 05,或二进制 0000 0101。输出38 是左侧第六个比特位置,输出 36 是这个字节的 LSB。用零填充五个剩余高位比特。
注:用零填充五个剩余比特(一直到高位端)。

02读离散输入

在一个远程设备中,使用该功能码读取离散量输入的 1 至 2000 连续状态。请求 PDU 详细说明了起始地址,即指定的第一个输入地址和输入编号。从零开始寻址输入。因此寻址输入 1-16 为 0-15。
根据数据域的每个比特将响应报文中的离散量输入分成为一个输入。指示状态为 1= ON 和 0=OFF。第一个数据字节的 LSB(最低有效位)包括在询问中寻址的输入。其它输入依次类推,一直到这个字节的高位端为止,并在后续字节中从低位到高位的顺序。
如果返回的输入数量不是八的倍数,将用零填充最后数据字节中的剩余比特(一直到字节的高位端)。字节数量域说明了数据的完整字节数。

将离散量输入状态 204-197 表示为十六进制字节值 AC,或二进制 1010 1100。输入 204 是这个字节的 MSB,输入 197 是这个字节的 LSB。
将离散量输入状态 218-213 表示为十六进制字节值 35,或二进制 0011 0101。输入 218 位于左侧第 3 比特,输入 213 是 LSB。
注:用零填充 2 个剩余比特(一直到高位端)。

03读保持寄存器

在一个远程设备中,使用该功能码读取保持寄存器连续块的内容。请求 PDU 说明了起始寄存地址和寄存器数量。从零开始寻址寄存器。因此,寻址寄存器 1-16 为 0-15。
将响应报文中的寄存器数据分成每个寄存器有两字节,在每个字节中直接地调整二进制内容。
对于每个寄存器,第一个字节包括高位比特,并且第二个字节包括低位比特。



将寄存器 108 的内容表示为两个十六进制字节值 02 2B,或十进制 555。将寄存器 109-110 的内
容分别表示为十六进制 00 00 和 00 64,或十进制 0 和 100。

04读输入寄存器

在一个远程设备中,使用该功能码读取 1 至大约 125 的连续输入寄存器。请求 PDU 说明了起始地址和寄存器数量。从零开始寻址寄存器。因此,寻址输入寄存器 1-16 为 0-15。
将响应报文中的寄存器数据分成每个寄存器为两字节,在每个字节中直接地调整二进制内容。
对于每个寄存器,第一个字节包括高位比特,并且第二个字节包括低位比特。



将输入寄存器 9 的内容表示为两个十六进制字节值 00 0A,或十进制 10。

05写单个线圈

在一个远程设备上,使用该功能码写单个输出为 ON 或 OFF。
请求数据域中的常量说明请求的 ON/OFF 状态。十六进制值 FF 00 请求输出为 ON。十六进制值00 00 请求输出为 OFF。其它所有值均是非法的,并且对输出不起作用。
请求 PDU 说明了强制的线圈地址。从零开始寻址线圈。因此,寻址线圈 1 为 0。线圈值域的常量说明请求的 ON/OFF 状态。十六进制值 0XFF00 请求线圈为 ON。十六进制值 0X0000 请求线圈为OFF。其它所有值均为非法的,并且对线圈不起作用。
正常响应是请求的应答,在写入线圈状态之后返回这个正常响应。

06写单个寄存器

在一个远程设备中,使用该功能码写单个保持寄存器。
请求 PDU 说明了被写入寄存器的地址。从零开始寻址寄存器。因此,寻址寄存器 1 为 0。
正常响应是请求的应答,在写入寄存器内容之后返回这个正常响应。


15写多个线圈

在一个远程设备中,使用该功能码强制线圈序列中的每个线圈为 ON 或 OFF。请求 PDU 说明了强制的线圈参考。从零开始寻址线圈。因此,寻址线圈 1 为 0。
请求数据域的内容说明了被请求的 ON/OFF 状态。域比特位置中的逻辑“1”请求相应输出为ON。域比特位置中的逻辑“0”请求相应输出为 OFF。
正常响应返回功能码、起始地址和强制的线圈数量。

这是一个请求从线圈 20 开始写入 10 个线圈的实例:
请求的数据内容为两个字节:十六进制 CD 01 (二进制 1100 1101 0000 0001)。使用下列方法,二进制比特对应输出。

传输的第一字节(十六进制 CD)寻址为输出 27-20,在这种设置中,最低有效比特寻址为最低输
出(20)。
传输的下一字节(十六进制 01)寻址为输出 29-28,在这种设置中,最低有效比特寻址为最低输出
(28)。
应该用零填充最后数据字节中的未使用比特。

16写多个寄存器

在一个远程设备中,使用该功能码写连续寄存器块(1 至约 120 个寄存器)。
在请求数据域中说明了请求写入的值。每个寄存器将数据分成两字节。
正常响应返回功能码、起始地址和被写入寄存器的数量。

Modbus-RTU功能码相关推荐

  1. 三菱Fx3u MODBUS RTU 从站程序 支持H03和H10功能码

    三菱Fx3u MODBUS RTU 从站程序 支持H03和H10功能码 下载到FX3U(配fx3u-485-BD通讯板)中可直接做从站,任意modbus主站可通信. D1000-D1499是读取区域( ...

  2. Modbus RTU 通信工具设计

    Modbus 是一个工业上常用的通讯协议.一种通讯约定. ModBus 协议是应用层报文传输协议(OSI 模型第7层),它定义了一个与通信层无关的协议数据单元(PDU),即PDU=功能码+数据域. M ...

  3. 树莓派 rfid_树莓派工控机做Modbus RTU主站读取RFID数据

    KUNBUS Revpi Core 3是工业级的树莓派,可作为小型的工业PC用,外观十分小巧,操作简单,DIN导轨模块化安装,RevPi core 3能与RevPi IO连接,能实时对这些IO的控制. ...

  4. json qbytearray 串 转_JSON数据采集网关,json转Modbus RTU串IO口RS485转4~20mA边缘计算智能终端...

    JSON数据采集网关边缘计算智能终端是一种能够将各种传感器仪表仪器设备的数据采集后按照JSON格式上传服务器的网关,可以实现云边协同. JSON(JavaScript Object Notation) ...

  5. Modbus协议栈应用实例之二:Modbus RTU从站应用

    自从开源了我们自己开发的Modbus协议栈之后,有很多朋友建议我针对性的做几个示例.所以我们就基于平时我们的应用整理了几个简单但可以说明基本的应用方法的示例,这一篇中我们将使用协议栈实现一个Modbu ...

  6. Modbus协议栈应用实例之一:Modbus RTU主站应用

    自从开源了我们自己开发的Modbus协议栈之后,有很多朋友建议我针对性的做几个示例.所以我们就基于平时我们的应用整理了几个简单但可以说明基本的应用方法的示例,在这一篇中我们先来使用协议栈实现Modbu ...

  7. Modbus协议栈实现Modbus RTU多主站支持

    前面我们已经详细讲解过Modbus协议栈的开发过程,并且利用协议栈封装了Modbus RTU主站和从站,Modbus TCP服务器与客户端,Modbus ASCII主站与从站应用.但在使用过程中,我们 ...

  8. Modbus协议栈开发笔记之六:Modbus RTU Master开发

    这一节我们来封装最后一种应用(Modbus RTU Master应用),RTU主站的开发与TCP客户端的开发是一致的.同样的我们也不是做具体的应用,而是实现RTU主站的基本功能.我们将RTU主站的功能 ...

  9. Modbus协议栈开发笔记之五:Modbus RTU Slave开发

    Modbus在串行链路上分为Slave和Master,这一节我们就来开发Slave.对于Modbus RTU从站来说,需要实现的功能其实与Modbus TCP的服务器端是一样的.其操作过程也是一样的. ...

  10. 【Reproduced】C language program of MODBUS RTU MASTER

    [Reproduced]C language program of MODBUS RTU MASTER From:http://blog.csdn.net/wangshunli/article/det ...

最新文章

  1. Hadoop之 MapReducer工作过程
  2. 给研究思路就能推荐数据集,还能分析语料“毒性”,CMU博士后等人推出NLP数据处理神器...
  3. vb mysql边记录边统计_VB与Access连接,检索、核对、处理数据
  4. 【CF666E】Forensic Examination - 广义后缀自动机+线段树合并
  5. git分布式版本管理系统和github平台
  6. Linux ssh服务开启秘钥和密码认证
  7. Wordpress卡在 wp-admin/setup-config.php,一片空白
  8. Java链表的常用算法原理
  9. 社区分享|Arm 中国生态技术市场经理教你玩转 TFLite Micro 端云一体解决方案
  10. Eclipse最新SVN(4.2.x )插件subclipse安装方法
  11. 手机邮箱服务器设置安全类型,手机邮箱设置
  12. Vue复刻华为官网(三)
  13. html 中 鼠标滑轮实现横向滚动
  14. sybase日志空间不足,增加日志空间步骤(有图有真相)
  15. BFS——1253 胜利大逃亡
  16. Discuz! X搬家说明
  17. java轮盘赌_轮盘赌算法
  18. java 姓名_java 随机生成中文姓名人名
  19. 杀狗问题(帽子问题)
  20. CRH、CRL、ODR和IDR的使用

热门文章

  1. Echarts双Y轴柱状图
  2. STM32 FLASH 简单读写操作【有代码】
  3. 调出任务管理器的快捷方式
  4. 移动端vant input框点击时禁止弹出手机键盘
  5. STM32物联网项目-SPI FLASH编程
  6. Hive 正则提取英文名称和中文名称
  7. 看美剧也能学英语 看一部大片胜过在美生活十天
  8. html点赞代码java_17种 HTML5字体图标点赞动画特效源码
  9. 俄罗斯没有高端芯片,为什么却能造出一流武器?
  10. 30岁的我们,没车没房没存款。