MODBUSTCPIP通信协议及测试⽅法
1 前⾔
MODBUS是⼀项应⽤层报⽂传输协议,是⼀个请求/应答协议,提供功能码规定的服务,⽤于在通过不同类型的总线或⽹络连接的设备之间的客户机/服务器通信。
本⽂介绍如何使⽤格西调试精灵(原格西烽⽕)通信测试软件编写测试项⽬,进⾏调试和测试Modbus TCP/IP通信节点。
2 通信协议
2.1 术语
MODBUS通信协议
MODBUS是OSI 模型第7层上的应⽤层报⽂传输协议,它在连接⾄不同类型总线或⽹络的设备之间提供客户机/服务器通信。
2.2 通信接⼝
⽀持以太⽹接⼝,⽀持多点连接,⽀持TCP/IP协议,保留502端⼝访问Modbus。
2.3 数据链路层
MODBUS TCP/IP协议是⼀个主-从协议。⼦节点之间从不会互相通信。主节点在同⼀时刻可以发起多个Modbus事务处理。MODBUS TCP/IP 的通信系统可以包括不同类型的设备:
1)连接⾄TCP/IP⽹络的MODBUS TCP/IP 客户机和服务器设备;
2)互连设备,例如:在TCP/IP ⽹络和串⾏链路⼦⽹之间互连的⽹桥、路由器或⽹关,联接,该⼦⽹允许将MODBUS 串⾏链路客户机和服务器终端设备连接起来。
MODBUS TCP/IP 通信结构
2.3.1 帧格式
tcpip协议pdfModbus应⽤协议定义了简单的独⽴于其下⾯通信层的协议数据单元(PDU-Protocol Data Unit)。
在不同总线或⽹络的Modbus协议映射在协议数据单元之外引⼊了⼀些附加的域。发起Modbus事务处理的客户端构造Modbus PDU,然后添加附加的域以构造适当的通信PDU。
TCP/IP⽹络上的MODBUS应⽤数据单元。
在TCP/IP 上使⽤⼀种专⽤报⽂头识别MODBUS 应⽤数据单元。将这种报⽂头称为MBAP 报⽂头(M
ODBUS 协议报⽂头)。MBAP 报⽂头包括下列域:
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 协议项编制
根据协议帧格式,为了⽅便控制和显⽰,把协议项的数据固定拆分为事务处理标识符、协议标识符、长度、单元标识符、功能码5个部分,动态增减的部分是数据域,可以根据具体命令进⾏进⼀步拆分。
下⾯以“(0x01)读线圈”命令为例说明协议项编制⽅法。
主站请求帧
从站正常应答帧
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论