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

什么是 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 以及它如何工作?插图3

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

什么是十六进制?

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

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

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

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

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

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

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

服务器 ID 是什么?

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

什么是功能码?

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

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

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 以获取详细信息。

相关新闻

发表回复

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

邮箱

cloud@modbus.cn

QQ
QQ
微信
微信
SHARE
TOP