1、ICS 25.040 N 10 韭/、五H王导G/Z 19582.3 2004 于Modbus、工业3 部!Modbus 现匕曰IP Modbus industrial automation network specification Part 3: Modbus protocol implementation guide over TCP /IP 2004-09-21发布2005-03-01实施中华人民共和国国家质量监督检验检菇总局中国国家标准化管理委员会发布GB/Z 19582.3-2004 目次前言. . . . . . . . . . . . . . . . . . . . . . I
2、II 1 范围2 客户机/服务器模型. . 3 规范性引用文件. . . 2 4 缩略语. . . . 2 5 背景概要25. 1 协议描述. . 2 5.2 Modbus功能码描述.4 6 功能描述. . . . ,. . . . . . . . . . . . . . . . . . . . . 4 6.1 Modbus组件结构模型. 4 6.2 TCP连按管理. 6 6.3 TCP/IP校的使用. . 10 6. 4 通信应用层137 实现指南. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 7.1 对象模型图. .
3、 . 22 7.2 实现类的图. . 26 7.3 序列图. 27 7.4 类和方法的描述30I GB/Z 19582.3-2004 前言本指导性技术文件包括两个通信规程中使用的Modbus应用层协议和服务规范z申行链路上的ModbusModbus串行链跻黎于TIA/EIA标准:232-F和485-AoTCP/IP上的ModbusModbus TCP/IP基于IETF文件:RFC793和RFC791。串行链路和TCP/IP上的Modbus是根据相应ISO分层模型说明的两个通信规程。下图强调指出了本指导性技术文件的主要部分.深色方框表示规范,浅色方杠表示已有的国际标准(TIA!EIA和IETF标
4、准入Modb旧L应用协且规植但如MQdbus协议在TCplP上的实现指南; ,-时叫U5SfJi!司、lCPI!P fElF RFC 793古4Modbus协1(在邸行键路1: tIJ现指南4 3 IP IETF RFC 791 出tH在路J:i的f,始耳忡.,.iI,If.W巾咱宫,飞飞J扩悄地在尺I:tt:rn:叫JUS02.3吨I K建导lEleozJ 一=_ ,0 , ,-叩5号吨-,;-峰回.曰:二布平、p4 :J 以太间物理tllIA/EIA.23Z.P T1AiEIA唰485.A基于Modbus协议的工业自动化网络规范分为三部分。第1部分:Modbus应用协议一一第2部分:Mod
5、bus协议在串行链路上的实现指南第3部分:Modbus协议在TCP!IP上的实现指南第1部分描述了Modbus事务处理;第2部分提供了一个有助于开发者实现申行链路上的Modbus应用层的参考信息;第3部分提供了一个有助于开发者实现TCP!IP上的Modbus应用层的参考信息。本部分由中国机械工业联合会提出。本部分由全国工业过程测盐和控制标准化技术委员会归口.本部分起草单位g饥械工业仪器仪表综合技术经济研究所、北京交通大学现代通信研究所、上海白动化仪表股份有限公司、施耐德也气(中国)投资有限公司、冶金工业钢铁研究总院、宝钢集团上海宝信软件股份有限公司。本部分主要起草人z欧阳劲松、孙昕、为jf)i
6、椎、冯晓升、王勇、张荣生、丛力群、段7l,;,客户铲二!j Mddhn辍捕; ; 一玉二之二二二在工工乙:二年户一一二:.二二千-44二一一一理自民自用E毛一一也词; 丁CP!f理犀fA4吁严ii!甘 i it t二二:11:-_-. - .,.,._.,-一百二T一一呈十小资跟管理,一, 由如,.!i 在!制TCP/ll扭一一一二一- 4号一Modbus报文传输服务概念结构回54 飞基本表离散E输人线圈输入寄存器保持寄存器6. 1. 1 通信应用层G/Z 19582.3-2004 世岳应用存储器Modbus由问=斗输入高散量线回Modbus请求输入寄存器;7 F 川输出宵存器Modbus服鼻
7、器世岳图6独立敬据块的Modbus数据模型世岳应用在储器Modbus由问11024) 502 连挂(IPI n , IP2 502) 图9l1odbus TCP /IP连接建立世岳IP2 客户机(,1024) 端口502 JIH号器喘口如果客户机与服务嚣的连接数量大于授权的连接数量,则最早建立的无用的连接被关闭。激活访问控制机制用来检查远程客户机的IP地址是否是经过授权的。如果未经授权,将拒绝新的连接.一一Modbu5数据传送一个Modbu5请求必须在已经被打开的正确的TCP连接上发送,远程设备的IP地址用于寻找所建立的TCP连接。在与同一个远程设备建立多个连接时,必须选择其中一个连接用于发送
8、Modbus报文,可以采取不同的选择策略,例如2最早的连接、第一个连接。在Modbus通信的全过程中,连接必须始终保持打开.一个客户机可以向一个服务器启动多个事务处理,而不必等待先前的事物处理结束.一一连接关闭当客户机与服务器间的Modbus通信结束时.客户机必须关闭用于通信的连接8 4 、阳, G/Z 19582.3-2004 6.2.2 操作模式对TCP连接的影响某些操作模式(两操作端点之间通信断开、一个端点的故障和重新启动)会对TCP连接产生影响。在没有接收到来自另侧的确认时,一个连接可被视为关闭或异常终止,称这种连接为半打开的连接。本章描述各种主要操作校式的特性。这种描述基于在连接的两
9、端采用了保持连接TCP机制的假设(见6.3.2)。6. 2. 2. 1 两操作揣之间通信断开illi信断开的原因可以是服务器侧以太网连拨电缆断开。预期的特性是z一一如果在连接上没有正在发送数据包:如果通信断开持续的时间短于保持连接计时器的值,将察觉不到通信断开。如果通信断开时间超过保持连接计时器的值,将一个错误返回到TCP连接层,由其复位连接。如果在连接断开的前后发送一些数据包TCP重新传输算法(Jacobgon 1):法、Karn1):法以及指数补偿算法,参见6.3.2)被激活。这可以导致在保持连接计时1I终止之前由钱的TCP层复位连接.6.2.2.2 服务器端的故障和重新启动在服务器故附和
10、重新启动以后,客户机端处于半打开连接状态。预期的特性是g如果在半打开的连接上没有发送数据包z只要保持连按计时器还在计时中,从客户机揣着,连接是半打开的。之后,将返回一个错误到TCP 管理层,由其复位连接。如果在半打开的连接上发送一些数据包z服务挤在不再存在的连接上接收数据。校的TCP层发送一个复位指令来关闭客户机端的半打开的连接。6.2.2.3 客户机端的故障和重新启动在客户机故陈和重新启动以后,服务ll侧处于半打开连按状态。预期的特性是如果在半打开的连按上没有发送数据包只要保持这按计时器还在计时中,从服务器端着.这种TCP半打开连接被认为是打开的。之后,将返回一个错误到该TCP管理层,由其复
11、位连接。一一如果在保持连接计时器完成计时前,客户机打开一个新的连接z必须分析两种情况21 )所打开的连接与服务侧半打开的连接具有相同的特性(相同的源和目的端口、相同的源和目的lP地址),所以,在连接建立超时后(伯克利实现的多数的况下为75mg) , TCP校后将不能打开连接。为了避免在较长超时时间内不能进行通信,建议:在客户机端重新启动后,确保使用与原有连接不同的源端口号建立连t宴。2)所打开的连接与服务器侧半打开的连接具有不同的特性(不同的源端口和相同的目的td口、相同的源和目的IP地址),所以,在TCP校层上打开连接,并向服务器侧的TCP管理层发送信号.如果服务器侧TCP管理层仅支持一个远
12、程客户机lP地址的连接,那么可以关闭原来的半打开的连接,使用新的连钱。如果服务器侧TCP管理层支持多个远程客户机lP地址的连按,那么新的连接保持打开状态,原来的连接也保持半打开状态,直到保持连按计时器计时结束,此时,将返回一个错误到TCP管理层。之后,TCP管理层将能够复位原有的连接。6.2.3 访问控制模块这个校块的日的是检查每一个新的连接,对照一个合法授权的远程IP地址表,它可以授权或禁止一个远程客户饥的TCP连按.9 G/Z 19582.3-2004 在至关重要的场合,应用开发人员需要选择访问控制模块来保证网络的访问。在这种情况下,需要对每个远程IP授权或禁止访问.用户需提供一个IP地址
13、的表,并特别注明每个IP地址是否合法授权。在缺省情况下,在安全模式中,用户未配置的IP地址均被禁止。所以,借助于访问控制模式,关闭来自未知的IP地址的访问连接.6.3 TCP/IP梭的使用见图100TCP/IP校提供了一个接口,用来管理连族、发送和按收数据,还可以进行某些参数配置,以使得校的特性适应于设备或系统的限制.抖WL主士?lfodbus r可?曹!?苦苦:丁:机1CP 1士芒?要忧?为咬咬咬Wif?!l叶波:rrif?imp J IP 专苦fJF二Yth可;二ARP 同略宙间Etberncl II I!802. 3居图10Modbus TCP /IP通讯技本章的目的是给出有关钱接口的综
14、述,以及一些与梭的参数配置有关的信息。综述的主要内容是Modbus报文传输所使用的一些特性。有关更多的信息,建议阅读RFC1122.这个RFC1122为厂商和开发商提供了互联网通信软件的指南。RFC1122详述了一个连接到互联网的主机必须采用的标准协议,以及一组明确的需求和选项。校接口一般是基于本部分中描述的BSD接口。6.3. 1 SD套接字接口的应用注g有些TCP/lP校从性能考虑提出其他类型的接口oModbus客户机或服务器可以使用这些特定的接口,但是在本标准中对这种使用不做描述。一个套接字是一个通信端点,它是通信中的基本构成块。通过套接字发送和接收数据来执行一个Modbus通信oTCP
15、/IP库仅提供了使用TCP和提供基于连接的通信服务的流套接字。socketO函数用来创建套接字。返回的一个套接字号被创建者用来访问该套接字.套接字创建时没有地址(IP地址和揣口号)。直到一个端口被绑定到该套接字时,方可接收数据。bindO函数用来绑定一个端口号到套接字。bindO函数在套接字与所指定的端口号之间建立一种联系。为了初始化一个连接,客户机必须发送connect()函数来指定套tt:字号、远程IP地址和远程监听端口号(主动连接建立)。为了完成连接,服务器必须发送acceptO函数来指定先前在listen()词用中所指定的套接字号(被动连接建立)。一个新的套接字被创建,并具有与初始套按
16、字相同的特性。这个新的套接字连接到客户机的套接字,而将套按字号返回到服务器。于是,释放初始套接字,以便为其他欲与该服务器连接的客户机使用。10 G/Z 19582.3-2004 将sendO和recv()函数专门地设计成与已经连接的套setsockopt 0函数允许套接字的创建者将套接字与选项联合使用。在6.3.2给出这些选项的描述。selectO函数允许编程人员测试所有套接字上的事件,shutdownO函数允许套接字的使用者来终止sendO和/或recvO.一且不再需要套接字,通过使用closeO函数来放弃套接字的描述符。图11给出了客户机与服务器间的完整的Modbus通信过程。客户机建立一
17、个连接,向服务器发送3个Modbus请求,而不等待第一个请求的响应到来。在收到所有的响应后,客户机正常地关闭连接。这些选项修改了套接字的操作1 1 吃苦?1 fd =accep! (fd) fd =socket 0 bind(fd,n listen(fd) close(fd) send(fd) recv(fd勺send(fd) recv(fd勺scnd(fd) recv(fd) Modbus信息交接 Afodbu ,柿次PDtjn扎-10(fb,Us1.我POUEFINIYJACK Modbus响应PDU1 Modbus响战PDUnModbus响应PDUiFIN的ACKACK K+I F1 N
18、 C K N Y -iilili-ijKAi-fit-ilrjJ114:;iill -机UM川阳一沪WMUH在(nH在TCP连接建立以后,数据即可被传送.接字一起使用。图11咱0send(fd) rccv (fd) recv(fd) recv(fd) send (fd) scnd (fd) c!ose(fd) 特征.G/Z 19582.3一20046.3.2 TCP层参数配置可以调整TCP/IP校的一些参数以使得其特性适应产品或系统的限制.TCP层的下列参数可以进行调整:每个连接的参数SO-RCVBUF, SO-SNDBUF, 这些参数允许为发送和接收用套接宇接口设定高限位。可以通过调整这些参
19、数来实现流量控制管理。接收缓冲区的大小是每个连接通告窗口的最大值.为了提高性能,必须增加套接字缓冲区的大小。否则,这些值必须小于内部驱动器的资源,以便在内部驱动器的资源耗尽之前关闭TCP窗口。接收缓冲区大小取决于TCP窗口大小、TCP最大段的大小和接收输入帧所需的时间。由于是大段的大小为300个字节(一个Modbus请求需要最大256字节+MBAP报文头),如果需要3个帧进行缓存,可将套接字缓冲区大小调整为900字节.为了满足最大需求和最好的预定时间,可以增加TCP窗口的大小。TCP-NODELA Y, 通常,小报文包在局域网(LAN)上的传输不会产生问题,因为多数局域网是不拥t苦的,但是,这
20、些小报文包在广域网上将会造成拥堵。一个称为NAGLE算法的简单方案是E收集少量的数据,当前商报文的TCP确认到达时再用单个段进行发送。为了获得更好的实时特性,建议2将少量的数据直接发送,而不要试图将其收集到一个段内再发送。这就是为什么建议强制TCP-NODELAY选项,这个选项禁止在客户机和服务器连接上采用NAGLE算法。SO-REUSEADDR, 当Modbus服务器关闭一个由远程客户启动的TCP连接时,在这个连接处于时间等待状态(2个MSL,最大段寿命)的过程中,该连接所用的本地端口号不能被再次用来打开一个新的连接。建议2为每个客户机和服务器连接规定该SO-REUSEADDR选项,以旁路这
21、个限制。此选项允许该进程为自身分配一个端口号,该端口号是在2个MSL期间内等待客户机并监听套接字的连接的一部分。SO-KEEPALIVE, 在TCP/IP协议缺省状态下,没有数据通过空闲的TCP连接发送。因此,如果在TCP连按端上没有进程发送数据,在2个TCP模块间就不交换任何数据。这就是假设客户机应用或服务器应用均采用定时器来检测连接的非激活性,以便关闭连接.建议g在客户机与服务器连接两端均采用KEEPALlVE选项,以便轮询另一端来得知对方是否故障并死机,或故障并重新启动。然而,必须注意,采用KEEPALlVE可能引起一个非常良好的连接在瞬间故障时通信中断,如果保持连接的定时器定时的时间太
22、短,将占用不必要的网络带宽。一一整个TCP层的参数建立TCP连接超时:多数伯克利推出的系统将建立新连接的时限设定为75s.这个缺省值应该适应于实时的应用限制。堡主主直主盘i连接的缺省空闲时间是2h,超过此空闲时间将触发一个保持连接试探过程。第一个保持连接试探后,在是大次数内每隔75日发送一个试探,直到收到对试探的响应为止。在一个空闲连接上发出保持连接试探的是大数是8次。如果发出最大试探次数之后而没有收到应答,TCP向应用发出一个错误信号,由应用来决定关闭连接。超时与重发参数2如果检测到个TCP报文包丢失,将重发此报文包.检测丢失的方法之一是管理章发超时12 GB/Z 19582.3-2004
23、(RTQ) .如果没有收到来自远程端的确认,超时终止。TCP进行RTO的动态评估。为此,在发送每个非ll:发的报文包后测量往返时间(RTT)。往返时间(RTT)是指报文包到达远程设备并从远程设备获得一个确认所用的时间。一个连接的往返时间是动态计算的.然而,如果TCP不能在3s内获得RTT的估算,那么,就设定RTT的缺省值为3s。如果已经估算出RTO.它将被用于下一个报文包的发送。如果在估算的RTO终止之前没有收到该报文包的确认,启用指数补偿算法。在一个特定的时间段内,允许相同报文包最大次数的重发。之后,如果收不到确认,连接终止。可以对某些校设置连接终止之前重发的应大次数和童发的最长时间。在TC
24、P标准中定义了一些重发算法g一一Jacobson RTO 估算算法用来估算童发超时(RT(); Karn算法指出,在重发段,不应进行RTO估算;指数补en:法定义2对于时间上限为64s的每一次重发,加倍重发超时;一一快速重发m丘允许在收到3个重复确认之后进行重发。考虑这个算法是因为2在LAN上,可能会导致报文丢失的检测快于等待RTO终止的检测。在Modbus实现中,推荐使用这些算法。6.3.3 IP层的参数配置6. 3. 3. 1 IP参数下列参数必须在Modbus实现的IP层进行配置2本地IP地址;IP地址可以是A、B或C类中的一种。一一子网掩码可基于各种原因,将IP网络划分成子网z使用不同
25、的物理介质(例如z以太网、广域网等)、更有效地使用网络地址、以及控制网络流量的能力。子网掩码必须与本地IP地址的类型相一致。缺省网关:缺省网关的IP地址必须与本地IP地址在同一子网内。禁止使用0.0.0.0的值.如果没有定义网关,那么此值可设为127.O. 0.1或本地IP地址。注,Mo品us报文传输服务在IP层上不要求分段功能。应该利用本地IP地址、子网掩码和省缺网关(不同于0.0.0.0)配置本地IP瑞点。6.4 通信应用层6.4. 1 Modbus客户机见图12。Modbus 在户机TC P / lP Modhus 服务黯TCP / IP Modbus 服务器TCP / IP Modbu
26、s 在尸机TCP / IP Modbus TCP/lp Modbus 服务器申行链酣Modbus布行链酣图12Modbus客户机单元Modbus 客户机串行旺盹在户机TCPIIP 也同关Modbus 服务器串行链盹13 G;Z 19582.3-2004 6. 4. 1. 1 Modbus客户机设计Modbus/TCP协议的定义能够对一个客户机进行简单的设计。图13描述了客户机发送Modbus请求并处理Modbus响应的主要处理过程。接收来自TCP管理的响应处理Modbus证实错误证实!E常证重芷现挂起的事务仕理空闲嘻街一带枪响应定时器超时f重试战胜未达到重试次达到向用户应用宜送肯定证实向用户应
27、用芷送古草证实置送不E常来自用户应用的请求生成Modbus请求E送Modbusi再求flJTCP轩理芷送正常世直等待应11定时器图13Modbus客户机操作图一个Modbus客户机可以接收3类事件2一一一一个来自用户应用的发送消求的新要求,在这种情况下,必须对Modbus请求进行编码.并使用TCP管理组件服务通过网络进行发送Modbus请求。下层CTCP管理校块)会返回一个错误信息,这些错误信息是由于TCP连按错误或其他错误信息所导致的。一一来自TCP管理的一个响应,在这种情况下,客户机必须分析响应的内容,并向用户应用发送一个证实。一一由于无响应而超Bt结束。可以通过网络发送一个重试信息,或向
28、用户应用发送一个否定证实。注2这些重试是由Modbus客户机启动的,可以在无TCP确认的情况下由TCP层来进行其他类型的重试。6. 4. 1. 2 lIodbus请求的生成14 在收到来自用户应用的要求后,客户机必须生成一个Modbus请求,并发送到TCP管理。可以将生成Modbus请求分解成为几个子任务z一-Modbus事务处理的实例化,使客户机能够记忆所有需要的信息,以便将后续的响应与相应的请求匹配,并向用户应用发送证实。一Modbus请求CPDU十MPAB报文头)的编码。启动要求的用户应用必须提供所有需要的信息,使得客户机能够将请求编码。根据Modbus应用协议进行ModbusPDU的编
29、码CModbus功能码、相关参数和应用数衍,见GB/Z19582. 1-200.1(基于Modbus协议的工业自动化网络规范第1部分:Modbus应用协议川。填充MBAP报文头的所有域。然后,将MBAP报文头作为PDU的前缀,生成Modbus请求八DU,发送Modbus请求ADU到TCP管理校块.TCP管理仪块负责对远程服务寻找正确的TCP套接字。除了ModbusADU以外,还必须传递目的IP地址。图14比图19更深入地描述了请求生成的过程。事务世理无量MB事务蛙理Jl;例化事各处理有撞芷送否定证实到用户应用初始化事务蛙理编码MB请求PDU编码MBAP生芷送MB请求到TCP管理图14请求生成操
30、作图G/Z 19582.3-24 表3描述了从地址为05的远程服务器读1个字的Modbus请求ADU编码的实例.表3措述大实111) 事务处理标识符Hi1 Ox15 事务处理标识符Lo1 Ox01 MBAP报文头协议标识符2 OxOOOO 民度2 Ox0006 单元标识符1 OxFF 功能码I Ox03 Modbus请求起始地址2 Ox0005 寄存器数量2 Ox0001 静见GB/Z19582.1-2004 15 GB/Z 19582.3-2004 -一事务处理标识符事务处理标识符用于将请求与未来响应之间建立联系。因此,对TCP连接来说,在同一时刻,这个标识符必须是唯一的。有几种使用此标识符
31、的方式g1)例如:可以作为一个带有计数器的简单TCP顺序号,对每一个请求将计数器增加1; 2)也可以用作智能索引或指针,来识别事务处理的内容,以便记忆当前的远程服务器和挂起的请求。通常,在Modbus串行链路上,客户机必须一次发送一个请求。这意味着这个客户机在发送第二个请求之前必须等待对第一个请求的回答。在ModbusTCP上,可以向同一个服务器发送多个请求而元需等待服务器的证实oModbus/TCP到Modbus串行链路之间的网关负责保证这两种操作之间的兼容性.服务器接受的请求数量取决于其容量,即g服务器资源量和TCP窗口大小。同样,客户机同时启动事务处理的数量也取决于客户机的资源容量。这个
32、实现参数称为NumberMaxofClientTransaction, 必须作为Modbus客户机的一个特性进行描述。根据设备的类型,此参数取值为116.一一一单元标识符在Modbus或Modbus十子网中对设备进行寻址时,这个城是用于路由的目的。在这种情况下,单元标识符携带一个远程设备的Modbus从站地址21)如果Modbus服务器连拔到Modbus+或Modbus市行链路子网,并通过一个网桥或网关来寻址.Modbus单元标识符对识别连接到网桥或网关后的子网的从站设备是必需的。目的IP地址识别了网桥本身的地址,而网桥则使用Modbus单元标识符将请求转交给正确的从站设备.2)分配串行链路上
33、Modbus从站设备地址为1247(lO进和tl) .地址。作为广播地址.对TCP/IP来说,利用IP地址寻址Modbus服务器;因此.Modbus单元标识符是元用的。必需使用值OxFF.3)当对直接连接到TCP/IP网络上的Modbus服务器寻址时,建议不要在单元标识符域使用有效的Modbus从站地址,在一个自动化系统中重新分配IP地址的情况下,并且如果以前分配给Modbus服务器的IP地址又被指配给网关,使用一个有效的从站地址可能会由于网关的路由不畅而引起麻烦。使用无效的从站地址,网关仅是伺单地废弃ModbusPDU.而不会有任何问题。建议g采用OxFF作为单元标识符的无效值。注,0也可以
34、用作与Modbu,;TCP设备直撞通信.6. 4. 1. 3 处理Modbus证实在TCP连接中,当收到一个响应帧时,位于MBAP报文头中的事务处理标识符用来将该响应与先前发往TCP连接的原始请求联系起来一一如果事务处理标识符没有提及任何Modbus挂起的事务处理,那么必须废弃该响应.一一如果事务处理标识符提及了Modbus挂起的事务处理,那么必须分析该响应,以便向用户应用发送Modbus证实(肯定的或否定的证实)。分析响应存在于验证MBAP报文头和ModbusPDU的呐应过程中g一-MBAP报文头在检验协议标识符必为OxOOOO以后,长度给出了Modbus响应的大小。如果响应来自直按连接到T
35、CP/IP网络的Modbus服务器设备.TCP连接识别码足以清晰地识别出远程服务器。因此.MBAP头巾携带的单元标识符是没有意义的,必须废弃这个单元标识符。如果将远程服务器连接在一个申行链路子网上.Jj且响应来自于一个网桥、路由器或网关,那么单元标识符(的#OxFFl识别发送初始呐!茸的远程Modbus服务器。Modbus响应PDU必须检验功能码,并根据Modbu只应用协议分析Modbus的呐应格式z16 , G/Z 19582.3-2004 1)如果功能码与请求中所用的功能码相同,并且如果响应的格式是正确的,那么,向用户应用发出Modbus响应作为肯定的证实。2)如果功能码是一个Modbus
36、异常码(功能码+80H).向用户应用发出一个异常响应作为肯定的证实。3)如果功能码与请求中所用的功能码不同(非预期的功能码).或如果响应的格式是错误的,那么,向用户应用发出一个错误信号作为否定的证实。注z肯定证实是指服务器收到请求命令并做出晌应的证实,并不意味着服务器能够成功地完成请求命令中要求的操作(Modbu,异常响应指明执行操作失败图15比图19更深入地描述了证实处理的过程。MB响应正确提取MB响应挂起的事务址理用MB的事务扯理带有请求的m分析MBAP生Modbus协坦分析响应PDU不正确响阳MB异常响应扯理MB异常向用户应用E送肯定证实等待找到来进行的MB事务扯理非挂起的事务处理其他协
37、盐1向网户应用直选否定证实Ifl.弃响应图15Modbus证实处理操作示意图6.4. 1. 4 超时管理对Modbus/TCP上事务处理所需响应时有意不作规定。这是因为g希望Modbus/TCP可用于可能最宽泛的通信场合,从毫秒级的1/0扫描到延时几秒钟的远距离无线链接。从客户机的角度,超时必须考虑网络上预期的传输延迟,以便确定一个合理的响应时间。这种传输延迟可能是交换式以太网中的几个毫秒,或广域网连接中的几百毫秒。17 GB/Z 19582.3-2004 反过来讲,任何客户机启动应用重试所使用的超时时间应该大于预期的最大的合理响应时间.如果不遵循这一点,目标设备或网络就存在过度拥挤的潜在危险
38、,而反过来会导致更多的错误.这是一个应该始终避免的特性。因此,在实际中,在高性能应用中所使用的客户机超时似乎总是与网络拓扑和期望的客户机性能有关。时间因素不很重要的系统经常采用TCP缺省值作为超时值,在多数平台上,几秒钟之后将报告通信故障。6.4.2 l1odbus服务器见图16。Modbus 客户机附行量路M机?JM户YM挥tM机?川户YM害时比Modbus E务器TCP !IP Modbus TCP/IP Modbus 服务器TCP / IP Modbus 圃#器行链路Modbus m务器取行怪路Modbus但行链盹图16Modbus服务器单元Modbus服务器的作用是为应用对象提供访问以
39、及为远程客户机提供服务。根据用户应用,提供不同类型的访问:一一简单访问2获得或设定应用对象的属性;一一一高级访问2启动一个特定的应用服务。Modbus服务器必须z将一个应用对象映射成可读或可写的Modbus对象,以便获得或设定应用对象的属性g一一提供一种对应用对象启动服务的方法。在运行过程中,Modbus服务器必须分析接收到的Modbus请求,处理所需的操作,返回Modbus响应。6.4.2.1 Modbus 服务器设计Modbus服务器设计取决于如下两个方面g对应用对象访问的类型(对属性的简单访问或对服务的高级访问); Modbus 服务器与用户应用之间交互作用的类型(同步或异步)。因17描
40、述了服务器进行的主要处理过程,以便获得来自TCP管理的Modbus请求,然后,分析请求,处理所有宫的操作,返回Modbus响应。如图16所示一一-Modbus服务器本身可以立即处理一些服务,而无需直接与用户应用交互作用;一一有些服务还可能需要与被处理的用户应用进行显示交互操作:18 GB/Z 19582.3-2004 一一有些高级服务需要调用称为Modbus后端服务的特定接口。例如z可能根据用户应用层协议,使用若干个Modbus请求/响应事务处理来启动用户应用服务。后端服务负责所有单个Modbus事务处理的正确进行,以便于执行全局用户应用服务。在下列各章中纷出更完整的描述。Modbus服务器可
41、以接受同时对多个Modbus请求的服务.服务器可以同时接受Modbus请求的最大数量是Modbus服务器的主要特性之一。这个数量取决于服务器的设计以及它的处理和存储能力.将这个实现参数称为NumberMaxOfServerTransaction ,必须作为Modbus服务器的一个特性描述这个实现参数。根据设备的能力,它的取值范围为:1-160N um ber MaxO fServer T ra nsaction参数对Modbu8服务器的操作和性能有非常显著的影响.更为重要的是,所管理的并发Modbus事务处理的数量可能影响服务器对Modbus请求的响应时间。空闲盟鼻器韧简化用户应用的响应调用用
42、户自用放弃Modhus指示ATCP管理接收Modbus指示调用后台接口拒跑Modbus事骨仕理1Modbu氢PDU桂验接受的Modbus事务蛙理仕理未完成需要用户应用处理Modbus服务处理响应蛙理扯理不成功蛙理不成功蛙理成功蛙理成功生成Modbus异常MB异常响应成功蛙理结束:tt送响由1白lTCP队19t辑放Modbus服务器事费扯理图17处理Modbus指示操作图6. 4. 2. 2 Modbus PDU校验图18描述了ModbusPDU校验操作.生成Modbus响应MB响应成功Modbus PDU校验功能首先是分析MRAP报文头。必须校验协议标识符域:一一如果与Modbus协议类型不同
43、,那么简单地废除这个指示。一一如果是正确的(=Modbus协议类型;值为OxOO).则建立了一个Modbus事务处理实例。服务器可以实例化的Modbus事务处理的最大数量由参数Num berMaxOfTransaction (系统或配置参数)来定义。在元效的事务处理的悄况下,服务器生成一个Modbus异常响应(异常码62服务器忙)。19 GB;Z 19582.3-2004 如果事务处理是有效的,它将被启动,以便存储下列信息一一用于发送指示的TCP连接标识符(由TCP管理给出h一Modbus事务处理!D(在MBAP报文头中给出); 单元标识符(在MBAP报文头中给出) 然后,分析ModbusPD
44、U.首先分析功能码:当无效时,生成Modbus异常响应(异常码Iz无效功能h如果接收功能码,服务器启动一个Modbus服务处理操作。分析MBAP圭MBAP错误MBAP正确废弃MB指示建立MB事务处理主制【事务扯到无耻事务蛙理布撞卦析MBPDU MB PDU错误拒绝MB事务蛙理iE确接蛊MB事骨蛙理图18Modbus PDU校验操作图6.4.2.3 Modbus服务处理见图19.20 根据后面实例中描述的设备软件和硬件结构,可以用不同的方式进行要求的Modbus服务处理z一一在一个小型设备或单线程体系结构内.Modbus服务器可以直接访问用户应用数据,服务器自身可以本地处理要求的服务,而无需调用
45、后端服务。根据Modbus应用协议规范进行这种处理。在出现错误的情况下,生成Modbus异常响应。一一在一个模块化的多处理器的设备或多线程体系结构中,通信层和用户应用层是两个独立的实体,通信实体可以完整地处理一些不重要的服务,而其他的服务需要应用后端服务与用户应用实体协调完成。G/Z 19582.3-2004 为了实现与用户应用的交互作用.Modbus后端服务必须执行所有适当的机制,以便处理用户应用的事务处理,并且正确管理用户应用调用和相应的响应。事务处理接堕骨折所谓幸的服务本地处理需用户应用蛙理址理来完成本地服好扯理处理成功通过后台接口,向用户应用茧送一个调用谓束来自用户应用的响应应11世理
46、完成蛙理不成功处理成功f处理革成功 生成Modbus异常应特生成Modbus应再图19Modbus服务处理操作图6.4.2.4 用户应用接口(后端接口在Modbus后揣服务中,可以执行几种策略来完成工作,虽然从用户网络吞吐量、接口带宽使用、响应时间、甚至设计工作量的角度,这几种策略是不均衡的。Modbus后TA服务将对用户应用采用适当接口z一一或基于申行链跻的物理t8:口,或双揣口RAM方案,或一条简单的1/0连线,或由操作系统提供的基于报文传输服务的逻辑接口。一一到用户应用的接口可以是同步的或异步的。Modbus后封M服务还须使用适当的设计模式来得到/设定目标属性或触发服务。在某些情况下,一个简单的网关模式将是足够的。在某些其他情况下,从简单的历史交换表到更复杂的重复机制中,设计者将必须执行带有高速缓冲存储器的代理服务器板式。Modbus后揣服务负责实现协议的转换,以便与用户应用进行交互作用。因此,它必须具有相应机制来实现报文的分拆和童组、数据一致性保证以及所有需要的同步等功能。6.4.2.5 Modbus晌应的生成一旦处理请求.Modbus服务器必须使用适当的Modbus服务器事务处理生成一个响应,并且必须将响应发送到TCP管理组件。根据处理结果,可以生成两类响应s一一肯定的Modbus响应:响应功能阴=请求功能码。M