开源纯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文档。比较粗略,欢迎提问。
开源纯C#工控网关+组态软件的更多相关文章
- 开源纯C#工控网关+组态软件(二)工控网关的实现
一. 工控网关是什么 网关是物联网和工控系统的核心组件.网关起的是承上启下的作用.上即上位机,电脑/触屏监控系统.MES这些:下即下位机,包括PLC.传感器.嵌入式芯片等. 不同厂家的下位机,往往 ...
- 开源纯C#工控网关+组态软件(七)数据采集与归档
一. 引子 在当前自动化.信息化.智能化的时代背景下,数据的作用日渐凸显.而工业发展到如今,科技含量和自动化水平均显著提高,但对数据的采集.利用才开始起步. 对工业企业而言,数据采集日益受到重视, ...
- 开源纯C#工控网关+组态软件(八)表达式编译器
一. 引子 监控画面的主要功能之一就是跟踪下位机变量变化,并将这些变化展现为动画.大部分时候,界面上一个图元组件的某个状态,与单一变量Tag绑定,比如电机的运行态,绑定一个MotorRunning ...
- 开源纯C#工控网关+组态软件(九)定制Visual Studio
一. 引子 因为最近很忙(lan),很久没发博了.不少朋友对那个右键弹出菜单和连线的功能很感兴趣,因为VS本身是不包含这种功能的. 大家想这是什么鬼,怎么我的设计器没有,其实这是一个微软黑科技 ...
- 开源纯C#工控网关+组态软件(十)移植到.NET Core
一. 引子 写这个开源系列已经十来篇了.自从十年前注册博客园以来,关注了张善友.老赵.xiaotie.深蓝色右手等一众大牛,也围观了逗比的吉日嘎啦.精密顽石等形形色色的园友.然而整整十年一篇文章都 ...
- 开源纯C#工控网关+组态软件(三)加入一个新驱动:西门子S7
一. 引子 首先感谢博客园:第一篇文章.第一个开源项目,算是旗开得胜.可以看到,项目大部分流量来自于博客园,码农乐园,名不虚传^^. 园友给了我很多支持,并提出了很好的改进意见.现加入屏幕分辨率自 ...
- 开源纯C#工控网关+组态软件(四)上下位机通讯原理
一. 网关的功能:承上启下 最近有点忙,更新慢了.感谢园友们给予的支持,现在github上已经有.目标是最好的开源组态,看来又近一步^^ 之前有提到网关是物联网的关键环节,它的作用就是承上启下. ...
- 开源纯C#工控网关+组态软件(六)图元组件
一. 图元概述 图元是构成人机界面的基本单元.如一个个的电机.设备.数据显示.仪表盘,都是图元.构建人机界面的过程就是铺排.挪移.定位图元的过程. 图元设计是绘图和编码的结合.因为图元不仅有显示和 ...
- 开源纯C#工控网关+组态软件(五)从网关到人机界面
一. 引子 之前都在讲网关,不少网友关注如何实现界面.想了解下位机变量变化,是怎样一步步触发人机界面动画的. 这个步步触发,实质上是变量组(Group)的批量数据变化(DataChange)事件, ...
随机推荐
- python代码`if not x:` 和`if x is not None:`和`if not x is None:`
转自 http://blog.csdn.net/sasoritattoo/article/details/12451359 代码中经常会有变量是否为None的判断,有三种主要的写法: 第一种是`if ...
- Git安装配置(完整版)
首先安装Windows客户端的git和TortoiseGit. 安装这两个软件还是蛮重要的,很多选项不能乱选. 为了写个完整的博客,我是装了又卸,卸了又装. 1.安装git 下载:https://gi ...
- [REST] 1.REST的起源
0. 世界上第一个网站 1990年12月20日,这一天对于现在的互联网来说意义非凡.欧洲核子研究组织(CREN)的科学家Tim Berners-Lee在一台NeXT电脑上启动了世界上的第一个网站(当然 ...
- C++基础:二维数组动态的申请内存和释放内存
使用二维数组的时候,有时候事先并不知道数组的大小,因此就需要动态的申请内存.常见的申请内存的方法有两种:malloc/free 和 new/delete. 一.malloc/free (1)申请一维数 ...
- Android学习记录:ViewPager实现欢迎页
许多APP在第一次启动的时候,都会有welcome page.近日尝试利用ViewPager来实现Welcome Page. d0711 完成记录,跟新下载地址 =================== ...
- 个人作业(3)----个人总结(Alpha阶段)
一.个人总结. 个人完成的任务:在此阶段我完成了用户调研.部分测试以及部分博客书写. 个人及团队心得:经过几周Alpha阶段开发后,我大致了解了开发软件的过程,开发一个软件并没有以往想象中那么简易,在 ...
- 团队作业8----第二次项目冲刺(beta阶段)5.21
1. 开会 会议内容:1.总结昨天的任务工作 2. 由潘益靖同学对当天的代码修改及功能的改善做个简单的阐述 3.每个人对项目的发表一些意见及建议 4.组长分配任务 每日讨论图片(拍摄者小组成员 武健男 ...
- 201521123109《java程序设计》第一周学习总结
1.本章学习总结 java是我这学期学习的一门新的编程语言,个人觉得java还是很深奥的,对于一门新的计算机语言,就像打开了一扇新世界的大门,有许多东西需要不断学习不断探索,除了上课认真听讲,平时还要 ...
- 201521123009《Java程序设计》第14周学习总结
1. 本周学习总结 2. 书面作业 1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自己的学号.姓名) 在自己建立的数据库上执行常见SQL语句(截图) - ...
- 201521123119《Java程序设计》第9周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 本次PTA作业题集异常 Q1.常用异常 题目5-1 Q1.1 截图你的提交结果(出现学号) Q1.2 ...