『7x24小时有问必答』

前言

工业自动化领域,PLC(可编程逻辑控制器)作为核心控制设备,广泛应用于生产线、机械臂、仓储系统等场景。而如何高效、稳定地与PLC进行通信,是实现智能化监控与远程控制的关键一步。
本文将介绍一个基于 C# 开发的欧姆龙 HostLink 协议通讯框架,详细介绍其设计思路、功能实现及实际应用效果。

项目介绍

一个轻量级但功能完整的 PLC 通信框架,专门适配欧姆龙系列 PLC,采用 HostLink 协议进行数据交互。
HostLink 是欧姆龙早期推出的一种串行通信协议,虽年代较久,但在许多老设备和特定产线中仍被广泛使用。该项目通过封装底层通信细节,提供简洁易用的 API 接口,开发可以无需深究协议细节即可快速实现读写操作。

项目功能

1、支持同步与异步读写操作,兼顾实时性与程序响应性能;
2、可读写多种数据类型,包括 int、float、byte 数组等,并通过泛型方法灵活处理;
3、支持自定义命令结构,指定操作区域(如 DM 区)、数据格式(WordHEX)及起始地址;
4、提供原始字节发送接口,便于调试或扩展非标准指令;
5、集成基础网络配置(IP、端口),适配 TCP 模式下的 HostLink 通信(部分欧姆龙设备支持)。

项目特点

1、协议兼容性:严格遵循欧姆龙HostLink协议规范,支持ASCII码帧结构与FCS校验算法;
2、异步处理机制:通过Task.Run实现非阻塞通信,提升系统吞吐量;
3、泛型支持:采用泛型方法实现int、float等多类型数据的统一读写接口;
4、错误处理:内置状态码解析模块,可识别0000(成功)、0104(数据超长)等响应码;
5、配置灵活性:支持本地IP、端口、超时时间等参数动态配置。

项目技术

技术栈涵盖 C# 8.0、WPF MVVM架构、System.IO.Ports串口通信库及欧姆龙FINS协议解析。
帧结构构造:遵循"@单元号+命令码+数据区+FCS+结束符"格式;
校验算法:采用异或运算生成FCS校验码;
异步通信:通过async/await模式实现读写操作的非阻塞执行;
数据解析:利用BitConverter实现字节流与数值类型的转换。

项目代码

同步读PLC泛型数据

private  void  Button_Click_ReadPLC(object  sender, RoutedEventArgs e)

{

      Task.Run(() =>

      {

            Command command =  new  Command(OperatorMode.Read, AreaType.DM, DataType.WordHEX,  2,  100);

             var  result = OrmonPlc.Read<float>(command);

             if  (result.Success)

            {

                  Message message =  new  Message();

                  message.Content =  $"同步读取泛型成功,读取值={result.Content},类型={result.Content.GetType().FullName}";

                  App.Current.Dispatcher.Invoke(() => MainViewModel.MessageList.Insert(0, message));

            }

             //4个字长回复 => 读两个int 或uint  

             //46 49 4E 53 00 00 00 1E 00 00 00 02 00 00 00 00 C0 00 02 00 34 00 00 01 00 FF 01 01 00 00   00 14 00 1E 01 02 03 04

             //2个字长回复 => 读1个int 或uint 或 float

             //46 49 4E 53 00 00 00 1A 00 00 00 02 00 00 00 00 C0 00 02 00 34 00 00 01 00 FF 01 01 00 00   00 14 00 1E              //if (result.Success)

             //{

             //      Message message = new Message();

             //      message.Content = $"同步读取泛型成功,读取值={result.Content},类型={result.Content.GetType().FullName}";

             //      App.Current.Dispatcher.Invoke(() => MainViewModel.MessageList.Insert(0, message));

             //}

             //var result2 = OrmonPlc.ReadAsync<int>(command);

             //if (result2.Result.Success)

             //{

             //      Message message = new Message();

             //      message.Content = $"异步读取泛型成功,读取值={result2.Result.Content}";

             //      MainViewModel.MessageList.Insert(0, message);

             //}

      });

}

//写泛型数据

private  void  Button_Click_WritePLC(object  sender, RoutedEventArgs e)

{

      Task.Run(() =>

      {

             var  f = BitConverter.GetBytes(10.10f);

             var  r = BitConverter.ToSingle(f,  0);

            Command command =  new  Command(OperatorMode.Write, AreaType.DM, DataType.WordHEX,  10,  100);

            List<float> list =  new  List<float>() {  255,  2.3f,  3.4f,  4.5f,  5,  6,  7,  8,  9,  10.10f  };

             var  result = OrmonPlc.Write(command, list.ToArray());

             if  (result.Success)

            {

                  MessageBox.Show("同步写入short数组成功");

            }

      });

}

项目效果

框架能够稳定连接欧姆龙 CJ 系列或 CP 系列 PLC(需开启 HostLink 通信功能),成功读取 DM 区寄存器数据,并写入整型或浮点数值。
1.png

项目源码

源码包含完整的解决方案结构,涵盖 PlcLib(PLC 通信核心)、CommunicationLib(通用通信组件)以及 WPF 主程序。
2.png
为了防止丢失,后台回复关键字PLC通讯工具,即可获取完整源码地址。
3.png

总结

基于欧姆龙 HostLink 协议的 C# 通信框架,虽然面向特定品牌和协议,但其设计思路具有普适参考价值:通过抽象命令、封装通信、统一返回结果,大幅降低工业通信的接入门槛。对于需要对接老旧欧姆龙设备的开发而言,它提供了一个可靠、可调试、可扩展的基础工具。

关键词

最后
如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。也可以加入微信公众号[DotNet技术匠]  社区,与其他热爱技术的同行一起交流心得,共同成长!
作者:小码编匠
出处:gitee.com/smallcore/DotNetCore
声明:网络内容,仅供学习,尊重版权,侵权速删,歉意致谢!

END

方便大家交流、资源共享和共同成长
纯技术交流群,需要加入的小伙伴请扫码,并备注加群

推荐阅读

觉得有收获?不妨分享让更多人受益
关注「DotNet技术匠」,共同提升技术实力

收藏
点赞
分享
在看
</int>

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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


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