
什么是 Modbus?
Modbus 是一种串行통신 프로토콜,由 Modicon 公司于 1979 年发布,用于与其可编程逻辑제어기(PLC)一起使用。简而言之,它是用于在电子设备之间的串行线路上传输信息的方法。请求信息的设备被称为 Modbus 클라이언트,提供信息的设备是 Modbus 服务器。在표준 Modbus 네트워크中,有一个클라이언트和多达 247 个服务器,每个服务器都有从 1 到 247 的唯一服务器주소。클라이언트还可以向服务器쓰기信息。
它用于什么?
Modbus 是一种开放프로토콜,这意味着制造商可以在其设备中构建它,而无需支付专利费用。它已成为工业界的표준통신 프로토콜,并现在是연결工业电子设备的最常见手段。它被广泛用于许多制造商的各个行业。Modbus 通常用于从仪器和控制设备传输信号到主제어기或데이터采集系统,例如用于测量온도和湿度并将结果传输到계산机的系统。Modbus 通常用于将监控계산机与远程终端单元(RTU)연결在一起,这在监控和데이터采集(SCADA)系统中使用。Modbus 프로토콜的버전存在于串行线路(Modbus RTU 和 Modbus ASCII)和以太网(Modbus TCP)中。
它如何工作?
Modbus 是在设备之间通过串行线路传输的。最简单的设置是单个串行电缆연결两个设备的串行포트,即클라이언트和服务器。

데이터被보내기为一시리즈称为位的一和零。每个位都作为电压보내기。零以正电压보내기,而一以负电压보내기。这些位보내기得非常快。典型的传输速度为 9600 통신 속도(每秒位数)。
什么是16진수?
在解决문제时,보기实际的原始데이터被보내기是有帮助的。长串的1和0很难阅读,所以位被组合并以16진수形式显示。每个 4 位块由从 0 到 F 的十六个문자之一表示。

每个 8 位块(称为바이트)由从 00 到 FF 的 256 个문자对之一表示。
데이터如何存储在표준 Modbus 中?
信息存储在服务器设备中,有四种不同的表。两个表存储开/关的离散值(코일),而另外两个表存储数字值(레지스터)。코일和레지스터都有只读表和读写表。每个表有 9999 个值。每个코일或接点都是 1 位,并分配了데이터주소从 0000 到 270E。每个레지스터都是 1 字 = 16 位 = 2 바이트,也有데이터주소从 0000 到 270E。

코일/레지스터번호可以被看作是位置名称,因为它们不出现在实际的消息中。데이터주소用于消息中。例如,第一个유지 레지스터,번호为 40001,具有데이터주소 0000。这两个值之间的差异是偏移量。每个表都有不同的偏移量,分别为 1、10001、30001 和 40001。
服务器 ID 是什么?
네트워크中的每个服务器都被分配一个唯一的单元주소,从 1 到 247。当클라이언트请求데이터时,它보내기的第一个바이트是服务器주소。这样,每个服务器在第一个바이트后就知道是否要忽略消息。
什么是기능 코드?
클라이언트보내기的第二个바이트是기능 코드。这个数字告诉服务器要访问哪个表,以及是从表中읽기还是쓰기。

CRC 是什么?
CRC 代表循环冗余检查。它是추가到每个 Modbus 消息末尾以用于错误检测的两个바이트。消息中的每个바이트都用于계산 CRC。수신设备还계산 CRC 并将其与보내기设备的 CRC 进行比较。如果消息中的一个位수신错误,CRC 将不同,将导致错误。
Modbus 命令和响应的형식是什么?
데이터유형是什么?
FC03 的예제显示,레지스터 40108 包含 AE41,它转换为 16 位 1010 1110 0100 0001。但这是什么意思?嗯,它可以表示几种不同的 16 位데이터유형:
- 16 位无符号整数(介于 0 到 65535 之间的整数)레지스터 40108 包含 AE41 = 44609(16진수转10진수)
- 16 位有符号整数(介于 -32768 到 32767 之间的整数)AE41 = -20927(将16진수转换为10진수后的包装,如果大于 32767,则减去 65536)
- 两个문자的 ASCII 문자串(2 个문자字母)AE41 = ® A
- 离散的开/关值(与 16 位整数相同,具有值 0 或 1。16진수데이터将是 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 以2진수形式呈现,并且使用 Modbus RTU 时以可读的 ASCII 形式呈现。需要注意的是,RTU 消息没有Start_of_text 标志。통신中的수신方使用“静默”时间来确定新消息的开始。ASCII 具有文本기호。2진수消息比 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 以获取详细信息。
답글 작성