What is Modbus and how does it work?

freeFree Technical Resource

This content is free to read, suitable for basic learning and search traffic.

What is Modbus and how does it work?缩略图
What is Modbus and how does it work?插图

What is Modbus?

Modbus RTU and Modbus ASCII use the same protocol. The only difference is that the bytes transmitted over the wire are presented in binary form with the RTU, and when using Modbus RTU, they are presented in readable ASCII form. It should be noted that RTU messages do not have the Start_of_text flag. The receiver in communication uses a 'silent' time to determine the start of a new message. ASCII has text tags. Binary messages are shorter than ASCII messages, so theoretically they have faster transmission/reception speeds. You may be satisfied with the update speed of about 100 milliseconds in HMI/SCADA, and can choose any communication method.

它用于什么?

Modbus 是一种开放协议,这意味着制造商可以在其设备中构建它,而无需支付专利费用。它已成为工业界的标准通信协议,并现在是连接工业电子设备的最常见手段。它被广泛用于许多制造商的各个行业。Modbus 通常用于从仪器和控制设备传输信号到主控制器或数据采集系统,例如用于测量温度和湿度并将结果传输到计算机的系统。Modbus 通常用于将监控计算机与远程终端单元(RTU)连接在一起,这在监控和数据采集(SCADA)系统中使用。Modbus 协议的版本存在于串行线路(Modbus RTU 和 Modbus ASCII)和以太网(Modbus TCP)中。

它如何工作?

Modbus 是在设备之间通过串行线路传输的。最简单的设置是单个串行电缆连接两个设备的串行端口,即客户端和服务器。

What is Modbus and how does it work?插图1

数据被发送为一系列称为位的一和零。每个位都作为电压发送。零以正电压发送,而一以负电压发送。这些位发送得非常快。典型的传输速度为 9600 波特率(每秒位数)。

什么是十六进制?

在解决问题时,查看实际的原始数据被发送是有帮助的。长串的1和0很难阅读,所以位被组合并以十六进制形式显示。每个 4 位块由从 0 到 F 的十六个字符之一表示。

What is Modbus and how does it work?插图2

每个 8 位块(称为字节)由从 00 到 FF 的 256 个字符对之一表示。

数据如何存储在标准 Modbus 中?

信息存储在服务器设备中,有四种不同的表。两个表存储开/关的离散值(线圈),而另外两个表存储数字值(寄存器)。线圈和寄存器都有只读表和读写表。每个表有 9999 个值。每个线圈或接点都是 1 位,并分配了数据地址从 0000 到 270E。每个寄存器都是 1 字 = 16 位 = 2 字节,也有数据地址从 0000 到 270E。

What is Modbus and how does it work?插图3

线圈/寄存器编号可以被看作是位置名称,因为它们不出现在实际的消息中。数据地址用于消息中。例如,第一个保持寄存器,编号为 40001,具有数据地址 0000。这两个值之间的差异是偏移量。每个表都有不同的偏移量,分别为 1、10001、30001 和 40001。

服务器 ID 是什么?

网络中的每个服务器都被分配一个唯一的单元地址,从 1 到 247。当客户端请求数据时,它发送的第一个字节是服务器地址。这样,每个服务器在第一个字节后就知道是否要忽略消息。

什么是功能码?

客户端发送的第二个字节是功能码。这个数字告诉服务器要访问哪个表,以及是从表中读取还是写入。

What is Modbus and how does it work?插图4

CRC 是什么?

CRC 代表循环冗余检查。它是添加到每个 Modbus 消息末尾以用于错误检测的两个字节。消息中的每个字节都用于计算 CRC。接收设备还计算 CRC 并将其与发送设备的 CRC 进行比较。如果消息中的一个位接收错误,CRC 将不同,将导致错误。

Modbus 命令和响应的格式是什么?

数据类型是什么?

FC03 的示例显示,寄存器 40108 包含 AE41,它转换为 16 位 1010 1110 0100 0001。但这是什么意思?嗯,它可以表示几种不同的 16 位数据类型:

  • 16 位无符号整数(介于 0 到 65535 之间的整数)寄存器 40108 包含 AE41 = 44609(十六进制转十进制)
  • 16 位有符号整数(介于 -32768 到 32767 之间的整数)AE41 = -20927(将十六进制转换为十进制后的包装,如果大于 32767,则减去 65536)
  • 两个字符的 ASCII 字符串(2 个字符字母)AE41 = ® A
  • 离散的开/关值(与 16 位整数相同,具有值 0 或 1。十六进制数据将是 0000 或 0001)寄存器 40108 还可以与 40109 结合以形成这些 32 位数据类型中的任何一种:
  • 32 位无符号整数(介于 0 到 4,294,967,295 之间的数字)40108,40109 = AE41 5652 = 2,923,517,522
  • 32 位有符号整数(介于 -2,147,483,648 到 2,147,483,647 之间的数字)AE41 5652 = -1,371,449,774
  • 32 位双精度 IEEE 浮点数。这是一个允许使用约七位小数的 32 位数表示任何实数(带有小数点的数字)的数学公式。AE41 5652 = -4.395978E-11。这是一个用于 4 字节或 2 个字的输入的 IEEE 浮点计算器。要下载副本,请右键单击并选择“另存为…”。
  • 四个字符的 ASCII 字符串(4 个字符字母)AE41 5652 = ® A V R更多寄存器可以组合以形成更长的 ASCII 字符串。每个寄存器用于存储两个 ASCII 字符(两个字节)。

