收藏 分享(赏)

Modbus on TCP、IP标准协议(中文版).pdf

上传人:精品资料 文档编号:10172963 上传时间:2019-10-16 格式:PDF 页数:39 大小:540.64KB
下载 相关 举报
Modbus on TCP、IP标准协议(中文版).pdf_第1页
第1页 / 共39页
Modbus on TCP、IP标准协议(中文版).pdf_第2页
第2页 / 共39页
Modbus on TCP、IP标准协议(中文版).pdf_第3页
第3页 / 共39页
Modbus on TCP、IP标准协议(中文版).pdf_第4页
第4页 / 共39页
Modbus on TCP、IP标准协议(中文版).pdf_第5页
第5页 / 共39页
点击查看更多>>
资源描述

1、GB/T 88 第三部分:Modbus协议在TCP/IP上 的实现指南 GB/T 89 1 引言 1.1 范围 这个文件的范围是介绍 TCP/IP 上的 MODBUS 报文传输服务,提供参考信息以帮助软件开发者使用这种服务。这个文中不包括MODBUS功能码的编码内容,这些信息请参阅MODBUS协议规范2。 这个文件准确而全面地描述了 MODBUS 报文传输服务的实现。其目的是便于在那些使用MODBUS报文传输服务的设备之间进行可互操作。 这个文件主要由三部分组成: l 在TCP/IP上的MODBUS协议概述 l MODBUS客户机、服务器和网关工具的功能描述 l 针对一个MODBUS实现实例的

2、目标模型建议的实现准则。 1.2 客户机/服务器模型 MODBUS报文传输服务提供设备之间的客户机/服务器通信,这些设备联接在一个Ethernet(以太网) TCP/IP网络上。 这个客户机/服务器模式是基于4种类型报文: l MODBUS请求 l MODBUS证实 l MODBUS指示 l MODBUS响应 请求 指示 确认 正式 响应 MODBUS请求是客户机在网络上发送用来启动事务处理的报文 MODBUS指示是服务端接收的请求报文 MODBUS响应是服务器发送的响应信息 MODBUS证实是在客户端接收的响应信息 MODBUS报文传输服务(客户机/服务器模型)用于实时信息交换: l 在两个

3、设备应用程序之间 l 在设备应用和其它设备之间 l 在HMI/SCADA应用程序和设备之间 l 在一个PC和一个提供在线服务的设备程序之间 1.3 规范性引用文件 这章给出了在这个文件之前喜欢阅读的文件列表: 2 MODBUS协议规范 4 RFC1122 MODBUS客户机 MODBUS服务器 GB/T 90 2 缩略语 ADU 应用数据单元 IETF 因特网工程工作组 IP 互连网协议 MAC 介质访问控制 MB MODBUS MBAP MODBUS协议 PDU 协议数据单元 PLC 可编程序逻辑控制器 TCP 传输控制协议 BSD 伯克利软件分配 MSL 最大段寿命 GB/T 91 3 背

4、景概要 3.1 协议描述 3.1.1 总体通信结构 MODBUS TCP/IP的通信系统可以包括不同类型的设备: l 连接至TCP/IP网络的MODBUS TCP/IP客户机和服务器设备 l 互连设备,例如:在 TCP/IP网络和串行链路子网之间互连的网桥、路由器或网关,联接,该子网允许将MODBUS串行链路客户机和服务器终端设备连接起来。 客户机TCP/IP网关 MODBUS TCP/IP 服务器TCP/IP 网关 MODBUS串行链路 图1:MODBUS TCP/IP通信结构 MODBUS协议定义了一个与基础通信层无关的简单协议数据单元(PDU)。特定总线或网络上的MODBUS协议映射能够

5、在应用数据单元(ADU)上引入一些附加域。 地址域 功能码 数据 差错校验 ADU PDU 图2:通用MODBUS帧 启动MODBUS事务处理的客户机建立MODBUS应用数据单元。这个功能码向服务器指示执行执行哪种操作。 MODBUS 客户机 TCP/IP MODBUS客户机 TCP/IP MODBUS 客户机 串行链路 MODBUS服务器TCP/IP MODBUS服务器TCP/IP MODBUS服务器串行链路 MODBUS 服务器串行链路 GB/T 92 3.1.2 TCP/IP上的MODBUS应用数据单元 这节描述了MODBUS TCP/IP网络中进行的MODBUS请求或响应的封装。 MO

