使用C++99语言开发ModbusTCP通讯

首先是在本地下载模拟ModbusTCP通讯报文测试的软件,这里使用Modscan32模拟主设备,Modbus Slave模拟从站设备:

从站设备:

设置对应的功能码和寄存器数量:

主站设备:

需要注意:连接时使用的功能码要一致,连通后得到的报文如下:[01][00][00][00][00][06][01][03][00][00][00][0a][01][00][00][00][00][17][01][03][14][00][0c][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00]

这个Modbus TCP通讯报文。这个报文包含了一个请求和一个响应。

Modbus TCP 帧结构回顾

字段 字节数 说明
事务处理标识符(Transaction ID) 2 用于匹配请求和响应
协议标识符(Protocol ID) 2 Modbus TCP 固定为 0x0000
长度(Length) 2 后续字节数(从 Unit ID 开始计算)
单元标识符(Unit ID) 1 从站设备地址(通常 0x010xFF
功能码(Function Code) 1 操作类型(如 0x01 读线圈,0x03 读保持寄存器)
数据(Data) N 取决于功能码(如起始地址、寄存器数量等)

请求报文(前12字节):[01][00][00][00][00][06][01][03][00][00][00][0a]

响应报文报文(后30字节):[01][00][00][00][00][17][01][03][14][00][0c][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00]

详细解析

1. 请求报文解析

字节位置 十六进制值 字段名称 说明
0-1 01 00 事务标识符 Transaction ID = 0x0001,用于请求响应配对
2-3 00 00 协议标识符 Protocol ID = 0x0000,表示Modbus协议
4-5 00 06 长度字段 Length = 6字节,后续数据长度(不含前6字节MBAP头)
6 01 单元标识符 Unit ID = 1,从站地址
7 03 功能码 读保持寄存器(Read Holding Registers)
8-9 00 00 起始地址 从地址0开始读取
10-11 00 0a 线圈数量 读取10个线圈(0x000A = 10)

请求含义:主站请求从地址为1的从站读取从地址0开始的10个线圈状态。

2. 响应报文解析

字节位置 十六进制值 字段名称 十进制值 详细说明
0-1 01 00 事务标识符 256 与请求一致,配对响应
2-3 00 00 协议标识符 0 Modbus TCP协议
4-5 00 17 长度字段 23 后续数据长度
6 01 单元标识符 1 从站设备地址
7 03 功能码 3 读保持寄存器(Read Holding Registers)
8 14 字节计数 20 返回数据的字节数
9-10 00 0c 寄存器0数据 12 地址0寄存器值
11-12 00 00 寄存器1数据 0 地址1寄存器值
13-14 00 00 寄存器2数据 0 地址2寄存器值
15-16 00 00 寄存器3数据 0 地址3寄存器值
17-18 00 00 寄存器4数据 0 地址4寄存器值
19-20 00 00 寄存器5数据 0 地址5寄存器值
21-22 00 00 寄存器6数据 0 地址6寄存器值
23-24 00 00 寄存器7数据 0 地址7寄存器值
25-26 00 00 寄存器8数据 0 地址8寄存器值
27-28 00 00 寄存器9数据 0 地址9寄存器值

响应总结:从站返回了10个保持寄存器的值,第一个寄存器值为12,其余9个寄存器值均为0。

解析完报文后。

解析完成后开发对应功能,此处由于版本受限,是在VS2005的MFC开发的该功能。

相关推荐
wanhengidc5 小时前
云手机的网络架构
服务器·网络·游戏·智能手机·架构·云计算
挠到秃头的涛某5 小时前
华为防火墙web配置SSL-在外人员访问内网资源
运维·网络·网络协议·tcp/ip·华为·ssl·防火墙
。puppy5 小时前
企业网络 VLAN 隔离与防火墙互联:实验全解析与实战指南
网络·安全
easy_coder5 小时前
破壁“架构孤岛”:云原生混合网络的AI运维升维实践
网络·云计算
星释6 小时前
Rust 练习册 :深入探索XOR加密与流密码
开发语言·网络·rust
せいしゅん青春之我6 小时前
【JavaEE初阶】IP协议-IP地址不够用了咋办?
java·服务器·网络·网络协议·tcp/ip·java-ee
汤愈韬6 小时前
网络通信原理
网络·网络安全
门思科技7 小时前
LoRaWAN通信协议详解:架构、加密机制与核心应用
运维·服务器·网络·嵌入式硬件·物联网
程思扬7 小时前
开源 + 实时 + 无网络限制:Excalidraw 是流程图协作新选择
网络·人工智能·阿里云·ai·开源·流程图
测绘小沫-北京云升智维7 小时前
徕卡RTC360三维激光扫描仪摔坏故障维修方案
网络