C# Socket 读取可变长度数据

从零构建工业级通信库:C#与三菱PLC的协议封装艺术 本文详细介绍了如何从零构建工业级C#通信库,实现与三菱PLC的高效协议封装。内容涵盖A-3E协议解析、Socket优化、泛型设计等核心技术,并提供性能调优策略和实战经验,帮助开发者提升上位机与PLC通信的稳定性和效率。 阅读详情
byte[] allContent = null;
int AllLength = 0;
int count = 0;
int length= 1024;
byte[] readBuff = new byte[length];
List<byte[]> readBuffList = new List<byte[]>();
while (true)
{
    int r = this._clientSocket.Receive(readBuff, 0, length, SocketFlags.None);
    if(r < = 0) break;
    try
    {
        count  += r;
        byte[] curReciveContent = readBuff.Skip(0).Take(r).ToArray();
        if (allLen == 0)
        {
            //数据位长度,在第四位
            byte[] lenBytes = curReciveContent.Skip(4).Take(4).ToArray();
            Array.Reverse(lenBytes);
            allLen = BitConverter.ToInt32(lenBytes, 0);
        }
        if (count == allLen)
        {
            allContent = new byte[length];
            int curIndex = 0;
            for (int i = 0; i < readBuffList.Count; i++)
            {
                byte[] tempReadBuffs = readBuffList[i];
                Array.Copy(tempReadBuffs, 0, allContent, curIndex, tempReadBuffs.Length);
                curIndex += tempReadBuffs.Length;
           }
           break;
        }
    }
}

 

C#原生Socket实现SICK RFID TCP通信协议解析 TCP通信是工业设备联网的基础传输机制,其流式特性决定了必须处理粘包、校验、状态同步等底层问题。SICK RFID读卡器虽提供TCP Server接口,但依赖二进制帧协议(STX+LEN+CMD+DATA+CRC),需严格遵循Modbus RTU风格CRC16校验与TLV结构解析。该方案摒弃黑盒SDK,采用C#原生异步Socket构建可审计、可调试、低依赖的客户端,支撑UID识别、RSSI采集、天线定位等核心能力,适用于课程设计、毕设答辩及轻量化工控部署场景。 阅读详情

相关推荐

C#手写FINS协议读取PLC:帧结构解析、Socket实现与排错指南

工业通信协议是连接上位机与PLC的桥梁,其中FINS作为日系PLC常用的以太网二进制协议,凭借结构紧凑、传输高效的特点,被广泛用于数据采集与设备监控场景。理解协议帧的组成原理,掌握内存区代码与地址换算规则,是利用C# Socket编程实现稳定通信的基础。通过UDP端口9600进行报文交互,工程师可以自行构建读取命令、解析响应数据,避免依赖第三方库。在实际工程中,常见问题如节点号不匹配、响应码0x0103、批量读取超限等,往往源于对帧头字段或地址单位的误解。本文从协议原理出发,结合C#实现示例,系统梳理FIN

weixin_29192211的博客 289

如何得到Socket收到数据的长度

最近做的一个项目,需要从网口拿到数据,然后从Socket中取出数据并放入到byte[]中,收到的数据并不是字符串 一开始使用byte[]buf=newbyte[100];来事先定义长度,长度太长会导致后面多了很多0,长度不好控制。 然后从网上找到的一个,先定义100,然后读完之后知道长度后再重新定义长度,但是试过之后发现数据结果不唯一,也就是数据 会出现错误。 byte[]b...

weixin_37758967的博客 4847

C#手写FINS TCP帧读取欧姆龙PLC内存区实战

FINS协议是欧姆龙PLC专用的二进制工业通信协议,运行于TCP/UDP之上,其核心在于严格遵循16字节大端序帧头结构与内存地址编码规则。理解FINS不仅需掌握命令码、子命令码、节点号等字段含义,更关键的是正确解析错误码(Error Code)并实现健壮的Socket收发逻辑。该协议广泛应用于CP1E、CP1H、NJ/NX系列设备的数据采集与上位机集成,是工业自动化系统中C#对接欧姆龙产线的基础能力。本文聚焦FINS TCP模式下D区、CIO区等内存区域的手动帧构造与响应解析,覆盖地址转换(如D100→0x

weixin_34290631的博客 251

