Modbus协议介绍

一、Modbus协议的规定

1、Modbus协议的特点

(1)Modbus协议使用广泛的原因:

①协议标准开放,且无版权要求。

②协议支持多种电气接口,可以在各种介质上传输。

③消息帧格式简单、紧凑、通俗易懂。

(2)Modbus协议是一种应用层的报文传输协议,它不依赖于硬件总线,允许底层使用任意字节流传输介质,但在工业标准中(截至2026年),官方认可的硬件载体只有串行链路(USART+RS-485)和以太网(TCP/IP)。

2、Modbus协议通信过程

(1)Modbus协议采用主从式通信模型,通常由主设备发起请求,从设备收到请求后才能返回响应。在标准Modbus主从通信模型中,从设备一般不能主动发送数据。

(2)Modbus总线主要定义了请求、响应和数据传输格式,通常不包含复杂的总线仲裁机制。当从机处于忙状态,或没有收到主机的请求时,不会发出响应报文,因此主机需要额外在软件中增加通信状态判断策略,判断请求是否被从机正常接收。

(3)类似于I2C协议,Modbus协议也规定每个从机分配一个唯一的地址,用于区分每个从设备。

(4)Modbus协议的一次数据传输过程:

3、Modbus存储区

(1)Modbus协议对从机定义了存储区,如下所示,其中0区和4区允许主机读写,1区和3区允许主机只读。

区号

名称

主机读写权限

地址范围(标准)

0

线圈

可读可写

00001~09999

1

离散输入

只读

10001~19999

3

输入寄存器

只读

30001~39999

4

保持寄存器

可读可写

40001~49999

(2)存储区分为线圈/离散输入和寄存器两种,线圈/离散输入存储布尔量(bit,如I/O口的电平高低、外设的开关状态等),寄存器存储16位变量(16bit,如传感器的温度数据、长度不超过16位的密码等)。

(3)Modbus协议对每个存储区划分了地址范围,主机向从机请求数据时,只需要在消息帧中写入数据的起始偏移地址,以及获取数据的长度(单位为字节),从机就会将对应的数据回复主机,类似于I2C协议的指定地址读写。

偏移地址 = 存储区单元地址 - 存储区首地址

比如读取保持寄存器的地址为40999,则偏移地址为40999-40001=998

(4)存储区与从机实际的存储空间相对应,主机访问从机存储区,实际就是访问对应的从机存储空间。

(5)存储器地址分为五位和六位两种,传统的标准地址为五位,也就是上表描述的地址范围,对于新款的设备,协议同时支持扩展地址段,扩展的地址则是六位,如下表所示。

区号

地址范围(标准)

地址范围(扩展)

0

00001~09999

000001~065536

1

10001~19999

100001~165536

3

30001~39999

300001~365536

4

40001~49999

400001~465536

4、功能码

(1)对于每个存储区,主机的读写权限是不同的,对任意一个存储区进行读操作或写操作,都可以当作是一个功能,基于这种思想,Modbus定义如下六个功能码:

功能码

功能说明

01H

读取线圈

02H

读取离散输入

03H

读取保持寄存器

04H

读取输入寄存器

05H

写入(单个)线圈

06H

写入(单个)保持寄存器

(2)在实际工程中,往往需要一次性写入多个数据,以上经过排列组合得到的六个功能码,仅支持写入单个存储区单元,为了满足实际工程的需求,Modbus继续定义如下两个功能码:

功能码

功能说明

0FH

写入(多个)线圈

10H

写入(多个)保持寄存器

(3)实际上,Modbus规定了二十多种功能码(截至2026年),不过常用的功能码只有如上八种,此处不对其它不常用功能码做过多深入介绍。

二、Modbus的三种协议

1、Modbus协议的子类

(1)Modbus协议主要包括如下三类:

分类

说明

Modbus RTU

二进制串行协议,最常用

Modbus ASCII

字符型串行协议,较少见

Modbus TCP

以太网协议,主要用于以太网

(2)严格地说,Modbus协议还包括Modbus UDP、Modbus Plus和Modbus Serial Line/Modbus RTU over TCP这几类,但此处不过多深入讨论

(3)虽然Modbus协议有几种分类,但它们有很多相似之处,以下主要介绍Modbus RTU协议。

2、Modbus RTU协议

(1)Modbus RTU协议的数据帧格式:

①从机地址:长度为1字节,有效范围为1~247,另外255为广播地址(所有从机都接收广播报文)。

②功能码:长度为1字节,关于功能码的定义,在上一节中有介绍。

③数据段:长度不定,数据段的具体定义取决于功能码。

④CRC校验码:长度为2字节(低字节在前),根据从机地址、功能码和数据段的数据计算而得。

(2)Modbus RTU协议不同功能码的数据帧格式:

①读取线圈0x01:

[1]主机发出的数据帧格式如下,需要在数据段交代读取线圈的起始偏移地址和线圈数量,单次0x01读取线圈的数量最多为2000。

