서론
范围
这个文件的范围是介绍TCP/IP上的MODBUS프레임传输服务,提供参考信息以帮助软件개발者使用这种服务。这个文中不包括MODBUS기능 코드的编码콘텐츠,这些信息请参阅MODBUS프로토콜사양[2]。
这个文件准确而全面地설명了MODBUS프레임传输服务的实现。其目的是便于在那些使用MODBUS프레임传输服务的设备之间进行可互操作。
这个文件主要由三部分组成:
- 在TCP/IP上的MODBUS프로토콜개요
- MODBUS客户机、服务器和게이트웨이도구的功能설명
- 针对一个MODBUS实现实例的目标模型建议的实现准则。
客户机/服务器模型
MODBUS프레임传输服务提供设备之间的客户机/服务器통신,这些设备联接在一个이더넷(以太网) TCP/IP네트워크上。
这个客户机/服务器모드是基于4种유형프레임:
- MODBUS 请求
- MODBUS 证实
- MODBUS 指示
- MODBUS 响应

MODBUS请求是客户机在네트워크上보내기用来启动事务处理的프레임
MODBUS指示是服务端수신的请求프레임
MODBUS响应是服务器보내기的响应信息
MODBUS证实是在클라이언트수신的响应信息
MODBUS프레임传输服务(客户机/服务器模型)用于实时信息交换:
- 在两个设备적용程序之间
- 在设备적용和其它设备之间
- 在HMI/SCADA적용程序和设备之间
- 在一个PC和一个提供在线服务的设备程序之间
사양性引用文件
这章给出了在这个文件之前喜欢阅读的文件列表:
[2] MODBUS프로토콜사양
[4] RFC1122
缩略语
ADU -- 적용데이터单元
IETF -- 因特网엔지니어링工作组
IP -- 互连网프로토콜
MAC -- 介质访问控制
MB -- MODBUS
MBAP -- MODBUS프로토콜
PDU -- 프로토콜데이터单元
PLC -- 可编程序逻辑제어기
TCP -- 传输控制프로토콜
BSD -- 伯克利软件分配
MSL -- 最大段寿命
背景概要
프로토콜설명
总体통신结构
MODBUS TCP/IP的통신系统可以包括不同유형的设备:
- 연결至TCP/IP네트워크的MODBUS TCP/IP客户机和服务器设备
- 互连设备,例如:在TCP/IP네트워크和串行链路子网之间互连的网桥、路由器或게이트웨이,联接,该子网允许将MODBUS串行链路客户机和服务器终端设备연결起来。

图1:MODBUS TCP/IP통신结构
MODBUS프로토콜定义了一个与基础통신层无关的简单프로토콜데이터单元(PDU)。特定总线或네트워크上的MODBUS프로토콜映射能够在적용데이터单元(ADU)上引入一些附加域。

图2:通用MODBUS帧
启动MODBUS事务处理的客户机建立MODBUS적용데이터单元。这个기능 코드向服务器指示执行执行哪种操作。
TCP/IP上的MODBUS적용데이터单元
这节설명了MODBUS TCP/IP네트워크中进行的MODBUS请求或响应的封装。

图3:TCP/IP上的MODBUS的请求/响应
在TCP/IP上使用一种专用헤더识别MODBUS적용데이터单元。将这种헤더称为MBAP헤더(MODBUS프로토콜헤더)。
这种헤더提供一些与串行链路上使用的MODBUS RTU적용데이터单元比较的差别:
- 用MBAP헤더中的单个바이트유닛 식별자取代MODBUS串行链路上通常使用的MODBUS从주소域。这个유닛 식별자用于设备的통신,这些设备使用单个IP주소支持多个独立MODBUS终端单元,例如:网桥、路由器和게이트웨이。
- 用수신者可以验证完成프레임的방식设计所有MODBUS请求和响应。对于MODBUS PDU有固定길이的기능 코드来说,仅기능 코드就足够了。对于在请求或响应中携带一个可变데이터的기능 코드来说,데이터域包括바이트数。
- 当在TCP上携带MODBUS时,即使将프레임分成多个信息包来传输,办事在MBAP헤더上携带附加길이信息,以便수신者能识别프레임边界。显式和隐式길이规则的存在以及CRC-32差错체크섬的使用(在以太网上)将对请求或响应프레임产生极小的未检出干扰。
MBAP헤더설명
MBAP헤더包括下列域:
| 域 | 길이 | 설명 | 客户机 | 服务器 |
| 事务元标识符 | 2个바이트 | MODBUS请求/响应事务处理的识别码 | 客户机启动 | 服务器从수신的请求中重新복사 |
| 프로토콜 식별자 | 2个바이트 | 0=MODBUS프로토콜 | 客户机启动 | 服务器从수신的请求中重新복사 |
| 길이 | 2个바이트 | 以下바이트的数量 | 客户机启动(请求) | 服务器(响应)启动 |
| 유닛 식별자 | 1个바이트 | 串行链路或其它总线上연결的远程슬레이브的识别码 | 客户机启动 | 服务器从수신的请求中重新복사 |
헤더为7个바이트长:
事务处理标识符:用于事务处理配对。在响应中,MODBUS服务器복사请求的事务处理标识符。
프로토콜 식별자:用于系统内的多路复用。通过值0识别MODBUS프로토콜。
길이:길이域是下一个域的바이트数,包括유닛 식별자和데이터域。
유닛 식별자:为了系统内路由,使用这个域。专门用于通过以太网TCP-IP네트워크和MODBUS串行链路之间的게이트웨이对MODBUS或MODBUS+串行链路슬레이브的통신。MODBUS客户机在请求中设置这个域,在响应中服务器必须利用相同的值返回这个域。
在회원가입的502포트上利用TCP보내기所有MODBUS/TCP ADU。
注:用Big-endian编码不同域。
MODBUS기능 코드설명
在MODBUS프로토콜사양[2]中详细설명了MODBUS적용层프로토콜上使用的표준기능 코드。
功能설명
这里提供的MODBUS组件结构是一个既包含MODBUS客户机又包含MODBUS服务器组件的通用模型,适用于任何设备。
有些设备可能仅提供服务器或客户机组件。
本章的第一部分,给出一个有关MODBUS프레임传输服务组件结构的简要개요,然后,给出结构模型内部每一个组件的설명。
MODBUS组件结构模型

图4 MODBUS프레임传输服务概念结构
- 통신적용层
一个MODBUS设备可以提供一个客户机和/或服务器MODBUS인터페이스。
可提供一个MODBUS后台인터페이스,允许间接的访问用户적용对象。
此인터페이스由四部分组成:离散量입력、离散量출력(코일)、레지스터입력和레지스터출력。此인터페이스与用户적용데이터之间的映射必须加以定义(本地문제)。
| 基本데이터表 | 对象유형 | 属性 | 설명 |
| 离散量입력 | 1位 | 只读 | 此类데이터可来自I/O系统 |
| 코일 | 1位 | 读-写 | 此类데이터可被적용程序修改 |
| 레지스터입력 | 16位字 | 只读 | 此类데이터可来自I/O系统 |
| 레지스터출력 | 16位字 | 只写 | 此类데이터可被적용程序修改 |

