抖音粉丝群1
『7x24小时有问必答』

本帖最后由 采集赛道4 于 2025-10-5 11:04 编辑

一、效果演示

   
      
二、核心代码
引用
using System.Net.Sockets;
using System.Threading;
通信过程
connect 建立TCP连接
准备Modbus报文
使用send命令发送报文
在同一连接下等待应答
使用recv命令读取报文,完成一次数据交换
通信任务结束时,关闭TCP连接
private float GetModbusTcpVal()
{
        TcpClient clientTcp;

        try
        {
                float result = 0;
                clientTcp = new TcpClient(192.168.100.406084); // 替换为服务器IP和端口
                NetworkStream stream = clientTcp.GetStream();

                // 十六进制数据

                string hexData = "010300120002640E00";

                // 将十六进制数据转换为字节数组

                byte[] data = Tools.ConvertHexStringToByteArray(hexData);

                // 发送数据

                stream.Write(data, 0, data.Length);

                // 接收响应

                data = new byte[1024];

                int bytes = stream.Read(data, 0, data.Length);

                string response = Encoding.Unicode.GetString(data, 0, bytes);

                byte[] byteDatas = Encoding.Unicode.GetBytes(response);

                //字节转十六进制字符

                string hexString = BitConverter.ToString(byteDatas).Replace("-"" ");

                //需要转换的数组

                byte[] bytes3 = { byteDatas[3], byteDatas[4], byteDatas[5], byteDatas[6] }; // 示例字节数组

                //数组倒序

                Array.Reverse(bytes3);

                //四个字节转浮点

                result = BitConverter.ToSingle(bytes3, 0); // 从字节数组的第一个元素开始转换
                return result;
        }
        catch (Exception e)
        {
                return -1;
        }
        finally
        {
                // 清理资源
                clientTcp.Close();
        }
}
Modbus TCP协议解析
一、协议概述
Modbus TCP是Modbus协议在以太网上的实现版本,通过TCP/IP协议栈完成设备间的主从式通信‌25。其核心优势在于保留了传统Modbus的简单性,同时融合了TCP/IP的可靠传输特性,适用于工业自动化、能源管理等领域‌26。
二、通信原理
‌网络模型‌
基于OSI模型的传输层(TCP)和应用层(Modbus协议)‌5
默认使用端口502进行通信‌56
‌通信流程‌
‌连接建立‌:客户端主动发起TCP连接至服务端‌
‌请求响应‌:客户端发送包含功能码的请求报文,服务端返回对应操作结果‌
‌事务标识符‌:2字节字段用于请求与响应的匹配,确保通信顺序‌
三、协议帧结构
Modbus TCP数据帧由两部分构成:
‌MBAP报文头(7字节)‌
字段        长度        说明
事务标识符        2字节        用于请求与响应匹配的序列号‌
协议标识符        2字节        固定为0x0000(表示Modbus TCP)‌
长度        2字节        后续数据单元的总字节数‌47
单元标识符        1字节        设备地址(兼容传统Modbus从站地址)‌
‌PDU数据单元‌
‌功能码(1字节)‌:定义操作类型(如读寄存器、写线圈等)‌
‌数据域(可变长度)‌:包含寄存器地址、数据值等具体操作参数‌
四、核心功能码
功能码        操作类型        目标寄存器
0x01        读线圈状态        0区(可读写布尔量)
0x03        读保持寄存器        4区(可读写寄存器)‌
0x05        写单个线圈        0区‌
0x10        写多个寄存器        4区‌
五、典型应用场景
‌PLC与上位机通信‌:通过以太网实现多设备集中监控‌
‌智能仪表联网‌:如水表、电表等设备数据采集‌
‌分布式控制系统‌:支持跨网段设备互联,适用于大型工业现场‌
六、协议特点
‌主从架构‌:单主站轮询多从站,避免总线冲突‌
‌无校验机制‌:依赖TCP协议保证数据完整性‌
‌兼容性‌:可通过网关设备与Modbus RTU/ASCII协议互通‌
注:实际应用中需注意TCP连接管理与超时机制设计,建议使用长连接减少握手开销‌。
<br>免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码