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

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

3天内不再提示

Modbus协议详解与案例演示

GReq_mcu168 来源:亿佰特物联网实验室 作者:亿佰特物联网实验 2022-07-22 14:18 次阅读

Modbus RTU通讯协议在数据通讯上采用主从应答的方式进行。只能由主机(PC,HMI等)通过唯一从机地址发起请求,从机(终端设备)根据主机请求进行响应,即半双工通讯。该协议只允许主机发起请求,从机进行被动响应,因此从机不会主动占用通讯线路造成数据冲突。

类似Modbus RTU协议的主从应答协议还有西门子的PPI、电表常用的DL/T645-2007等协议。

一、协议格式

信息传输为异步方式,使用16进制进行通讯,信息帧格式:

地址码

功能码

数据区

CRC校验码

1字节

1字节

N字节

2字节

地址码

地址码是每个通讯信息帧的第一个字节,一般支持1到247,部分设备也支持0地址,用于接收主机的广播数据,每个从机在总线上地址必须唯一,只有与主机发送的地址码相符的从机才能响应返回数据。

功能码

功能码是每个通讯信息帧的第二个字节。主机发送,通过功能码告知从机设备应当执行何种操作。

常见的八种功能码:

功能码

定义

操作

01H

读取线圈

读取一个或多个连续线圈状态

05H

写单个线圈

操作指定位置的线圈状态

0FH

写多个线圈

操作多个连续线圈状态

02H

读取离散量输入

读取一个或多个连续离散输入状态

04H

读取输入寄存器

读取一个或多个连续输入寄存器数据

03H

读保持寄存器

读取一个或多个保持寄存器数据

06H

写单个保持寄存器

把两个十六进制数据写入对应位置

10H

写多个保持寄存器

把4*N个十六进制数据写入N个连续保持寄存器

数据区

数据区随功能码以及数据方向的不同而不同,这些数据可以是“寄存器首地址+读取寄存器数量”、“寄存器地址+操作数据”、“寄存器首地址+操作寄存数量+数据长度+数据”等不同的组合,在“功能码分析”详解不同功能码的数据区。

Modbus CRC校验

Modbus RTU协议常用与工业现场对数据传输的稳定性和正确性有较高的要求,因此通过CRC校验保证数据传输的正确性和完整性。

二、错误反馈

地址与CRC校验错误并不会收到从机的数据反馈,其他错误将向主机返回错误码。数据帧的第二位加上0X80表示请求发生错误(非法功能码、非法数据值等),错误数据帧如下:

地址码

功能码

错误码

CRC校验码

1字节

1字节

1字节

2字节

常见错误码如下:

名称

说明

01H

非法的功能码

不支持该功能码操作寄存器

02H

非法的寄存器地址

访问设备禁止访问的寄存器

03H

非法的数据值

写入不支持的参数

04H

从机故障

设备工作异常

三、通讯信息传输过程

通讯命令由主机发送从机时,与主机发送的地址码相符的从机接收通讯命令,如果CRC校验无误,则执行相应的操作,然后把执行结果(数据)返回给主机。返回信息中包含地址码、功能码、执行后的数据以及CRC校验码。如果地址不匹配或者CRC校验出错就不返回任何信息。

四、功能码分析

功能码01H:读线圈

例如:主机要读取从机地址为01H,起始线圈地址为00H的1个线圈状态,主机发送:

主机发送

发送数据(HEX)

地址码

01

功能码

01

起始线圈地址

高字节

00

低字节

00

线圈数量

高字节

00

低字节

01

CRC校验

低字节

FD

高字节

CA

如果从机寄存器00H线圈闭合,从机返回:

从机返回

发送数据(HEX)

地址码

01

功能码

01

字节数

01

线圈状态

01

CRC校验码

低字节

90

高字节

48

仿真演示:

09fcabee-0985-11ed-ba43-dac502259ad0.png

功能码05H:写单个线圈

例如:主机要控制从机地址为01H,线圈地址为0000H的线圈状态,主机发送:

主机发送

发送数据(HEX)

地址码

01

功能码

01

线圈地址

高字节

00

低字节

00

控制方式

高字节

00(断开)、FF(闭合)

低字节

01

CRC校验

低字节

XX

高字节

XX

从机返回与主机请求相同;

仿真演示:

0a2f56b6-0985-11ed-ba43-dac502259ad0.png

功能码0FH:写多个线圈

例如:主机要控制从机地址为01H,起始线圈地址为00H的4个线圈状态,主机发送:

主机发送

发送数据(HEX)

地址码

01

功能码

0F

起始线圈地址

高字节

00

低字节

00

线圈数量

高字节

00

低字节

04

写入字节数

01

控制方式

00(全部断开)、0F(全部闭合)

CRC校验

低字节

XX

高字节

XX

功能码0FH操作,从机返回:

从机返回

发送数据(HEX)

地址码

01

功能码

0F

起始线圈地址

高字节

00

低字节

00