- MODBUS客户机
MODBUS客户机允许用户적용清晰地控制与远端设备的信息交换。MODBUS客户机根据用户적용向MODBUS客户인터페이스보내기的需求中所包含的매개변수生成一个MODBUS请求。
MODBUS客户机调用一个MODBUS的事务处理,事务处理管理包括MODBUS证实的대기和处理。
- MODBUS客户机인터페이스
MODBUS客户机인터페이스提供一个인터페이스,使得用户적용能够生成对包括访问MODBUS적용对象在内的各类MODBUS服务的请求。尽管在实现模型中以实例설명,但是MODBUS客户机인터페이스(API)在这里不进行설명。
- MODBUS服务器
在收到一个MODBUS请求以后,模块激活一个本地操作进行读、写、或完成其他操作。这些操作的处理对적용程序개발人员来说都是透明的。MODBUS服务器的主要功能是대기来自TCP502口的MODBUS请求,处理这一请求,然后生成一个MODBUS应答,应答取决于设备状况(场境)。
- MODBUS后台인터페이스
MODBUS后台인터페이스是一个从MODBUS服务器到定义적용对象的用户적용之间的인터페이스。
- TCP管理层
프레임传输服务的主要功能之一是管理통신的建立和종료,管理建立在TCP연결上的데이터流。
- 연결管理
在客户机和服务器的MODBUS模块之间的통신需要调用TCP연결管理模块。它负责全面管理프레임传输TCP연결。
연결管理中存在两种可能:用户적용自身管理TCP연결,或전체由这个模块进行연결管理,而对用户적용透明。后一种方案灵活性较差。
TCP 502口的侦听是为MODBUS통신保留的。在缺省状态下,强制侦听这个口。然而,有些市场或적용可能需要其他口作为TCP上MODBUS的통신之用。当需要与非施奈德(Schneider)产品进行互操作时,就属于这种情况,例如:在建筑控制中。为此,强烈建议:客户机和服务器均应向用户提供对TCP口号上的MODBUS매개변수进行설정的可能性。重要的是:即使在某一个特定的적용中为MODBUS服务설정了其他TCP服务器口,除一些特定적용口外,TCP服务器502口必须仍然是可用的。
- 访问控制模块
在某些至关重要的场合,必须禁止不需要的主机对设备内部데이터的访问。这既是为什么需要安全모드,也是在需要时实现安全处理的原因。
- TCP/IP栈层
TCP/IP的栈可以进行매개변수설정,以便于使得데이터流控制、주소管理和연결管理适应于特定的产品或系统的不同的约束。一般说来,BSD套接字인터페이스就用来管理TCP연결。
- 자료管理和데이터流控制
为了平衡MODBUS客户机与服务器之间进出프레임传输的데이터流,在MODBUS프레임传输栈的所有各层均设置了데이터流控制机制。자료管理和데이터流控制模块首先是基于TCP内部데이터流控制,附加데이터链路层的某些데이터流控制,以及用户적용层的데이터流控制。
TCP연결管理
연결管理模块
总体설명
MODBUS통신需要建立客户机与服务器之间的TCP연결。
연결的建立可以由用户적용模块直接实现,也可以由TCP연결管理模块自动完成。
在第一种情况下,用户적용模块必须提供적용程序인터페이스,以便完全管理연결。这种방식为적용개발人员提供了灵活性,但需要TCP/IP机制方面的专长。
在第二种方案中,TCP연결管理完全不出现,用户적용仅需要보내기和接受MODBUS프레임。TCP연결管理模块负责在需要时建立新的TCP연결。
TCP客户机和服务器연결数量的定义不属于本文件的范畴(在本文中采用n)。根据设备能力,TCP연결的数量会不同。
实现规则:
- 如果没有明确的用户需求,建议采用自动的TCP연결管理
- 建议:열기并保持与远端设备的연결,而不要在每次MODBUS/TCP事务处理时열기和닫기연결。注:然而,MODBUS客户必须能够수신来自服务器的닫기请求,并닫기연결。当需要时,연결可以被重新열기。
- 建议:每一个MODBUS客户至少要열기与远端MODBUS服务器的TCP연결(同一IP주소)。一个적용建立一个연결是好的选择。
- 几个MODBUS事务处理可以在同一个TCP연결上被同时激活注:如果以此방식,MODBUS事务处理标识必须被用来唯一地识别请求与响应的일치。
- 在两个远端MODBUS设备(一个客户机和一个服务器)之间双向통신的情况下,有必要为客户机데이터流和服务器데이터流分别建立연결。
- 一个TCP帧只能传送一个MODBUS ADU。建议:不要在同一个TCP PDU中보내기多个请求或应答。

图7:TCP연결管理操作图
1. 显式TCP연결管理
用户적용模块负责管理所有的TCP연결:主动的和被动的연결建立、연결종료………。对客户机与服务器间所有的연결进行这种管理。BSD套接字인터페이스用在用户적용模块中来管理TCP연결。这种方案提供了完全的灵活性,但也意味着적용개발人员要具备充分的有关TCP的知识。
考虑到设备的能力和需求,必须进行설정客户机与服务器间연결数的限制。
2. 自动TCP연결管理
TCP연결管理对用户적용模块是完全透明的。연결管理模块可以接受足够数量的客户机/服务器연결。否则,在超过所授权数量的연결时必须有一种实现机制。在这种情况下,我们建议:닫기最早建立的不使用的연결。
在收到第一个来自远端客户机或本地用户적용的데이터包后,就建立了与远端对象的연결。如果一个네트워크进行终止或本地设备决定终止,此연결将被닫기。在수신연결请求时,访问控制选项可用来禁止未授权客户访问设备的可能性。
TCP연결管理模块采用栈인터페이스(通常BSD套接字인터페이스)来与TCP/IP栈进行통신。
为了保持系统需求与服务器자료之间的兼容,TCP管理将保持两个연결库。
- 第一个库(优先연결库)由那些从不被本地主动닫기的연결组成。必须提供一个설정来建立这个库。实现的원리是将这个库的每一个可能的연결与一个特定的IP주소문의起来。具有这个IP주소的设备被称为“기호的”。任何一个被“기호的”设备的新的연결请求必须被수신,并从优先연결库中取出。还有必要设置允许每个远端设备最多建立연결的数量,以避免同一设备使用优先연결库中所有的연결。
- 第二个库(非优先연결库)包括了非기호设备的연결。这里采用的规则是:当有来自非기호设备的新的연결请求,以及库中没有연결可用时,닫기早些时候建立的연결。
一个설정可作为选项提供来分配每个库中可用연결的数量。然而(非强制性的),如果需要,设计人员可在设计期间设定연결的数量。
연결管理설명
- 연결建立
MODBUS프레임传输服务必须在502口上提供一个侦听套接字,允许수신新的연결和与其他设备交换데이터。
当프레임传输服务需要与远端服务器交换데이터时,它必须与远端502口建立一个新的客户연결,以便与远距离交换데이터。本地口必须高于1024,并且每个客户연결各不相同。

