java modbus通讯协议_一、MODBUS通讯协议完整介绍(全文10000字以上)

b6131f8508870257bde6c9d4e0baf37f.png

1、引言

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,一种高速令牌传递网络。

c9334ecfecfc1210e6adbcee9a3d5d73.png
图 1:MODBUS 通信栈

2、缩略语

ADU 应用数据单

HDLC 高级数据链路控制

HMI 人机界面

IETF 因特网工程工作组

I/O 输入/输出设备

IP 互连网协议

MAC 介质访问控制

MB MODBUS 协议

MBAP MODBUS 协议

PDU 协议数据单元

PLC 可编程逻辑控制器

TCP 传输控制协议

3、背景概要

MODBUS 协议允许在各种网络体系结构内进行简单通信。

416d452499117a42a32cb74bdc09d8b1.png
图 2:MODBUS 网络体系结构的实例

每种设备(PLC、HMI、控制面板、驱动程序、动作控制、输入/输出设备)都能使用 MODBUS协议来启动远程操作。

在基于串行链路和以太 TCP/IP 网络的 MODBUS 上可以进行相同通信。

一些网关允许在几种使用 MODBUS 协议的总线或网络之间进行通信。

4、总体描述

4.1 协议描述

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

db6f67e04706236e89d00f38f229df64.png
图 3:通用 MODBUS 帧

启动 MODBUS 事务处理的客户机创建 MODBUS 应用数据单元。功能码向服务器指示将执行哪种操作。

MODBUS 协议建立了客户机启动的请求格式。

用一个字节编码 MODBUS 数据单元的功能码域。有效的码字范围是十进制 1-255(128-255 为异常响应保留)。当从客户机向服务器设备发送报文时,功能码域通知服务器执行哪种操作。

向一些功能码加入子功能码来定义多项操作。

从客户机向服务器设备发送的报文数据域包括附加信息,服务器使用这个信息执行功能码定义的操作。这个域还包括离散项目和寄存器地址、处理的项目数量以及域中的实际数据字节数。

在某种请求中,数据域可以是不存在的(0长度),在此情况下服务器不需要任何附加信息。功能码仅说明操作。

如果在一个正确接收的 MODBUS ADU 中,不出现与请求 MODBUS 功能有关的差错,那么服务器至客户机的响应数据域包括请求数据。如果出现与请求 MODBUS 功能有关的差错,那么域包括一个异常码,服务器应用能够使用这个域确定下一个执行的操作。

例如,客户机能够读一组离散量输出或输入的开/关状态,或者客户机能够读/写一组寄存器的数据内容。

当服务器对客户机响应时,它使用功能码域来指示正常(无差错)响应或者出现某种差错(称为异常响应)。对于一个正常响应来说,服务器仅对原始功能码响应。

f947a8eac05b621145dd9924840abfbc.png
图 4:MODBUS 事务处理(无差错)

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

65fbe1ec45914ee11bde261e2933e29b.png
图5 MODBUS事务处理(异常响应)

注释:需要管理超时,以便明确地等待可能不会出现的应答。

串行链路上第一个MODBUS 执行的长度约束限制了MODBUS PDU 大小(最大RS485ADU=256字节)。

因此,对串行链路通信来说,MODBUS PDU=256-服务器地址(1 字节)-CRC(2 字节)=253字节。

从而:

RS232 / RS485 ADU = 253 字节+服务器地址(1字节) + 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’ 表示地址

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值