MODBUS-RTU串行链路通信协议及测试方法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

MODBUS-RTU串⾏链路通信协议及测试⽅法
1 前⾔
MODBUS是⼀项应⽤层报⽂传输协议,是⼀个请求/应答协议,提供功能码规定的服务,⽤于在通过不同类型的总线或⽹络连接的设备之间的客户机/服务器通信。

Modbus 串⾏链路系统可以使⽤异步串⾏链路(EIA/TIA-232-E、EIA-422、EIA/TIA-485-A等)进⾏通信。

本⽂介绍如何使⽤格西烽⽕通信测试软件编写测试项⽬,进⾏调试和测试Modbus通信节点。

2 通信协议
2.1 术语
MODBUS通信协议
MODBUS是OSI 模型第7层上的应⽤层报⽂传输协议,它在连接⾄不同类型总线或⽹络的设备之间提供客户机/服务器通信。

2.2 通信接⼝
⽀持EIA/TIA-232-E、EIA-422、EIA/TIA-485-A等串⾏接⼝,⽀持多点连接,要求9600bps,推荐19200bps,选择实现
1200bps,2400bps,4800bp等其他速率。

2.3 数据链路层
Modbus串⾏链路协议是⼀个主-从协议。

在同⼀时刻,只有⼀个主节点连接于总线,⼀个或多个⼦节点连接于同⼀个串⾏总线。

Modbus通信总是由主节点发起。

⼦节点在没有收到来⾃主节点的请求时,从不会发送数据。

⼦节点之间从不会互相通信。

主节点在同⼀时刻只会发起⼀个Modbus事务处理。

主节点以两种模式对⼦节点发出Modbus请求。

单播模式:主节点以特定地址访问某个⼦节点,⼦节点接到并处理完请求后,⼦节点向主节点返回⼀个报⽂(⼀个应答)。

在这种模式,⼀个Modbus事务处理包含 2 个报⽂,⼀个来⾃主节点的请求,⼀个来⾃⼦节点的应答。

⼴播模式:主节点向所有的⼦节点发送请求。

对于主节点⼴播的请求没有应答返回。

⼴播请求⼀般⽤于写命令。

所有设备必须接受⼴播模式的写功能。

地址0是专门⽤于表⽰⼴播数据的。

2.3.1 帧格式
Modbus应⽤协议定义了简单的独⽴于其下⾯通信层的协议数据单元(PDU-Protocol Data Unit)。

在不同总线或⽹络的Modbus协议映射在协议数据单元之外引⼊了⼀些附加的域。

发起Modbus事务处理的客户端构造Modbus PDU,然后添加附加的域以构造适当的通信PDU。

2.3.2 传输模式
Modbus串⾏链路有两种串⾏传输模式被定义:RTU模式和ASCII模式。

它定义了报⽂域的位内容在线路上串⾏的传送,确定了信息如何打包为报⽂和解码。

Modbus 串⾏链路上所有设备的传输模式 (和串⾏⼝参数) 必须相同。

所有设备必须必须实现RTU模式,默认设置必须为RTU模式,ASCII传输模式是选项。

RTU模式
当设备使⽤RTU(Remote Terminal Unit)模式在Modbus串⾏链路通信,报⽂中每个8位字节含有两个4位⼗六进制字符。

这种模式的主要优点是较⾼的数据密度,在相同的波特率下⽐ASCII模式有更⾼的吞吐率。

每个报⽂必须以连续的字符流传送。

RTU 模式每个字节(11位)的格式为:1个起始位,8个数据位,1个奇偶校验位,1个停⽌位。

偶校验是要求的,其它模式(奇校验,⽆校验)也可以使⽤。

默认校验模式模式必须为偶校验。

使⽤⽆校验要求2个停⽌位。

RTU报⽂帧
ASCII模式
当Modbus串⾏链路的设备被配置为使⽤ASCII(American Standard Code for Information Interchange) 模式通信时,报⽂中的每个8位字节以两个ASCII字符发送。

当通信链路或者设备⽆法符合RTU模式的定时管理时使⽤该模式。

例如:字节0x5B会被编码为两个字符,0x35和0x42(ASCII编码0x35 ="5",0x42 ="B")。

ASCII模式每个字节(10位)的格式为:1个起始位,7个数据位,1个奇偶校验位,1个停⽌位。

偶校验是要求的,其它模式(奇校验,⽆校验)也可以使⽤。

默认校验模式模式必须为偶校验。

使⽤⽆校验要求2个停⽌位。

ASCII报⽂帧
2.4 应⽤层
MODBUS有三类功能码。