图8:MODBUS TCP/IP연결建立
如果客户机与服务器的연결数量大于授权的연결数量,则最早建立的无用的연결被닫기。激活访问控制机制检查远端客户机的IP주소是否是经过授权的。如果未经授权,将拒绝新的연결。
- MODBUS데이터变换
基于已经열기的正确的TCP연결보내기MODBUS请求。远端设备的IP주소用于寻找所建的TCP연결。在与同一个远端设备建立多个연결时,必须选择其中一个연결用于보내기MODBUS프레임,可以采取不同的选择策略,例如:最早的연결、第一个연결。在MODBUS통신的全过程中,연결必须始终保持열기。如同下列各章所설명的一样,一个客户机可以向一个服务器启动多个事务处理,而不必대기前序事物处理종료。
- 연결닫기
当客户机与服务器间的MODBUS통신종료时,客户机必须닫기用于통신的연결。
操作모드对TCP연결的影响
某些操作모드(两操作端点之间통신断开、一个端点的故障和重新启动、………)会对TCP연결产生影响。一个연결可被视为在这一侧닫기或异常终止而没有另一侧的确认,称这种연결为“半열기”的연결。
本章설명每种主要操作모드的特性。假设在연결的两端采用了“ 保持연결 ”TCP机制。
两操作端之间통신断开
통신断开的原因可以是服务器侧以太网연결电缆断开。预期的特性是:
- 如果在연결上没有正在보내기데이터包:
如果통신断开持续的时间短于“保持연결”计时器的值,将察觉不到통신断开。如果통신断开时间超过“保持연결”计时器的值,将一个错误返回到TCP연결层,由其复位연결。
- 如果在연결断开的前后보내기一些데이터包:
TCP重新传输算法(Jacobson算法、Karn算法以及指数补偿算法)被激活。这可能导致在“保持연결”计时器终止之前TCP栈연결层复位。
服务器端的故障和重新启动
在服务器故障和重新启动以后,클라이언트处于“半열기”연결状态。预期的特性是:
- 如果在半열기的연결上没有보내기데이터包:
只要“保持연결”计时器还在计时中,从클라이언트看,연결是半열기的。之后,将返回一个错误到TCP管理层,由其复位연결。
- 如果在半열기的연결上보내기一些데이터包:
服务器在不存在的연결上수신데이터。TCP层的栈보내기一个复位指令来닫기클라이언트的半열기的연결。
客户机端的故障和重新启动
在客户机故障和重新启动以后,服务器侧处于“半열기”연결状态。预期的的状态是:
- 如果在半열기的연결上没有보내기데이터包:
只要“保持연결”计时器还在计时中,从服务器端看,这种연결是半열기的。之后,将返回一个错误到TCP管理层,由其复位연결。
- 如果在“保持연결”计时器完成计时前,客户机열기一个新的연결:
必须分两种情况研究:
- 所열기的연결与服务器侧半열기的연결具有相同的特性(相同的源和目的口、相同的源和目的IP주소),所以,在연결建立超时后(伯克利实现的多数情况下为75ms),TCP栈层将不能열기연결。为了避免较长超时时间内不能进行통신,建议:在客户机端重新启动后,确保使用与原有연결不同的源口号建立연결。
- 所열기的연결与服务器侧半열기的연결具有不同的特性(不同的源口和相同的目的口、相同的源和目的IP주소),所以,在TCP栈层上열기연결,并向服务器侧的TCP管理层보내기信号。
如果服务器侧TCP管理层仅支持一个远端客户机IP주소的연결,那么可以닫기原来的半열기的연결,使用新的연결。
如果服务器侧TCP管理层支持多个远端客户机IP주소的연결,那么新的연결保持열기状态,原来的연결也保持半열기状态,直到“保持연결”计时器计时종료,此时,将返回一个错误到TCP管理层。之后,TCP管理层将能够复位原有的연결。
访问控制模块
这个模块的目的是检查每一个新的연결,对照一个合法授权的远程IP주소列表,它可以授权或禁止一个远端客户机的TCP연결。
在至关重要的场合,적용개발人员需要选择访问控制模块来保证네트워크的访问。在这种情况下,需要对每个远端IP授权或禁止访问。用户需提供一个IP주소的列表,并特别注明每个IP주소是否合法授权。在缺省情况下,在安全모드中,用户未설정的IP주소均被禁止。所以,借助于访问控制모드,닫기来自未知的IP주소的访问연결。
TCP/IP栈的使用
TCP/IP栈提供了一个인터페이스,用来管理연결、보내기和수신데이터,还可以进行매개변수설정,以使得栈的特性适应于设备或系统的限制。
本章的目的是给出有关栈인터페이스的综述,以及一些与栈的매개변수설정有关的信息。总揽综述主要是MODBUS프레임传输所使用的一些特性。
对于更多的信息,建议阅读RFC 1122,这个RFC 1122为厂商和개발商提供了互联网통신软件的指南。RFC 1122详述了一个연결到互联网的主机必须采用的표준프로토콜,以及一组明确的需求和选项。
栈인터페이스一般是基于本文件中설명的BSD(伯克利软件分配代码)인터페이스。

BSD套接字인터페이스的적용
注:有些TCP/IP栈从性能考虑提出其他유형的인터페이스。MODBUS客户机或服务器可以使用这些特定的인터페이스,但是在本文件中对这种使用不做설명。
一个套接字是一个통신端点,它是통신中的基本构成块。通过套接字보내기和수신데이터可以执行一个MODBUS통신。TCO/IP库仅提供了使用TCP和提供基于연결的통신服务的流套接字。
socket()函数用来创建套接字。返回的一个套接字号被创建者用来访问套接字。套接字创建时没有주소(IP주소和口号)。直到一个口被绑定到该套接字时,方可수신데이터。
bind()函数用来绑定一个口号到套接字。bind()函数在套接字与所指定的口号之间建立一个연결。
为了初始化一个연결,클라이언트必须보내기connect()函数来指定套接字号、远端IP주소和远端侦听口号(主动연결建立)。
为了完成연결,服务器端必须보내기accept()函数指定以前在listen()调用中所指定的套接字号(被动연결建立)。一个新的套接字被创建,并具有与最初相同的特性。这个新的套接字연결到客户机的套接字,而将套接字号返回到服务器端。于是,释放初始套接字,以便为其他欲与服务器연결的客户机使用。
在TCP연결建立以后,데이터即可被传递。将Send()和recv()函数专门地设计成与已经연결的套接字一道使用。
setsockopt()函数允许套接字的创建者用套接字建立若干选项。这些选项설명了套接字的操作特征。
select()函数允许编程人员测试所有套接字上的事件。
shutdown()函数允许套接字的使用者来终止send()和/或recv()。
一旦不再需要套接字,可以使用close()函数来放弃套接字的설명信息。

