🎖️Modbus简易不简单的教程
文章目录
🎫一、简介
1.1 Modbus:工业通信的革命
在探索工业自动化和数据通信的世界时,了解Modbus协议是不可或缺的。作为最经典的工业通信标准之一,Modbus自1979年以来,一直是连接各种电子设备的关键。
Modbus的诞生背景
在20世纪70年代,随着工业自动化的兴起,出现了对可靠和标准化数据交换方法的迫切需求。那时,不同厂商的设备间缺乏一种统一的、简单易用的通信协议。这不仅增加了系统集成的复杂性,也限制了设备间的互操作性。正是在这样的背景下,Modicon公司开发了Modbus协议,旨在简化工业设备之间的通信,提高其灵活性和效率。
为何制定Modbus
Modbus的制定主要是为了解决以下几个核心问题:
- 标准化通信:在众多设备和控制系统之间建立一个通用的语言,使不同厂商的设备能够轻松沟通。
- 简易性与可靠性:提供一个简单而可靠的方法来传输数据,无论是简单的开关信号还是复杂的数据结构。
- 灵活性和可扩展性:允许系统根据需要轻松扩展或修改,无需更换整个系统。
Modbus带来的好处
采用Modbus协议带来的好处包括:
- 降低成本:通过标准化通信减少了对专有系统的依赖,从而降低了成本。
- 提高互操作性:不同设备之间的无缝沟通大大提高了系统的整体效率和性能。
- 简化系统集成:Modbus的简单性使得集成多种设备变得更加容易,加快了项目的实施速度。
1.2 理解标准化通信
想象一下,如果在一个工业设施中,每个设备制造商都使用自己独特的通信协议。设备A使用“协议A”,而设备B使用“协议B”。这两种协议在数据格式、速率、错误处理等方面都不相同。现在,考虑一下以下几个问题:
- 系统集成:如果您需要让设备A和设备B相互通信,您将不得不开发一个转换器,将“协议A”转换为“协议B”,反之亦然。这不仅增加了复杂性,还可能导致数据传输效率降低。
- 扩展性和维护:随着系统扩展,引入更多使用不同协议的设备,您的转换器需要不断更新和维护,以适应新设备。这会导致维护成本和时间的大幅增加。
- 错误和兼容性问题:每次数据从一个协议转换到另一个协议时,都有可能出现错误。此外,某些协议可能无法完全兼容,导致信息丢失或错误解读。
现在,让我们引入Modbus协议作为这个场景中的解决方案。由于Modbus是一个广泛接受和使用的标准,大多数设备制造商都支持它。这意味着:
- 简化的系统集成:所有设备都使用相同的Modbus协议,意味着它们可以直接相互通信,无需任何转换器。
- 易于扩展和维护:由于所有设备遵循同一标准,添加新设备变得简单,且维护成本大大降低。
- 提高数据准确性和可靠性:使用统一的协议减少了转换错误的可能性,确保数据的准确传输。
通过这个例子,我们可以看到,一个统一的、标准化的通信协议如Modbus在工业自动化中的重要性是不可估量的。它不仅简化了系统的设计和维护,还提高了整体效率和可靠性。
1.3 Modbus协议的变体
Modbus协议包含几种不同的变体,主要包括Modbus RTU、Modbus TCP/IP和Modbus ASCII,它们分别适用于不同的通信环境:
- Modbus RTU:基于二进制的串行通信协议,适用于工业设备间的高速通信。
- Modbus TCP/IP:结合了Modbus和TCP/IP协议,适用于网络化的环境。
- Modbus ASCII:通过ASCII字符表示数据,适用于数据易读性更重要的场合。
🎀二、例程引入
如果看完这个例子还是不大明白,建议直接往后看。后面的内容会让你逐渐领悟什么是modbus通信协议。
2.1 示例:使用01功能码读取灯的开关状态
我们通过一个实际应用的例子来说明Modbus RTU协议的工作原理:读取一个灯的开关状态。
- 设备地址:“01”,代表目标灯具地址,这个地址是由设备自己定的。
- 功能码:“01”,用于读取线圈状态,这里代表灯的开关状态。
- 数据域:包含要读取的线圈的起始地址(比如,“00 13”)和数量(比如,“00 01”)。
- 校验和:通过CRC算法计算得出,用于验证数据帧的完整性和准确性。
在这个例子中,主设备(如控制系统)发送包含上述信息的数据帧到从设备(灯)。灯接收到请求后,会返回包含其当前开关状态(开或关)的数据帧。
线圈起始地址(00 13)
在Modbus协议中,线圈被用作表示设备的二进制状态,例如开/关。每个线圈在从设备内有一个唯一的地址。这个地址用于在数据帧中指定要读取或写入的具体线圈。
- 地址表示方式:地址通常以十六进制表示。
- 例子中的“00 13”:这个地址表示的是从设备中的第19个线圈(十六进制的13等于十进制的19)。这意味着数据帧中的请求是要读取或控制这个特定的线圈。
数量(00 01)
在数据帧中,除了指定线圈的起始地址外,还需要指明要操作的线圈数量。
- 数量的意义:这告诉从设备我们要读取或写入多少个连续的线圈。
- 例子中的“00 01”:这表示我们只对一个线圈(位于“00 13”地址)感兴趣。如果这个值是“00 02”,那么我们将会读取或控制从“00 13”开始的两个连续线圈。
将起始地址和数量结合起来看,我们可以这样理解:如果Modbus请求中的起始地址是“00 13”且数量是“00 01”,那么请求的是对从设备中地址为19的那个线圈的读取或控制。如果数量是“00 02”,则意味着操作从地址19开始的两个连续线圈。
2.2 校验和的重要性
Modbus RTU数据帧中的校验和是通过CRC算法计算的。CRC校验是一种用于检测数据传输过程中的错误的常用方法。它能够确保数据在从发送设备到接收设备的过程中保持完整性和准确性。后续的内容中,会对校验和部分详细介绍,此处不深究。
🎏三、概念解析
3.1 ADU & PDU
想象你要通过邮寄方式发送一封信。这封信由信封(ADU)和信件内容(PDU)组成。
-
ADU(信封):
在 Modbus RTU 中,ADU 就像是信封,它保护并包含着信件内容(即PDU),以及其他必要的信息,如寄信人和收信人的地址(在 Modbus RTU 中是设备地址),和邮戳(在 Modbus RTU 中是CRC校验)。
- 设备地址:就像是信封上的寄信人和收信人地址,用来标识消息是发给谁的,以及来自谁。
- PDU:如下。
- CRC校验:相当于邮戳,确保信件在传输过程中没有被篡改。
-
PDU(信件内容):
PDU 类似于信封内的信件内容。它包含了具体的信息和指令,就像你在信件中写的文字。
- 功能码:告诉接收方这封信(消息)的目的,比如“读取温度”或“开灯”。
- 数据字段:如果你在信中具体说明了某些细节,比如温度设置为 22 度,这就类似于 Modbus RTU 消息中的数据字段。
3.2 什么是线圈
简单的说,这是一个历史遗留问题,把线圈理解为开关就可以。
Modbus 协议最初是为了工业应用而设计的,尤其是用于控制和监测继电器这样的机电设备。在这些系统中,继电器的线圈被用来控制电流的流动,进而控制设备的开关状态。
随着技术的发展,物理继电器被数字化控制系统所取代,但“线圈”这个术语被保留下来,用来表示可以被数字化控制的开/关状态。
3.3 OSI七层协议
只做了解就可以,入门和后续使用中基本用不到这里的概念。
- 物理层(Physical Layer)
- 功能:处理通过物理媒介(如电缆、光纤、无线电波)的原始数据传输。
- 例子:电缆、光纤、RS-232、RS-485。
- 数据链路层(Data Link Layer)
- 功能:确保物理层传输的数据无误,负责帧的传输,包括错误检测和纠正。
- 例子:以太网(Ethernet)、PPP(点对点协议)、MAC(媒体访问控制)。
- 网络层(Network Layer)
- 功能:处理数据在网络中的路径选择和转发,包括寻址和路由。
- 例子:IP(互联网协议)、ICMP(互联网控制消息协议)。
- 传输层(Transport Layer)
- 功能:为两个设备之间的数据传输提供端到端的通信。
- 例子:TCP(传输控制协议)、UDP(用户数据报协议)。
- 会话层(Session Layer)
- 功能:管理设备间的会话,控制建立、维护和终止会话。
- 例子:NetBIOS(网络基本输入输出系统)、RPC(远程过程调用)。
- 表示层(Presentation Layer)
- 功能:确保从一个设备发送的数据能被另一个设备理解,处理数据格式化、加密和解密。
- 例子:ASCII、JPEG、MPEG。
- 应用层(Application Layer)
- 功能:为最终用户或应用程序提供网络服务。
- 例子:HTTP(超文本传输协议)、FTP(文件传输协议)、SMTP(简单邮件传输协议)。
modbus
- 层级:应用层
- 描述:Modbus 是一个应用层协议,用于在设备之间建立通信规则。它定义了消息结构、设备如何响应特定请求、数据如何组织以及如何进行错误检测等。Modbus 协议可以通过多种类型的物理层和数据链路层实现,比如 RS-485 或 TCP/IP。
RS-485与Modbus之间的关系主要是在于通信接口和协议层面。RS-485是一种硬件标准,定义了电器特性和物理连接的规范,而Modbus是一种应用于这些物理接口上的通信协议。下面详细解释二者的关系:
3.4 Modbus与485
如果看不明白的话,详细去学习下什么是485,明白485的概念后,回过来看着一部分就会豁然开朗。
RS-485
- 物理层标准:RS-485是一个电气标准,用于串行通信。它定义了多点系统中的电气特性,包括电压水平、电气连接和信号传输方式。
- 特点:RS-485支持长距离通信(高达4000英尺),并且可以连接多达32个设备(扩展型甚至更多)在同一网络上。它能够抵抗电气噪声和信号衰减,这使其非常适合于工业环境。
Modbus
- 通信协议:Modbus是一个应用层的协议,用于控制网络上设备之间的信息交换。它定义了数据的封装格式、功能码(指示操作类型)、数据结构等。
- 灵活性:Modbus协议可以应用于多种类型的物理层和链路层标准,包括RS-485、RS-232和以太网。
二者关系
不严谨的说,485规定了,电路之间是如何传输数字1和0的。modbus规定了,一帧的数据里面,每个字节、每一片字节,分别表达了什么含义。
RS-485提供了Modbus协议通信所需的物理接口和电气标准。在很多工业应用中,Modbus协议经常与RS-485接口一起使用,形成了一个完善的通信系统。同时RS-485作为一种强大的串行通信标准,为Modbus协议提供了可靠的物理基础,而Modbus协议则在RS-485提供的物理网络上实现了高效、灵活的数据交换和控制。
⭐四、指令解析
这一部分,我们会依据具体的应用场景:家居控制。来逐个演示基本的功能码指令功能。对于每个功能码,都会提供指令帧格式解析、功能解释、实例展示等。
4.1 功能码划分
功能码分为三大类:
- 基本功能码(如 0x01 到 0x06):
- 涉及基础的读写操作。
- 诊断和文件操作功能码(如 0x07、0x14、0x15):
- 用于更高级的操作,如设备诊断、文件记录的读写等。
- 其他或自定义功能码:
- 可以用于特定设备的自定义操作或特殊需求。