开源纯C#工控网关+组态软件
一、 前言
在园子潜水也七八年了。说来惭愧,这么多年虽然一直自称.NET铁杆粉丝,然仅限于回几个不痛不痒的贴,既没有发布过代码,也没有写过文章。
看着.NET和C#在国外风生水起,国内却日趋没落,我也早觉得有写一点东西的必要了。
二、 为什么要开源,它能做什么
- 开源是大势所趋
现在已经不是兜售软件光盘卖授权的时代了。我自己开发这套系统也得益于开源。
起因是因为看到单位用的组态软件被版权问题困扰,同时系统十分庞大,动辄几个G,安装部署调试都不方便,同时脚本功能和扩展能力也有限。
开始就是自己研发,同事普遍反对,都认为组态软件是大公司玩的东西,我靠一人一枪,图样图森破。
然而我是个狂热分子,参考了几百篇国内论文,下载过几十上百个开源类库,反复研究,经常熬夜。
一段时间之后,拿出来一套半成品,也逐渐为大家所接受,并一发不可收,陆续做了不少工程,逐步取代了原有的组态软件,系统也不断成熟、壮大。
但限于精力和水平,系统完善的空间还很大,可以改进的功能还很多,与其敝帚自珍,不如交给社区,共同完善。
这套系统只是提供了一套组件和工具,并没有给出具体的行业解决方案和控制逻辑(这属于不能开源的部分)。
- 目标和功能
从一开始设计目标就很明确,取代单位现有组态软件。实现“多快好省”。
系统架构图如下:
分为网关驱动层、平台服务层、应用层。
网关负责转换各种工业以太网协议,统一接口。
平台服务层负责轮询、储存、推送数据。提供各种查询、读写接口。
应用层主要是人机界面(HMI)和各种可视化功能组件,如报警界面、趋势图、报表、图表、下订单、改参数、查日志等。
多:就是适应面广,比如工控网关能支持多种工业以太网、PLC,普适性强,可应用于多个行业。
目前已经支持:
- Modbus TCP/RTU
- OPC DA
- DDE
- AB EtherNetIP
- Mitsubishi
- Siemens S300/200/1200/1500
快:这里包含三个意思,设计效率高、安装部署快、运行速度快。
有方便的设计工具。驱动、变量、报警、归档管理器,对,就这样一个简单的配置器,支持各种格式导入导出。
接下来是宇宙第一IDE,Visual Studio,作为组态设计器。组态设计器本来是最难实现的部分,现在VS一出,秒杀一片。
速度按我自己,做一套多工段上位机的画面,快则一天内,慢也就两三天。
运行速度:按批量读写方式+订阅-推送模式,几千个变量,几百个显示单元,含动画,通讯周期500毫秒,很流畅。
好:就是界面美观、功能齐全、易用性好,扩展性好。
目前已完成的功能包括:
工业网关:支持多种协议。如有新驱动加入,接口实现非常简便。
实时数据引擎:实时推送变化的数据,支持远程服务器+N个客户端。
历史数据归档引擎:支持N变量快速归档,可为数据分析和数据挖掘提供支持。归档文件很小,自带索引,查询快速。
人机界面:可以充分利用VS设计器的强大功能,辅之以强大的插件(自吹一下),完全可以把VS设计器当做组态设计器来用。
扩展性:加入新功能很快,因为接口很简单。但是功能却不简单。
省:顾名思义,就是省钱省时间啦。
首先系统环境简单,就是装个.NET(因为只要求4.0,WIN7自带),数据库可用SQL EXPRESS,没有采用任何第三方收费组件(开源组件在github列了清单,感谢作者)。
VS作为设计器,强大又好用,可用社区免费版(个人用用没关系,企业的话最好联系微软买正版授权)。
支持各种PLC,单位老组态软件很多PLC不支持,在这里加入一个新的设备驱动很方便。
三、 三个为什么
考虑到吹了半天牛B,大家也许会问以下三个问题:
为什么要用.NET 平台?
第一,本人是微软粉丝,.NET忠实码农,用了十多年了,无往不利。无论是一心为公,还是私活利器。首先.NET本身就是一个多快好省的平台,配合宇宙第一IDE,开发效率极高。
其二微软也越来越开放,.NET跨平台能力也越来越强。至于被很多喷子狂喷的所谓.NET工资低,那是因为国内特殊原因造成JAVA码农已先入为主。
本人这行业目前没有公司政治的问题,因此也从来没考虑转型(曾经为安卓APP写过JAVA,也很简单,但是我要吐槽一下,同样功能,JAVA实现起来太啰嗦)。
为什么要用WPF?
WPF是一种声明式编程方式(XAML语言),非常适合工控界面设计。同时微软提供了Blend设计器,实际上画这些控件的都是不会写代码的机械工程师。
实现了前后台分离的协作方式。加上有宇宙第一IDE的配合,可以做的非常炫。
为什么要用Visual Studio?
很简单,宇宙第一IDE不是盖的。我见过很多家的组态画面设计器。无论效果还是易用性还是扩展性,和VS没法比。VS同时还集成了项目管理和编译器。
关于VS扩展性大家很少用到,本人也填过很多坑,找了很多资料,实现之后你才知道它的强大。
四、 下面的计划
- 完善功能。
在社区的协助下,修补Bug,增强安全性稳定性。能用起来就是胜利。然后追求更加“多快好省”。
- 写一系列帖子,把架构、原理讲清楚。
提纲和目录也拟好了。大致如下:
- 网关层原理、接口说明
- 如何实现一个设备驱动
- 如何设计图元
- VS插件模块及原理
- 归档模块及文件格式
- 如何进行功能扩展
github地址:https://github.com/GavinYellow/SharpSCADA。
github上面有说明书。下载包里还包括如何安装部署、如何用来设计的Word文档。比较粗略,欢迎提问。