工业通信的开源项目 HslCommunication 介绍

本文介绍了HslCommunication开源项目,一个用于工业通信的C#库,旨在简化与PLC等设备的交互。作者分享了项目背景、发展历程和核心功能,包括三菱、西门子等PLC的读写,以及Modbus和Redis支持。项目提供易用的API,支持短连接和长连接,方便开发者快速实现通信功能。
摘要由CSDN通过智能技术生成

前言:


本项目的孵化说来也是机缘巧合的事,本人于13年杭州某大学毕业后去了一家大型的国企工作,慢慢的走上了工业软件,上位机软件开发的道路。于14年正式开发基于windows的软件,当时可选的技术栈就是MFC和C#的winform,后来就发现C#的更为简单一些,那就直接干,先做再说。需要做一些界面相关的软件,就直接采用了C#的winform,基础不够,百度来凑。后来领导就下达了一个任务,开发一个硫化机系统的上位机,对某个车间共计五六十台硫化机进行监控和曲线查看。由于没有可参考的界面程序,开发起来就比较费劲,具体有什么功能,都是干嘛的,工艺需要什么等等都是未知数,没办法,只有硬着头皮和现场的工艺人员,电气人员,来回沟通交流,加上一些我自己的理解,正式踏上了工业软件开发的道路。

 

开始做项目的时候,硫化机设备是采用PLC作为主控制器的,第一道拦路虎就是如何将三菱的PLC(逻辑控制器,通常作为设备的核心控制单元)的数据给拿到我的软件中来呢?这真是一个棘手的问题啊,首先就是百度,搜索到了MX component组件,初步试了试,真的比较麻烦,关键还没弄通。然后就去看看有没有其他的方式实现,后来就在工厂的备件库里看到了三菱的以太网模块QJ71E71-100,然后就搜索支持的通讯说明,在三菱的官网上找到了通信说明,打开一看,我去,这么长篇大论。那也没有办法,按照边测试边开发,勉勉强强读到了我想要读的数据(当然,这时候的代码基本都是写死的),又开始解析数据成真实的数据,然后研究如何存入数据库中去,再研究怎么显示曲线,到这里为止,这个项目的基本技术难题基本算是攻克了,持续的迭代,那是后话了。

 

在接下来的两三年里,接触并开发了好几个类似的项目,发现通常工业软件的需求是采集,分析,存数据库,显示。后来对通信的理解深入,由单机软件发展成了CS架构的软件,微软的数据库SQL Server本来就支持局域网访问。后来在17年趁着换工作和考驾照的间隙,梳理了上份工作积累的经验,和实际的需求,再加上自己的代码水平也稍微进步了一点点,就整理成了HslCommunication,并将之开源出来,初步的功能是三菱PLC的数据读写,C#软件之间的数据通信。后来又集成了modbus协议,西门子,欧姆龙,ab plc,三菱串口等等,发现写库的要求和写简单程序的要求并不是等同的,要写成库的话,需要保证功能灵活性,你写的代码基本符合大多数人的使用需求,而不是某种特定的情况。也就是说,有些人可能简单的使用而已,而有些人会深入使用,压榨性能。然后就是代码了,所有写代码的标准的最终目的都是为了让代码可读性增强,可维护性增强,方便快速的理解,升级,查错。这方便确实却要经验积累。

 

做这个项目(HslCommunication)的目标和开源的初衷是方便广大的像我这种的在工厂一线的软件工程师,我一直觉得我们不应该把自己看做是程序员,程序员的角色更像是码农,主要工作就是敲代码,而软件工程师应该是更大的定义,设计软件的整体架构和开发的。这几年大多数工作都开始意识到工业软件,上位机软件,数据追述系统,SCADA软件,MES软件开发的重要性,所以像我这样的有通信需求的人应该不在少数,况且开源有助于别人来一起改进,和代码测试。所以在开源之后,在博客园就陆陆续续的写了一些文章,比如如何使用C#和三菱PLC通讯,C#和西门子通讯等等。从博客园的点击量来看,确实有大量的工厂的程序员有这方便的需求,而直接采用socket来开发,比较晦涩难懂,坑又比较多,事实上确实有很多人来报告了bug。帮助我修复了这个组件,提高了稳定性。再次感谢所有使用或是报告bug的万千网友,没有你们的支持就没有本项目的今天。

 

由于我也是这个项目的使用者之一,实际上我自己在工作或是其他方面的使用也是很频繁的,在开发项目上就会站在使用者的角度出发,比如我想读取三菱PLC的D100的数据,能不能有个组件一两行代码就可以实现?伪代码的逻辑就是

1. 实例化

2. 读

这样才算是简单的操作,本着这样设计思想,最终有了现在的开源项目。

 

HslCommunication 能干什么?


相比大多数人比较关心这个问题,综合前言的介绍,这个组件主要是用于工业通信的,也有两个程序之间的通讯,还有其他杂七杂八的功能,更像是我的工具插件。各种小功能,扩展的小功能等等。直接上图:

demo

这是这个开源项目的demo程序,基本上将80%的功能列举出来了,当然还有一些小功能没有列举。大多数支持的设备都在上面进行显示了,可以方便的进行测试,看看是不是可以实现读写的操作(对现场实际在生产的设备应当注意写入不正确的数据会导致意外事故发生)。比如我们来看看三菱的PLC的demo程序:

melsec

其他的截图画面就不一一举例了,都是类似或是基本类似的。可以方便的使用demo进行测试。

特别注意,本组件实现的所有的通讯都是基于socket直接实现的,通信部分不依赖任何第三方通讯库或是组件安装,也就是说,你拿个dll可以直接和PLC通讯,这对于部署,开发调试,升级都是非常方便的。

当你需要进行PLC通信时,可以先用demo程序进行测试,如果demo程序可以读写,那么用本组件也就绝对可以读写,有些PLC的参数如果不清楚,就需要联系电气工程师进行确认。比如AB PLC的slot,不知道该写什么,就尝试为0,如果不行,就只能联系电气工程师解决这个问题。

 

demo项目的意义:当我开发了三菱PLC的通讯程序和西门子的通讯程序之后,我发现如果我想要测试一个新的PLC通不通?或是简单的通过代码读PLC的某个地址的程序的时候,就好费劲,需要经常创建

  • 7
    点赞
  • 80
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值