图9:MODBUS信息交换
上图给出了客户机与服务器间的完整的MODBUS통신过程。客户机建立一个연결,向服务器보내기3个MODBUS请求,而不대기第一个请求的应答到来。在收到所有的应答后,客户机正常地닫기연결。
TCP层매개변수설정
可以调整TCP/IP栈的一些매개변수以使得其特性满足产品或系统的限制。TCP层的下列매개변수可以进行调整:
- 每个연결的매개변수
SO-RCVBUF, SO-SNDBUF:
这些매개변수允许为보내기和수신用套接字인터페이스设定高限位。可以通过调整这些매개변수来实现流量控制管理。수신缓存区的的大小即为每个연결advertised window的最大值。为了提高性能,必须추가套接字缓存区的大小。否则,这些值必须小于内部驱动器的자료,以便在内部驱动器的자료耗尽之前닫기TCP窗口。
수신缓存区大小取决于TCP窗口大小、TCP最大段的大小和수신입력帧所需的时间。由于最大段的크기为300个字(一个MODBUS请求需要最大256字+MBAP헤더),如果需要3帧进行缓存,可将套接字缓存区大小调整为900字。为了满足最大的缓存需求和预定的时间,可以추가TCP窗口的大小。
TCP-NODELAY:
通常,小프레임(称为:tinygrams)在局域网(LAN)上的传输不会产生문제,因为多数局域网是不拥堵的,但是,这些tinygrams在广域网上将会造成拥堵。一个称为“NAGLE算法”的简单方案是:收集小量的데이터,当前面프레임的TCP确认到达时再用单个进行보내기。
为了获得更好的实时特性,建议:将小量的데이터直接보내기,而不要试图将其收集到一个段内再보내기。这就是为什么建议强制TCP-NODELAY选项,这个选项禁用客户机和服务器연결的“NAGLE算法”。
SO-REUSEADDR:
当MODBUS服务器닫기一个由远端客户启动的TCP연결时,在这个연결处于“时间대기”状态(两个MSL:最大段寿命)的过程中,该연결所用的本地口号不能被再次用来열기一个新的연결。
建议:为每个客户机和服务器연결,指明SO-REUSEADDR选项,以迂回这个限制。此选项允许为自身分配一个口号,它作为연결的一部分在2MSL期间内대기客户机并侦听套接字인터페이스。
SO-KEEPALIVE:
TCP/IP프로토콜缺省状态下,不通过空闲的TCP연결보내기데이터。因此,如果在TCP연결端这个过程没有보내기데이터,在两个TCP模块间就没有交换任何데이터。这就假设客户机端적용和服务器端적용均采用计数器来探测연결的存活性,以便닫기연결。
建议:在客户机与服务器연결两端均采用KEEPALIVE选项,以便查询另一端得知对方是否故障并死机,或故障并重新启动。
然而,我们必须牢记,采用KEEPALIVE可能引起一个非常良好的연결,在瞬间故障时통신中断,如果保持연결计时器计时周期太短,将占用不必要的네트워크带宽。
- 整个TCP层的매개변수
TCP연결建立超时:
多数伯克利推出的系统将新연결建立的时限设定为75秒,这个缺省值应该适应于实时的적용限制。
保持연결매개변수:
연결的缺省空闲时间是2小时。超过此空闲时间将触发一个保持연결试探过程。第一个保持연결试探后,在最大次数内每隔75秒보내기一个试探,直到收到对试探的应答为止。
在一个空闲연결上发出保持연결试探的最大数是8次。如果发出最大试探次数之后而没有收到应答,TCP向적용发出一个错误信号,由적용来决定닫기연결。
超时与重发매개변수:
如果检测到一个TCP프레임丢失,将重发此프레임。检测丢失的方法之一是管理重发超时(RTO),如果没有收到来自远端的确认,超时终止。
TCP进行RTO的动态评估。为此,在보내기每个非重发的프레임后测量往返时间(RTT)。往返时间(RTT)是指프레임到达远端设备并从远端设备获得一个确认所用的时间。一个연결的往返时间是动态계산的,然而,如果TCP不能在3秒钟内获得RTT的估计,那么,就设定RTT的缺省值为3秒。
如果已经估算出RTO,它将被用于下一个프레임的보내기。如果在估算的RTO终止之前没有收到下一个프레임的确认,활성화指数补偿算法。在一个特定的时间段内,允许相同프레임最大次数的重发。之后,如果收不到确认,연결终止。
可以对某些栈设置연결终止之前重发的最大次数和重发的最长时间。
在TCP표준中定义了一些重发算法:
- Jacobson RTO估계산法用来估计重发超时(RTO);
- Karn算法指出,在重发段,不应进行RTO估计;
- 指数补偿算法定义:对于64秒时间上限内每一次重发,加倍重发超时;
- 快速重发算法允许在收到3个重复确认之后进行重发。考虑这个算法是因为:在LAN上,可能会导致프레임丢失的检测快于대기RTO终止的检测。
在MODBUS实现中,推荐使用这些算法。
IP层的매개변수설정
IP매개변수
下列매개변수必须在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端。
통신적용层
MODBUS클라이언트

图10:MODBUS클라이언트
MODBUS클라이언트设计
MODBUS/TCP프로토콜使得能够对一个클라이언트进行简单的设计。下图설명了클라이언트보내기MODBUS请求并处理MODBUS应答的主要处理过程。