Socket的Send,Recv的长度问题

         一个包没有固定长度,以太网限制在46-1500字节,1500就是以太网的MTU,超过这个量,TCP会为IP数据报设置偏移量进行分片传输,现在一般可允许应用层设置8k(NTFS系统)的缓冲区,8k的数据由底层分片,而应用层看来只是一次发送。        windows的缓冲区经验值是4k。        Socket本身分为两种,流(TCP)和数据报(UD

思维空间 2950

FX5U以太网MC协议C#通信实战:Socket直连、3E帧解析与WinForm线程安全

MC协议是三菱PLC以太网通信的核心二进制协议,区别于Modbus TCP和OPC UA,其本质是基于TCP的定制化帧交互机制。理解3E帧结构(14字节头部+数据体+CRC16校验)是实现稳定通信的前提,而Socket直连能精准控制超时、重试与状态机,避免第三方库兼容性风险。在WinForm等UI框架中,必须解决异步通信与主线程控件更新的线程安全问题,典型方案包括InvokeRequired判断、Timer替代Task.Delay、事件驱动解耦等。本实践聚焦FX5U PLC高频数据采集场景,覆盖D/LW寄存

weixin_29191081的博客 249

C#对接MCGS TCP私有协议实战:帧构造、心跳重连与数据解析

工业HMI通信中,TCP协议并非通用标准,而是厂商私有实现。MCGS采用小端序二进制帧结构,含12字节固定头部、设备ID与寄存器地址混编、无校验机制等关键特征。理解其帧格式原理是实现稳定通信的前提,技术价值在于规避文档盲区导致的‘能连不能通’困局。典型应用场景包括PLC数据采集上位机、毕设远程监控系统及非标设备对接。本文聚焦C#工程化落地,覆盖MCGS TCP私有协议解析、字节级帧构造、自动重连与心跳保活、REAL/INT/BOOL类型零误差解析等核心环节。

weixin_29174141的博客 301

TCP网络编程(字节流)

服务器端 package com.zqf.Socket_; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; public class Socket02Server { public static void main(String[] args) throws IOExc

zhang__1234的博客 1505

C#原生Socket实现OMRON FINS TCP通信

工业自动化中,PLC与上位机通信本质是协议解析与字节序协同的过程。FINS协议作为OMRON专属工业通信协议,运行于TCP之上,其核心在于严格遵循帧结构、大端序传输及地址编码规范。技术价值体现在摆脱第三方库依赖、精准控制时序、适配CP/CJ/NJ等主流系列,并保障实时采集稳定性。典型应用场景包括设备监控系统开发、边缘数据采集、HMI定制化集成及国产化替代中的协议自主可控需求。本文聚焦C#原生Socket实现FINS over TCP的最小可行链路,深入解析寄存器映射、字节序转换与响应校验等关键环节。

weixin_29291863的博客 260

C#读写socket的常用方式

假设消息头为16byte 0-3 消息头标识 4-7 消息体长度 8-15 CRC校验码 public class StreamHelper { #region 将消息转为包含消息头的字节数组 /// <summary> /// 将消息转为包含消息头的字节数组 /// <...

weixin_30632883的博客 469

纯C#实现欧姆龙FINS TCP通信协议解析与上位机开发

FINS协议是欧姆龙PLC主流工业通信协议之一,基于TCP/IP的FINS通信相比UDP或COM驱动具备更高可靠性与跨平台适应性。其核心原理在于严格遵循RFC 1006标准封装指令帧,通过ICF/GCT/Da1等字段实现三级寻址,并依赖字节序对齐、异或校验(FCS)及Big Endian地址编码保障数据一致性。技术价值体现在零外部依赖、线程安全、毫秒级轮询与错误码精准反馈,广泛应用于汽车零部件产线、智能装配站等需快速部署、稳定运行的.NET上位机场景。本文聚焦纯C#实现的FINS TCP通信方案,涵盖帧结构

weixin_33507732的博客 277

C#上位机直连FX5U PLC的TCP通信实测工程包(含SLMP协议与ASCII示例)

这个资源包提供一套已在压床机设备上实测通过的C#与三菱FX5U PLC以太网通信完整方案,基于标准TCP/IP协议实现稳定连接。支持对M继电器、D数据寄存器等软元件进行按钮式写入操作,同时可实时读取温度、压力等模拟量传感器数据。代码结构清晰,包含TcpClient客户端封装(SocketEx.cs)、主界面逻辑(Form1.cs)、PLC连接管理模块(TcpConnectClient.cs)以及日志可视化界面(Log.png)。配套资料齐全:FX5U官方通讯协议PDF/DOCX文档、SLMP测试记录文本、A

star5的专栏 412

C# socket通信 接收缓冲区大小设置,以及粘包问题的解决

C# socket通信 接收缓冲区大小,以及粘包问题的解决

wufadeshou的博客 9155

C#根据指定字节(Byte)长度码表的定长与变长报文读取解析示例

根据已定义好的码表(指定Byte长度)截取报文的示例,实现语言C#

C# Socket网络编程学习(4-->6)

C# Socket网络编程学习(4-->6) 2010年05月03日   [b]C# Socket[/b][b]网络编程学习[/b][b](4) - TCP[/b][b]消息边界处理[/b][b] [/b]   在前面的几篇中,讲了关于套接字Socket以及利用套接字助手类来进行服务端和客户端之间的通信,在此中间并没有对发送的信息进行任何的处理。在本篇中将会讲一下TCP通信时的信息边界...

qqd911mu 152

运算放大器电路仿真实践:从零实现完整示例

通过一个完整的运算放大器电路仿真示例,深入掌握电路仿真的关键步骤与技巧,帮助电子爱好者和工程师快速上手实际项目设计。

weixin_34725745的博客 1318

Adams与Matlab联合仿真入门:从零搭建你的第一个动力学模型

本文为Adams与Matlab联合仿真新手提供了一份详尽的入门指南。文章从软件环境配置、版本兼容性检查讲起,逐步演示了如何在Adams中构建单摆动力学模型并定义输入输出接口,以及在Matlab/Simulink中搭建控制回路。通过一个完整的受控单摆实例,手把手教你完成从模型导出、模块生成到执行联合仿真的全流程,帮助你快速搭建并运行第一个联合仿真模型,实现动力学与控制系统的协同验证。

g5h6i7j的博客 699

网络流、网络数据的编解码(C#---网络编程)

网络流、网络数据的编解码(C#---网络编程) 一、网络流 当通过网络传输数据或对文件数据进行操作时,需要将数据转化为数据流的形式。数据流(Stream)是对串行传输的数据(以字节为单位)的一种抽象表示,数据源可以是文件、外部设备、主存、网络套接字等。数据流分为文件流、内存流和网络流3种类型。其中,网络流用于在网络上传输数据。在使用网络流时,数据在网络的各个位置之间以连续的字节形式传输

liyuqian199695的博客 3088

Python大数据舆情分析系统开发实战

舆情监测系统是大数据分析的重要应用场景,通过自然语言处理(NLP)技术解析社交媒体文本情感倾向。基于Python技术栈的解决方案整合了Scrapy爬虫框架进行数据采集,PySpark处理海量文本数据,结合SnowNLP和Jieba实现中文语义分析。系统采用微服务架构设计,包含数据采集层、处理层、存储层和应用层,通过情感分析优化和实时热点检测算法提升监测准确率。典型应用包括企业品牌监测、公共事件预警等场景,开发过程中需特别注意数据合规性和分布式集群的性能调优。

weixin_34408624的博客 387

C# TCP Socket通信中粘包与分包问题的原理与解决方案详解

在网络编程中,TCP协议作为面向字节流的传输层协议,其流式传输特性决定了应用层必须自行处理消息边界问题,即粘包与分包现象。理解其原理是构建健壮网络通信的基础,核心在于如何在字节流中准确识别独立的应用层消息单元。从技术价值看,这直接关系到数据传输的可靠性、解析效率和系统稳定性,是游戏服务器、物联网、分布式系统等实时通信场景的必备知识。针对C#开发,主流解决方案包括定长消息、特殊分隔符、长度前缀法及序列化框架集成,其中长度前缀法因其高效、安全、灵活的特性,成为处理二进制协议最推荐的方法。本文聚焦C#实践,深入剖

weixin_34080571的博客 496

一起玩儿物联网人工智能小车(ESP32)——48. 利用循迹模块实现循迹小车(三)

摘要:本文介绍循迹小车的接线方法及类的基础知识

一起玩儿科技 1134

初学者入门YOLO目标检测:从懵圈到上手,这篇文章讲透所有核心(附学习路径+避坑指南)

目标:比如训练一个“检测苹果和橘子”的模型,或者“检测人脸”的模型;任务:学会用LabelImg标注数据,制作YOLO格式的数据集,用命令行训练模型;关键:不用追求高精度,能训练出一个能检测出目标的模型就行。很多初学者卡在入门阶段,不是因为智商不够,而是因为“想太多,做太少”——总觉得要把所有原理搞懂才能动手,结果越想越怕,最后放弃。先动手,再动脑。先跑通一个案例,获得成就感;再制作自定义数据集,训练简单模型;最后再回头去理解原理,优化模型。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 688
上一篇: inno setup 打包脚本相关编辑
下一篇: C# HalconDotNet 工业视觉处理
code_long
博客等级 码龄16年 35粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值