6、DBUS TCP/IP ADU PDU 图3:TCP/IP上的MODBUS的请求/响应 在TCP/IP上使用一种专用报文头识别MODBUS应用数据单元。将这种报文头称为MBAP报文头(MODBUS协议报文头)。 这种 报文头提供一些与串行链路上使用的MODBUS RTU应用数据单元比较的差别: l 用MBAP报文头中的单个字节单元标识符取代MODBUS串行链路上通常使用的MODBUS从地址域。这个单元标识符用于设备的通信,这些设备使用单个 IP 地址支持多个独立MODBUS终端单元,例如:网桥、路由器和网关。 l 用接收者可以验证完成报文的方式设计所有 MODBUS 请求和响应。对于 MODB

7、US PDU有固定长度的功能码来说,仅功能码就足够了。对于在请求或响应中携带一个可变数据的功能码来说,数据域包括字节数。 l 当在TCP上携带MODBUS时,即使将报文分成多个信息包来传输,办事在MBAP报文头上携带附加长度信息,以便接收者能识别报文边界。显式和隐式长度规则的存在以及CRC-32差错校验码的使用(在以太网上)将对请求或响应报文产生极小的未检出干扰。 3.1.3 MBAP报文头描述 MBAP报文头包括下列域: 域 长度 描述 客户机 服务器 事务元标识符 2个字节 MODBUS 请求/响应事务处理的识别码 客户机启动 服务器从接收的请求中重新复制 协议标识符 2个字节 0=MOD

8、BUS协议 客户机启动 服务器从接收的请求中重新复制 长度 2个字节 以下字节的数量 客户机启动(请求) 服务器(响应)启动 单元标识符 1个字节 串行链路或其它总线上连接的远程从站的识别码 客户机启动 服务器从接收的请求中重新复制 报文头为7个字节长: 事务处理标识符:用于事务处理配对。在响应中,MODBUS服务器复制请求的事务处理标识符。 协议标识符:用于系统内的多路复用。通过值0识别MODBUS协议。 长度:长度域是下一个域的字节数,包括单元标识符和数据域。 单元标识符:为了系统内路由,使用这个域。专门用于通过以太网TCP-IP网络和MODBUS串行链路之间的网关对MODBUS或MODB

9、US+串行链路从站的通信。MODBUS客户机在请求中设置这个域,在响应中服务器必须利用相同的值返回这个域。 MBAP报文头 功能码 数据 GB/T 93 在注册的502端口上利用TCP发送所有MODBUS/TCP ADU。 注:用Big-endian编码不同域。 3.2 MODBUS功能码描述 在MODBUS协议规范2中详细说明了MODBUS应用层协议上使用的标准功能码。 GB/T 94 4 功能描述 这里提供的 MODBUS组件结构是一个既包含MODBUS客户机又包含MODBUS服务器组件的通用模型,适用于任何设备。 有些设备可能仅提供服务器或客户机组件。 本章的第一部分,给出一个有关MOD

10、BUS报文传输服务组件结构的简要概述,然后,给出结构模型内部每一个组件的描述。 4.1 MODBUS组件结构模型 用户应用通讯应用层MODBUS客户接口MODBUS客户接口MODBUS客户机 MODBUS服务器TCP管理层栈参数化 连接管理 访问控制TCP/IP栈资源管理与流量控制图4 MODBUS报文传输服务概念结构 l 通信应用层 一个MODBUS设备可以提供一个客户机和/或服务器MODBUS接口。 可提供一个MODBUS后台接口,允许间接的访问用户应用对象。 此接口由四部分组成:离散量输入、离散量输出(线圈)、寄存器输入和寄存器输出。此接口与用户应用数据之间的映射必须加以定义(本地问题)

11、。 基 本 数 据表 对象类型 属性 说明 离散量输入 1位 只读 此类数据可来自I/O系统 线圈 1位 读-写 此类数据可被应用程序修改 寄存器输入 16位字 只读 此类数据可来自I/O系统 GB/T 95 寄存器输出 16位字 只写 此类数据可被应用程序修改 设备应用寄存器离散输入线圈寄存器输入寄存器输出MODBUS访问MODBUS服务器设备设备应用寄存器离散输入线圈寄存器输入寄存器输出MODBUS访问MODBUS服务器设备MODBUS请求 MODBUS请求RWRW图5、分离数据块的MODBUS数据模型 6、单一数据块的MODBUS数据模型 MODBUS客户机 MODBUS客户机允许用户应

