modbus tcp通讯协议简介

2021-12-27 08:57:25 admin 2809

  

5g/4g工业路由网关


Modbus是1979年开發的壹种工业协议,用于实现自动化设备之间的通信。Modbus最初是作为通過串行层传输数据的应用级协议实现的,并且已经扩展到包括通過串行、TCP/IP和用户数据报协议(UDP)实现的。

1.什么是Modbus协议?

Modbus是壹种使用主从关系实现的请求-响应协议。在主从关系中,通信总是成对進行。设备必须启动请求并等待响应,启动设备(主设备)负责启动每个交互。通常,主设备为人机界面(HMI)或监控和数据采集(SCADA)系统,从设备为传感器、可编程逻辑控制器(PLC)或可编程自动化控制器(PAC)。这些请求和响应的内容以及發送这些消息的网络层由协议的不同层定义。


Modbus通信协议是壹种应用层消息传输协议,包括RTU、ASCII和TCP。标准Modbus协议物理层接口包括RS232、RS485和以太网。

ModbusRTU和ModbusASCII均处于串行传输模式。其中ModbusRTU采用贰進制表示,数据结构紧凑,通信效率高,应用广泛。ModbusASCII采用ASCII码传输,并使用特殊字符作为其字节的开始和结束标识。其传输效率远低于ModbusRTU协议。ModbusTCP是通過工业以太网TCP/IP网络传输的Modbus通信。Modbus数据传输提供连接到以太网TCP/IP网络的客户端和服务器之间的实時通信。

2.Modbus协议层

在最初的方法中,MODBUS是基于串行端口的单壹协议,因此不能将其划分为多个层。随着時间的推移,该协议引入不同的应用程序数据单元來更改用于串行通信的数据包格式,或者允许使用TCP/IP和用户数据报协议(UDP)网络。这实现了定义协议数据单元(PDU)的核心协议和定义应用数据单元(ADU)的网络层的分离。

Modbus协议定义了独立于基本通信层的简单协议数据单元(PDU)。特定总线或网络上的Modbus协议映射可在应用数据单元(ADU)上引入壹些附加域。


协议数据单元(PDU)

PDU及其处理代码构成Modbus应用协议规范的核心。该规范定义了PDU的格式、协议使用的各种数据概念、如何使用功能代码访问数据以及每个功能代码的具体实现和限制。ModbusPDU格式定义为功能代码,后跟壹组相关数据。数据的大小和内容由功能代码定义,整个PDU(功能代码和数据)的大小不能超過253字节。每个功能代码都有壹个特定的行为,可以由从设备根据所需的应用行为灵活实现。

通常,MODBUS可访问的数据存储在四个数据库或地址范围之壹:线圈状态、离散输入、保持寄存器和输入寄存器。这些数据库定义了所包含数据的类型和访问权限。数据可以直接从设备访问,因为它是由设备本地托管的。相反,Modbus主机必须通過各种功能代码请求访问这些数据。表1中描述了每个块的行为。


应用数据单元(ADU)

除了Modbus协议的PDU核心定义的功能外,还可以使用多种网络协议。最常見的协议是串行协议和TCP/IP协议,但也可以使用UDP等其他协议。为了在这些层之间传输MODBUS所需的数据,MODBUS包含壹组适用于每个网络协议的ADU。

Adu的三种标准格式是TCP、远程终端单元(RTU)和ASCII。RTU和ASCIIAdu通常用于串行线路,而TCP用于现代TCP/IP或UDP/IP网络。

3.Modbus数据帧结构

3.1ModbusRTU数据帧结构

ModbusRTU协议通過将从设备地址(或广播)、定义请求操作的功能代码、要發送的数据和CRC验证放入主机查询來建立查询消息;从机设备的响应报文也采用ModbusRTU报文结构,包括从机设备地址、请求操作的功能码、要發送的数据和CRC校验;如果在接收消息時發生错误,或者从设备无法执行请求的操作,则从设备将發送异常消息作为响应。ModbusRTU数据帧结构如下:

3.2ModbusTCP数据帧结构

ModbusTCP协议将mbap(Modbus应用协议头)消息头添加到ModbusRTU协议中。由于TCP是基于可靠连接的服务,ModbusTCP协议中没有CRC验证。所有Modbustcpadu發送和接收均采用TCP传输控制协议,端口号为502。ModbusTCP数据帧结构如下:

图5Modbustcp数据帧结构

4.ModbusRTU通信协议

ModbusRTU以其贰進制表示和紧凑的数据结构,具有较高的通信效率,得到了广泛的应用。

4.1通信传输方式:

通信传输分为独立信息头和传输的编码数据。以下通信传输模式定义也与ModbusRTU通信协议兼容:



CRC码:兩字节错误检测码。

