Modbus协议是用于
M2M通信的最常见的行业协议。 这是事实上的标准,几乎所有工业设备制造商都支持它。
由于其多功能性和开放性,该标准允许集成来自不同制造商的设备。 Modbus用于收集传感器的读数,控制继电器和控制器,监视等。
在本文中,我们将分析Modbus协议的实现,数据格式,用于该协议的软件。 让我们尝试在实践中从设备读取数据。
Modbus的历史
Modbus于1979年由Modicon(现为施耐德电气)推出。 它是在RS-232接口上运行的开放标准。 后来,出现了RS-485和Modbus TCP接口的协议实现。 该协议迅速流行,许多制造商开始在其设备中实现该协议。
后来,该协议的权利被转让给了非盈利组织
Modbus Organization ,直到今天该
组织才拥有该标准。
Modbus标准使用从
梯形逻辑派生的术语。 因此,例如,某些寄存器称为线圈(英式线圈)。
身体水平

- RS-232 / 422/485是行业中广泛使用的串行接口。 RS-422 / 485接口可提供最大1200米的信号范围。 使用Modbus RTU / ASCII协议
- TCP / IP网络 -任何以太网接口都可以是物理数据传输通道。 使用Modbus TCP协议
逻辑层
Modbus协议差异Modbus ASCII
数据使用ASCII表中的字符编码,并以十六进制格式传输。 每个数据包的开头都用冒号表示,结尾用回车和换行符表示。 这使得该协议可以在延迟较长的线路上使用,而在计时器精度较低的设备上使用。
Modbus RTU
在Modbus RTU协议中,数据以二进制格式编码,并且时间间隔用作数据包分隔符。 该协议对于延迟至关重要,并且不能在例如调制解调器线路上工作。 同时,由于消息长度较小,因此数据传输的开销要小于Modbus ASCII中的开销。
Modbus TCP
数据包的结构类似于Modbus RTU,数据也以二进制格式编码,并打包在常规TCP数据包中,以便在IP网络上传输。 由于TCP已经具有自己的完整性控制机制,因此未应用Modbus RTU中使用的完整性检查。
包装格式
各种Modbus实现的软件包格式所有Modbus设备均遵循主从模式进行通信。 请求只能由主设备发起,从设备只能响应请求,而不能自行启动数据传输。 根据协议的实现,数据包头是不同的。 以下是该包的重要组成部分,需要了解:
ADU(应用程序数据单元) -整个Modbus软件包,包括所有报头,PDU,校验和,地址和令牌。 它根据协议的实现而有所不同。
PDU(协议数据单元) -包的主要部分,协议的所有实现均相同。 包含有效载荷本身。
设备地址-收件人的地址,即从设备。 Modbus网络的一个网段中最多可以放置247个设备。 只有从站具有不同的地址,主站没有地址。 地址“ 0”用于来自主设备的广播请求,而从设备无法响应这些广播数据包。
校验和 -数据包完整性算法。 Modbus RTU和ASCII使用2个字节的校验和。 Modbus RTU使用CRC16算法,而Modbus ASCII使用更简单,更不可靠的LRC8。 在Modbus TCP中,由于在TCP级别检查完整性,因此校验和不会添加到ADU中。
我们不会分析特定于每种协议实现的其他标头,因为在应用程序级别使用协议时,这并不重要。
Modbus寄存器和功能
以简化形式,Modbus请求结构由功能代码(读/写)和需要读取或写入的数据组成。 同时,不同数据类型的功能代码也不同。 我们将分析什么是寄存器以及使用它们的功能。
- 离散输入 -设备的离散输入是只读的。 寄存器地址范围:从10001到19999。它们具有功能“ 02”-读取一组寄存器
- 线圈 -设备的离散输出或内部值。 可用于阅读和写作。 寄存器地址的范围是20001到29999。它具有以下功能:“ 01”-读取一组寄存器,“ 05”-写单个寄存器,“ 15”-写一组寄存器
- 输入寄存器 -16位设备输入。 只读的。 寄存器地址范围:从30001到39999。具有功能:“ 04”-读取一组寄存器
- 保持寄存器 -16位设备输出或内部值。 可用于阅读和写作。 寄存器地址范围:从40001到49999。
尽管有名称,输入和输出实际上可以是内部变量,存储计数器,标志或控制触发器。 寄存器还有其他范围,但是在绝大多数设备中,它们并未使用,因此我们将考虑四种主要类型的寄存器。 不同的设备可以使用不同范围的寄存器,也可以一次使用所有范围。
工作实例
对于使用Modbus TCP协议的示例,我们将使用用Ruby编写的最简单的控制台实用程序
modbus-cli 。 它使读取和写入数据到Modbus寄存器变得容易。
让我们尝试在工业交换机研华EKI-5524SSI上读取已传输数据包计数器的状态。 首先,您需要确定存储必要信息的寄存器的地址,为此,请查看设备的
文档 。 寄存器说明位于“ Modbus映射表”部分中:
EKI开关文档中的寄存器值说明可以看出,一个端口发送的数据包的值存储在四个寄存器中,第一个端口是寄存器38193至38197。还给出了数据存储格式的说明,由此得出的整数形式的发送数据包以十六进制格式存储,而11223344个数据包的值将为从右到左写为0xAB4130。
提出要求:
$ modbus read 192.168.0.17 38193 4 38193 0x0000 38194 0x0000 38195 0x0000 38196 0x3459
read是
读取命令。 程序本身可以根据寄存器的地址来理解使用哪个特定的读取命令,在本例中,将使用“ 04”命令读取16位寄存器。
192.168.0.17-设备的IP地址。
38193-寄存器的起始地址。
4-相对于起始地址的偏移量。 我们从数据表中读取了端口1的四个寄存器。
我们得到一个包含四个寄存器值的答案。 我们看到数据包的数量很少:0x3459,即13401,-交换机最近已打开。
Modbus协议的缺点
公平地说,值得一提的是该协议的缺点。 自从40多年前开发以来,当处理器性能大大降低并且在不考虑数据保护的情况下开发协议时,它有许多缺点:
- 该协议不提供传输数据的身份验证和加密。 因此,在使用Modbus TCP时,必须使用其他VPN隧道。
- 从站无法启动数据传输,因此主站必须不断轮询从站
- 从设备无法检测到与主机的连接断开。 这个问题直接来自上一个问题。
但是,尽管有很多缺点,Modbus仍然是最常见的工业协议,并且由于其开放性,它使合并不同制造商的设备变得容易。 低资源要求允许将该协议集成到大多数低功耗设备中。
启用Modbus的硬件
研华提供具有Modbus协议支持的多种工业设备,可满足以下任何任务:自动化,控制,数据收集和传输。
ADAM-6000和
WISE-4000系列的模块允许您使用Modbus TCP协议远程控制数字和模拟输入/输出。 用于控制外围设备并以从机模式收集数据。 它们可以与可编程逻辑控制器配对,也可以直接连接到SCADA服务器。 ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀

