什么是通讯协议?

在了解什么是Modbus之前,让我们先来看看什么是通信协议。

通讯协议(Communication Protocol)是一种规则或约定,用于在计算机系统、网络设备或不同系统之间进行数据交换和通信。这些协议定义了通信的标准和规范,确保发送者和接收者之间能够正确理解和解释传输的数据。

通讯协议包括物理层协议、数据链路层协议、网络层协议、传输层协议、应用层协议等多个层次,每个层次负责不同的任务。以下是通讯协议的一些关键方面:

  1. 数据格式: 通讯协议规定了数据的格式,包括数据的编码方式、字节顺序、数据帧的结构等。这确保了数据在传输过程中可以被正确地解析和重建。
  2. 通信方式: 协议定义了通信的方式,包括单工通信(单方向传输)、半双工通信(双方交替传输)和全双工通信(同时双向传输)等。
  3. 错误检测和纠错: 通讯协议通常包括一些机制,用于检测和纠正在传输过程中可能发生的错误,以确保数据的完整性和准确性。
  4. 流量控制: 通讯协议可以定义如何控制数据的流量,以避免数据过载或拥塞,从而提高通信的效率。
  5. 地址和标识: 协议可以包括设备或节点的地址和标识,以确保数据被正确地发送到目标设备。
  6. 会话管理: 在某些协议中,会话管理用于建立、维护和终止通信会话,确保通信的有序性和可控性。

我们常见的通信协议包括I2C、SPI、UART等,而Modbus则是一种串行通信协议。

什么是RS-485和RS-232?

在讨论Modbus时,经常会遇到RS-485和RS-232,那么它们究竟是什么呢?

RS-485(Recommended Standard 485)和 RS-232(Recommended Standard 232)是两种常用的串行通信标准,用于在计算机和外部设备之间传输数据。它们在物理层和电气特性上有一些重要的区别:

RS-232:

  1. 单端口通信: RS-232 是一种单端口通信标准,即数据信号只通过一个传输线进行传输,其中包括一个发送线(TX)和一个接收线(RX)。
  2. 电压电平: RS-232 使用电压电平来表示数据位。典型的RS-232电平为正负12V,其中正电压表示逻辑0,负电压表示逻辑1。
  3. 通信距离: RS-232通信通常适用于较短的距离,通信距离通常不超过50英尺(约15米),并且通信速率受到距离的限制。
  4. 点对点通信: RS-232通信是点对点的,每个连接只支持两台设备之间的通信,一个发送方和一个接收方。
  5. 用途: RS-232常用于连接计算机和外部设备,如串行打印机、调制解调器、串行鼠标等。它也可以用于短距离的点对点通信。

RS-485:

  1. 差分信号: RS-485 使用差分信号传输数据,它包括两个传输线,一个为正(A或非反相线),一个为负(B或反相线)。这种差分信号可以提高抗干扰性能。
  2. 电压电平: RS-485通常使用低电平差分信号,其中正线的电压大致等于负线的电压,这有助于减少传输线上的干扰。
  3. 通信距离: RS-485通信适用于较长距离,通常可覆盖几千英尺(数百米)的距离,这取决于通信速率和线缆质量。
  4. 多点通信: RS-485支持多点通信,多个设备可以连接到同一传输线上,并且可以同时进行通信。这使得RS-485非常适合用于工业控制和仪表等应用,其中需要多个设备之间的数据交换。
  5. 用途: RS-485通常用于工业自动化、远程监控、建筑自动化以及其他需要长距离和多设备通信的应用。它在这些领域中被广泛使用,因为它的差分信号设计使其更耐干扰,适应更长的通信距离,并支持多点通信。

Modbus协议的工作原理与应用场景插图

如果您想进一步了解,请继续阅读:

USB转串口 TTL RS-232 RS-485 COM口 UART区别