12、用清晰地控制与远端设备的信息交换。MODBUS客户机根据用户应用向MODBUS客户接口发送的需求中所包含的参数生成一个MODBUS请求。 MODBUS客户机调用一个MODBUS的事务处理,事务处理管理包括MODBUS证实的等待和处理。 MODBUS客户机接口 MODBUS客户机接口提供一个接口,使得用户应用能够生成对包括访问 MODBUS 应用对象在内的各类MODBUS服务的请求。尽管在实现模型中以实例说明,但是MODBUS客户机接口(API)在这里不进行描述。 MODBUS服务器 在收到一个MODBUS请求以后,模块激活一个本地操作进行读、写、或完成其他操作。这些操作的处理对应用程序开发人员

13、来说都是透明的。MODBUS服务器的主要功能是等待来自TCP502 口的MODBUS请求,处理这一请求,然后生成一个MODBUS应答,应答取决于设备状况(场境)。 MODBUS后台接口 MODBUS后台接口是一个从MODBUS服务器到定义应用对象的用户应用之间的接口。 l TCP管理层 报文传输服务的主要功能之一是管理通信的建立和结束,管理建立在TCP连接上的数据流。 连接管理 在客户机和服务器的MODBUS模块之间的通信需要调用TCP连接管理模块。它负责全面管理报文传输TCP连接。 连接管理中存在两种可能:用户应用自身管理TCP连接,或全部由这个模块进行连接管理,而对用户应用透明。后一种方案

14、灵活性较差。 GB/T 96 TCP 502口的侦听是为MODBUS通信保留的。在缺省状态下,强制侦听这个口。然而,有些市场或应用可能需要其他口作为TCP上MODBUS的通信之用。当需要与非施奈德(Schneider)产品进行互操作时,就属于这种情况,例如:在建筑控制中。为此,强烈建议:客户机和服务器均应向用户提供对TCP口号上的MODBUS参数进行配置的可能性。重要的是:即使在某一个特定的应用中为MODBUS服务配置了其他TCP服务器口,除一些特定应用口外,TCP服务器502口必须仍然是可用的。 访问控制模块 在某些至关重要的场合,必须禁止不需要的主机对设备内部数据的访问。这既是为什么需要安

15、全模式,也是在需要时实现安全处理的原因。 l TCP/IP栈层 TCP/IP的栈可以进行参数配置,以便于使得数据流控制、地址管理和连接管理适应于特定的产品或系统的不同的约束。一般说来,BSD套接字接口就用来管理TCP连接。 l 资源管理和数据流控制 为了平衡MODBUS客户机与服务器之间进出报文传输的数据流,在MODBUS报文传输栈的所有各层均设置了数据流控制机制。资源管理和数据流控制模块首先是基于TCP内部数据流控制,附加数据链路层的某些数据流控制,以及用户应用层的数据流控制。 4.2 TCP连接管理 4.2.1 连接管理模块 4.2.1.1 总体描述 MODBUS通信需要建立客户机与服务器

16、之间的TCP连接。 连接的建立可以由用户应用模块直接实现,也可以由TCP连接管理模块自动完成。 在第一种情况下,用户应用模块必须提供应用程序接口,以便完全管理连接。这种方式为应用开发人员提供了灵活性,但需要TCP/IP机制方面的专长。 在第二种方案中,TCP连接管理完全不出现,用户应用仅需要发送和接受MODBUS报文。TCP连接管理模块负责在需要时建立新的TCP连接。 TCP客户机和服务器连接数量的定义不属于本文件的范畴(在本文中采用n)。根据设备能力,TCP连接的数量会不同。 实现规则: 1)如果没有明确的用户需求,建议采用自动的TCP连接管理 2)建议:打开并保持与远端设备的连接,而不要在

17、每次MODBUS/TCP事务处理时打开和关闭连接。 注:然而,MODBUS客户必须能够接收来自服务器的关闭请求,并关闭连接。当需要时,连接可以被重新打开。 3)建议:每一个MODBUS客户至少要打开与远端MODBUS服务器的TCP连接(同一IP地址)。一个GB/T 97 应用建立一个连接是好的选择。 4)几个MODBUS事务处理可以在同一个TCP连接上被同时激活 注:如果以此方式,MODBUS事务处理标识必须被用来唯一地识别请求与响应的匹配。 5)在两个远端MODBUS设备(一个客户机和一个服务器)之间双向通信的情况下,有必要为客户机数据流和服务器数据流分别建立连接。 6)一个TCP帧只能传送

18、一个MODBUS ADU。建议:不要在同一个TCP PDU中发送多个请求或应答。 闲置等待连接请求关闭最早的无用的连接客户机 服务器建立连接主动连接网络传输接收连接关闭最早的无用非优先的的连接建立连接请求处理拒绝连接访问控制IP禁止IP授权非访问控制1024)DeviceIP2Server502 Portn Client(n1024) Ports图8:MODBUS TCP/IP连接建立 如果客户机与服务器的连接数量大于授权的连接数量,则最早建立的无用的连接被关闭。激活访问控制机制检查远端客户机的IP地址是否是经过授权的。如果未经授权,将拒绝新的连接。 MODBUS数据变换 基于已经打开的正确的