线圈数量

高字节

00

低字节

04

CRC校验

低字节

54

高字节

08

仿真演示:

0a53e71a-0985-11ed-ba43-dac502259ad0.png

功能码02H:读离散输入

例如:主机要读取从机地址为01H,起始离散量地址为00H的4个输入状态,主机发送:

主机发送

发送数据(HEX)

地址码

01

功能码

02

起始离散量地址

高字节

00

低字节

00

读取数量

高字节

00

低字节

04

CRC校验

低字节

79

高字节

C9

如果从机首地址00H开始的4离散输入全部检测到输入,从机返回:

从机返回

发送数据(HEX)

地址码

01

功能码

02

字节数

01

离散输入状态

0F

CRC校验码

低字节

E1

高字节

8C

仿真演示:

0a6a94ba-0985-11ed-ba43-dac502259ad0.png

功能码04H:读取输入寄存器

例如:主机要读取从机地址为01H,起始寄存器地址为02H的1个输入寄存器数据,主机发送:

主机发送

发送数据(HEX)

地址码

01

功能码

04

起始寄存器地址

高字节

00

低字节

02

寄存器数量

高字节

00

低字节

01

CRC校验

低字节

90

高字节

0A

如果从机输入寄存器02H的数据为3344H,从机返回:

从机返回

发送数据(HEX)

地址码

01

功能码

04

字节数

02

寄存器05H数据

高字节

33

低字节

44

CRC校验码

低字节

AD

高字节

F3

仿真演示:

0a92fad6-0985-11ed-ba43-dac502259ad0.png

功能码03H:读保持寄存器

例如:主机要读取从机地址为01H,起始寄存器地址为05H的2个保持寄存器数据,主机发送:

主机发送

发送数据(HEX)

地址码

01

功能码

03

起始寄存器地址

高字节

00

低字节

05

寄存器数量

高字节

00

低字节

02

CRC校验

低字节

D4

高字节

0A

如果从机保持寄存器05H、06H的数据为1122H、3344H,从机返回:

从机返回

发送数据(HEX)

地址码

01

功能码

03

字节数

04

寄存器05H数据

高字节

11

低字节

22

寄存器06H数据

高字节

33

低字节

44

CRC校验码

低字节

4B

高字节

C6

仿真演示:

0aba217e-0985-11ed-ba43-dac502259ad0.png

功能码06H:写单个保持寄存器

例如:主机写入9988H的数据给从机地址为01H,寄存器地址为0050H的寄存器,主机发送:

主机发送

发送数据(HEX)

地址码

01

功能码

06

寄存器地址

高字节

00

低字节

50

写入值

高字节

99

低字节

88

CRC校验

低字节

E3

高字节

ED

从机返回与主机请求相同;

0ae3775e-0985-11ed-ba43-dac502259ad0.png

功能码10H:写多个保持寄存器

例如:主机要把数据0005H、2233H保存到从机地址为01H,起始寄存器地址为0020H的2个寄存器中,主机发送:

主机发送

发送数据(HEX)

地址码

01

功能码

10

起始寄存器地址

高字节

00

低字节

20

寄存器数量

高字节

00

低字节

02

写入字节数

04

0000H

寄存器待写入

高字节

00

低字节

05

0001H

寄存器待写入

高字节

22

低字节

33

CRC校验

低字节

B9

高字节

03

功能码10H操作,从机返回:

从机返回

发送数据(HEX)

地址码

01

功能码

10

起始寄存器地址

高字节

00

低字节

20

寄存器数量

高字节

00

低字节

02

CRC校验

低字节

40

高字节

02

仿真演示:

0b0bec16-0985-11ed-ba43-dac502259ad0.png

审核编辑 :李倩


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

    关注

    2

    文章

    602

    浏览量

    39215
  • MODBUS
    +关注

    关注

    28

    文章

    1802

    浏览量

    76969
  • 16进制
    +关注

    关注

    1

    文章

    13

    浏览量

    8767

