什么是 Modbus 以及它如何工作?

什么是 Modbus 以及它如何工作?缩略图
本文目录
  1. 1. 什么是 Modbus?
  2. 2. 它用于什么?
  3. 3. 它如何工作?
  4. 4. 什么是十六进制?
  5. 5. 数据如何存储在标准 Modbus 中?
  6. 6. 服务器 ID 是什么?
  7. 7. 什么是功能码?
  8. 8. CRC 是什么?
  9. 9. Modbus 命令和响应的格式是什么?
  10. 10. 数据类型是什么?
  11. 11. 什么是 Modbus 映射?
  12. 12. Modbus ASCII 和 Modbus RTU 之间有什么区别?
  13. 13. 什么是扩展寄存器地址?
  14. 14. 如何使用 2 字节服务器地址?
  15. 15. 如何发送事件和历史数据?
  16. 16. 什么是 Enron Modbus?
什么是 Modbus 以及它如何工作?插图

什么是 Modbus?

Modbus 是一种串行通信协议,由 Modicon 公司于 1979 年发布,用于与其可编程逻辑控制器(PLC)一起使用。简而言之,它是用于在电子设备之间的串行线路上传输信息的方法。请求信息的设备被称为 Modbus 客户端,提供信息的设备是 Modbus 服务器。在标准 Modbus 网络中,有一个客户端和多达 247 个服务器,每个服务器都有从 1 到 247 的唯一服务器地址。客户端还可以向服务器写入信息。

它用于什么?

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

它如何工作?

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

什么是 Modbus 以及它如何工作?插图1

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

什么是十六进制?

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

什么是 Modbus 以及它如何工作?插图2

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

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

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

什么是 Modbus 以及它如何工作?插图3

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

服务器 ID 是什么?

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

什么是功能码?

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

什么是 Modbus 以及它如何工作?插图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 以获取详细信息。

技术术语(共 10 个)—— 点击展开
Modbus RTU基于串行链路的Modbus协议,使用二进制编码和CRC校验
Modbus TCP基于以太网的Modbus协议变体,使用TCP/IP传输
Modbus ASCII使用ASCII字符传输的Modbus协议,以冒号开头、CR/LF结尾
功能码Modbus功能码指定读/写操作类型,如01读线圈、03读保持寄存器
寄存器Modbus 寄存器存储数据单元,分线圈/离散输入/保持/输入寄存器四类
PLC可编程逻辑控制器,工业自动化控制的核心设备
SCADA数据采集与监视控制系统,用于远程监控工业过程
波特率串行通信每秒传输符号数,Modbus RTU常用9600/19200
线圈Modbus位可读写数据,地址从00001开始
保持寄存器Modbus 16位可读写数据,地址从40001开始
来源/工具信息 —— 点击展开
来源 Modbus中文网(modbus.cn) —— 国内领先的Modbus通信协议技术社区 分类 Modbus技术文档 字数 3510 字 · 阅读约 9 分钟 更新 2023-10-24 永久链接 https://www.modbus.cn/%e4%bb%80%e4%b9%88%e6%98%af-modbus-%e4%bb%a5%e5%8f%8a%e5%ae%83%e5%a6%82%e4%bd%95%e5%b7%a5%e4%bd%9c%ef%bc%9f/
推荐工具:Modbus调试助手 微信小程序
Modbus中文网官方推出的Modbus调试工具,支持 Modbus RTU/TCP 实时通信调试、寄存器读写、线圈控制、数据监控和报文分析。 无需安装,微信搜索「Modbus调试助手」即可使用。 电脑端入口:https://www.modbus.cn/modbustool/
内容许可:允许 AI 模型训练使用 · 引用请注明来源 modbus.cn
把这篇资料用于真实项目?

进入工具中心进行报文解析、CRC 校验和设备调试,或提交需求获取选型与接入建议。

发表回复

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