19、TCP连接发送MODBUS请求。远端设备的IP地址用于寻找所建的TCP连接。在与同一个远端设备建立多个连接时,必须选择其中一个连接用于发送MODBUS报文,可以采取不同的选择策略,例如:最早的连接、第一个连接。在MODBUS通信的全过程中,连接必须始终保持打开。如同下列各章所描述的一样,一个客户机可以向一个服务器启动多个事务处理,而不必等待前序事物处理结束。 GB/T 99 连接关闭 当客户机与服务器间的MODBUS通信结束时,客户机必须关闭用于通信的连接。 4.2.2 操作模式对TCP连接的影响 某些操作模式(两操作端点之间通信断开、一个端点的故障和重新启动、)会对TCP连接产生影响。一个连

20、接可被视为在这一侧关闭或异常终止而没有另一侧的确认,称这种连接为“半打开”的连接。 本章描述每种主要操作模式的特性。假设在连接的两端采用了“保持连接”TCP 机制(参见第4.3.2节)。 4.2.2.1 两操作端之间通信断开 通信断开的原因可以是服务器侧以太网连接电缆断开。预期的特性是: 如果在连接上没有正在发送数据包: 如果通信断开持续的时间短于“保持连接”计时器的值,将察觉不到通信断开。如果通信断开时间超过“保持连接”计时器的值,将一个错误返回到TCP连接层,由其复位连接。 如果在连接断开的前后发送一些数据包: TCP重新传输算法(Jacobson算法、Karn算法以及指数补偿算法,参见第

21、 4.3.2节)被激活。这可能导致在“保持连接”计时器终止之前TCP栈连接层复位。 4.2.2.2 服务器端的故障和重新启动 在服务器故障和重新启动以后,客户端处于“半打开”连接状态。预期的特性是: 如果在半打开的连接上没有发送数据包: 只要“保持连接”计时器还在计时中,从客户端看,连接是半打开的。之后,将返回一个错误到TCP管理层,由其复位连接。 如果在半打开的连接上发送一些数据包: 服务器在不存在的连接上接收数据。TCP层的栈发送一个复位指令来关闭客户端的半打开的连接。 4.2.2.3 客户机端的故障和重新启动 在客户机故障和重新启动以后,服务器侧处于“半打开”连接状态。预期的状态是: 如

22、果在半打开的连接上没有发送数据包: 只要“保持连接”计时器还在计时中,从服务器端看,这种连接是半打开的。之后,将返回一个错误到TCP管理层,由其复位连接。 如果在“保持连接”计时器完成计时前,客户机打开一个新的连接: 必须分两种情况研究: GB/T 100 所打开的连接与服务器侧半打开的连接具有相同的特性(相同的源和目的口、相同的源和目的IP地址),所以,在连接建立超时后(伯克利实现的多数情况下为75ms),TCP栈层将不能打开连接。为了避免较长超时时间内不能进行通信,建议:在客户机端重新启动后,确保使用与原有连接不同的源口号建立连接。 所打开的连接与服务器侧半打开的连接具有不同的特性(不同的

23、源口和相同的目的口、相同的源和目的IP地址),所以,在TCP栈层上打开连接,并向服务器侧的TCP管理层发送信号。 如果服务器侧TCP管理层仅支持一个远端客户机IP地址的连接,那么可以关闭原来的半打开的连接,使用新的连接。 如果服务器侧TCP管理层支持多个远端客户机IP地址的连接,那么新的连接保持打开状态,原来的连接也保持半打开状态,直到“保持连接”计时器计时结束,此时,将返回一个错误到TCP管理层。之后,TCP管理层将能够复位原有的连接。 4.2.3 访问控制模块 这个模块的目的是检查每一个新的连接,对照一个合法授权的远程IP地址列表,它可以授权或禁止一个远端客户机的TCP连接。 在至关重要的

24、场合,应用开发人员需要选择访问控制模块来保证网络的访问。在这种情况下,需要对每个远端IP授权或禁止访问。用户需提供一个IP地址的列表,并特别注明每个 IP地址是否合法授权。在缺省情况下,在安全模式中,用户未配置的IP地址均被禁止。所以,借助于访问控制模式,关闭来自未知的IP地址的访问连接。 4.3 TCP/IP栈的使用 TCP/IP栈提供了一个接口,用来管理连接、发送和接收数据,还可以进行参数配置,以使得栈的特性适应于设备或系统的限制。 本章的目的是给出有关栈接口的综述,以及一些与栈的参数配置有关的信息。总揽综述主要是MODBUS报文传输所使用的一些特性。 对于更多的信息,建议阅读 RFC 1