USB转串口(USB to Serial)是一种将USB接口连接到串行通信接口的设备,通常用于将计算机连接到需要串行通信的外部设备。这些串口可以是TTL串口、RS-232串口或RS-485串口,具体区别如下:

  1. TTL串口: TTL(Transistor-Transistor Logic)串口使用低电平(通常是0V表示逻辑0,3.3V或5V表示逻辑1)进行通信。它通常用于嵌入式系统和微控制器之间的通信。USB转TTL串口适用于连接计算机与TTL串口设备,例如Arduino等。
  2. RS-232串口: RS-232是一种常见的串行通信标准,通常使用正负12V的电压电平表示逻辑0和逻辑1。USB转RS-232串口适用于连接计算机与老式串行设备,如串行打印机、调制解调器等。
  3. RS-485串口: RS-485是一种差分信号串口标准,使用两个传输线(A和B)传输数据,其中一个线路是正相位,另一个线路是反相位。它具有抗干扰性和支持多点通信的能力,通常用于工业控制和长距离通信。USB转RS-485串口适用于连接计算机与RS-485串口设备,如工业自动化设备。
  4. COM口(串口): COM口是计算机上用于串行通信的物理接口,通常使用RS-232或RS-485标准。COM口通常用于连接外部设备,如串行打印机、GPS接收器、数据采集器等。USB转COM口适用于计算机没有内置串行接口的情况,允许用户通过USB接口模拟COM口。
  5. UART(通用异步收发传输器): UART是一种通信芯片或模块,用于将并行数据转换为串行数据以进行串行通信。UART可以与TTL、RS-232或RS-485等不同类型的串口配合使用。USB转UART通常是一个通用的串口适配器,可以用于连接不同类型的串口设备。

Modbus协议的工作原理与应用场景插图1

Modbus协议说明

Modbus诞生于1979年,最初由莫迪康公司(Modicon)开发,后来被施耐德电气公司收购。Modbus为设备和设备之间的通信提供了通用语言。它已成为工业领域通信协议的行业标准,并且是工业电子设备之间常用的连接方式之一。Modbus作为目前工业领域应用最广泛的协议之一,有着以下优点:

– Modbus协议是开放、公开发表且无版权要求的,可以广泛应用。

– Modbus协议支持多种电气接口,包括RS232、RS485、TCP/IP等,还可以在各种介质上传输,如双绞线、光纤、红外线、无线等。

– Modbus协议的消息帧格式简单、紧凑且易于理解。用户容易理解和使用,制造商容易开发和集成,方便形成工业控制网络。

Modbus协议的应用

最简单地说,Modbus是一种总线通信协议,类似于I2C和SPI,但不依赖于特定的硬件总线。Modbus之所以广泛使用,是因为它具有许多优点。

Modbus通信过程

需要注意的是,Modbus是一种一主多从的通信协议。在Modbus通信中,只有一个设备可以发送请求,其他从设备接收主机发送的请求数据并进行响应。从设备可以是各种外围设备,如I/O传感器、阀门、网络驱动器或其他类型的

测量设备。从站处理信息并使用Modbus将其数据发送给主站。换句话说,不能在同一时间内进行Modbus同步通信。主机一次只能向一个从机发送请求,总线上每次只有一个数据进行传输,即主机发送请求,从机响应。如果主机没有发送请求,总线上就没有数据通信。

需要特别注意的是,Modbus通信没有忙机制判断。例如,如果主机发送命令给从机,但从机没有收到或正在处理其他任务,那么从机将无法及时响应,因为Modbus总线只负责传输数据,没有其他仲裁机制。因此,必须通过软件的方式来判断是否成功接收到数据。

Modbus存储区

既然从机存储数据,必须有一种方式来进行文件操作。我们都知道,文件可以分为只读(Read-Only,-R)和读写(Read-Write,-RW)两种类型,而Modbus也有相应的存储区。

在Modbus协议中,存储的数据类型可以分为两种主要类型:布尔量和16位寄存器。

– 布尔量:这些数据可以表示诸如IO口电平高低、灯的开关状态等。

– 16位寄存器:这些数据通常用于表示传感器的温度数据、存储密码等信息。

Modbus协议将存储区分为4个区域,分别是0、1、3和4区。其中,1区和4区是可读可写的,而0区和3区是只读的。

此外,Modbus还为每个存储区分配了地址范围。主机在向从机请求数据时,只需告诉从机数据的起始地址和要获取的字节数,从机就可以发送数据给主机。

Modbus协议类型

在Modbus协议中,数据传输可以采用不同的介质和模式,主要有三种报文类型,包括ASCII、RTU(远程终端控制系统)和TCP。

