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

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

3天内不再提示

Modbus功能码详解

瑞萨MCU小百科 来源:瑞萨MCU小百科 2024-10-29 14:35 次阅读

10.5Modbus功能码详解

本节大部分内容参考《Modbus软件开发实战指南》。

10.5.1

功能码概要

Modbus标准在协议中规定了以下3类Modbus功能码。

公共功能码:

①被明确定义的功能码

②保证唯一性

③由Modbus协会确认,并提供公开的文档

④可进行一致性测试

⑤包括协议定义的功能码和保留将来使用的功能码

用户自定义功能码:

①有两个用户自定义功能码区域,分别是65~72和100~110。

②用户自定义,无法保证唯一性。

保留功能码:

保留功能码因为历史遗留原因,某些公司的传统产品现行使用的功能码不作为公共使用。

10.5.2

0x01)读取线圈

1. 功能说明

01功能码用于读取从设备的线圈或离散量输出的状态,即各Do(DiscreteOutput,离散输出)的ON/OFF状态。消息帧中指定了需要读取的线圈起始地址和线圈数目。需要注意的是,在Modbus协议规定的PDU中,所有线圈或寄存器地址都必须从0开始计算。

2. 查询报文

如下表所示,查询帧的消息中定义了从设备地址为3,并读取从设备的Modbus地址0001900055(线圈地址 0002000056)共计37个状态值。起始线圈地址为0x13(即十进制00019),因为线圈地址是从0开始计数的。

功能码01查询报文示例:

字段 例(Hex) ASCII模式字符型 RTU模式8位(Hex)
帧头 “:”
从设备地址 0x03 “0”,“3” 0x03
功能码 0x01 “0”,“1” 0x01
起始地址
(高位)
0x00 “0”,“0” 0x00
起始地址
(低位)
0x13 “1”,“3” 0x13
寄存器数
(高位)
0x00 “0”,“0” 0x00
寄存器数
(低位)
0x25 “2”,“5” 0x25
差错校验 LRC(2字符) CRC(2字节)
帧尾 CR/LF
合计字节数 17 8

Modbus协议规定,起始地址由2字节构成,取值范围为0x0000~0xFFFF。

线圈数量由2字节构成,取值范围为0x0001~0x07D0(即+进制1~2000)另外,注意观察ASCII模式和RTU模式的区别,ASCII模式直接按每4位拆分成对应的字符表示。

3. 响应报文

在响应报文的数据字段中,每个线圈占用1位(bit),状态被表示为1=ON和O=OFF两种类型。第1个数据字节的LSB(最低有效位)标识查询报文中的起始地址线圈的状态值,其他线圈以此类推,一直到这个字节的MSB(最高有效位)为止,并在后续字节中按照同样的方式(由低到高)排列。

例如,下表中线圈20~27的状态值分别是ON-ON-OFF OFF-ON-OFF-ON-OFF表示为二进制则为01010011(0x53),注意观察对应的顺序。1字节可以表示8个线圈的状态如果最后的数据字节中不能填满8个线圈的状态,则用0填充。对应于查询报文中需要读取37个线圈的状态,共需要5字节保存状态值。

功能码01响应报文示例:

字段 例(Hex) ASCII模式字符型 RTU模式8位(Hex)
帧头 “:”
从设备地址 0x03 “0”,“3” 0x03
功能码 0x01 “0”,“1” 0x01
数据域字节数 0x05 “0”,“5” 0x05
数据1 0x53 “5”,“3” 0x53
数据2 0x6B “6”,“B” 0x6B
数据3 0x01 “0”,“1” 0x01
数据4 0xF4 “F”,“B” 0xF4
数据5 0x1B “1”,“B” 0x1B
差错校验 LRC(2字符) CRC(2字节)
帧尾 CR/LF
合计字节数 21 10

10.5.3

(0x02)读取离散量输入值

1. 功能说明

02功能码用于读取从设备的离散输入,即DI(Discrete Input)的ON/OFF状态。消息顿中指定了需要读取的离散输入寄存器的起始地址和数目,可以读取1~2000个连续的离散量输入状态如果从设备接受主设备的请求则回复功能码02,并返回离散量且输入各变量的当前状态。如果返回的离散输入数量的个数不是8的整数倍,将用0填充最后的数据字节的剩余位。

2. 查询报文

如下表所示,查询顿的消息中定义了从设备的地址为3,并读取从设备的离散输入寄存器中地址10101~10120(Modbus地址表示为十进制100~119)共计20个离散输入状态值。从下表中可以发现,起始地址为0x64(即十进制100),因为消息PDU中的Modbus地址从0开始计数。

功能码02查询报文示例:

字段 例(Hex) ASCII模式字符型 RTU模式8位(Hex)
帧头 “:”
从设备地址 0x03 “0”,“3” 0x03
功能码 0x02 “0”,“2” 0x02
起始地址
(高位)
0x00 “0”,“0” 0x00
起始地址
(低位)
0x64 “6”,“4” 0x64
寄存器数
(高位)
0x00 “0”,“0” 0x00
寄存器数
(低位)
0x14 “1”,“4” 0x14
差错校验 LRC(2字符) CRC(2字节)
帧尾 CR/LF
合计字节数 17 8

与5.4.2节中的功能码(01(0x01)读取线圈/离散量输出状态(ReadCoil status/DOs))一样,本功能码的起始地址由2字节构成,取值范围为0x0000~0xFFFF;离散量数量由2字节构成,取值范围为0x0001~0x07D0(即十进制1~2000),最多一次性可读取2000人离散输入状态值。

3. 响应报文