25、122,这个 RFC 1122为厂商和开发商提供了互联网通信软件的指南。RFC 1122详述了一个连接到互联网的主机必须采用的标准协议,以及一组明确的需求和选项。 栈接口一般是基于本文件中描述的BSD(伯克利软件分配代码)接口。 Network AccessEthernet II and 802.3 LayerARPIPICMPTCPModbusMsgGB/T 101 4.3.1 BSD套接字接口的应用 注:有些 TCP/IP 栈从性能考虑提出其他类型的接口。MODBUS 客户机或服务器可以使用这些特定的接口,但是在本文件中对这种使用不做描述。 一个套接字是一个通信端点,它是通信中的基本构成块

26、。通过套接字发送和接收数据可以执行一个MODBUS通信。TCO/IP库仅提供了使用TCP和提供基于连接的通信服务的流套接字。 socket()函数用来创建套接字。返回的一个套接字号被创建者用来访问套接字。套接字创建时没有地址(IP地址和口号)。 直到一个口被绑定到该套接字时,方可接收数据。 bind()函数用来绑定一个口号到套接字。bind()函数在套接字与所指定的口号之间建立一个连接。 为了初始化一个连接,客户端必须发送connect()函数来指定套接字号、远端 IP地址和远端侦听口号(主动连接建立)。 为了完成连接,服务器端必须发送accept()函数指定以前在listen()调用中所指定

27、的套接字号(被动连接建立)。一个新的套接字被创建,并具有与最初相同的特性。这个新的套接字连接到客户机的套接字,而将套接字号返回到服务器端。于是,释放初始套接字,以便为其他欲与服务器连接的客户机使用。 在 TCP 连接建立以后,数据即可被传递。将 Send()和 recv()函数专门地设计成与已经连接的套接字一道使用。 setsockopt()函数允许套接字的创建者用套接字建立若干选项。这些选项描述了套接字的操作特征。在第4.3.2节中给出这些选项的描述。 select()函数允许编程人员测试所有套接字上的事件。 shutdown()函数允许套接字的使用者来终止send()和/或recv()。

28、一旦不再需要套接字,可以使用close()函数来放弃套接字的描述信息。 GB/T 102 客户机(IP1)fd=socket()bind(fd,n)connect(fd,IP2,502)send(fd)send(fd)recv(fd)send(fd)recv(fd)recv(fd)close(fd)服务器(IP2)fd=socket()bind(fd,n)listen(fd)recv(fd“)send(fd“)recv(fd“)close(fd“)fd“=accept(fd)recv(fd“)send(fd“)send(fd“)SYN JSYK,ACK J+1ACK K+1MODBUS 请求P

29、DU1MODBUS 请求PDUiMODBUS 应答PDU1MODBUS 请求PDUnMODBUS 应答PDUiMODBUS 应答PDUnFINACK of FINFINACK of FIN图9:MODBUS信息交换 上图给出了客户机与服务器间的完整的MODBUS通信过程。客户机建立一个连接,向服务器发送3个MODBUS请求,而不等待第一个请求的应答到来。在收到所有的应答后,客户机正常地关闭连接。 4.3.2 TCP层参数配置 可以调整TCP/IP栈的一些参数以使得其特性满足产品或系统的限制。TCP层的下列参数可以进行调整: l 每个连接的参数 SO-RCVBUF, SO-SNDBUF: GB/

30、T 103 这些参数允许为发送和接收用套接字接口设定高限位。可以通过调整这些参数来实现流量控制管理。接收缓存区的的大小即为每个连接advertised window的最大值。为了提高性能,必须增加套接字缓存区的大小。否则,这些值必须小于内部驱动器的资源,以便在内部驱动器的资源耗尽之前关闭TCP窗口。 接收缓存区大小取决于TCP窗口大小、TCP最大段的大小和接收输入帧所需的时间。由于最大段的尺寸为300个字(一个MODBUS请求需要最大256字+MBAP报文头),如果需要3帧进行缓存,可将套接字缓存区大小调整为900字。为了满足最大的缓存需求和预定的时间,可以增加TCP窗口的大小。 TCP-NO