字节和字排序是什么?

Modbus 规范没有精确定义数据存储在寄存器中的方式。因此,一些制造商在其设备中实现了 Modbus 以存储和传输高字节,然后是低字节(AE 在 41 之前)。

另外,其他设备存储并传输低字节(41 在 AE 之前)。同样,当寄存器组合以表示 32 位数据类型时,一些设备将高 16 位(高字)存储在第一个寄存器中,剩下的低字存储在第二个寄存器中(AE41 在 5652 之前),而其他设备则相反(5652 在 AE41 之前)。

字节或字以任何顺序发送无所谓,只要接收设备知道期望的方式是哪一种。例如,如果要将 29,235,175,522 作为 32 位无符号整数发送,它可以以这四种方式之一排列。

AE41 5652 高字节在前 高字在前

5652 AE41 高字节在前 低字在前

41AE 5256 低字节在前 高字在前

5256 41AE 低字节在前 低字在前

什么是 Modbus 映射?

Modbus 映射只是为一个个体服务器设备定义的列表,它定义了数据是什么(例如压力或温度读数),数据存储在哪里(哪个表和数据地址)

数据如何存储(数据类型、字节和字排序)

一些设备内置了制造商定义的固定地图。而其他设备允许操作员配置或编程自定义地图以满足其需求

Modbus ASCII 和 Modbus RTU 之间有什么区别?

Modbus RTU 和 Modbus ASCII 使用相同的协议。唯一的区别是在电线上传输的字节与 RTU 以二进制形式呈现,并且使用 Modbus RTU 时以可读的 ASCII 形式呈现。需要注意的是,RTU 消息没有Start_of_text 标志。通信中的接收方使用“静默”时间来确定新消息的开始。ASCII 具有文本标记。二进制消息比 ASCII 消息要短,因此在理论上传输/接收速度更快。您可能会对 HMI/SCADA 中的更新速度约 100 毫秒感到满意,可以选择任何一种通信方式。

总结:一般情况推荐使用 RTU;如果在 WinNT 上使用 RTU 出现超时问题或者使用较慢的通信媒体,如 300 bps 或拨号调制解调器时,请使用 ASCII。对于 Modbus 的大多数 OPC 服务器支持 ASCII 和 RTU 通信。

什么是扩展寄存器地址?

由于模拟输出保持寄存器的范围为 40001 到 49999,这意味着寄存器不能超过 9999 个。虽然这通常对大多数应用足够,但也有一些情况下需要更多的寄存器。寄存器 40001 到 49999 对应数据地址 0000 到 270E。如果我们使用剩余的数据地址 270F 到 FFFF,将有多达 6 倍多的寄存器可用,总计 65536 个。这将对应于寄存器编号从 40001 到 105536。许多 Modbus 软件驱动程序(用于客户端 PC)是根据 40001 到 49999 的限制编写的,无法访问服务器设备中的扩展寄存器。而且,许多服务器设备不支持使用扩展寄存器的地图。但另一方面,某些服务器设备支持这些寄存器,某些客户端软件可以访问它,尤其是如果编写了自定义软件。

如何使用 2 字节服务器地址?

由于通常使用一个字节来定义服务器地址,并且网络上的每个服务器都需要唯一的地址,所以网络上的服务器数量是有限的,最多为 256。Modbus 规范中定义的限制甚至更低,为 247。要超越这个限制,可以对协议进行修改,以使用两个字节作为地址。客户端和服务器都需要支持此修改。使用两字节地址可以将网络中服务器的数量限制扩展到 65535。默认情况下,Simply Modbus 软件使用 1 字节地址。输入地址大于 255 时,软件会自动切换到 2 字节地址,并保持在此模式下,直到手动关闭 2 字节寻址。

如何发送事件和历史数据?

Enron Modbus 包括用于移动事件和历史数据的命令。

什么是 Enron Modbus?

Enron Modbus 是由 Enron 公司开发的对标准 Modicon Modbus 通信协议的修改。请参阅 Enron Modbus 以获取详细信息。

Put this resource to use in a real project?

Go to the Tool Center for message parsing, CRC verification and device debugging, or submit your requirements for selection and integration advice.

Engineer Membership

Turn this article into actionable debugging resources

After activation, you can use advanced message parsing, resource pack downloads, code examples, engineering cases and priority technical support, suitable for real project delivery.

Unlimited Advanced Tools
Resource & Code Packs
Complete Engineering Case Library
Priority Technical Support

Leave a Reply

Your email address will not be published. Required fields are marked *.