4.2通信协议

當向仪器發送通信命令時,符合相应地址代码的设备接收通信命令,删除地址代码,读取信息,如果没有错误,则执行相应任务;然后将执行结果返回给發送方。返回的信息包括地址代码、操作的功能代码、操作后结果的数据和错误检查代码。如果出现错误,则不發送任何消息。


地址码:地址码是信息帧的第壹个字节(8位),从0到255。此字节表示具有用户设置的地址的从机将接收主机發送的信息。每个从机必须具有唯壹的地址代码,并且只有符合地址代码的从机才能响应环回。當从机發回信息時,等效地址代码指示信息來自何处。

功能代码:主机發送的功能代码告诉从机要执行的任务。表4中列出的功能代码具有特定的含义和操作。


复位单寄存器

将设置的贰進制值写入单个寄存器

数据区:数据区包含从机要执行的操作或从机收集的返回信息。此信息可以是数值、引用地址等。例如,如果功能代码告诉从机读取寄存器的值,则数据区必须包含要读取的寄存器的起始地址和读取长度。对于不同的从机,地址和数据信息是不同的。

错误检查码:主机或从机可以使用检查码來判断接收到的信息是否错误。有時,由于电子噪声或其他干扰,信息在传输過程中會略有变化。错误检查代码确保主设备或从设备不會在传输過程中的错误信息中發挥作用。这提高了系统的安全性和效率。错误校验采用CRC-16校验方法。

注:信息帧的格式基本相同:地址码、功能码、数据区、检错码。

2)错误检查

冗余循环码(CRC)由2个字节组成,即16位贰進制。CRC码由發送设备计算并置于發送信息的末尾。接收信息的设备重新计算接收信息的CRC码,并比较计算出的CRC码是否与接收到的CRC码壹致。如果兩者不匹配,则表示存在错误。

CRC码的计算方法是将所有16位寄存器预设为1。然后逐步处理每8位的数据信息。在CRC码计算期间,仅使用8个数据位、起始位和停止位。如果有奇偶校验位,它们还包括奇偶校验位,这不涉及CRC码计算。

在计算CRC代码時,8位数据与寄存器的数据不同,或者结果被壹个字节移位到低位,最高位用0填充。然后检查最低的顺序。如果最低顺序为1,则寄存器的内容与预设数字不同。如果最低阶数为0,则不执行XOR操作。

这个過程已经重复了八次。在第8次移位后,接下來的8位不同于或不同于當前寄存器的内容。此過程如上所述重复8次。當处理所有数据信息時,最后壹个寄存器的内容是CRC码值。當發送和接收CRC码中的数据時,低字节排在第壹位。

计算CRC码的步骤如下:

预设16位寄存器为十六進制ffff(即全部为1)。称该寄存器为CRC寄存器;

前8位数据不同于16位CRC寄存器或的低位,并且结果被置于CRC寄存器中;

将寄存器内容向右移动壹位(向低位移动),用0填充最高位,并检查最低位;

如果最低位为0:重复步骤3(再次移位);如果最低位为1:CRC寄存器和多项式A001(1010000000000001)之间的异或;

重复步骤3和4,直到右移8次,以便处理整个8位数据;

重复步骤2至5以处理下壹个8位数据;

最终的CRC寄存器是CRC代码。

3)功能代码03,读取点和返回值:

如果仪器采用ModbusRTU通信协议,则可使用通信命令执行读取点(“保持寄存器”)或返回值(“输入寄存器”)的操作。保持寄存器和输入寄存器都是16位(2字节)值,首先是高位。这样,仪器的读取点和返回值为2字节。壹次可读取的最大寄存器数为60。由于某些可编程控制器不使用功能代码03,因此将功能代码03用作读取点和返回值。从机响应的命令格式为从机地址、功能代码、数据区和CRC代码。数据区中的寄存器数据每兩个字节壹次,高字节排在第壹位。

4)功能代码06,单点保存

主机使用此命令将单点数据保存到仪器存储器中。从机还使用此功能代码向主机返回信息。

5.总结

MODBUS比其他通信协议更广泛使用的主要原因是:

1)Modbus可以支持多种电气接口,如RS-232\485(串口),也可以在各种介质上传输,如双绞线、光纤、无线等。

2)Modbus帧格式简单,易于理解,易于开發。

3)可靠性好。Modbus协议需要检查数据。除了串行协议中的奇偶校验外,ASCII模式中使用LRC校验,RTU模式中使用16位CRC校验。此外,MODBUS采用主从模式定期發送和接收数据。在实际使用中,如果从站断开(如故障或停机),主终端可以对其進行诊断,故障修复后,网络可以自动连接。


标签: modbus
网站首页
解决方案
产品中心
在线咨询