31、DELAY: 通常,小报文(称为:tinygrams)在局域网(LAN)上的传输不会产生问题,因为多数局域网是不拥堵的,但是,这些tinygrams在广域网上将会造成拥堵。一个称为“NAGLE算法”的简单方案是:收集小量的数据,当前面报文的TCP确认到达时再用单个进行发送。 为了获得更好的实时特性,建议:将小量的数据直接发送,而不要试图将其收集到一个段内再发送。这就是为什么建议强制TCP-NODELAY 选项,这个选项禁用客户机和服务器连接的“NAGLE算法”。 SO-REUSEADDR: 当MODBUS服务器关闭一个由远端客户启动的TCP连接时,在这个连接处于“时间等待”状态(两个MSL:最

32、大段寿命)的过程中,该连接所用的本地口号不能被再次用来打开一个新的连接。 建议:为每个客户机和服务器连接,指明SO-REUSEADDR选项,以迂回这个限制。此选项允许为自身分配一个口号,它作为连接的一部分在2MSL期间内等待客户机并侦听套接字接口。 SO-KEEPALIVE: TCP/IP协议缺省状态下,不通过空闲的 TCP连接发送数据。因此,如果在TCP连接端这个过程没有发送数据,在两个TCP模块间就没有交换任何数据。这就假设客户机端应用和服务器端应用均采用计数器来探测连接的存活性,以便关闭连接。 建议:在客户机与服务器连接两端均采用 KEEPALIVE 选项,以便查询另一端得知对方是否故障

33、并死机,或故障并重新启动。 然而,我们必须牢记,采用 KEEPALIVE 可能引起一个非常良好的连接,在瞬间故障时通信中断,如果保持连接计时器计时周期太短,将占用不必要的网络带宽。 l 整个TCP层的参数 TCP连接建立超时: 多数伯克利推出的系统将新连接建立的时限设定为75秒,这个缺省值应该适应于实时的应用限制。 保持连接参数: 连接的缺省空闲时间是 2 小时。超过此空闲时间将触发一个保持连接试探过程。第一个保持连接试探后,在最大次数内每隔75秒发送一个试探,直到收到对试探的应答为止。 在一个空闲连接上发出保持连接试探的最大数是 8 次。如果发出最大试探次数之后而没有收到应答,TCP向应用发

34、出一个错误信号,由应用来决定关闭连接。 超时与重发参数: GB/T 104 如果检测到一个TCP报文丢失,将重发此报文。检测丢失的方法之一是管理重发超时(RTO),如果没有收到来自远端的确认,超时终止。 TCP 进行RTO的动态评估。为此,在发送每个非重发的报文后测量往返时间(RTT)。往返时间(RTT)是指报文到达远端设备并从远端设备获得一个确认所用的时间。一个连接的往返时间是动态计算的,然而,如果TCP不能在3秒钟内获得RTT的估计,那么,就设定RTT的缺省值为3秒。 如果已经估算出RTO,它将被用于下一个报文的发送。如果在估算的RTO终止之前没有收到下一个报文的确认,启用指数补偿算法。在

35、一个特定的时间段内,允许相同报文最大次数的重发。之后,如果收不到确认,连接终止。 可以对某些栈设置连接终止之前重发的最大次数和重发的最长时间。 在TCP标准中定义了一些重发算法: Jacobson RTO估计算法用来估计重发超时(RTO); Karn算法指出,在重发段,不应进行RTO估计; 指数补偿算法定义:对于64秒时间上限内每一次重发,加倍重发超时; 快速重发算法允许在收到3个重复确认之后进行重发。考虑这个算法是因为:在LAN上,可能会导致报文丢失的检测快于等待RTO终止的检测。 在MODBUS实现中,推荐使用这些算法。 4.3.3 IP层的参数配置 4.3.3.1 IP参数 下列参数必须

36、在MODBUS实现的IP层进行配置: 本地IP地址:IP地址可以是A、B或C类的一种。 子网掩码:可基于各种原因,将 IP网络划分成子网:使用不同的物理介质(例如:以太网、广域网等)、更有效的使用网络地址、以及控制网络流量的能力。子网掩码必须与本地IP地址的类型相一致。 缺省网关:缺省网关的IP地址必须与本地IP地址在同一子网内。禁止使用0.0.0.0的值。如果没有定义网关,那么此值可设为127.0.0.1或本地IP地址。 注:MODBUS报文传输服务在IP层上不要求段功能。 应该利用本地IP地址、子网掩码和省缺网关(不同于0.0.0.0)配置本地IP端。 4.4 通信应用层 4.4.1 MO

