在工业制造领域的信息化系统中,C#始终占据主流地位。使用C#开发的SCADA、生产管理系统数不胜数。而因其和自动化系统的紧密相关性,很多自控工程师也有着转型上位机开发的想法。自控工程师转型上位机有一个很大的优势,那就是他们既熟悉设备又了解工艺,这点是计算机专业的程序员无法相比的。缺点也很明显,就是他们没有接受过系统的训练,缺乏完整的知识体系。而市面上的一些教材因为作者没有进入过自动化行业,也没有真正的上位机开发经验,讲解的东西基本都脱离现实。举个例子来说,上升沿触发这个简单逻辑很多人都未必搞得清楚。更别说报警进入后的应答以及未确认就离开这个处理逻辑了。本文是针对想转型上位机开发的自控工程师的一些学习建议。
1,框架选择
关于框架我们推荐.NetFramework。并没有必要使用现在的.NET(.Net Core后面的版本我们这里统称为.NET)。原因有二,一是在桌面开发上,现在的.NetFramework和.NET没有太大区别。二是现在的操作系统没有内置.net runtime。如果我们使用.NET来开发的话,那么部署会比较麻烦。至于.NetFramework的生命周期的问题,这个完全不用担心,连20多年前的VB6开发的程序都可以在现在的Windows系统上运行,还用得着担心.NetFramework吗?
2,C#语言版本
因为框架我们选择了.NetFramework。那么C#语言版本肯定是7.3了。因为从C#8.0开始,语法特性都是针对.NET了。
3,WinForm or WPF
WinForm容易上手,WPF可以做出很酷炫的交互界面(但是也需要一定的美工基础),数据绑定也比较方便。至于MVVM嘛,WinForm和WPF倒是都支持。个人建议先从WinForm入手。待后面根据情况再决定是否需要学习WPF。
4,UI组件库选择
.NetFramework原生UI比较难看。在学习阶段,我们可以不用纠结UI库。做项目的话原生UI在这个看脸的时代确实有点落伍。所以我们有必要选择第三方的UI组件库。UI组件库非常多,免费的和收费的都有,如果资金充裕,建议选择收费的第三方库。收费的组件库在UI的精细化上和功能上不是免费版可以比的。关于UI组件库的选择,请参见<上位机开发常用的ui库(winform)>。
5,数据库
上位机绝大多数场景下无需时序数据库。关系型数据库即可满足。常用的有SQL SERVER、MySQL、SQLite、Oracle等。因为我们不建议写存储过程,所以哪种数据库对我们来说关系不大,因为都是标准的SQL语言。如果使用ORM的话,这种差别就更小了。
6,数据访问
刚开始学习时还是需要通过ADO.NET来逐步熟悉数据库访问。然后尝试封装一些SQLHelper等数据库访问助手类。真正做项目大多使用ORM框架。Entity Framework是微软的ORM框架,但是稍微重了一些。不建议在上位机开发中使用。个人推荐SqlSugar这样的轻量级ORM框架。
7,架构选择
上位机系统一般不是很复杂。经典的三层架构即可满足要求。因为需要和PLC等控制器交互数据,所以我们可以再添加一个设备驱动层,当然也可以把它们和数据访问层放在一起。