要将Modbus RTU / ASCII协议转换为Modbus TCP,请使用Modbus网关。
EKI-1200系列的设备在板上最多具有四个串行RS-232 / 422/485接口和两个以太网端口。 它们使您可以将具有不同协议的设备组合到一个网络中。 例如,通过RS-485接口将仅支持Modbus RTU的从设备连接到Modbus TCP网段。
控制器支持Modbus RTU作为从站/主站和Modbus TCP客户端/服务器。

应用实例
温室监控系统
研华监控解决方案将TPC-1070H,ADAM-6024,ADAM-6050,ADAM-6060和WebAccess软件集成在农田旁边的机柜中。 通过连接到各种敏感设备,ADAM-6000模块可以接收实时环境数据并监视设备切换,以确保温室处于植物生长的最佳环境中。 得益于研华的特殊功能,图形条件逻辑(GCL),用户可以定义自己的控制逻辑规则并将这些规则加载到ADAM-6000以太网I / O模块中,然后这些模块自动执行逻辑规则,例如独立模块。 控制器。 另一个功能-点对点(P2P)使用最开放,最灵活的以太网络,不仅简化了没有控制器的实施过程,而且节省了硬件成本。
然后,所有接收到的数据都通过以太网传输到带有TPC-1070H触摸屏的计算机。 TPC-1070H具有无风扇冷却系统和符合IP65的前面板,是坚固耐用的紧凑型设计,适用于不断变化的操作环境,其强大的计算能力可以处理大量数据。 对于设备管理,研华WebAccess允许工程师或管理人员使用标准Web浏览器从任何设备(包括平板电脑和智能手机)通过Intranet或Internet查看,监视和配置监视系统。

监控太阳能热水系统
该工程公司应该能够控制由其新开发的太阳能电池板提供的奥林匹克规格游泳池的太阳能热水系统中的太阳能量,温度和水流量。 他们还应该能够直接在LCD面板上监视这些值及其警报,并将这些值存储起来以备将来参考。
研华Adam Modules为客户提供了一种解决方案,该解决方案利用通过RS485和两线总线连接的数据采集模块来传输所有传感器的数据。 该系统体系结构具有两个主要优点:首先,它允许您随时在数据收集模块中添加更多传感器,其次,很容易在软件中添加其他标签以在PC上监视和记录这些值。