图11:MODBUS클라이언트操作示意图
一个MODBUS客户机可以수신三类事件:
- 一个来自用户적용的보내기请求的新需求,在这种情况下,必须对MODBUS请求进行编码,并使用TCP管理组件服务通过네트워크进行보내기MODBUS请求。下层(TCP管理模块)会返回一个错误信息,这些错误信息是由于TCP연결错误或其他错误信息所导致的。
- 来自TCP管理的一个响应,在这种情况下,클라이언트必须分析响应的콘텐츠,并向用户적용보내기一个证实。
- 由于无响应而超时종료。可以通过네트워크보내기一个重试电文,或向用户적용보내기一个否定证实。
注:这些重试是由MODBUS客户机启动的,可以在无TCP确认的情况下由TCP层来进行其它유형的重试。
MODBUS请求的生成
在收到来自用户적용的需求后,클라이언트必须生成一个MODBUS请求,并보내기到TCP管理。
可以将生成MODBUS请求分解成为几个子任务:
- MODBUS事务处理的实例化,使客户机能够存储所有需要的信息,以便将响应与相应的请求일치,并向用户적용보내기证实。
- MODBUS请求(PDU+MPAB헤더)的编码。启动需求的用户적용必须提供所有需要的信息,使得客户机能够将请求编码。根据MODBUS프로토콜进行MODBUS PDU的编码(MODBUS기능 코드、相关매개변수和적용데이터[2])。填充MBAP헤더的所有域。然后,将MBAP헤더作为PDU前缀,生成MODBUS请求ADU。
- 보내기MODBUS请求ADU到TCP管理模块,TCP管理模块负责对远端服务器寻找正确TCP的套接字。除了MODBUS ADU以外,还必须传递目的IP주소。
下图比图17更深入地설명了请求生成的过程。

图12:请求生成操作示意图
下面给出了实例:从주소为05的远端服务器读1个字的MODBUS请求ADU编码
- MODBUS请求ADU编码:
| 설명 | 大小 | 实例 | |
| MBAP헤더 | 事务处理标识符Hi | 1 | 0x15 |
| 事务处理标识符Lo | 1 | 0x01 | |
| 프로토콜 식별자 | 2 | 0x0000 | |
| 길이 | 2 | 0x0006 | |
| 유닛 식별자 | 1 | 0xFF | |
| MODBUS请求 | 기능 코드(*) | 1 | 0x03 |
| 시작주소 | 2 | 0x0005 | |
| 레지스터 수량 | 2 | 0x0001 |
(*)参见MODBUS프로토콜사양[2]
- 事务处理标识符
事务处理标识符用于将请求与未来响应之间建立문의。因此,对TCP연결来说,在同一时刻,这个标识符必须是唯一的。有几种使用此标识符的방식:
- 例如:可以作为一个带有计数器的简单“TCP顺순번”,在每一个请求时추가计数器;
- 也可以用作智能索引或指针,来识别事务处理的콘텐츠,以便记忆当前的远端服务器和未处理的请求。
通常,在MODBUS串行链路上,客户机必须一次보내기一个请求。这意味着这个客户机在보내기第二个请求之前必须대기对第一个请求的回答。在MODBUS TCP上,可以向同一个服务器보내기多个请求而不需대기服务器的证实。MODBUS/TCP到MODBUS串行链路之间的게이트웨이负责保证这两种操作之间的兼容性。
服务器收接受的请求数量取决于其容量,即:服务器자료量和TCP窗口크기。同样,客户机同时启动事务处理的数量也取决于客户机的자료容量。这个实现매개변수称为“NnmberMaxofClientTransaction”,必须作为MODBUS客户机的一个特性进行설명。根据设备的유형,此매개변수取值为1~16。
- 유닛 식별자
在MODBUS或MODBUS+串行链路子网中对设备进行寻址时,这个域是用于路由的目的。在这种情况下,“Unit Identifier”携带一个远端设备的MODBUS슬레이브 주소:
- 如果MODBUS服务器연결到MODBUS+或MODBUS串行链路子网,并通过一个桥或게이트웨이설정주소这个服务器,MODBUS유닛 식별자对识别연결到网桥或게이트웨이后的子网的슬레이브设备是必需的。目的IP주소识别了网桥本身的주소,而网桥则使用MODBUS유닛 식별자将请求转交给正确的슬레이브设备。
- 分配串行链路上MODBUS슬레이브设备주소为1~247(10진법),주소0作为广播주소。
对TCP/IP来说,利用IP주소寻址MODBUS服务器;因此,MODBUS유닛 식별자是无用的。必需使用值0xFF。
- 当对直接연결到TCP/IP네트워크上的MODBUS服务器寻址时,建议不要在“유닛 식별자”域使用有效的MODBUS슬레이브 주소。在一个自动系统中重新分配IP주소的情况下,并且如果以前分配给MODBUS服务器的IP주소又被指配给게이트웨이,使用一个有效的슬레이브 주소可能会由于게이트웨이的路由不畅而引起麻烦。使用无效的슬레이브 주소,게이트웨이仅是简单地废弃MODBUD PDU,而不会有任何문제。建议:在采用0xFF作为“유닛 식별자”的无效值。
注:0也可以用作与MODBUS/TCP设备直接통신。
处理MODBUS证实
在TCP연결中,当收到一个响应帧时,位于MBAP헤더中的事务处理标识符用来将响应与先前发往TCP연결的原始请求문의起来:
- 如果事务处理标识符没有提及任何未解决的事务处理,那么必须废弃响应;
- 如果事务处理标识符提及了未解决的事务处理,那么必须分解响应,以便向用户적용보내기MODBUS证实(肯定的或否定的证实);
分解响应就是检验MBAP헤더和MODBUS PDU的响应:
- MBAP헤더
在检验프로토콜 식별자必为0x0000以后,길이给出了MODBUS响应的大小。
如果响应来自直接연결到TCP/IP네트워크的MODBUS服务器设备,TCP연결识别码足以清晰地识别出远端服务器。因此,MBAP头中携带的유닛 식별자是无效的,必须废弃这个유닛 식별자。
如果将远端服务器연결在一个串行链路子网上,并且响应来自一个网桥、路由或게이트웨이,那么유닛 식별자(值≠0xFF)识别보내기初始响应的远端MODBUS服务器。
- MODBUS响应PDU
必须检验기능 코드,根据MODBUS프로토콜,分析MODBUS的响应형식:
- 如果기능 코드与请求中所用的기능 코드相同,并且如果响应的형식是正确的,那么,向用户적용发出MODBUS响应作为肯定的证实。
- 如果기능 코드是一个MODBUS异常码(기능 코드+80H),向用户적용发出一个异常响应作为肯定的证实。
- 如果기능 코드与请求中所用的기능 코드不同(= 非预期的기능 코드),或如果响应的형식是错误的,那么,向用户적용发出一个错误信号作为否定的证实。
注:肯定证实是指服务器收到요청 프레임并做出响应的证实。并不意味着服务器能够成功地完成요청 프레임中要求的操作(MODBUS异常响应指明执行操作失败)。
下图比图17更深入地설명了证实处理的过程。
图13:MODBUS证实处理操作示意图

