找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5181|回复: 1
打印 上一主题 下一主题
收起左侧

Modbus协议规范(中文详细)-串行链路和TCP/IP上的MODBUS标准介绍

[复制链接]
跳转到指定楼层
楼主
--串行链路和TCP/IP上的MODBUS标准介绍
该标准包括两个通信规程中使用的 MODBUS应用层协议和服务规范:
·串行链路上的MODBUS
MODBUS串行链路取决于 TIA/EIA 标准:232-F和 485-A。
·TCP/IP 上的 MODBUS
MODBUS TCP/IP 取决于 IETF 标准:RFC793 和 RFC791有关。
串行链路和 TCP/IP 上的 MODBUS 是根据相应 ISO 层模型说明的两个通信规程。
下图强调指出了该标准的主要部分。绿色方框表示规范。灰色方框表示已有的国际标准(TIA/EIA 和 IETF标准) 。


MODBUS 标准分为三部分。第一部分( “Modbus 协议规范” )描述了 MODBUS 事物处理。第二部分( “MODBUS 报文传输在TCP/IP 上的实现指南” )提供了一个有助于开发者实现 TCP/IP 上的 MODBUS 应用层的参考信息。第三部分( “MODBUS 报文传输在串行链路上的实现指南” )提供了一个有助于开发者实现串行链路上的 MODBUS应用层的参考信息。

1.1 范围
MODBUS 是 OSI 模型第 7 层上的应用层报文传输协议, 它在连接至不同类型总线或网络的设备之间提供客户机/服务器通信。
自从1979 年出现工业串行链路的事实标准以来, MODBUS 使成千上万的自动化设备能够通信。
目前,继续增加对简单而雅观的 MODBUS 结构支持。互联网组织能够使 TCP/IP 栈上的保留系统端口 502访问 MODBUS。
MODBUS 是一个请求/应答协议,并且提供功能码规定的服务。MODBUS 功能码是 MODBUS请求/应答 PDU 的元素。本文件的作用是描述 MODBUS 事务处理框架内使用的功能码。
1.2 规范性引用文件
1.RFC791,互联网协议,Sep81 DARPA
2.MODBUS 协议参考指南 Rev J,MODICON,1996年 6 月,doc#PI_MBUS_300
MODBUS 是一项应用层报文传输协议, 用于在通过不同类型的总线或网络连接的设备之间的客户机/服务器通信。
目前,使用下列情况实现 MODBUS:
以太网上的 TCP/IP。
各种媒体(有线:EIA/TIA-232-E、EIA-422、EIA/TIA-485-A;光纤、无线等等)上的异步串行传输。
MODBUS PLUS,一种高速令牌传递网络。



2 缩略语
ADU 应用数据单元
HDLC 高级数据链路控制
HMI 人机界面
IETF 因特网工程工作组
I/O 输入/输出设备
IP 互连网协议
MAC 介质访问控制
MB MODBUS 协议
MBAP MODBUS 协议
PDU 协议数据单元
PLC 可编程逻辑控制器
TCP 传输控制协议
3 背景概要
MODBUS 协议允许在各种网络体系结构内进行简单通信。



每种设备(PLC、HMI、控制面板、驱动程序、动作控制、输入/输出设备)都能使用 MODBUS协议来启动远程操作。
在基于串行链路和以太 TCP/IP 网络的 MODBUS 上可以进行相同通信。
一些网关允许在几种使用 MODBUS 协议的总线或网络之间进行通信。

4 总体描述
4.1 协议描述
MODBUS 协议定义了一个与基础通信层无关的简单协议数据单元(PDU) 。特定总线或网络上的 MODBUS 协议映射能够在应用数据单元(ADU)上引入一些附加域。



启动MODBUS 事务处理的客户机创建 MODBUS 应用数据单元。 功能码向服务器指示将执行哪种操作。
MODBUS 协议建立了客户机启动的请求格式。
用一个字节编码 MODBUS 数据单元的功能码域。有效的码字范围是十进制 1-255(128-255 为异常响应保留) 。当从客户机向服务器设备发送报文时,功能码域通知服务器执行哪种操作。向一些功能码加入子功能码来定义多项操作。
从客户机向服务器设备发送的报文数据域包括附加信息,服务器使用这个信息执行功能码定义的操作。这个域还包括离散项目和寄存器地址、处理的项目数量以及域中的实际数据字节数。
在某种请求中,数据域可以是不存在的(0长度) ,在此情况下服务器不需要任何附加信息。功能码仅说明操作。
如果在一个正确接收的 MODBUS ADU 中,不出现与请求 MODBUS 功能有关的差错,那么服务器至客户机的响应数据域包括请求数据。如果出现与请求 MODBUS 功能有关的差错,那么域包括一个异常码,服务器应用能够使用这个域确定下一个执行的操作。
例如,客户机能够读一组离散量输出或输入的开/关状态,或者客户机能够读/写一组寄存器的数据内容。
当服务器对客户机响应时,它使用功能码域来指示正常(无差错)响应或者出现某种差错(称为异常响应) 。对于一个正常响应来说,服务器仅对原始功能码响应。



对于异常响应,服务器返回一个与原始功能码等同的码,设置该原始功能码的最高有效位为逻辑 1。


注释:需要管理超时,以便明确地等待可能不会出现的应答。
串行链路上第一个MODBUS执行的长度约束限制了MODBUS PDU大小 (最大RS485ADU=256字节) 。
因此,对串行链路通信来说,MODBUS PDU=256-服务器地址(1 字节)-CRC(2 字节)=253字节。

从而:
RS232 / RS485 ADU = 253字节+服务器地址(1 byte) + CRC (2 字节) = 256字节。
TCP MODBUS ADU = 249字节+ MBAP (7 字节) = 256字节。
MODBUS 协议定义了三种 PDU。它们是:
MODBUS 请求 PDU,mb_req_pdu
MODBUS 响应 PDU,mb_rsp_pdu
MODBUS 异常响应 PDU,mb_excep_rsp_pdu

定义 mb_req_pdu 为:
mb_req_pdu = { function_code, request_data},其中
function_code - [1 个字节] MODBUS 功能码
request_data - [n 个字节],这个域与功能码有关,并且通常包括诸如可变参考、变量、数据偏移量、子功能码等信息。
定义 mb_rsp_pdu 为:
mb_rsp_pdu = { function_code, response_ data},其中
function_code - [1 个字节] MODBUS 功能码
response_data - [n 个字节],这个域与功能码有关,并且通常包括诸如可变参考、变量、数据偏移量、子功能码等信息。
定义 mb_excep_rsp_pdu 为:
mb_excep_rsp_pdu = { function_code, request_data},其中
function_code - [1 个字节] MODBUS 功能码 + 0x80
exception_code - [1 个字节],在下表中定义了 MODBUS 异常码。
4.2 数据编码
MODBUS 使用一个‘big-Endian’ 表示地址和数据项。这意味着当发射多个字节时,首先发送最高有效位。


完整的pdf格式文档51黑下载地址(共131页):
Modbus协议规范(中文详细).pdf (4.51 MB, 下载次数: 61)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2018-11-9 00:38 | 只看该作者
好资料,51黑有你更精彩!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表