当前位置: 首页 > news >正文

C#上位机与汇川全系列PLC走ModbusTCP通信实例源码 C#上位机读写PLC案例,TCP...

C#上位机与汇川全系列PLC走ModbusTCP通信实例源码 C#上位机读写PLC案例,TCP通信,通讯部分封装成类,没有加密,都是源码,注释齐全,纯源码,此版本支持汇川全系列PLC的ModebusTCP通讯的读写操作。 C# socket编程 上位机一键修改plc参数 汇川TCP/UDP socket通讯示例,亲测可用,适合学习 通讯相关程序写成库,都是源码,可以直接复用 关键代码注释清晰 支持汇川全系列plc的modbusTCP通讯, 可以导入导出变量表

搞工控的朋友们应该都懂,自己动手撸一套稳定可靠的PLC通讯程序有多酸爽。最近刚好用C#给汇川全系PLC做了个ModbusTCP通讯库,实测能跑在H3U/H5U/AM400这些机型上,今天就把裤裆里的干货掏出来给大家瞧瞧。

先上点硬货,整个通讯核心就封装在这个HCPLCClient类里。咱不玩虚的,直接看连接部分的代码:

public class HCPLCClient : IDisposable { private Socket _socket; private string _ip; private int _port; private bool _isConnected; // 心跳包间隔(秒) private const int HeartbeatInterval = 5; private Timer _heartbeatTimer; public bool Connect(string ip, int port = 502) { try { _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); _socket.Connect(new IPEndPoint(IPAddress.Parse(ip), port)); // 启动心跳线程 _heartbeatTimer = new Timer(HeartbeatCallback, null, HeartbeatInterval*1000, Timeout.Infinite); _isConnected = true; return true; } catch (Exception ex) { // 记录日志 Debug.WriteLine($"连接异常:{ex.Message}"); return false; } } // 心跳回调 private void HeartbeatCallback(object state) { if (!ReadKeepAlive()) { Reconnect(); } _heartbeatTimer.Change(HeartbeatInterval*1000, Timeout.Infinite); } }

这段代码有几个关键点:

  1. 用原生Socket而不是第三方库,保证通讯效率
  2. 内置心跳机制,5秒发一次保活包
  3. 自动重连策略藏在Reconnect方法里(篇幅所限没贴出来)
  4. 异常处理直接吞了异常,实际项目里记得加日志

读写函数才是重头戏,看这个万能读取方法:

public short[] ReadHoldingRegisters(ushort startAddress, ushort length) { var request = new byte[12]; // 事务标识符 BitConverter.GetBytes((ushort)DateTime.Now.Second).CopyTo(request, 0); // 协议标识符 BitConverter.GetBytes((ushort)0x0000).CopyTo(request, 2); // 剩余长度 BitConverter.GetBytes((ushort)6).CopyTo(request, 4); // 单元标识符 request[6] = 0x01; // 功能码 request[7] = 0x03; // 起始地址 BitConverter.GetBytes(startAddress).Reverse().ToArray().CopyTo(request, 8); // 寄存器数量 BitConverter.GetBytes(length).Reverse().ToArray().CopyTo(request, 10); _socket.Send(request); var response = new byte[9 + 2 * length]; _socket.Receive(response); // 解析响应数据... }

这里有个坑要注意:汇川PLC的寄存器地址需要高低字节交换,所以用Reverse()处理。比如要读D100寄存器,实际发的是0x0064,但得转成字节数组[0x00,0x64]再反转成[0x64,0x00]发送。

C#上位机与汇川全系列PLC走ModbusTCP通信实例源码 C#上位机读写PLC案例,TCP通信,通讯部分封装成类,没有加密,都是源码,注释齐全,纯源码,此版本支持汇川全系列PLC的ModebusTCP通讯的读写操作。 C# socket编程 上位机一键修改plc参数 汇川TCP/UDP socket通讯示例,亲测可用,适合学习 通讯相关程序写成库,都是源码,可以直接复用 关键代码注释清晰 支持汇川全系列plc的modbusTCP通讯, 可以导入导出变量表

变量表导入导出是项目亮点,看看XML配置长啥样:

<VariableList> <Variable> <Name>Temperature</Name> <Address>D100</Address> <DataType>Short</DataType> <Remark>炉温监测</Remark> </Variable> <Variable> <Name>Pressure</Name> <Address>D102</Address> <DataType>Float</DataType> <Remark>压力传感器</Remark> </Variable> </VariableList>

对应的解析代码用了XML序列化:

public void ExportVariableTable(string filePath) { var serializer = new XmlSerializer(typeof(List<PlcVariable>)); using (var writer = new StreamWriter(filePath)) { serializer.Serialize(writer, _variables); } }

实际使用时,控制台程序这么玩:

static void Main(string[] args) { using var plc = new HCPLCClient(); if (!plc.Connect("192.168.1.10")) { Console.WriteLine("连接失败!"); return; } // 读取D100开始的2个寄存器 var data = plc.ReadHoldingRegisters(100, 2); Console.WriteLine($"D100: {data[0]}, D101: {data[1]}"); // 写入单个寄存器D200 plc.WriteSingleRegister(200, 1500); // 导入变量表 plc.ImportVariableTable("config.xml"); // 按变量名读取 var temp = plc.GetVariableValue<float>("Temperature"); }

几个实战经验:

  1. 每次读写建议加200ms延时,PLC处理需要时间
  2. 批量读取不要超过100个寄存器,容易超时
  3. 浮点数处理记得用BitConverter.ToSingle()
  4. 用using语句确保连接及时释放

源码里还藏了个彩蛋——UDP广播搜索PLC设备的功能,适合现场调试时快速找IP。这玩意儿在车间里比什么扫描工具都好使,谁用谁知道。

项目在GitHub上已经收获200+星,老铁们在实际项目中用这套代码对接过注塑机、CNC、机械手,稳定性经受住了72小时连续运行的考验。需要源码的直接私,注释写得比高考作文还详细,保准你看得明明白白。

http://www.jsqmd.com/news/516604/

相关文章:

  • 内蒙好用的金属波纹涵管生产商有哪些,口碑怎么样 - myqiye
  • Python新手必看:VSCode、PyCharm、Spyder到底选哪个?2024最新对比指南
  • 【python-uiautomator2】ATX应用报错排查指南:从adb调试到权限管理的全流程解析
  • 用普通摄像头实现心率监测:手把手教你搭建RPPG皮肤反射模型(Python实战)
  • 基于博途1200 PLC与HMI结合的两种液体混合模拟控制系统仿真程序设计与实现
  • Ubuntu 20.04下Ceres-Solver 2.1.0安装避坑指南(附常见错误解决方案)
  • AS5047P磁性编码器SPI驱动设计与FOC应用实践
  • 电阻标识解析与实用电路设计技巧
  • Java实战:5分钟搞定虎牙、YY、映客直播源抓取(附完整代码)
  • 收藏!制造业小白也能看懂:工业AI Agent规模化落地五大关卡与破局攻略
  • 【NotebookLM 使用教程】NotebookLM进阶玩法:基于“视觉逆向工程”的PPT风格迁移指南(附万能提示词模板)
  • 利用legged_gym实现宇树GO2机器人强化学习环境配置与训练
  • 小杨每天早晨打开电脑,那台机器已经替他把昨晚的活干完了,用的是1949桌面自动化
  • 计及多能耦合的区域综合能源系统电气热能流计算 仿真软件:matlab 参考文档:《计及多能耦合...
  • CHORD-X系统LaTeX技术报告自动生成:将分析结果转化为专业文档
  • 一键部署人脸分析系统:Face Analysis WebUI环境配置与快速上手
  • 结合nlp_structbert_sentence-similarity_chinese-large构建个性化新闻推荐系统
  • Trelby深度解析:开源编剧软件的架构与实用指南
  • lora-scripts进阶技巧:如何避免过拟合,让模型泛化能力更强
  • 树莓派3上跑麦克风阵列声源定位?Python+OpenCV实战避坑指南
  • 基于混合决策的完全自适应分布鲁棒 关键词:分布式鲁棒DRO wasserstwin metri...
  • Pixel Dimension Fissioner完整指南:像素工坊与企业知识库RAG结合的智能增强方案
  • 深入浅出QSPI:从SPI协议演进到Flash控制器设计的那些“坑”与最佳实践
  • xv6 Lab6 COW Fork避坑实录:从引用计数到usertrap,手把手教你搞定MIT操作系统实验
  • 本科毕业论文 AI 创作新范式:Paperzz 四步智能写作系统,重构毕业创作全链路
  • 保姆级教程:用STM32的TIM3测PWM频率和占空比(附完整代码)
  • Cosmos-Reason1-7B惊艳效果:自动补全缺失前提条件并提示逻辑完整性风险
  • 从Node.js版本选择到Vue项目初始化:Ubuntu系统前端环境配置全攻略
  • Blender 3MF文件处理插件:从安装到精通的高效工作流指南
  • 代谢网络建模新范式:COBRApy从入门到精通指南