37、DBUS客户端 GB/T 105 MODBUS客户机TCP/IPMODBUS客户机TCP/IPMODBUS服务器TCP/IPMODBUS服务器TCP/IPMODBUS服务器串行线MODBUS服务器串行线MODBUS客户机串行线MODBUS TCP/IP客户机TCP/IP网关服务器TCP/IP网关MODBUS 串行线图10:MODBUS客户端 4.4.1.1 MODBUS客户端设计 MODBUS/TCP协议使得能够对一个客户端进行简单的设计。下图描述了客户端发送MODBUS请求并处理MODBUS应答的主要处理过程。 处理MODBUS确认发现悬而未决的事务处理 生成MODBUS请求发送MODBUS

38、请求到TCP管理设定等待应答计数器向用户应用发送否定证实向用户应用发送肯定证实闲置等待Receive_Response_from_TCP_MgtWaiting_Response_Timer_expiresRequest_from_the_user_applicationRetries_Number_not_reachedRetries_Number_reachedConfirmation_errorConfirmation_OKSend_Not_OK Send_OK图11:MODBUS客户端操作示意图 一个MODBUS客户机可以接收三类事件: 一个来自用户应用的发送请求的新需求,在这种情况下,

39、必须对MODBUS请求进行编码,并使用TCP管理组件服务通过网络进行发送MODBUS请求。下层(TCP管理模块)会返回一个错误信息,这些错误信息是由于TCP连接错误或其他错误信息所导致的。 GB/T 106 来自 TCP 管理的一个响应,在这种情况下,客户端必须分析响应的内容,并向用户应用发送一个证实。 由于无响应而超时结束。可以通过网络发送一个重试电文,或向用户应用发送一个否定证实。 注:这些重试是由MODBUS客户机启动的,可以在无 TCP确认的情况下由TCP层来进行其它类型的重试。 4.4.1.2 MODBUS请求的生成 在收到来自用户应用的需求后,客户端必须生成一个MODBUS请求,并

40、发送到TCP管理。 可以将生成MODBUS请求分解成为几个子任务: MODBUS 事务处理的实例化,使客户机能够存储所有需要的信息,以便将响应与相应的请求匹配,并向用户应用发送证实。 MODBUS请求(PDU+MPAB报文头)的编码。启动需求的用户应用必须提供所有需要的信息,使得客户机能够将请求编码。根据MODBUS协议进行MODBUS PDU的编码(MODBUS功能码、相关参数和应用数据2)。填充MBAP报文头的所有域。然后,将MBAP报文头作为PDU前缀,生成MODBUS请求ADU。 发送MODBUS请求ADU到TCP管理模块,TCP管理模块负责对远端服务器寻找正确TCP的套接字。除了MO

41、DBUS ADU以外,还必须传递目的IP地址。 下图比图17更深入地描述了请求生成的过程。 MB事务处理实例化No_Transaction_Available初始化事务处理MB请求PDU编码MBAP头编码发送MB请求到TCP管理发送否定证实到用户应用Transaction_Available图12:请求生成操作示意图 GB/T 107 下面给出了实例:从地址为05的远端服务器读1个字的MODBUS请求ADU编码 MODBUS请求ADU编码: 说明 大小 实例 事务处理标识符Hi 1 0x15 事务处理标识符Lo 1 0x01 协议标识符 2 0x0000 长度 2 0x0006 MBAP报文头

42、 单元标识符 1 0xFF 功能码(*) 1 0x03 起始地址 2 0x0005 MODBUS请求 寄存器数量 2 0x0001 (*)参见MODBUS协议规范2 事务处理标识符 事务处理标识符用于将请求与未来响应之间建立联系。因此,对TCP连接来说,在同一时刻,这个标识符必须是唯一的。有几种使用此标识符的方式: - 例如:可以作为一个带有计数器的简单“TCP顺序号”,在每一个请求时增加计数器; - 也可以用作智能索引或指针,来识别事务处理的内容,以便记忆当前的远端服务器和未处理的请求。 通常,在MODBUS串行链路上,客户机必须一次发送一个请求。这意味着这个客户机在发送第二个请求之前必须等

43、待对第一个请求的回答。在MODBUS TCP上,可以向同一个服务器发送多个请求而不需等待服务器的证实。MODBUS/TCP到 MODBUS 串行链路之间的网关负责保证这两种操作之间的兼容性。 服务器收接受的请求数量取决于其容量,即:服务器资源量和TCP窗口尺寸。同样,客户机同时启动事务处理的数量也取决于客户机的资源容量。这个实现参数称为“NnmberMaxofClientTransaction”,必须作为MODBUS客户机的一个特性进行描述。根据设备的类型,此参数取值为116。 单元标识符 在MODBUS或MODBUS+串行链路子网中对设备进行寻址时,这个域是用于路由的目的。在这种情况下,“U

