Modbus家族之开篇
Posted 夏沫の浅雨
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Modbus家族之开篇相关的知识,希望对你有一定的参考价值。
写在前面:
本文章旨在总结备份、方便以后查询,由于是个人总结,如有不对,欢迎指正;另外,内容大部分来自网络、书籍、和各类手册,如若侵权请告知,马上删帖致歉。
目录
历史溯源
Modbus是由 Modicon公司(现在的施耐德电气 Schneider Electric)在 1979年开发的一种消息传递结构,为使用可编程逻辑控制器(PLC)通信而发表,用于在智能设备之间建立客户端 - 服务器通信;这是一个划时代、里程碑式的网络协议,因此为工业网络拉开了序幕。Modbus已经成为工业领域通信协议事实上的业界标准,并且现在是工业电子设备之间常用的连接方式。
Modbus在工业环境下很流行,因为它是公开发表并且无著作权要求的。它是为工业应用开发的,与其他标准相比,它相对易于部署和维护,除了要传输的数据格式的大小外,几乎没有其他限制。Modbus通常使用 RS485作为其物理层。
发展史
Modicon,即今天的施耐德电气,于 1979 年向市场推出了 Modbus原始协议(Modbus ASCII和 Modbus RTU);随着通信领域的迅速发展以及传输速度的提高,扩展版本 Modbus Plus(Modbus+或者MB+)紧接着出现,不过此协议是 Modicon专有的,和 Modbus并不相同;直到以太网技术的标准化和商品化,以太网成为了企业系统的业界标准,同时也成为了工业网络的业界标准;为了将 Modbus带入 21 世纪,一个开放的 Modbus TCP/IP规范于 1999 年修订发行;到了 2004 年 4 月,Modbus 协议从施耐德电气转移到 Modbus组织,这标志着对开放的承诺(该规范可免费下载,并且使用 Modbus 或 Modbus TCP/IP 协议无需后续许可费用);至此,在 Modbus TCP/IP 因为它的开放性、简单、低成本的开发以及支持它所需的最少硬件等特点,存在多个 Modbus TCP变种,而 Modbus ASCII和 Modbus RTU在小型的嵌入式设备当中得到广泛应用。
协议版本
Modbus协议目前存在用于串口、以太网以及其他支持互联网协议的网络的版本。
Modbus是一种请求 / 回复协议,提供由功能代码指定的服务。Modbus功能代码是 Modbus Request(请求) / Response(响应) PDU 的元素。
串行端口和以太网存在多种版本的 Modbus协议,最常见的是:
- Modbus RTU
- Modbus ASCII
- Modbus TCP
- Modbus Plus
Modbus RTU
Modbus RTU
是一种紧凑的,采用二进制表示数据的方式;因为使用二进制编码和 CRC错误检查的结合使得 Modbus RTU适用于工业应用,因为它比 ASCII字符的替代方案更有效地传输。在 Modbus RTU与 ASCII之间进行选择时,如果考虑性能,则 RTU是首选。
Modbus ASCII
Modbus ASCII
是当设备设置为使用 ASCII
(美国信息交换标准代码)模式时,在 MODBUS
串行线上把通信消息中的每个 8位字节将作为两个 ASCII 4位字符发送。当物理通信链路或设备的功能不允许符合 RTU计时器管理要求时,使用此模式。所以此模式的效率不如 RTU,因为每个字节需要两个字符。示例:字节0x7D编码为两个字符: 0x35
和 0x42
(在 ASCII
表中为 0x37
= '7'
,而 0x44
= 'D'
)。
Modbus TCP
Modbus TCP
是在 TCP/IP
网络上运行的 Modbus的实现,旨在允许 Modbus ASCII / RTU协议在基于 TCP / IP的网络上传输。Modbus / TCP将 Modbus消息嵌入 TCP / IP帧内。尽管实现起来非常简单,但是与网络相关的特性增加了一些挑战。例如,由于Modbus主机期望并要求在一定时间范围内对其轮询做出响应,因此必须考虑 TCP / IP网络的不确定性(和其他方面)。Modbus ASCII和 Modbus TCP之间的主要区别在于,Modbus ASCII所需的 LRC错误检查由 IP层执行。
对于以上
TCP
/RTU
/ASCII
的这三种通信协议在数据模型和功能调用上都是相同的,只有封装方式是不同的。
Modbus Plus
Modbus Plus
(Modbus+或者MB+)属于 Modbus的一个扩展版本,不过此协议是Modicon专有的,和 Modbus不同。它需要一个专门的协处理器来处理类似 HDLC的高速令牌旋转。它使用 1Mbit/s的双绞线,并且每个节点都有转换隔离设备,是一种采用转换/边缘触发而不是电压/水平触发的设备。连接 Modbus Plus到计算机需要特别的接口,通常是支持 ISA(SA85),PCI或者 PCMCIA总线的板卡。
通信和设备
Modbus有下列三种通信方式:
(1)以太网:对应的通信模式是 Modbus TCP/IP
(2)异步串行传输(各种介质如有线 RS-232/422/485/、光纤、无线等):对应的通信模式是 Modbus RTU或 Modbus ASCII
(3)高速令牌传递网络:对应的通信模式是 Modbus PLUS
Modbus通过多种类型的物理介质进行通信,例如:
- 串行RS-232
- 串行RS-485
- 串行RS-422
- 以太网
Modbus RTU和 Modbus ASCII协议应用于串口链接(RS232、RS485、RS422),Modbus TCP/IP协议应用于以太网链接。
消息结构
Modbus的主要消息结构是点对点,能够在点对点和多点网络上运行。
Modbus协议遵循 主 / 从(客户端 / 服务器) 架构,主(客户端)向从(服务器)发送请求并等待响应。注意!目前 Modbus中使用的术语 “主” 和 “从” 已被术语 “客户端” 和 “服务器” 所取代了。
常见 Modbus开源库
FreeModbus
FreeMODBUS 是流行的 Modbus 协议的免费实现,专门针对嵌入式系统。FreeMODBUS 提供了 Modbus 应用协议 v1.1a 的实现,并支持 Modbus over serial line 规范 1.0 中定义的 RTU/ASCII 传输模式 ;自 0.7 版以来,FreeModbus 还支持 Modbus/TCP;0.9 版添加了第一个 Modbus/TCP 端口嵌入式使用 LWIP TCP/IP 堆栈的系统。唯一可惜的是,该 FreeMODBUS 只对从机开放了源码,主机部分并未实现开源。
以下是该 FreeMODBUS 的下载链接:
https://www.embedded-experts.at/en/freemodbus-downloads/
libmodbus
libmodbus是一个多平台的 Modbus 源库,适用于 Linux、Mac OS X、FreeBSD、QNX 和 Win32 等操作系统;可以根据 Modbus协议发送和接收数据。支持 RTU(串行)和 TCP(以太网)通信。
以下是该 libmodbus 的下载链接:
https://libmodbus.org/download/
参考
Modbus - wiki
《MODBUS APPLICATION PROTOCOL SPECIFICATION V1.1b》
《Modbus Protocol Reference Guide》
以上是关于Modbus家族之开篇的主要内容,如果未能解决你的问题,请参考以下文章