MODBUSTCPIP协议介绍
1.该规范的发展概况 原始版本 1997 年 9 月 3 日作为公共评论的草案。 再版 1999 年 3 月 29 日,即修订版 1.0。 没有大的技术改动,仅作了补充说明。增加了附录A 和 B 作为对一些常用执行问题的回 应。 该 Modbus/TCP 规范在万维网上公开发行。它表明开发者的意愿是把它作为工业自动化领 域具有互用性的标准。 既然 MODBUS 和 MODBUS/TCP 作为事实上的“实际”标准,而且很多生产商已经实现了它 的功能,此规范主要是阐述在互连网上具有普遍可用性的基于TCP 通讯协议的 MODBUS 报文的特殊编码。 2. 概述 MODBUS/TCP 是简单的、中立厂商的用于管理和控制自动化设备的MODBUS 系列通 讯协议的派生产品。显而易见,它覆盖了使用TCP/IP 协议的 “Intranet”和“Internet”环境中 MODBUS 报文的用途。协议的最通用用途是为诸如PLC’s,I/O 模块,以及连接其它简单 域总线或 I/O 模块的网关服务的。 MODBUS/TCP 协议是作为一种(实际的)自动化标准发行的。既然MODBUS 已经广 为人知,该规范只将别处没有收录的少量信息列入其中。然而,本规 范力图阐明 MODBU S 中哪种功能对于普通自动化设备的互用性有价值, 哪些部分是 MODBUS 作为可编程的协 议交替用于 PLC’s 的“多余部分”。 它通过将配套报文类型“一致性等级”, 区别那些普遍适用的和可选的, 特别是那些适用于 特殊设备如 PLC’s 的报文。 2.1 面向连接 在 MODBUS 中,数据处理传统上是无国界的,使它们对由噪音引起的中断有高的抵抗 力,而且在任一端只需要最小的维护信息。 编程操作,另一方面,期望一种面向连接的方法。这种方法对于简单变量通过唯一的 “登 录”符号完成,对于 Modbus Plus 变量,通过明确的“程序路径”容量来完成,而“程序路径” 容量维持了一种双向连接直到被彻底击穿。 MODBUS/TCP 处理两种情况。连接在网络协议层很容易被辨认,单一的连接可以支持 多个独立的事务。此外,TCP 允许很大数量的并发连接,因而很多情况下,在请求时重新 连接或复用一条长的连接是发起者的选择。 熟悉 MODBUS 的开发者会感到惊讶:为什么面向连接TCP 协议比面向数据报的UDP 要应用广泛。主要原因是通过封装独立的“事务”在一个连接中,此连接 可被识别,管理和 取消而无须请求客户和服务器采用特别的动作。这就使进程具有对网络性能变化的适应能 力,而且容许安全特色如防火墙和代理可以方便的添加。 类似的推理被最初的万维网的开发者所采用,他们选用TCP 及端口 80 去实现一个作为 单一事务的最小的环球网询问。 2.2 数据编码 MODBUS 采用“big-endian”来表示地址和数据对象。 这就意味着当一个数字表示的数量大于所传输的单一字节, 最大有效字节将首先被发送。 例如: 16 32 bits bits 0 x1234 0 x12345678L 将为 将为 0 x12 0 x12 0 x56 0 x34 0 x34 0 x78 2.3 参考编号的解释 MODBUS 将其数据模型建立在一系列具有不同特征的表的基础之上。 这四个基本表如下 l离散输入单比特,由 I/O 系统提供,只读 l离散输出单比特,由应用程序更改,读写 l输入寄存器16 比特,数值,由 I/O 系统提供 ,只读 l输出寄存器16 比特,数值,由应用程序更改,读写 输入和输出之间以及可寻址位和可寻址代码的数据对象之间的差别并不意味着任何应用 性能的不同。 如果这是我们所讨论的目标机械的最自然的解释, 那么认为所有的四个基本表 是相互覆盖的看法也是非常普通而完全可以接受的。 对于每一个基本表,协议允许单独选择65536 个数据对象中的任何一个,而且对那些对 象的读写操作可以跨越多个连续的数据对象, 直到达到基于处理事务功能代码的数据大小限 制。 这儿没有假定数据对象代表一种真正邻接的数据阵列, 而这是大多数简单 PLC’s 的解释。 “读写常用参考”功能代码被定义为携带32 位的参考值并且能允许在“非常”大的空间里可 以直接访问数据对象。现在没有可以利用这一特点的PLC 设备。 一个易造成混乱的潜在来源是用于MODBUS 功能的参考值和用于 Modico nPLC’s 的“寄存器值”之间的关系。由于历史原因,用户参考值使用从 1 开始的十进制数表示。而MODBUS 采用更普通的从 0 开始的无符号整数进行软件数 据 整理分析。 于是,请求从 0 读取寄存器的 Modbus 消息将已知值返回建立在寄存器4:00001(存储 类型 4=输出寄存器,参考值 00001)中的应用程序。 2.4 隐含长度基本原则 所有的 MODBUS 请求和响应都被设计成在此种方法下工作,即接收者可确认消息的完 整性。对于请求和响应为固定长度的功能代码, 仅发送功能代码就足够了。 对于在请求和响 应中 携带不定长数据的功能代码,数据部分前将加上一个字节的数据统计。 当 Modbus 通过 TCP 运送,前缀中携带附加的长度信息以便接收者识别消息的边界, 甚至消息被分成若干组进行传输。外在的和隐含的长度准则的存在,以及 CRC-32 检错代 码(以太网)的使用使请求和响应消息中发生未被识别的错误的机率减至无限小。 3. 一致性等级概述 当从草稿开始定义一种新的协议, 有可能加强编码方式和阐述的一致性。 MODBUS 由于 其先进的特性,已经在很多地方得到了实施,必须避免破坏它已经存在的实施。 因此,已经存在的成套的处理类型被划分出一致性等级:等级0 代表普遍使用且总体上 一致的功能;等级 2 代表有用的功能,但带有某些特性。现存装置的不适应于互用性的功 能也已确认。 必须注意到,将来对该标准的扩充将定义附加的功能代码来处理现存事实标准不适用的 情形。然而,被提议扩充的详细资料出现在本手册中将会另人误解。通过将代 码“随机的” 发送或者即便是通过检查异常响应的类型来确定特别的目标装置是否支持特别的功能代码 总是可能的,而且该方法将保证引入这些扩充的现使用的 MODBUS 设备的连续的互用性。 事实上,这就是当前功能代码的分级原则。 3.1 等级 0 这是最小的有用功能,对主站和从站来说。 读乘法寄存器 (fc 3) 写乘法寄存器 (fc 16) 3.2 等级 1 这是附加的被普遍实现的和能共同使用的成套功能,正如前面介绍过的,许多从站把输 入,输出,离散值和寄存器值作为同等的进行处理。 l读线圈 (fc 1) l读离散输入 (fc 2) l读寄存器输入 (fc 4) l写线圈 (fc 5) l写单一寄存器 (fc 6) l读异常状态字 (fc 7) 此功能对于每一个从站系列显然具有不同的含义。 3.3 等级 2 这些是需要 HMI 和管理等例行操作的数据传送功能。 l强制型多路线圈 (fc 15) l读一般参考值 (fc 20) 该功能可以处理并发的多个请求,而且能接收32 位的参考数值。当前的 584 和 984PL C’s 仅使用此功能接收类型6 的参考值(扩展的寄存器文件)。 该功能最适