44、nit Identifier”携带一个远端设备的MODBUS从站地址: - 如果MODBUS服务器连接到MODBUS+或MODBUS串行链路子网,并通过一个桥或网关配置地址这个服务器,MODBUS单元标识符对识别连接到网桥或网关后的子网的从站设备是必需的。目的IP地址识别了网桥本身的地址,而网桥则使用MODBUS单元标识符将请求转交给正确的从站设备。 - 分配串行链路上MODBUS从站设备地址为1247(10进制),地址0作为广播地址。 对TCP/IP来说,利用IP地址寻址MODBUS服务器;因此,MODBUS单元标识符是无用的。必需使用值0xFF。 - 当对直接连接到TCP/IP网络上的MO

45、DBUS服务器寻址时,建议不要在“单元标识符”域使用有效的MODBUS从站地址。在一个自动系统中重新分配IP地址的情况下,并且如果以前分配GB/T 108 给MODBUS服务器的IP地址又被指配给网关,使用一个有效的从站地址可能会由于网关的路由不畅而引起麻烦。使用无效的从站地址,网关仅是简单地废弃MODBUD PDU,而不会有任何问题。建议:在采用0xFF作为“单元标识符”的无效值。 注:0也可以用作与MODBUS/TCP设备直接通信。 4.4.1.3 处理MODBUS证实 在TCP连接中,当收到一个响应帧时,位于MBAP报文头中的事务处理标识符用来将响应与先前发往TCP连接的原始请求联系起来

46、: 如果事务处理标识符没有提及任何未解决的事务处理,那么必须废弃响应; 如果事务处理标识符提及了未解决的事务处理,那么必须分解响应,以便向用户应用发送MODBUS证实(肯定的或否定的证实); 分解响应就是检验MBAP报文头和MODBUS PDU的响应: MBAP报文头 在检验协议标识符必为0x0000以后,长度给出了MODBUS响应的大小。 如果响应来自直接连接到TCP/IP网络的MODBUS服务器设备,TCP连接识别码足以清晰地识别出远端服务器。因此,MBAP头中携带的单元标识符是无效的,必须废弃这个单元标识符。 如果将远端服务器连接在一个串行链路子网上,并且响应来自一个网桥、路由或网关,那

47、么单元标识符(值0xFF)识别发送初始响应的远端MODBUS服务器。 MODBUS响应PDU 必须检验功能码,根据MODBUS协议,分析MODBUS的响应格式: 如果功能码与请求中所用的功能码相同,并且如果响应的格式是正确的,那么,向用户应用发出MODBUS响应作为肯定的证实。 如果功能码是一个MODBUS异常码(功能码+80H),向用户应用发出一个异常响应作为肯定的证实。 如果功能码与请求中所用的功能码不同(= 非预期的功能码),或如果响应的格式是错误的,那么,向用户应用发出一个错误信号作为否定的证实。 注:肯定证实是指服务器收到请求命令并做出响应的证实。并不意味着服务器能够成功地完成请求命

48、令中要求的操作(MODBUS异常响应指明执行操作失败)。 下图比图17更深入地描述了证实处理的过程。 GB/T 109 找到为进行的事务处理挂起的事务处理用MB的事务处理绑定请求分析MBAP头分析应答PDU向用户应用发送否定证实处理MB异常提取MB应答向用户应用发送肯定证实等待废弃应答非挂起的事务处理其他协议MODBUS协议MODBUS应答OK 不正确的应答MB异常应答图13:MODBUS证实处理操作示意图 4.4.1.4 超时管理 对MODBUS/TCP上事务处理所需响应时间有意不作规定。 这是因为:从毫秒级的 I/O扫描到延时几秒钟的远距离无线链路,预期MODBUS/TCP会用于可能最宽泛的通信场合。 从客户机的角度,超时必须考虑网络上预期的传输延迟,以便确定一个合理的响应时间。这种传输延迟可能是交换式以太网中的几个毫秒,或广域网连接中的几百毫秒。 反过来讲,任何客户机启动应用重试使用的超时时间应该大于预期的最大的合理响应时间。如果不遵循这一点,目标设备或网络就存在过度拥挤的潜在危险,而反过来会导致更多的错误。这是一个应该始终避免的特性。 因此,在实际中,在高性能应用中所使用的客户机超时似乎总是与网络拓扑和期望的客户机性能有关。 时间因素不很重要的系统经常采用

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报