对于串行端口,Modbus协议有多个版本,但最常见的包括以下四种:

– **Modbus-RTU**:采用紧凑的16进制表示数据的方式。Modbus-RTU在数据帧中附加了循环冗余校验(CRC),用于检测数据是否正确。一个典型的Modbus-RTU报文包含从机地址、功能码、数据和CRC校验。

– **Modbus-ASCII**:采用ASCII码表示数据,每个8位字节都被转换为两个ASCII字符发送。Modbus-ASCII也包含循环冗余校验,但使用了不同的校验方法。

– **Modbus-TCP**:Modbus-TCP不需要从机地址,而是需要MBAP(Modbus Application Protocol over TCP)报文头。由于TCP本身具有校验和差错检测能力,因此Modbus-TCP不需要额外的差错校验。

– **Modbus Plus**:这是另一种Modbus协议版本,用于特定的工业应用。

在这些版本中,Modbus-RTU最为常见,而Modbus-ASCII较少使用。下面我们将详细讨论Modbus-RTU协议。

Modbus-RTU协议

Modbus报文帧结构

Modbus报文是指主机发送给从机的一帧数据,其中包含了从机的地址、主机要执行的操作、数据以及校验码等信息。在串行链路上,Modbus报文的格式如下:

– **从机地址**:每个从机都有唯一的地址,占用一个字节,有效范围通常是1-247,其中255是广播地址,表示向所有从机发送请求。

– **功能码**:占用一个字节,它表示主机发送的请求是何种操作,不同的功能码对应不同的操作。

– **数据**:根据功能码的不同,包含不同的信息。例如,如果功能码是查询从机的数据,数据部分包括起始寄存器地址和要读取的寄存器数量。

– **校验码**:在数据传输过程中

,数据可能会受到干扰或损坏,CRC检验用于检测接收到的数据是否正确。

Modbus功能码

Modbus协议规定了多个功能码,每个功能码对应一种操作。虽然Modbus定义了多达20多种功能码,但实际应用中常用的只有其中的8种,用于对存储区的读写。以下是常用的Modbus功能码:

– **03**:读取多个寄存器的值。
– **06**:设置单个寄存器的值。
– **16**:设置多个寄存器的值。
– **01**:读取多个开关量输入。
– **02**:读取多个开关量输出。
– **05**:设置单个开关量输出。
– **15**:设置多个开关量输出。
– **23**:读取多个寄存器的值(扩展功能码)。

需要注意的是,不同的功能码对应不同的操作,因此主机在发送请求时需要指定功能码,以告知从机要执行的操作。

CRC校验

CRC(循环冗余校验)用于检测数据传输过程中的错误。在Modbus协议中,CRC校验占用两个字节,包含一个16位的二进制值。CRC值由发送设备计算并附加到数据帧上,在接收设备接收数据时重新计算CRC值,并与接收到的CRC校验值进行比较。如果这两个值不相等,就表示数据传输存在错误。

CRC校验的计算流程如下:

1. 预置一个16位寄存器为0xFFFF(全1),称之为CRC寄存器。
2. 把数据帧中的第一个字节的8位与CRC寄存器中的低字节进行异或运算,结果存回CRC寄存器。
3. 将CRC寄存器向右移动一位,最高位填充0,最低位被移出并进行检测。
4. 如果最低位为0,则重复第3步(继续下一次移位);如果最低位为1,则将CRC寄存器与预设的固定值(0xA001)进行异或运算。
5. 重复第3步和第4步,直到进行8次移位,处理完一个完整的8位。
6. 重复第2步到第5步来处理下一个8位,直到所有字节处理完成。
7. 最终CRC寄存器中的值就是CRC校验值。

此外,还有一种使用预先计算的表格来计算CRC的方法,它具有更快的计算速度,但需要较大的存储空间。这种方法在此不做详细说明。

发送和接收数据示例

下面我们将详细介绍Modbus-RTU协议的发送和接收数据示例。

1. 主机对从机读数据操作

主机发送报文格式如下:

01 03 00 01 00 01 D5 CA

解释:

– `0x01`:从机的地址。
– `0x03`:查询功能,读取从机寄存器的数据。
– `0x00 0x01`:表示读取的起始寄存器地址,从0x0001开始读取。
– `0x00 0x01`:表示查询的寄存器数量为1个。Modbus将数据存储在寄存器中,通过查询寄存器来获取不同变量的值。一个寄存器地址对应2字节数据,寄存器地址对应从机的实际存储地址。
– `0xD5 0xCA`:循环冗余校验 (CRC)。

从机回复报文格式如下:

01 03 02 00 17 F8 4A

解释:

– `0x01`:从机的地址。
– `0x03`:查询功能,读取从机寄存器的数据。
– `0x02`:返回字节数为2个,一个寄存器对应2个字节。
– `0x00 0x17`:寄存器的值是0x0017。
– `0xF8 0x4A`:循环冗余校验 (CRC)。

2. 主机对从机写数据操作

主机发送报文格式如下:

01 06 00 01 00 17 98 04

解释:

– `0x01`:从机的地址。
– `0x06`:修改功能,修改从机寄存器的数据。
– `0x00 0x01`:表示修改的起始寄存器地址,说明要修改0x0001-0x0003的存储内容。
– `0x00 0x17`:要修改的数据值为0x0017。
– `0x98 0x04`:循环冗余校验 (CRC)。

从机回复报文格式如下:

01 06 00 01 00 17 98 04

解释:

从机的回复与主机的发送相同。如果不同,说明发生了错误。

这是一个Modbus-RTU协议的简单示例,演示了主机如何向从机发送读取和写入数据的请求,并从从机接收响应。每个Modbus报文都包含从机地址、功能码、数据以及CRC校验,以确保可靠的数据传输。

Modbus-ASCII协议

Modbus-ASCII协议与Modbus-RTU协议相似,但在消息中的每个字节都作为两个ASCII字符发送。十六进制的0到F分别对应ASCII字符的0到9和A到F。

以下是Modbus-ASCII协议的特点:

– 每个字节都以ASCII字符表示,例如0x30~0x3A表示0到9,0x41~0

x46表示A到F。
– 字节之间使用空格分隔。
– 每个消息以回车符(CR,0x0D)和换行符(LF,0x0A)结束。

Modbus-ASCII的CRC校验与Modbus-RTU相同,但在ASCII格式下表示为ASCII字符。

Modbus-TCP协议

Modbus-TCP协议是基于TCP/IP协议的Modbus协议变种,用于在TCP/IP网络上进行通信。与Modbus-RTU和Modbus-ASCII协议不同,Modbus-TCP协议不使用物理串行链路,而是使用以太网或Wi-Fi等TCP/IP网络。

以下是Modbus-TCP协议的特点:

– Modbus-TCP使用标准的TCP/IP套接字连接,无需物理串行通信线路。
– Modbus-TCP消息与Modbus-RTU协议消息的结构相似,但不包括CRC校验。
– 在Modbus-TCP中,数据以二进制格式传输,而不是ASCII字符。
– Modbus-TCP消息通过TCP连接的套接字发送和接收。
– Modbus-TCP使用TCP端口502。

因此,与Modbus-RTU和Modbus-ASCII协议相比,Modbus-TCP协议更适合基于以太网的通信,通常用于现代工业自动化系统和设备。

总结

Modbus是一种用于工业领域通信的通用协议,具有多个版本,包括Modbus-RTU、Modbus-ASCII和Modbus-TCP。不同版本适用于不同的通信介质和场景。 Modbus-RTU通常用于串行通信,而Modbus-TCP用于以太网通信。 Modbus协议包括功能码、CRC校验等元素,用于发送和接收数据。使用Modbus协议,主机可以与从机进行通信,读取和写入数据,以实现自动化和控制系统。

