开源纯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,增强安全性稳定性。能用起来就是胜利。然后追求更加“多快好省”。

  • 写一系列帖子,把架构、原理讲清楚。

       提纲和目录也拟好了。大致如下:

  1. 网关层原理、接口说明

  2. 如何实现一个设备驱动

  3. 如何设计图元

  4. VS插件模块及原理

  5. 归档模块及文件格式

  6. 如何进行功能扩展

github地址:https://github.com/GavinYellow/SharpSCADA

github上面有说明书。下载包里还包括如何安装部署、如何用来设计的Word文档。比较粗略,欢迎提问。

原文地址:http://www.cnblogs.com/evilcat/p/7617720.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/323383.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

面试官:给我说一下你理解的分布式架构

转载自 面试官:给我说一下你理解的分布式架构 # 什么是分布式架构 分布式系统(distributed system) 是建立在网络之上的软件系统。 内聚性:是指每一个数据库分布节点高度自治,有本地的数据库管理系统。 透明性&am…

c语言程序设计--图书管理系统

这个原本是c语言程序设计书里面的习题,老师布置的作业,既然写好了,就在网上分享下,相信肯定有很多和我一样使用的是这本教材,大家可以借鉴下答案,在dev c上运行是没有任何错误的。文末已经贴了源码&#xf…

Access denied for user ‘root‘ @‘123.233.244.218‘(using password:YES)的解决方法

大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂。 前言 在我们新买了个服务器之后,数据库我觉得是比不可少的吧,任何一个项目,只要是动态的,都需要数据做数据的服务于支撑,目前我…

初探SQL Server 2017 on Docker@macOS

编者语:假期到了最后一天,或者你人在旅途,或者你睡了8天,而我在家修炼了几天,完成了一堆好玩的,慢慢和大家分享下。 9月27日SQL Server 2017 正式发布,看点一堆,而这次发布不仅有传统…

阿里面试,为什么Kafka不支持读写分离

转载自 阿里面试,为什么Kafka不支持读写分离 为什么数据库、redis都支持了读写分离功能,而kafka却没有? 厮大也是狠人,直接打开源码从头开始讲,我一看这情况不对,按照这进度得讲到天黑了,蹭着…

手机号、邮箱、用户名均可登录系统的实现方式

大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂 前言 现在是2022年4月28日13:41:29! 需求:用户可以通过手机号、邮箱来注册我们的系统,用户完成之后,可以去完善自己的个人信息,…

.Net 内存对象分析

在生产环境中,通过运行日志我们会发现一些异常问题,此时,我们不能直接拿VS远程到服务器上调试,同时日志输出的信息无法百分百反映内存中对象的状态,比如说我们想查看进程中所有的Socket连接状态、服务路由信息等等。 即…

百度开源的分布式唯一ID生成器UidGenerator,解决了时钟回拨问题

转载自 百度开源的分布式唯一ID生成器UidGenerator,解决了时钟回拨问题 UidGenerator是百度开源的Java语言实现,基于Snowflake算法的唯一ID生成器。而且,它非常适合虚拟环境,比如:Docker。另外,它通过消…

nssl1193-地主【dp】

正题 题目大意 一个2∗n2*n2∗n的矩形,求分歌成k块的方案数。 解题思路 我们用fi,j,0/1f_{i,j,0/1}fi,j,0/1​表示前i列,分成j块,第i列是相同一块还是分开的一块。 然后我们分析 (不同颜色表示不同联通块)(字型体汇) 然后推出方程 (f[i][…

MyBatis-generator使用,Example缺少分页问题解决

一、分页问题 MyBatis自动生成代码没有分页功能。 如: public class User {private Integer userId;private String name;public Integer getUserId() {return userId;}public void setUserId(Integer userId) {this.userId userId;}public String getName() {r…

调试 ASP.NET Core 2.0 源代码

在Visual Studio 2017中可以通过符号以及源链接,非常方便对 ASP.NET Core 2.0中源代码进行调试。在这篇文章中,我们将重点介绍如何使用源链接对ASP.NET Core源进行调试。 什么是源链接? 和我一样,您可能已经注意到在编译代码时&am…

html新知

文章目录[x]开门大吉轮播样式账户密码获取回车发送命令(按键)计时器通过按钮实现清屏选项卡(轮播图原型)阶乘密码一致登录导航栏(新学的,,,,,其实就是简单的h…

如何将每日新闻添加到自己博客中,发送到微信群中

大家好,我是雄雄。 前言 最近新整了个博客网站,同事在gitee上找的,还不错,gitee上的地址在这里:拾壹博客管理系统。 别人的业务,再好也有不满足自己的地方,所以我就拉下来源码看了看&#xff0…

Hack for Cloud Beginner微软黑客松大赛

在这美丽的西子湖畔,我们欢迎各行各业的开发者参与此次Hack for Cloud Beginner微软黑客松大赛。我们致力于为开发者们提供在技术、社区领域中的交流平台,重在参与,意于创新。 此次黑客松大赛将于10月22日在中国杭州拉开帷幕,参与…

Asp.Net Core 2.0 多角色权限认证

在使用 WebForm 技术开发网站的时候,微软就提供了 Form 身份认证,这使得登录认证简单了许多,不同于 WebForm 以及后来的 Asp.Net Mvc,Asp.Net Core 中的身份认证与之前相比使用更加便捷,本文介绍 Asp.Net Core 2.0 多角…

html近期所学

导航栏&#xff08;新学的&#xff0c;&#xff0c;&#xff0c;&#xff0c;&#xff0c;其实就是简单的href&#xff09; css 开门大吉 轮播样式 js css js1 js1 js1 js1 js1 js7 首先是css 开门大吉 改只需其中的gif <html><head><style>section{width…

asp.net core后台系统登录的快速构建

登录流程图 示例预览 构建步骤 当然&#xff0c;你也可以直接之前前往coding仓库查看源码&#xff0c;要是发现bug记得提醒我啊~ LoginDemo地址 1. 首先你得有一个项目 2. 然后你需要一个登录页面 完整Login.cshtml视图代码戳这里-共计55行 效果预览图 <!DOCTYPE html>&l…

JavaFX Chart设置数值显示

一、XYChart import javafx.application.Application; import javafx.geometry.NodeOrientation; import javafx.geometry.Side; import javafx.scene.Scene; import javafx.scene.chart.*; import javafx.scene.control.Label; import javafx.stage.Stage;public class LineC…

多多自走棋

文章目录[x]形似麻将种族职业各种搭配操作下面还是讲讲攻略&#xff08;主要&#xff09;在朋友的推荐下玩了自走棋&#xff0c;我一个不玩王者不玩吃鸡的人&#xff0c;玩这游戏竟然上瘾了&#xff0c;太不可思议了&#xff0c;这两天被这游戏搞得中午都没睡好&#xff0c;不得…

Linux--用SecureCRT来上传和下载文件

转载自 Linux--用SecureCRT来上传和下载文件 SecureCRT下的文件传输协议有以下几种&#xff1a;ASCII、Xmodem、Ymodem、Zmodem ASCII&#xff1a;这是最快的传输协议&#xff0c;但只能传送文本文件。 Xmodem&#xff1a;这种古老的传输协议速度较慢&#xff0c;但由于使用…