首页 > 编程知识 正文

modbus 485(一文看懂Modbus协议)

时间:2023-05-04 07:41:52 阅读:122698 作者:4382

目录1,协议摘要

2、协议格式

3、数据模型

1、协议概述自1979年工业串行链路事实标准出现以来,Modbus已有成千上万的自动化设备可以通信。 Modbus是OSI模型第7层的APP应用层消息传输协议,可在不同类型的总线或联网设备之间提供客户端/服务器通信。 Modbus APP应用层的协议和服务规范主要有两类。 一种依赖于串行链路上的Modbus(Modbus串行链路依赖于TIA/EIA标准(232-F和485-A ) )。 另一个依赖于TCP/IP上的Modbus ) ModbusTCP/IP是IETF标准(RFC775 )。 Modbus通信堆栈的示意图如下所示。

使用Modbus协议,可以在各种网络架构中实现简单的通信,每个设备(PLC、HMI、控制面板、驱动程序、操作控制、输入/输出设备)都使用Modbus协议进行远程操作串行链路和基于以太网TCP/IP网络的Modbus可以进行相同的通信,而一些网关可以使用Modbus协议在若干总线或网络之间进行通信。 以下是Modbus网络体系结构的示例:

2、协议格式Modbus协议本质上与我们平时定制的协议一致,是一种数据传输格式,由起始帧、数据帧、检查帧等组成,但Modbus协议

Modbus协议定义了与基本通信层无关的简单协议数据单元(PDU )。 特定总线或网络上的Modbus协议映射可为APP应用数据单元(ADU )引入若干附加域,如下图中所描述。

具体分析如下。

地址域:子节点地址信息; 功能代码:表示服务器要执行的操作。 有效的码字范围为十进制1-255(128-255为异常响应保留),从客户端向服务器设备发送消息时,功能码域会通知服务器执行哪些操作(功能调用) 上面已经说明清楚了)。 数据:要传输的数据的内容。 在一个请求,数据可以不存在(长度为0 ),其中服务器不需要附加信息,并且功能码仅仅描述操作。 错误检查:验证收到的、发送的数据是否正确。 如果成功接收的ModbusADU未出现与请求Modbus功能相关的错误,则服务器到客户端的响应数据字段将包含请求数据。 如果发生与请求Modbus功能相关的错误,则域包含异常代码,服务APP应用程序可以使用该域来确定下一步要执行的操作。 Modbus事务的状态图如下所示。

当服务器处理请求时,将使用相应的Modbus服务器事务建立Modbus响应,并根据处理结果建立以下两种类型的响应:

正确的Modbus响应:响应功能代码=请求功能代码; Modbus异常响应。 向客户端提供有关处理中发现的错误的信息,并提供指示错误原因的异常代码。 响应代码=请求功能代码0x80。 分解并理解上述图,例如,客户端与服务器执行Modbus通信协议,并且当服务器响应客户端时,使用功能码来执行正常(无错误)响应或某些错误(称为异常响应)

对于正常响应,服务器只响应原始功能代码,Modbus事务(无错误)如下图所示。

对于异常响应,服务器返回与原始功能代码等效的代码,并将原始功能代码的最高有效位设置为逻辑1。 Modbus事务(异常响应)如下图所示。

Modbus使用表示地址和数据项的Big-Endian。 这意味着在发送多个字节时,首先发送最高有效位。 例如:

寄存器 数据0x4001 0x1234

 发送的第一字节为 0x12,第一字节为0x34。

3、数据模型

Modbus以一系列具有不同特征表格上的数据模型为基础,四个基本表格如下表所示:

对于基本表格中任何一项,协议都允许单个地选择 65536 个数据项,而且设计那些项的读写操作可以越过多个连续数据项直到数据大小规格限制,这个数据大小规格限制与事务处理功能码有关。

数据模型这个概念有限抽象,让我们通过以下两个示例加深理解。

示例1:有 4 个独立块的设备

示例描述:一个设备中的数据结构,含有数字量和模拟量、输入量和输出量。由于不同块中的数据不相关,每个块是相互独立。使用Modbus数据模型,按不同 Modbus功能码访问每个块,实现原理如下所示:

 示例2:仅有 1 个块的设备

示例描述:一个设备仅有 1 个数据块,使用Modbus数据模型,通过几个Modbus功能码可能得到一个相同数据,或者通过 16 比特访问或 1 个访问比特,实现原理如下所示:

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。