[2]从机回复的数据帧格式如下,需要在数据段交代有效数据的字节数,以及主机请求读取的数据。

②读取离散输入0x02:

[1]主机发出的数据帧格式如下,需要在数据段交代读取离散输入的起始偏移地址和输入数量,单次0x02读取输入的数量最多为2000。

[2]从机回复的数据帧格式如下,需要在数据段交代有效数据的字节数,以及主机请求读取的数据。

③读取保持寄存器0x03:

[1]主机发出的数据帧格式如下,需要在数据段交代读取保持寄存器的起始偏移地址和寄存器数量,单次0x03读取寄存器的数量最多为125。

[2]从机回复的数据帧格式如下,需要在数据段交代有效数据的字节数,以及主机请求读取的数据。

④读取输入寄存器0x04:

[1]主机发出的数据帧格式如下,需要在数据段交代读取输入寄存器的起始偏移地址和寄存器数量,单次0x04读取寄存器的数量最多为125。

[2]从机回复的数据帧格式如下,需要在数据段交代有效数据的字节数,以及主机请求读取的数据。

[2]从机原样返回主机发出的数据帧。

⑥写入(单个)保持寄存器0x06:

[1]主机发出的数据帧格式如下,需要在数据段交代写入寄存器的偏移地址和16位数据,1条指令只能写入1个保持寄存器。

[2]从机原样返回主机发出的数据帧。

⑦写入(多个)线圈0x0F:

[1]主机发出的数据帧格式如下,需要在数据段交代写入线圈的起始偏移地址、写入线圈数量、写入数据字节长度以及写入的具体数据,1条指令最多写入1968个线圈。

[2]从机回复的数据帧格式如下,需要在数据段交代写入线圈的起始偏移地址、写入线圈数量。

⑧写入(多个)保持寄存器0x10:

[1]主机发出的数据帧格式如下,需要在数据段交代写入保持寄存器的起始偏移地址、写入寄存器数量、写入数据字节长度以及写入的具体数据,1条指令最多写入123个保持寄存器。

[2]从机回复的数据帧格式如下,需要在数据段交代写入保持寄存器的起始偏移地址、写入寄存器数量。

(3)在通信过程中难免会产生异常,对此,Modbus也有设置异常应答机制。

①从机异常应答的通用数据帧格式:

②异常码用于指示异常类型,有如下选择:

异常码

异常描述

0x01

主机使用非法功能码

0x02

主机请求非法寄存器/线圈地址

0x03

主机请求非法数据长度/写入数值

0x04

从机设备故障

0x06

从机正忙于处理其它命令,无法响应新请求

0x0A

网关无法建立到网关目标设备的通信路径(网关专用)

0x0B

网关目标设备未响应网关的请求(网关专用)

(4)Modbus RTU对数据帧没有规定帧起始和帧结束标志,需要用时间间隔充当一帧报文的开始标志和结束标志,协议规定开始标志和结束标志的时间都为3.5个字符周期,具体时长与通信波特率有关。

3、Modbus ASCII协议

(1)Modbus RTU使用二进制(十六进制)表示数据,而Modbus ASCII采用ASCII码表示数据,使用Modbus RTU发送的每一个二进制字节,对应到Modbus ASCII都将拆分为两个ASCII字符发送,两个字符分别对应二进制字节的高4位与低4位,具体对应关系如下:

Modbus RTU发送的半字节(4bits)

Modbus ASCII发送的ASCII码(4bits)

0x0

48

0x1

49

0x2

50

0x3

51

0x4

52

0x5

53

0x6

54

0x7

55

0x8

56

0x9

57

0xA

65

0xB

66

0xC

67

0xD

68

0xE

69

0xF

70

(2)Modbus ASCII协议的数据帧格式整体与Modbus RTU相似,但额外增加了1Byte起始位CR(0x3A)和2Bytes结束符LF(“\r\n”),校验方式采用LRC(纵向冗长检测,校验的字段不包含起始位)。

4、Modbus TCP协议

(1)Modbus TCP与Modbus RTU一样,使用二进制(十六进制)表示数据。

(2)Modbus TCP协议的数据帧格式如下:

①Modbus TCP数据帧不需要从机地址。

②Modbus TCP数据帧不需要额外的差错校验,因为TCP属于可靠传输,本身就具有校验差错的能力。

③Modbus TCP数据帧与前面介绍的数据帧相比,增加了长度为7Bytes的MBAP报文头。

(3)MBAP报文头的格式定义如下:

字段

长度

描述

客户机定义

服务器定义

事务处理标识箱

2Bytes

Modbus请求/响应事物处理的识别

客户机选择

拷贝客户机的请求

协议标识符

2Bytes

0x0000表示使用Modbus协议

客户机选择

拷贝客户机的请求

长度

2Bytes

后续所有字节的总长度(包含单元标识符)

客户机根据请求的数据长度定义

服务器根据响应的数据长度定义

单元标识符

1Byte

串行链路或其它总线上连接的远程从站的识别

客户机选择

拷贝客户机的请求