响应报文的各项构成和意义与5.4.2章节的功能码(01(0x01)读取线圈/离散量输出状态(Re-ad Coil Status/DOs))一样,如下表所示:

功能码02响应报文示例

字段 例(Hex) ASCII模式字符型 RTU模式8位(Hex)
帧头 “:”
从设备地址 0x03 “0”,“3” 0x03
功能码 0x02 “0”,“2” 0x02
数据域字节数 0x03 “0”,“3” 0x03
数据1 0x53 “5”,“3” 0x53
数据2 0x6B “6”,“B” 0x6B
数据3 0x01 “0”,“1” 0x01
差错校验 LRC(2字符) CRC(2字节)
帧尾 CR/LF
合计字节数 21 10

需要技术支持?

如您在使用瑞萨MCU/MPU产品中有任何问题,可识别下方二维码或复制网址到浏览器中打开,进入瑞萨技术论坛寻找答案或获取在线技术支持。

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

    关注

    28

    文章

    1755

    浏览量

    76723
  • 设备
    +关注

    关注

    2

    文章

    4430

    浏览量

    70476
  • ModBus协议
    +关注

    关注

    3

    文章

    173

    浏览量

    33357
  • 功能码
    +关注

    关注

    0

    文章

    5

    浏览量

    2098

原文标题:Moubus功能码详解 - RZ MPU工业控制教程连载(30)

文章出处:【微信号:瑞萨MCU小百科,微信公众号:瑞萨MCU小百科】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    modbus入门教程 Modbus协议节点讲解之【EsDA应用】Modbus应用详解

    。    Modbus简介 Modbus是一种串行通信协议,由于其公开、免费、易于部署和维护的优点,被广泛应用于工业电子领域,并且已经成为工业领域通信协议的业界标准。 以往我们在使用Modbus协议进行应用开发时,通常需要自己实
    的头像 发表于 07-18 11:55 2413次阅读
    <b class='flag-5'>modbus</b>入门教程 <b class='flag-5'>Modbus</b>协议节点讲解之【EsDA应用】<b class='flag-5'>Modbus</b>应用<b class='flag-5'>详解</b>

    台达PLC通信支持modbus协议的4号功能吗?

    使用modbus协议的4号功能采集PH值,系统部署如下图:本来这是个很简单的项目,可是在PLC的通讯编程中出现了问题,DW-MC1无线监控器采样modbus协议的4号
    发表于 05-22 11:18

    modbus协议讲解modbus-rtu以及modbus-tcp协议详解

    modbus协议讲解modbus-rtu以及modbus-tcp协议详解,见附件。
    发表于 03-01 10:14

    Modbus详解(全书+PDF)

    Modbus详解,有需要的看看
    发表于 11-01 15:47

    Modbus功能的回调函数如何编写呢

    FreeModbus从站设计(10)-Modbus功能的回调函数如何编写关键词:FreeModbus CubeMX HAL库 串口 功能
    发表于 02-16 07:31

    modbus功能错误会返回什么错误信息?

    modbus在通信的过程中功能错误会返回什么错误码
    发表于 10-13 07:48

    modbus功能怎么用?

    modbus功能怎么用
    发表于 11-06 06:37

    Modbus通信协议详解

    关于Modbus通信协议的详解和应用分析
    发表于 10-12 16:54 150次下载
    <b class='flag-5'>Modbus</b>通信协议<b class='flag-5'>详解</b>

    Modbus_通讯协议详解

    Modbus_通讯协议详解Modbus_通讯协议详解
    发表于 12-08 14:13 0次下载

    modbus协议功能及格式

    modbus协议功能及格式
    发表于 10-28 15:56 43次下载

    基于Modbus功能细粒度过滤算法的研究

    针对防火墙粗粒度过滤Modbus/TCP导致工控系统存在安全威胁的问题,研究基于Modbus功能的细粒度过滤算法。基于Modbus TCP
    发表于 01-16 15:32 0次下载
    基于<b class='flag-5'>Modbus</b><b class='flag-5'>功能</b><b class='flag-5'>码</b>细粒度过滤算法的研究

    单片机程序中,Modbus功能的回调函数如何编写--FreeModbus从站设计(10)

    FreeModbus从站设计(10)-Modbus功能的回调函数如何编写关键词:FreeModbus CubeMX HAL库 串口 功能
    发表于 12-20 18:49 9次下载
    单片机程序中,<b class='flag-5'>Modbus</b><b class='flag-5'>功能</b><b class='flag-5'>码</b>的回调函数如何编写--FreeModbus从站设计(10)

    【EsDA应用】Modbus应用详解

    。    Modbus简介 Modbus是一种串行通信协议,由于其公开、免费、易于部署和维护的优点,被广泛应用于工业电子领域,并且已经成为工业领域通信协议的业界标准。 (图片源自网络,侵删) 以往我们在使用Modbus协议进行应
    的头像 发表于 03-10 21:50 869次阅读

    Modbus功能/异常功能/错误代码

    在大家通读Modbus协议时,总是会碰到一些容易混淆的名词,从而导致对于协议的解读出现问题,在本文中,我们对于Modbus协议中可能会给大家造成困惑的名词作相关的解释。 1.功能
    的头像 发表于 06-25 09:20 1.4w次阅读

    modbus协议功能分类 modbus协议功能是什么,有什么作用

    Modbus协议是一种用于工业领域常见的通信协议,它基于主从结构,用于在不同设备之间实现数据交换。Modbus协议的功能是决定数据交换类型和操作的重要部分。下面将详细介绍
    的头像 发表于 01-31 14:47 6201次阅读