modbustcp通讯协议_涛哥带你学习 ModBus TCP 协议 (1) 读写 DO(线圈)状态

本文介绍了ModBus TCP通信协议,以研华ADAM-6052模块为例,详细解析了读取输出IO状态和写入DO线圈状态的命令格式,包括正确和错误的报文示例,并提供了异常处理情况的说明。
摘要由CSDN通过智能技术生成

编者:Modbus TCP 是比较普及的一种标准通信协议,协议格式简单易懂,特别适合学习底层通信协议开发。这次涛哥给大家带来一系列文章,以具体硬件为例,从原始数据着手,一步一步解密 Modbus TCP 协议。

85866d5173a426ea43a5687b1745573a.png

研华 ADAM-6052 模块支持 Modbus TCP 协议,我们就以它来研究 Modbus TCP 的协议格式。

2d6b56ae53557d146759315f591cecda.png

一、Modebus TCP 协议格式

先来看看文档里如何描述 Modbus TCP 协议:

  • 一个完整的 Modebus TCP 命令由两部分组成:命令头和命令体。

  • 命令头:由 6 个字节组成,用于响应Modbus协议格式

  • 命令体:用于定义“目标设备”和“请求功能”

ADAM-6052 的 Modbus 地址如下:

8ac4f970386565bef1784fb02e4cccd6.png

最直观的就是抓取通讯字节流,通过实例和文档对比,达到快速理解的目的。

二、读取输出IO状态

使用 Function 01 功能码,读取线圈状态也即输出的状态。

2d5cc69d5f978561b8a7cc0fb5e7b5e2.png

请求读取地址 17 开始 8 个线圈的状态,使用嗅探工具抓包。

dad5401891fac394b5261a350af6ae40.png

1. 请求报文

00 80 00 00 00 06 01 01 00 10 00 08

开始6个字节为命令头:

  • byte 0 :  事务标识符,本例为 00

  • byte 1 :  事务标识符,本例为 80

  • byte 2 :  协议标识符,通常为 00

  • byte 3 :  协议标识符,通常为 00

  • byte 4 :  后面的字节数,高字节。通常为 00,因为所有报文都小

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值