代码转载自:https://pan.quark.cn/s/11d565366452 【USB转I2C/IIC适配器上位机应用程序】是一种针对I2C(Inter-Integrated Circuit)通信协议而构建的工具,其通过USB端口将个人计算机转变为能够与I2C设备进行交互的控制器。该适配器使开发人员与工程师能够便捷地对遵循I2C协议的芯片执行读取和写入任务,因此在硬件构建和测试阶段能够显著提升效率,对于核实I2C接口芯片的工作性能具有特别的价值。 I2C协议是由飞利浦(现NXP半导体)于1980年代初创立的一种双线式串行总线,其目的是用于连接微控制器及其他外围设备。该协议仅需两条信号线(SDA - 数据线,SCL - 时钟线)即可完成多设备间的通信,大幅度削减了电路板上的布线需求,从而降低了生产成本。I2C协议提供多种速度等级,涵盖标准模式(100kbps)、快速模式(400kbps)以及高速模式(3.4Mbps),旨在满足不同场景下的应用要求。 Ginkgo USB转I2C适配器是这项技术的具体应用实例,它提供了一个物理接口,用于将USB端口转换为I2C端口。适配器内部装配有一个微控制器单元,该单元负责处理从USB到I2C的信号转换,并且通过USB线路向计算机传输信息,同时接收来自计算机的指令以操控I2C总线。这种设计使用户无需具备深厚的硬件知识,仅需借助上位机软件即可实现对I2C设备的操控。 Ginkgo I2C Adapter Classic是与该适配器相配套的软件,通常包含以下几项核心功能: 1. 设备识别:自动检测并建立与USB转I2C适配器的连接。 2. 总线探查:扫描I2C总线上所连接的设备地址,有助于准确定位设备的位置。 3. 读写指令...
内容概要:本文围绕麦克斯韦旋度方程的差分形式在平面极化磁场中的应用展开深入研究,并通过Matlab代码实现相关数值仿真。研究的核心是将经典的麦克斯韦方程组转化为适用于数值计算的有限差分格式,构建离散化数学模型,进而模拟和分析平面极化条件下磁场的空间分布特征与时间演化规律。文中系统阐述了差分方法的理论基础与数学推导过程,详细说明网格划分、边界条件设定及迭代求解策略,最终利用Matlab编程实现电磁场的可视化仿真,有效验证了差分方法在求解复杂电磁场问题中的准确性与可行性。该研究不仅加深了对电磁波传播机理的理解,也为电磁器件的设计优化与工程仿真提供了可靠的数值分析手段。; 适合人群:具备电磁场与电磁波理论基础,熟悉偏微分方程数值解法,且掌握Matlab编程技能的电气工程、物理学、应用数学等领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①深入掌握麦克斯韦旋度方程的有限差分法基本原理及其在二维平面磁场仿真中的具体实施步骤;②学习如何利用Matlab进行电磁场问题的建模、编程求解与结果可视化;③为后续开展更复杂的电磁兼容、天线设计或光子晶体等领域的数值模拟研究奠定坚实的技术基础。; 阅读建议:建议读者结合经典电磁场理论教材,透彻理解麦克斯韦方程组的物理内涵,然后循序渐进地跟进文中的差分格式推导过程,务必动手复现并调试所提供的Matlab代码,通过调整参数观察仿真结果的变化,从而深刻领悟数值方法的实质与应用技巧。
已经博主授权,源码转载自 https://pan.quark.cn/s/a4b39357ea24 【相关知识说明】 1. 百度网盘文件组织方式: 百度网盘作为一项云端数据存储解决方案,为用户提供文件的上传、下载及分享功能。其文件组织架构是用户对存储内容进行系统化安排的手段,借助文件夹及其嵌套的子文件夹实现文件的有效管理。 2. SQLite 数据管理系统: 在百度云管家应用程序中,用户的网盘文件组织信息被保存在一个名为"BaiduYunGuanjia.db"的SQLite数据存储文件里。SQLite属于一种小型化关系型数据管理系统,频繁应用于嵌入式平台和移动终端,主要优势在于无需配置独立的服务器进程,且全部数据信息均存储在单一文件实体中。 3. 网盘目录结构导出方法: 若要获取百度网盘的文件组织层级,必须借助能够解析SQLite数据存储的专用软件,例如Navicat Premium。通过建立与SQLite数据存储的连接,并对特定数据表(如"cache_file")执行查询操作,可以获取包含文件名称(server_filename)、文件容量(file_size)以及父目录位置(parent_path)等关键信息的文件目录详情。 4. Navicat Premium 应用说明: Navicat Premium是一款多功能数据库管理平台,支持多种数据存储类型,涵盖SQLite系统。用户可利用该工具接入"BaiduYunGuanjia.db"数据存储,进行数据查看与导出操作。但需注意,直接在Navicat环境中执行导出操作可能存在技术障碍,因此建议将数据传输至Excel软件以便后续处理。 5. Excel 数据处理与目录树构建: 在Excel软件中,可通过VBA(Visual ...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zevalin爱灰灰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值