原文标题:Modbus协议详解与案例演示

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    DJN Modbus协议

    DJN Modbus协议
    的头像 发表于 11-27 13:52 1106次阅读
    DJN <b class='flag-5'>Modbus协议</b>

    一文浅谈Modbus协议

    Modbus协议是一种广泛应用的工业控制器网络协议,它定义了一个控制器能够识别的消息结构,用于实现不同设备之间的通信和数据交换。自1979年由Modicon公司(现为施耐德电气Schneider
    的头像 发表于 10-09 13:56 388次阅读

    Modbus协议网关简介

    在工业自动化领域,设备间的通信与数据交换是实现高效、智能控制的关键。Modbus协议作为一种广泛应用的通信协议,自1971年由Modicon公司首次推出以来,便以其标准、开放、支持多种电气接口等特点
    的头像 发表于 09-23 14:51 248次阅读
    <b class='flag-5'>Modbus协议</b>网关简介

    使用MODBUS协议、楼宇自控系统、电力协议Modbus协议网关来集成楼宇内的温湿度传感器设备

    在现代建筑管理中,实现楼宇环境的自动化控制是降低能耗、增强管理效率的关键。本文将详细介绍如何使用MODBUS协议、楼宇自控系统、电力协议Modbus协议网关来集成楼宇内的温湿度传感器设备,并通过
    的头像 发表于 08-08 17:31 337次阅读
    使用<b class='flag-5'>MODBUS协议</b>、楼宇自控系统、电力<b class='flag-5'>协议</b>转<b class='flag-5'>Modbus协议</b>网关来集成楼宇内的温湿度传感器设备

    使用Modbus、楼宇自控、电力协议Modbus协议网关实现生产设备的远程监控和管理

    Modbus协议、楼宇自控、电力协议Modbus协议网关,将不同类型的生产设备数据集中传输到监控系统,实现远程监控和管理。 我们先来看整个系统中需要
    的头像 发表于 08-08 17:29 378次阅读
    使用<b class='flag-5'>Modbus</b>、楼宇自控、电力<b class='flag-5'>协议</b>转<b class='flag-5'>Modbus协议</b>网关实现生产设备的远程监控和管理

    空调协议网关快速操作空调协议转换为Modbus协议

    空调协议,即空调通信协议,是指用于空调设备之间进行数据传输和通信的规定和约定;而Modbus协议是一种广泛应用的工业通信协议,是工业电子设备之间常用的连接方式。 如果要将空调
    的头像 发表于 08-06 13:40 442次阅读
    空调<b class='flag-5'>协议</b>网关快速操作空调<b class='flag-5'>协议</b>转换为<b class='flag-5'>Modbus协议</b>

    巴图制自动化Profinet协议Modbus协议模块连接PLC和电表通信

    介绍了一种通过Profinet协议Modbus协议模块(BT-MDPN10)实现PLC与电表通信的方法,无需编写Modbus轮询程序,简化通信过程并提高通信效率和稳定性。巴图自动化Profinet
    的头像 发表于 07-03 21:17 351次阅读
    巴图制自动化Profinet<b class='flag-5'>协议</b>转<b class='flag-5'>Modbus协议</b>模块连接PLC和电表通信

    Modbus协议转Profibus协议网关接温控表与PLC通讯

    Modbus协议转Profibus协议网关(XD-MDPB100)则是实现这一通讯的重要工具。Modbus转Profibus网关的主要功能是实现Modbus协议和Profibus
    的头像 发表于 06-21 11:31 1909次阅读
    <b class='flag-5'>Modbus协议</b>转Profibus<b class='flag-5'>协议</b>网关接温控表与PLC通讯

    Modbus协议转Profinet协议网关与气体监测系统配置案例

    Modbus协议和Profinet协议作为工业领域常见的两种通讯协议,各自具有一定的特点和应用范围。Modbus转Profinet网关(XD-MDPN100/300)在工业自动化控制系
    的头像 发表于 06-13 17:50 1402次阅读
    <b class='flag-5'>Modbus协议</b>转Profinet<b class='flag-5'>协议</b>网关与气体监测系统配置案例

    Modbus协议的工作原理、优缺点及应用

    在当今工业物联网(IIoT)的浪潮中,Modbus协议无疑是连接传统工业设备与现代信息技术的桥梁。作为一位工业物联网的资深工程师,我深感有责任向传统行业解释这一重要协议的工作原理、优缺点以及广泛
    的头像 发表于 05-21 17:06 1368次阅读
    <b class='flag-5'>Modbus协议</b>的工作原理、优缺点及应用

    Modbus协议网关是什么?Modbus协议网关的功能

    Modbus协议网关是一种专门用于工业自动化环境中的网络设备,其主要功能是实现不同通信协议之间的转换,尤其是将基于Modbus协议的设备或系统与使用其他协议的设备、控制系统或信息系统连
    的头像 发表于 04-11 15:51 734次阅读

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

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

    modbus协议与485协议区别

    Modbus协议与485协议是工业通信领域中常用的两种协议,它们在不同的层面上具有不同的功能和设计理念。本文将对Modbus协议与485协议
    的头像 发表于 01-11 11:06 2.2w次阅读

    什么是Modbus协议

    Modbus协议是一种在工业自动化领域广泛应用的通信协议,它允许不同设备之间进行可靠的数据交换和控制。该协议最初由Modicon公司于1979年创建,旨在提供一种简单而有效的方法,使PLC(可编程
    的头像 发表于 01-09 08:00 932次阅读
    什么是<b class='flag-5'>Modbus协议</b>?

    实例解析Modbus协议

    Modbus协议是Modicon公司(现在的施耐德电气 Schneider Electric)于1979年为使用可编程逻辑控制器(PLC)通信而发表。Modbus已经成为工业领域通信协议的业界标准(De facto),并且现在是
    发表于 12-25 09:33 1558次阅读
    实例解析<b class='flag-5'>Modbus协议</b>