超时管理
对MODBUS/TCP上事务处理所需响应时间有意不作规定。
这是因为:从毫秒级的I/O扫描到延时几秒钟的远距离无线链路,预期MODBUS/TCP会用于可能最宽泛的통신场合。
从客户机的角度,超时必须考虑네트워크上预期的传输지연,以便确定一个合理的响应时间。这种传输지연可能是交换式以太网中的几个毫秒,或广域网연결中的几百毫秒。
反过来讲,任何客户机启动적용重试使用的超时时间应该大于预期的最大的合理响应时间。如果不遵循这一点,目标设备或네트워크就存在过度拥挤的潜在危险,而反过来会导致更多的错误。这是一个应该始终避免的特性。
因此,在实际中,在高性能적용中所使用的客户机超时似乎总是与네트워크拓扑和期望的客户机性能有关。
时间因素不很重要的系统经常采用TCP缺省值作为超时值,在多数平台上,几秒钟之后将보고서통신故障。
MODBUS服务器端

图14:MODBUS服务器端
MODBUS服务器的作用是为적용对象提供访问以及为远端客户机提供服务。
根据用户적용,提供不同유형的访问:
- 简单访问:获得或设定적용对象的属性;
- 高级访问:启动一个特定的적용服务
MODBUS服务器必须:
- 将一个적용对象映射成可读或可写的MODBUS对象,以便获得或设定적용对象的属性;
- 提供一种对적용对象启动服务的方法;
在运行过程中,MODBUS服务器必须分析수신到的MODBUS请求,处理所需的操作,返回MODBUS响应。
MODBUS服务器设计
MODBUS服务器设计取决于如下两个方面:
- 对적용对象访问的유형(对属性的简单访问或对服务的高级访问);
- MODBUS服务器与用户적용之间交互作用的유형(同步或异步)。
下图설명了服务器进行的主要处理过程,以便获得来自TCP管理的MODBUS请求,然后,分析请求,处理所需的操作,返回MODBUS响应。

图15:处理MODBUS指令操作示意图
象前面的操作示意图示出的那样:
- MODBUS服务器本身可以바로处理一些服务,没有与用户적용之间的交互作用;
- 一些服务还可能需要与被处理的用户적용进行明显的交互作用;
- 有些高级服务需要调用特定的인터페이스,即:MODBUS后台服务。例如:可能根据用户적용层프로토콜,使用若干个MODBUS请求/响应事务处理的时序来启动用户적용服务。后台服务负责所有单个MODBUS事务处理的正确进行,以便于执行全局用户적용服务。
在下列各章中给出更完整的설명。
MODBUS服务器可以수신并同时为多个MODBUS请求提供服务。服务器可以同时수신MODBUS请求的최대 수량是MODBUS服务器的主要特性之一。这个数量取决于服务器的设计以及它的处理和存储能力。将这个实现매개변수称为“NumberMaxOfServerTransaction”,必须作为MODBUS服务器的一个特性설명这个实现매개변수。根据设备的能力,它的取值范围为:1~16,。
“NumberMaxOfServerTransaction”매개변수对MODBUS服务器的操作和性能有非常显著的影响。尤其重要的是,所管理的并发MODBUS事务处理的数量可能影响服务器对MODBUS请求的响应时间。
MODBUS PDU检验
下图설명了MODBUS PDU检验操作。

图16:MODBUS PDU检验操作流程图
MODBUS PDU检验功能首先是分解MBAP헤더。必须检验프로토콜 식별자域:
- 如果与MODBUS프로토콜유형不同,那么废除这个指示。
- 如果是正确的(= MODBUS프로토콜유형;值为0x00),바로举例설명一个MODBUS事务处理。
一个服务器可以距离설명的MODBUS事务处理的최대 수량由매개변수“NumberMaxOfTransaction”(系统或설정매개변수)来定义。
在无效的事务处理的情况下,服务器生成一个MODBUS异常响应(异常码6:服务器繁忙)。
如果事务处理是有效的,它将被启动,以便存储下列信息:
- 用于보내기指示的TCP연결标识符(由TCP管理给出)
- MODBUS事务处理ID(MBAP헤더中给出)
- 유닛 식별자(MBAP헤더中给出)
然后,分解MODBUS PDU。首先分析기능 코드:
- 当无效时,生成MODBUS异常响应(异常码1:无效功能)
- 如果수신기능 코드,服务器启动一个“MODBUS服务处理”操作。
MODBUS服务处理

图17:MODBUS 服务处理操作流程图
根据后面实例中的设备软件和硬件结构,可以用不同的방식进行要求的MODBUS服务处理:
- 在一个小型设备或单线程体系结构内,MODBUS服务器可以直接访问用户적용데이터,服务器自身可以本地处理要求的服务,而无需调用后台服务。
根据“MODBUS프로토콜사양”,进行这种处理。在出现错误的情况下,生成MODBUS异常响应。
- 在一个模块化的多处理器的设备或多线程体系结构中,“통신层”和“用户적용层”是两个独立的实体,통신实体可以完全地处理一些不重要的服务,而其他的服务需要적용后台服务与用户적용实体协调完成。
为了实现与用户적용的交互作用,MODBUS后台服务必须执行所有适当的机制,以便处理用户적용的事务处理,并且正确管理用户적용调用和相应的响应。
用户적용인터페이스(后台인터페이스)
在MODBUS后台服务中,可以执行几种策略来完成工作,虽然从用户네트워크吞吐量、인터페이스带宽使用、响应时间、甚至设计工作量的角度,这几种策略是不均衡的。
MODBUS后台服务将对用户적용采用适当인터페이스:
- 或基于串行链路的物理인터페이스,或双口RAM方案,或一条简单的I/O电缆,或由操作系统提供的基于프레임传输服务的逻辑인터페이스。
- 到用户적용的인터페이스可以是同步的或异步的。
MODBUS后台服务还将使用适当的设计모드来得到/设定目标属性或触发服务。在某些情况下,一个简单的“게이트웨이모드”将是足够的。在其他情况下,从简单的交换表历史到更复杂的重复机制中,设计者将必须执行带有高速缓存策略的“代理服务器모드”,。
MODBUS后台服务有责任实现프로토콜的转换,以便与用户적용进行交互作用。因此,它必须具有机制来实现프레임的分拆和重组、데이터一致性保证以及所有需要的同步等功能。
MODBUS响应的生成
一旦处理请求,MODBUS服务器必须使用适当的MODBUS服务器事务处理生成一个响应,并且必须将响应보내기到TCP管理组件。
根据处理结果,可以生成两类响应:
- 肯定的MODBUS响应:
- 响应기능 코드 = 请求기능 코드
- MODBUS异常响应:
- 目的是为客户机提供与处理过程检测到的错误相关的信息
- 响应기능 코드 = 请求기능 코드+0x80
- 提供异常码来表明出错的原因。
| 异常码 | MODBUS名称 | 备注 |
| 01 | 非法的기능 코드 | 服务器不了解기능 코드 |
| 02 | 非法的데이터주소 | 与请求有关 |
| 03 | 非法的데이터值 | 与请求有关 |
| 04 | 服务器故障 | 在执行过程中,服务器故障 |
| 05 | 确认 | 服务器接受服务调用,但是需要相对长的时间完成服务。因此,服务器仅返回一个服务调用수신的确认。 |
| 06 | 服务器繁忙 | 服务器不能接受MODBUS请求PDU。客户적용由责任决定是否和何时重发请求。 |
| 0A | 게이트웨이故障 | 게이트웨이路经是无效的。 |
| 0B | 게이트웨이故障 | 目标设备没有响应。게이트웨이生成这个异常信息。 |
MODBUS响应PDU必须以MBAP헤더做前缀,使用事务处理正文中的데이터生成MBAP헤더。
- 유닛 식별자
当在所收到的MODBUS请求中给出유닛 식별자时,拷贝这个유닛 식별자,并将其存储在事务处理的正文中。
- 길이
服务器계산MODBUS PDU和유닛 식별자字的大小。在“길이”域中设置这个值。
- 프로토콜 식별자
设置프로토콜 식별자域为0x0000(MODBUS프로토콜),在所收到的MODBUS请求中给出프로토콜 식별자。
- 事务处理标识符
设置这个域为“事务处理标识符”值,它与初始请求有关,并将其存储在。
利用事务处理正文中存储的TCP연결对正确的MODBUS客户机返回MODBUS响应。当보내기响应时,事务处理正文必须释空闲的。
实现指南
本章的目的是提出一个实现프레임传输服务的实例。下面所설명的模型可用作客户机或服务器实现MODBUS프레임传输服务过程的指南。
对象模型示意图