相关新闻

  • MODBUS设备智能音箱对接网关使用说明

    MODBUS设备智能音箱对接网关使用说明

    可以把MODBUS RTU、自定义RS-485协议设备接入智能音箱语音声控,目前支持小爱同学、天猫精灵、小度音箱、若琪等(推荐使用小度音响,设备名称灵活性比较高) 如何使用? 1、将语音网关接入路由器,然后通电。2、语音网关会连接google服务器校对时间,大概2,3分钟后,你会听到欢迎使用智能联动语音播报中心,并播报本机IP地址。 3.登陆语音网关网页后台,http://xxx.xxx.xxx.xxx:6521,默认密码admin,admin (注意:xxx.xxx.xxx.xxx需要替换为播…

    Modbus技术文档 2024年4月7日
  • 工业自动化控制领域常见概念的详细解释

    工业自动化控制领域常见概念的详细解释

    摘要 工业自动化控制领域涉及大量的测量、控制和处理工作,其中开关量、数字量、模拟量、离散量、脉冲量等概念是基础知识。本文将对这些概念进行详细解释,并探讨它们之间的区别和联系,以帮助读者更好地理解工业自动化控制系统的运作原理。 1. 概念定义 1.1 开关量 开关量描述的是触点的“开”与“关”状态,常见于计算机设备中,用“0”或“1”来表示这两种状态。开关量又进一步细分为有源开关量信号和无源开关量信号。 1.2 数字量 数字量是在时间和数量上均呈现离散特性的物理量,其表达形式为数字信号。数字量是由…

    Modbus技术文档 2024年3月1日
  • RS-485总线优化指南:解决不同设备通讯中的电平不稳定问题

    RS-485总线优化指南:解决不同设备通讯中的电平不稳定问题

    RS-485总线应用中,时常会遇到不同的RS-485设备之间通讯,不同的设备间兼容性存在不同,有的设备很稳定,有的设备却时常收到异常数据,这是什么原因导致的呢?又应如何避免呢? RS-485应用异常 某储能客户在使用ZLG的全隔离RS-485收发芯片SM4500过程中,时常会出现数据不稳定情况,如下图 1,客户设备与不同的RS-485设备通讯时,有的设备通讯稳定,有的设备则时不时会收到异常电平。 图1 SM4500应用简图经过测试发现客户板卡RS-485通道在空闲时,总线电平处于0电位。如图 1…

    Modbus技术文档 2024年2月20日
  • Modbus Poll 异常功能解释与详细说明

    Modbus Poll 异常功能解释与详细说明

    Modbus Poll是一种广泛用于Modbus通信协议的测试工具,它允许用户模拟主设备(通常是客户端)与从设备(通常是服务器)之间的通信,以验证通信的正常性。在Modbus Poll的使用中,用户可能会遇到各种异常功能,这些异常功能对于故障诊断和问题解决至关重要。本文将深入探讨Modbus Poll中的异常功能,为用户提供详细的解释和说明。 Modbus Poll 异常功能的概述 Modbus Poll异常功能是指在使用该工具时可能出现的不正常行为或错误情况。这些异常功能是用户了解问题并采取适…

    Modbus技术文档 2023年11月3日
  • Modbus异常相应代码说明

    Modbus异常相应代码说明

    Modbus通信协议是工业自动化中常用的协议,它允许主设备(通常是客户端)与从设备(通常是服务器)之间进行数据交换。在Modbus通信中,服务器(从设备)必须生成适当的响应来处理请求,并在必要时发送异常响应。本文将深入探讨Modbus响应的生成和异常处理。 Modbus响应类型 Modbus通信中,根据请求的处理结果,可以生成两种类型的响应: Modbus异常响应的目的 Modbus异常响应的主要目的是向客户端提供与请求处理过程中检测到的错误相关的信息。它帮助客户端了解通信问题的具体原因,从而采…

    Modbus技术文档 2023年11月3日
  • 在Modbus通讯中发送时间戳的参考方法

    在Modbus通讯中发送时间戳的参考方法

    在Modbus协议中嵌入时间戳需要一些谨慎考虑,因为Modbus本身没有定义专门的时间戳对象。以下是如何在Modbus(RS485)通信中发送时间戳的一些建议方法和步骤: 如何在Modbus (RS485)通信中发送时间戳 在工业自动化和远程监测应用中,时间戳对于确切的数据关联至关重要。尤其是在Modbus通信中,没有内置的时间戳机制,因此需要特别关注如何嵌入时间戳。以下是实现这一目标的方法和步骤: 步骤1:选择时间戳格式 首先,您需要选择适当的时间戳格式。常见的时间戳格式之一是使用POSIX(…

    Modbus技术文档 2023年10月31日

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

邮箱

cloud@modbus.cn

QQ
QQ
微信
微信
分享本页
返回顶部