技能培训-MODBUS协议中文完整版.pdf
《技能培训-MODBUS协议中文完整版.pdf》由会员分享,可在线阅读,更多相关《技能培训-MODBUS协议中文完整版.pdf(127页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、GB/T 0 前 言 - - - - - - - - - - - 串行链路和串行链路和 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 层模型说明的两个通信规程。下图强调指出了该标准的主要部分。绿色方框表示规范。灰色
2、方框表示已有的国际标准(TIA/EIA 和 IETF 标准) 。 MODBUS 报文传输在 TCP/IP上的实现指南 49 页 MODBUS 报 文传输在串行链路上的实现指南 45 页 MODBUS 应用层 在 TCP/IP 上的MODBUS 映射 TCP IETF RFC 793 IP IETF RFC 791 串行链路主站/从站 以太网 II/802.3 IEEE 802.2 TIA/EIA- 232- F TIA/EIA- 485- A 以太网物理层 Modbus协议规范45 页 MODBUS 标准分为三部分。第一部分( “Modbus 协议规范” )描述了 MODBUS 事物处理。第二
3、部分( “MODBUS 报文传输在 TCP/IP 上的实现指南” )提供了一个有助于开发者实现 TCP/IP 上的 MODBUS 应用层的参考信息。第三部分( “MODBUS 报文传输在串行链路上的实现指南” )提供了一个有助于开发者实现串行链路上的 MODBUS应用层的参考信息。 GB/T 1 第一部分:第一部分:Modbus 协议协议 GB/T 2 第一部分:第一部分:Modbus 协议协议 1 引言引言 1.1 范围范围 MODBUS 是 OSI 模型第 7 层上的应用层报文传输协议, 它在连接至不同类型总线或网络的设备之间提供客户机/服务器通信。 自从 1979 年出现工业串行链路的事
4、实标准以来, MODBUS 使成千上万的自动化设备能够通信。目前,继续增加对简单而雅观的 MODBUS 结构支持。互联网组织能够使 TCP/IP 栈上的保留系统端口 502 访问 MODBUS。 MODBUS 是一个请求/应答协议,并且提供功能码规定的服务。MODBUS 功能码是 MODBUS请求/应答 PDU 的元素。本文件的作用是描述 MODBUS 事务处理框架内使用的功能码。 1.2 规范性引用文件规范性引用文件 1RFC791,互联网协议,Sep81 DARPA 2MODBUS 协议参考指南 Rev J,MODICON,1996 年 6 月,doc#PI_MBUS_300 MODBUS
5、 是一项应用层报文传输协议, 用于在通过不同类型的总线或网络连接的设备之间的客户机/服务器通信。 目前,使用下列情况实现 MODBUS: 以太网上的 TCP/IP。 各种媒体(有线:EIA/TIA- 232- E、EIA- 422、EIA/TIA- 485- A;光纤、无线等等)上的异步串行传输。 MODBUS PLUS,一种高速令牌传递网络。 MODBUS 应用层 基于 TCP 的 ModbusTCP IP 其它 MODBUS+/HDL 主站/从站 以太网 II/802.3 其它 物理层 EIA/TIA- 232 或EIA/TIA- 485 以太网物理层 图 1:MODBUS 通信栈 2 缩
6、略语缩略语 ADU 应用数据单元 GB/T 3 HDLC 高级数据链路控制 HMI 人机界面 IETF 因特网工程工作组 I/O 输入/输出设备 IP 互连网协议 MAC 介质访问控制 MB MODBUS 协议 MBAP MODBUS 协议 PDU 协议数据单元 PLC 可编程逻辑控制器 TCP 传输控制协议 3 背景概背景概要要 MODBUS 协议允许在各种网络体系结构内进行简单通信。 MODBUS ON MB+ MODBUS ON RS232 MODBUS ON RS485 驱动器 PLC HMI I/O I/O I/O PLC 驱动器 PLC HMI I/O 驱动器 PLC I/O I/
7、O 驱动器 I/O 网关 网关 网关 MODBUS 通信 MODBUS ON TCP/IP 图 2:MODBUS 网络体系结构的实例 每种设备(PLC、HMI、控制面板、驱动程序、动作控制、输入/输出设备)都能使用 MODBUS协议来启动远程操作。 在基于串行链路和以太 TCP/IP 网络的 MODBUS 上可以进行相同通信。 一些网关允许在几种使用 MODBUS 协议的总线或网络之间进行通信。 4 总体描述总体描述 4.1 协议描述协议描述 MODBUS 协议定义了一个与基础通信层无关的简单协议数据单元(PDU) 。特定总线或网络上的 MODBUS 协议映射能够在应用数据单元(ADU)上引入
8、一些附加域。 GB/T 4 地址域 功能码 数据 差错校验 ADU PDU 图 3:通用 MODBUS 帧 启动 MODBUS 事务处理的客户机创建 MODBUS 应用数据单元。 功能码向服务器指示将执行哪种操作。 MODBUS 协议建立了客户机启动的请求格式。 用一个字节编码 MODBUS 数据单元的功能码域。有效的码字范围是十进制 1- 255(128- 255 为异常响应保留) 。当从客户机向服务器设备发送报文时,功能码域通知服务器执行哪种操作。 向一些功能码加入子功能码来定义多项操作。 从客户机向服务器设备发送的报文数据域包括附加信息,服务器使用这个信息执行功能码定义的操作。这个域还包
9、括离散项目和寄存器地址、处理的项目数量以及域中的实际数据字节数。 在某种请求中,数据域可以是不存在的(0 长度) ,在此情况下服务器不需要任何附加信息。功能码仅说明操作。 如果在一个正确接收的 MODBUS ADU 中,不出现与请求 MODBUS 功能有关的差错,那么服务器至客户机的响应数据域包括请求数据。如果出现与请求 MODBUS 功能有关的差错,那么域包括一个异常码,服务器应用能够使用这个域确定下一个执行的操作。 例如, 客户机能够读一组离散量输出或输入的开/关状态, 或者客户机能够读/写一组寄存器的数据内容。 当服务器对客户机响应时,它使用功能码域来指示正常(无差错)响应或者出现某种差
10、错(称为异常响应) 。对于一个正常响应来说,服务器仅对原始功能码响应。 启动请求 功能码 数据请求 操作码 接收响应 数据响应 执行操作 启动响应 客户机 服务器 图 4:MODBUS 事务处理(无差错) 对于异常响应,服务器返回一个与原始功能码等同的码,设置该原始功能码的最高有效位为逻辑 1。 GB/T 5 启动请求 功能码 数据请求 差错码 接收响应 异常码 在操作中检测的差错 启动差错 客户机 服务器 图 5 MODBUS 事务处理(异常响应) F 注释注释:需要管理超时,以便明确地等待可能不会出现的应答。 串行链路上第一个MODBUS执行的长度约束限制了MODBUS PDU大小 (最大
11、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。它们是: l MODBUS 请求 PDU,mb_req_pdu l MODBUS 响应 PDU,mb_rsp_pdu l MODBUS 异常响应 P
12、DU,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 个字节,这个域与功能
13、码有关,并且通常包括诸如可变参考、变量、数据偏移量、子功能码等信息。 定义 mb_excep_rsp_pdu 为: mb_excep_rsp_pdu = function_code, request_data,其中 function_code - 1 个字节 MODBUS 功能码 + 0 x80 exception_code - 1 个字节,在下表中定义了 MODBUS 异常码。 4.2 数据编码数据编码 l MODBUS 使用一个big- Endian 表示地址和数据项。这意味着当发射多个字节时,首先发送最高有效位。例如: 寄存器大小 值 GB/T 6 16 比特 0 x1234 发送的第一
14、字节为 0 x12 然后 0 x34 F 注释注释:更详细的信息参见1。 4.3 MODBUS 数据模型数据模型 MODBUS 以一系列具有不同特征表格上的数据模型为基础。四个基本表格为: 基本表格基本表格 对象类型对象类型 访问类型访问类型 内容内容 离散量输入离散量输入 单个比特 只读 I/O 系统提供这种类型数据 线圈线圈 单个比特 读写 通过应用程序改变这种类型数据 输入寄存器输入寄存器 16- 比特字 只读 I/O 系统提供这种类型数据 保持寄存器保持寄存器 16- 比特字 读写 通过应用程序改变这种类型数据 输入与输出之间以及比特寻址的和字寻址的数据项之间的区别并没有暗示任何应用操
15、作。如果这是对可疑对象核心部分最自然的解释,那么这种区别是可完全接受的,而且很普通,以便认为四个表格全部覆盖了另外一个表格。 对于基本表格中任何一项,协议都允许单个地选择 65536 个数据项,而且设计那些项的读写操作可以越过多个连续数据项直到数据大小规格限制, 这个数据大小规格限制与事务处理功能码有关。 很显然,必须将通过 MODBUS 处理的所有数据放置在设备应用存储器中。但是,存储器的物理地址不应该与数据参考混淆。要求仅仅是数据参考与物理地址的链接。 MODBUS 功能码中使用的 MODBUS 逻辑参考数字是以 0 开始的无符号整数索引。 l MODBUS 模型实现的实例 下例实例示出了
16、两种在设备中构造数据的方法。可能有不同的结构,这个文件中没有全部描述出来。每个设备根据其应用都有它自己的数据结构。 实例实例 1:有:有 4 个独立块的设备个独立块的设备 下例实例示出了设备中的数据结构,这个设备含有数字量和模拟量、输入量和输出量。由于不同块中的数据不相关,每个块是相互独立。按不同 MODBUS 功能码访问每个块。 GB/T 7 设备应用存储器 MODBUS 访问 MODBUS 服务器设备 MODBUS 请求 输入离散量 线圈 输入寄存器 保存寄存器 图 6:带有独立块的 MODBUS 数据模型 实例实例 2:仅有仅有 1 个块的设备个块的设备 在这个实例中,设备仅有 1 个数
17、据块。通过几个 MODBUS 功能码可能得到一个相同数据,或者通过 16 比特访问或 1 个访问比特。 设备应用存储器 MODBUS 请求 输入离散量 线圈 输入寄存器 保存寄存器 MODBUS 服务器设备 R R W W MODBUS 访问 图 7:仅带有 1 个块的 MODBUS 数据模型 4.4 MODBUS 事务处理的定义事务处理的定义 下列状态图描述了在服务器侧 MODBUS 事务处理的一般处理过程。 GB/T 8 等待 MB 指示 确认操作码 确认数据地址 确认数据值 执行 MB 操作 发送 Modbus响应 发送 Modbus异常响应 异常码_1 异常码_2 异常码_3 异常码_
18、4_5_6 接收 MB 指示 无效的 有效的 无效的 无效的 有效的 有效的 无效的 有效的 图 8:MODBUS 事务处理的状态图 一旦服务器处理请求,使用合适的 MODBUS 服务器事务建立 MODBUS 响应。 根据处理结果,可以建立两种类型响应: l 一个正 MODBUS 响应: 响应功能码 = 请求功能码 l 一个 MODBUS 异常响应(参见第 6.14 节): l 用来为客户机提供处理过程中与被发现的差错相关的信息; l 响应功能码 = 请求功能码 + 0 x80; l 提供一个异常码来指示差错原因。 5 功能码分类功能码分类 有三类 MODBUS 功能码。它们是: 公共功能码公
19、共功能码 l 是较好地被定义的功能码, l 保证是唯一的, l MODBUS 组织可改变的, l 公开证明的, l 具有可用的一致性测试, l MB IETF RFC 中证明的, GB/T 9 l 包含已被定义的公共指配功能码和未来使用的未指配保留供功能码。 用户定义功能码用户定义功能码 l 有两个用户定义功能码的定义范围,即 65 至 72 和十进制 100 至 110。 l 用户没有 MODBUS 组织的任何批准就可以选择和实现一个功能码 l 不能保证被选功能码的使用是唯一的。 l 如果用户要重新设置功能作为一个公共功能码,那么用户必须启动 RFC,以便将改变引入公共分类中,并且指配一个新
20、的公共功能码。 保留功能码保留功能码 l 一些公司对传统产品通常使用的功能码,并且对公共使用是无效的功能码。 127 110 100 72 65 1 公共功能码 用户定义功能码 公共功能码 用户定义功能码 公共功能码 图 9:MODBUS 功能码分类 GB/T 10 5.1 公共功能码定义公共功能码定义 6 功能码描述功能码描述 6.1 01 (0 x01)读线圈读线圈 在一个远程设备中,使用该功能码读取线圈的 1 至 2000 连续状态。请求 PDU 详细说明了起始地址,即指定的第一个线圈地址和线圈编号。从零开始寻址线圈。因此寻址线圈 1- 16 为 0- 15。 根据数据域的每个比特将响应
21、报文中的线圈分成为一个线圈。指示状态为 1= ON 和 0= OFF。第一个数据字节的 LSB(最低有效位)包括在询问中寻址的输出。其它线圈依次类推,一直到这个字节的高位端为止,并在后续字节中从低位到高位的顺序。 如果返回的输出数量不是八的倍数,将用零填充最后数据字节中的剩余比特(一直到字节的高位端) 。字节数量域说明了数据的完整字节数。 请求请求 PDU 功能码 1 个字节 0 x01 起始地址 2 个字节 0 x0000 至 0 xFFFF 线圈数量 2 个字节 1 至 2000(0 x7D0) 响应响应 PDU 功能码 码 子码 (十六进制) 页 物理离散量输入 读输入离散量 02 02
22、 11 内部比特 读线圈 01 01 10 比特访问 或 写单个线圈 05 05 16 物理线圈 写多个线圈 15 0F 37 输入存储器 读输入寄存器 04 04 14 读多个寄存器 03 03 13 16 比特访问 内部存储器 写单个寄存器 06 06 17 或 写多个寄存器 16 10 39 物理输出存储器 读/写多个寄存器 23 17 47 屏蔽写寄存器 22 16 46 读文件记录 20 6 14 42 数 据 访 问 文件记录访问 写文件记录 21 6 15 44 封装接口 读设备识别码 43 14 2B 功能码 1 个字节 0 x01 字节数 1 个字节 N* 线圈状态 N 个字
23、节 nN 或 N+1 GB/T 11 *N输出数量/8,如果余数不等于 0,那么N = N+1 错误错误 功能码 1 个字节 功能码0 x80 异常码 1 个字节 01 或 02 或 03 或 04 这是一个请求读离散量输出 20- 38 的实例: 请求 响应 域名 (十六进制) 域名 (十六进制) 01 01 00 03 13 CD 00 6B 功能 起始地址 Hi 起始地址 Lo 输出数量 Hi 输出数量 Lo 13 功能 字节数 输出状态 27- 20 输出状态 35- 28 输出状态 38- 36 05 将输出 27- 20 的状态表示为十六进制字节值 CD,或二进制 1100 110
24、1。输出 27 是这个字节的MSB,输出 20 是 LSB。 通常,将一个字节内的比特表示为 MSB 位于左侧,LSB 位于右侧。第一字节的输出从左至右为 27 至 20。 下一个字节的输出从左到右为 35 至 28。 当串行发射比特时, 从 LSB 向 MSB 传输: 20 . . . 27、28 . . . 35 等等。 在最后的数据字节中,将输出状态 38- 36 表示为十六进制字节值 05,或二进制 0000 0101。输出38 是左侧第六个比特位置,输出 36 是这个字节的 LSB。用零填充五个剩余高位比特。 注:注:用零填充五个剩余比特(一直到高位端) 。 GB/T 12 NO Y
25、ES YES YES MB 服务器接收mb_req_pdu 支持的功能码 0 x0001输出数量0 x07D0 起始地址OK 和 起始地址+输出数量OK 读取离散输出OK MB 服务器发送 mb_rsp 退出 进入 异常码01 异常码03 异常码02 异常码04 MB 服务器发送 mb_exception_rsp NO NO NO YES 请求处理 图图 10:读取线圈状态图:读取线圈状态图 6.2 02 (0 x02)读离散量输入读离散量输入 在一个远程设备中,使用该功能码读取离散量输入的 1 至 2000 连续状态。请求 PDU 详细说明了起始地址, 即指定的第一个输入地址和输入编号。 从
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 技能 培训 MODBUS 协议 中文 完整版
限制150内