图18:MODBUS프레임传输服务对象模型示意图
四种主要程序包构成对象模型示意图:
- 설정层,它설정和管理其它程序包组件的操作모드
- TCP管理,它使TCP/IP栈和管理TCP연결的통신적용层연결。这指的是套接字인터페이스的管理。
- 통신적용层,它由在一侧的MODBUS客户机和在另一侧的MODBUS服务器组成。该程序包和用户적용链接。
- 用户적용,它和设备적용相对应,它完全与设备有关,因此在本文件中不予讨论。
本模型与实现的选择无关,例如:OS유형、存储管理等。为保证这种无相关性,在TCP管理层和통신层之间以及在통신层和用户적용层之间使用普通界面层(generic Interface layers)。
有不同的实现方法实现该界面:两项任务之间的传输、共享存储器、串行链接界面、过程呼叫等。
为定义下面的实现模型,作了一些假定:
- 静态存储器管理
- 服务器的同步处理
- 处理有关所有套接字수신的任务。
TCP管理程序包

图19:MODBUS TCP管理程序包
TCP管理程序包包括下列类:
ClnterfaceConnexion:该类的作用是管理用于연결的存储库。
CltemConnexion:该类含有설명연결所需要的所有信息。
CTCPConnexion:该类提供自动管理TCP연결的方法(CStackTCP_IP提供인터페이스套接字)。
CconnexionMngt:该类管理所有연결,并通过CinterfaceindicationMsg和CinterfaceRoseponseMsg向MODBUS服务器/MODBUS客户机보내기请求/响应。该类还处理연결建立的访问控制。
CMBAP:该类提供读/写/分析MODBUS MBAP的方法。
CStackTCP_IP:该类执行套接字服务并提供栈的매개변수설정。
설정层程序包

图20:MODBUS설정层程序包
설정层程序包包括下列类:
TConfigreObject:该类将各组件相互설정所需的데이터分组。用CoperatingMode类中的m_Confire方法填充这个结构。每个需要설정的类从这个对象中取得自己的데이터。설정데이터与实现本身有关。因此,提供该类的属性表作为一个实例。
CoperatingMode:该类的作用是填充TConfigueObject(根据用户的설정)和管理下述类的操作모드。
- CMODBUSServer
- CMODBUSClient
- CconnexionMngt
통신层程序包

图21:MODBUS통신적용层程序包
통신적용层程序包包括以下各类:
CMODBUSServer:从CinterfaceIndicationMsg中수신MODBUS询问(通过m_ServerRecievingMessage方法)。该类的作用是根据询问建立MODBUS响应或MODBUS异常(从네트워크进入)。该类实现MODBUS服务器的Graph State。只有类CoperatingMode보내기了用户설정和正确的操作모드,才可能응답 생성。
CMODBUSClient:从类CinterfaceUserApplication中읽기MODBUS询问,客户机的任务是用m_ClientReceivingMessage方法수신询问。该类实现MODBUS客户机的State Graph,并且管理链接带有响应的询问的事务处理(来自네트워크的)。只有类CoperatingMode보내기了用户설정和正确的操作모드,才能通过네트워크보내기询问。
CTransaction:该类实现管理事务的方法和结构。
인터페이스类
CInterfaceUserApplication:该类表示与用户적용的인터페이스,它提供两种访问用户데이터的方法。在实际的实现中,根据硬件和软件设备的能力,用不同的방식实现这种方法(相当于一个终端驱动器、访问PCMCIA的实例、共享存储器等)。
CInterfaceIndicationMsg:该인터페이스类用来从네트워크向MODBUS服务器보내기询问,以及从네트워크向客户机보내기响应。该类使TCPManagement和통신적용层程序包연결(从네트워크中)。该类的实现与네트워크有关。
CInterfaceResponseMsg:该인터페이스类用于从服务器接受响应,以及从客户机向네트워크보내기询问。该类使통신적용层程序包和TCPManagement연결(向네트워크)。该类的实现和设备有关。
통신实现的类的示意图
下列类的示意图是一个完整的实现方案的示意图。

图22:类的示意图
시퀀스图
下面설명了两个시퀀스图,以便설명客户机MODBUS事务处理和服务器MODBUS事务处理。

图23:MODBUS客户机시퀀스图
为更好地理解客户机시퀀스图,简单的注释为:
第一步:读来自用户적용的询问(通过m_Read方法)。
第二步:客户机的任务是수신MODBUS询问(通过m_ClientReceivingMessage方法)。这是客户机的进入点。为了使询问和相应的响应相互协调,当得到询问时,客户机使用事务处理자료(类名:CTransaction)。通过呼叫类인터페이스CInterfaceResponseMsg向TCP_Management보내기MODBUS询问(通过m_MODBUSRequest方法)。
第三步:如过已建立연결,并且不需要对연결做什么,那么通过네트워크보내기프레임。否则,在네트워크上可以보내기프레임之前,必须有开放的연결。
此时,客户机대기最后讨论的响应(来自远程服务器)。
第四步:若从已经从네트워크得到响应,那么TCP/IP栈수신데이터(隐蔽地呼叫m_EventOnStack方法)。
如果已建立연결,那么读MBAP以恢复연결对象(연결对象提供存储자료和其它信息)。
읽기来自네트워크的데이터,通过类인터페이스CinterfaceIndicationMsg向客户机보내기证实(通过m_MODBUSConfirmation方法)。客户机的任务是수신MODBUS证实(通过m_ClientReceivingResponse方法)。
最后,向用户적용쓰기响应(通过m_Write데이터方法),并且事务处理자료是空闲的。
下面是MODBUS服务器交换的实例:

图24:MODBUS服务器시퀀스图
为更好地理解客户机시퀀스图,简单的注释为:
第一步:某客户机已通过네트워크보내기了询问(MODBUS询问)。TCP/IP栈수신데이터(隐蔽地呼叫m_EventOnSocket方法)。
第二步:请求可能是연결请求,也可能不是연결请求(通过m_IsConnexionRequest方法)。如果请求是연결请求,那么分配연결对象和收发MODBUS帧的缓冲器(m_GetObjectConnexion)。之后,必须检查和接受연결访问控制。
第三步:如果询问是MODBUS请求,那么可以读出完整的MODBUS Query(通过m_Receive데이터方法)。此时,必须分析MBAP(通过m_IsMdbHeadercorrect方法)。通过CInterfaceIndicationMessaging类向服务器任务(task)보내기完整的帧(通过m_MODBUSIndication方法)。服务器的任务是수신MODBUS QUERY(通过m_ServerReceivingMessage方法)并加以分析。
如果有差错出现(未支持的기능 코드等),生成MODBUS异常帧形(m_BuildMODBUSException),否则응답 생성。
第四步:通过CInterfaceResponseMessaging(通过m_MODBUSResponse方法)在네트워크上보내기响应。通过m_Send데이터方法进行对연결对象的处理(恢复연결설명符等),在네트워크上보내기데이터。
类和方法的설명
MODBUS服务器端的类
类名:CMODBUSServer
类名:CMODBUSServer
Stereotype实现类
提供用服务器모드管理MODBUS프레임传输的方法
| 域综述 | |
| protected char | GlobalStateMODBUS服务器的状态 |
| 构造器综述 | |
| CMODBUSServer(TConfigureObject * lnkConfigureObject)构造器:生成内部对象 | |
| 方法综述 | |
| protected void | m_InitServer기능s(void )为填充功能阵列“m_Server기능”数列构造器呼叫的功能 |
| bool | m_초기화(void )重新设置服务器的方法,如果重新设置,那么返回肯定值 |
| int | m_ServerReceivingMessage(TItemConnexion * lnkMODBUS)与CindicationMsg::m_MODBUSIndication的인터페이스,以从네트워크수신询问,如有문제,返回否定值 |
| bool | m_Start(void )启动服务器的方法,如果启动,返回肯定值 |
| bool | m_Stop(void )정지服务器的方法,如果정지,返回肯定值 |
| protected void | m_tServerMODBUS(void )服务器的MODBUS任务.. |
MODBUS客户机类
类名:CMODBUSClient
类名:CMODBUSClient
提供用客户机모드管理MODBUS프레임传输的方法
Stereotype实现类
| 域综述 | |
| protected char | GlobalStateMODBUS客户机的状态 |
| 构造器综述 | |
| CMODBUSClient(TConfigureObject * lnkConfigureObject)构造器:生成内部对象,启动0변수 | |
| 方法综述 | |
| Int | m_ClientReceivingMessage(TItemConnexion * lnkMODBUS)从적용层수신프레임传输的인터페이스:呼叫读데이터呼叫的CinterfaceUserApplication::m_Read 为事务处理取得存储器的CInterfaceConnexion::m_GetObjectConnexion 如果有문제,那么返回否定值 |
| Bool | m_초기화(空的)重新设置组件的方法,如果重新设置,返回肯定值 |
| bool | m_Start(空的)启动组件的方法,如果启动,返回肯定值 |
| bool | m_Stop(空的)정지组件的方法,如果정지,返回肯定值 |
| protected 空的 | m_tClientMODBUS(空的)客户机的MODBUS任务.... |
인터페이스的类
인터페이스指示类
类名:CInterfaceIndicationMsg
直接已知的子类
类名:CInterfaceIndicationMsg
从TCP_Management向MODBUS服务器或客户机보내기프레임的类
Stereotype인터페이스
| 方法综述 | |
| int | m_MODBUSConfirmation(TItemConnexion * lnkObject)수신进入响应和呼叫客户机的方法:通过可用参考值、프레임排队、远程过程呼叫等, ... |
| int | m_MODBUSIndication(TItemConnexion * lnkObject)读进入MODBUS询问和呼叫服务器的方法:通过可用参考值、프레임排队、远程过程呼叫等, ... |
인터페이스响应类
类名:CInterfaceResponseMsg
直接已知的子类:
class CInterfaceResponseMsg
从客户机或服务器向TCP_Management보내기响应或询问的类
Stereotype인터페이스
| 方法综述 | |
| TitemConnexion * | m_GetMemoryConnexion(unsigned long IPDest)从存储库得到对象ItemConnexion,如果存储不充足,返回值-1 |
| int | m_MODBUSRequest(TItemConnexion * lnkCMODBUS)将进入MODBUS询问客户机쓰기ConnexionMngt的方法:通过可用参考值、프레임排队、远程过程呼叫等, ... |
| int | m_MODBUSResponse(TItemConnexion * lnkObject)将MODBUS服务器的响应쓰기ConnexionMngt的方法:通过可用参考值、프레임排队、远程过程呼叫等, ... |
연결管理类
类名:CConnexionMngt
类名:CConnexionMngt
管理所有TCP연결的类
Stereotype 实现类
| 域综述 | |
| protected char | GlobalState组件ConnexionMngt的综合状态 |
| Int | NbConnectionSupported연결的전체数量 |
| Int | NbLocalConnection本地客户机向远程服务器开放的연결数量 |
| Int | NbRemoteConnection远程客户机向本地服务器开放的연결数量 |
| 构造器综述 | |
| CconnexionMngt(TConfigureObject * lnkConfigureObject)构造器:生成内部对象、启动0변수 | |
| 方法综述 | |
| int | m_EventOnSocket(空的)唤醒 |
| bool | m_IsConnectionAuthorized(unsigned long IPAdress)如果授权新연결,返回肯定值 |
| int | m_Receive데이터(TItemConnexion * lnkConnexion)与CTCPConnexion::write인터페이스,从네트워크中读데이터的方法,如果有문제,返回否定值 |
| bool | m_초기화(空的)重新设置ConnectionMngt组件的方法,如果重新设置,返回肯定值 |
| int | m_Send데이터(TItemConnexion * lnkConnexion)为CTCPConnexion::read인터페이스,向네트워크보내기데이터的方法,如果有문제,返回否定值 |
| bool | m_Start(空的)启动ConnectionMngt组件的方法,如果启动,返回肯定值 |
| bool | m_Stop(空的)정지组件的方法,如果정지,返回肯定值 |
답글 작성