它们是:
公共功能码:是较好地被定义的功能码,保证是唯⼀的,MODBUS组织可改变的,公开证明的,具有可⽤的⼀致性测试,MB IETF RFC 中证明的,包含已被定义的公共指配功能码和未来使⽤的未指配保留供功能码。

⽤户定义功能码:有两个⽤户定义功能码的定义范围,即65⾄72和100⾄110,⽤户没有 MODBUS 组织的任何批准就可以选择和实现⼀个功能码,不能保证被选功能码的使⽤是唯⼀的。

保留功能码:⼀些公司对传统产品通常使⽤的功能码,并且对公共使⽤是⽆效的功能码。

公共功能码定义如下表所⽰。

2.4.1 功能码描述
下⾯以“01 (0x01)读线圈”为例描述功能码,详细的描述请参考Modbus协议。

在⼀个远程设备中,使⽤该功能码读取线圈的1⾄2000连续状态。

请求PDU详细说明了起始地址,即指定的第⼀个线圈地址和线圈编号。

从零开始寻址线圈,因此寻址线圈1-16为0-15。

根据数据域的每个⽐特将响应报⽂中的线圈分成为⼀个线圈。

指⽰状态为1=ON 和0=OFF。

第⼀个数据字节的LSB(最低有效位)包括在询问中寻址的输出。

其它线圈依次类推,⼀直到这个字节的⾼位端为⽌,并在后续字节中从低位到⾼位的顺序。

如果返回的输出数量不是⼋的倍数,将⽤零填充最后数据字节中的剩余⽐特(⼀直到字节的⾼位端)。

字节数量域说明了数据的完整字节数。

请求PDU
正确响应PDU
错误响应PDU
这是⼀个请求读离散量输出20-38的实例。

3 测试项⽬编制
3.1 基本协议编制
3.1.1 协议项分类
利⽤格西调试精灵软件的协议激励的功能,把通信规约按照树形结构分类组织,使得管理上更加有条理,查找也更加⽅便。

根据Modbus通信协议功能码进⾏协议编辑。

3.1.2 协议项编制
根据协议帧格式,为了⽅便控制和显⽰,把协议项的数据固定拆分为节点地址、功能码和校验码3个部分,动态增减的部分是数据域,可以根据具体命令进⾏进⼀步拆分。

下⾯以“(0x01)读线圈”命令为例说明协议项编制⽅法。

主站请求帧
从站正常应答帧
从站异常应答帧
3.1.3 公共协议库
通过对基本协议项的编写、测试和验证,建⽴⼀个由基本协议项组成的公共协议库。

3.2 测试⽤例编制
测试⽤例(Test Case)是为某个特殊⽬标⽽编制的⼀组测试输⼊、执⾏条件以及预期结果,以便测试某个程序路径或核实是否满⾜某个特定需求。

通信协议测试属于⿊盒测试,可以采⽤⿊盒测试常⽤的等价类划分法、边界值分析法、错误推测法、因果图法等基本⽅法来设计测试⽤例。

测试⽅案设计完成后,格西调试精灵软件能够利⽤编制完成的公共协议库,采⽤搭积⽊的⽅式,通过复制和粘贴命令即可⾮常快捷的创建测试⽤例。

测试⽤例的组织⽅式通常是根据测试⽅案的设计层次采⽤树形结构分类组织。

4 测试⽅法
4.1 测试系统构成
4.2 单项测试与整体测试
格西调试精灵软件⽀持单项测试和整体测试,⼀次测试⼀个测试项或者整个测试集。

执⾏的⽅法是选中需要测试的测试项或者测试集,然后执⾏激励命令即可。

下⾯以执⾏“(0x01)读线圈”测试项为例说明。

协议数据解析界⾯
4.3 单次测试与循环测试
格西调试精灵软件⽀持单次测试和循环测试,能很好满⾜各种调试测试和性能测试的需求。

执⾏的⽅法是选中需要测试的测试项或者测试集,然后执⾏激励或循环激励命令即可。

4.4 脚本控制测试
格西调试精灵软件⽀持协议脚本,能够使⽤C#、VB、Jscript三种语⾔控制测试流程,设置和管理通信参数和协议帧数据,调⽤插件扩展测试功能。

协议脚本能够调⽤基于Microsoft .NET Framework的托管代码组件扩展测试功能,使⽤插件⾮常⽅便,只要把编译好的组件拷贝到Plugins⽬录中,就可以直接在脚本的函数中调⽤插件所提供的公共服务。

例如,使⽤脚本动态计算LRC校验码。

相关文档
最新文档