源代码免费分享,从零开始手搓C#工控上位机代替WINCC

[复制链接]
查看72975 | 回复1 | 2025-3-11 22:46:27 | 显示全部楼层 |阅读模式
很早之前我用C#的winform平台开发了这个上位机框架,用作连接PLC。

类似触摸屏的功能。

最近又将这个框架进行了完善,连接1个实际的设备来完整测试了各项功能。

对于工控来说,该有的功能都有了,差不多能够替代wincc了。

这个上位机框架从新建项目开始,所有代码都是我慢慢搓出来的。

我自己想要什么功能就加了什么功能,并没有借鉴任何其他项目,也没有什么冗余的地方。

我尽量使用原有的winform控件,改动很少,只有曲线控件是借助了开源控件。

我个人是从事工控行业的,C#只是粗浅了解了一下,程序是边查边写,其中AI帮助很大。

这个上位机是针对西门子PLC的,非常通用,所以准备将代码全部开源分享给大家。

到时候大家可以加微信号:工控log 这也是我的个人公众号,偶尔分享工控相关。

加这个微信号后我会免费发源码给你,同时我会建个群拉大家进去共同探讨学习。

当然你要是愿意,微信号上打赏一下也可以。

外观界面上,winform默认确实有些难看,我借鉴了微信,用无边框重做了UI。

左边和上方都是固定的,右侧用了panel控件,在panel显示不同的usercontrol窗口,实现各种窗口的切换。

左侧的按钮是切换各个窗口的,按钮也做了一些美化效果。

在连接PLC上,折腾了很久,现在实现的功能是自动连接PLC,并对PLC数据循环读取。

PLC断开连接时,显示断开状态。

PLC恢复时,自动连接上。

任何时候都不会卡UI界面。

这个测试项目连接的是200smart PLC 用的S7.NET开源库。

这个项目里面循环读取479个PLC变量,每个循环是240毫秒左右。

如果变量少一些,时间会更短。

循环读PLC用的新建异步任务死循环。

我额外建了个通过INI配置文件将PLC变量转字典的类,

PLC变量按格式在INI配置文件里填写,PLC自动循环读取这个INI文件,把PLC变量转换成变量名,变量值的字典。

在任何时候实时显示变量时就可以用字典的plc变量名方式。

这样实现了PLC变量的符号式访问,直接改配置文件的变量地址,程序里用的变量就会跟着改变。

且在任何窗口实时显示PLC变量值时不需要额外对PLC进行通信。

winform控件的操作显示和工控上触摸屏的操作显示有很大差别,为此我做了个Ctr类,里面可以修饰按钮,输入框,文本状态等控件,实现HMI一样的功能。

举例来说,

复位型按钮按下时触发事件,对PLC变量进行1次写1,松开时,触发事件写0,这个按钮的背景颜色还可以按设定的变量实时显示颜色。

所以对于复位按钮,用Ctr的对应方法绑定操作的变量,背景颜色的变量,就可以和HMI带背景颜色显示的复位按钮一样。

输入框控件,我设置和HMI一样,输入时弹出键盘框,可以限制输入的上下限,输入完成后,触发写事件,不在输入时,输入框实时显示PLC的变量。

其他的还有切换按钮,切换旋钮,文本背景颜色等方法。

到时候打开这个类,你可以查看具体的方法,当然你也可以按自己需求修改添加。

使用这些方法时,我也做好了每个usercontrol调用的框架。

大致思路是,窗口加载时,将事件控件进行绑定,再添加异步任务死循环来实时更新控件的变量。

对于某个控件主要有2种功能,1是触发事件时写入PLC,2是循环读取PLC变量应用到控件上。

所以写PLC都是事件写,类似沿信号,读都是实时循环的。

因为PLC变量已经在后台无限循环读了,所以控件使用这些变量时不需要再通信,大大减少通信压力。

我也做了权限管理,当登录不足权限账户时,直接设定某个usercontrol的enable为false,即权限不足时画面为只读。

报警提示功能是其中一个重要功能,现在的效果是,报警发生时,会在上方状态条显示报警红灯和报警条数。

点击进入报警窗口,可以查看报警发生的时间和报警文本内容。

这些报警都存入了数据库,点击历史报警记录,可以按照时间查询报警发生的时间和结束的时间。

为了方便在系统添加报警变量和文本,我也和plc变量一样做了个INI配置文件,只需要在这个配置文件添加报警序号,报警文本,程序就自动读取这个配置文件,配置的报警内容自动添加到程序中。

报警是按照博图HMI风格的,所以也有报警触发字,在PLC中需要将报警位映射到对应的连续报警字中,建立配置文件时,报警序号,报警文本和报警字的位顺序一致就好。

我提供了plc变量和报警变量的INI配置文件格式样板,同时还做了excel模版,在excel中做好配置文件,复制到INI配置文件就好了。可能有人问为什么配置文件不直接做成excel,当然这是可以的,不过excel配置文件编程上比INI麻烦多了,我没有研究,你可以的话自行优化修改。

历史曲线功能也是基于数据库的,程序中添加一些变量,按照时间间隔连续存储到数据库中,在历史曲线中查询和显示到曲线图中。

也可以将这些数据从数据库中导出为EXCEL到电脑上。

数据库用的是SQlite数据库,这个数据库是免安装,且免费开源的,简单轻型,比其他数据库使用上都更方便。

记录窗口是对变量的变化进行记录,设定好变量后,变量值一旦发生改变就会自动存储到数据库中。

按照时间段查询,可以显示到右侧的datagridview控件上。

历史曲线和记录就没有做配置文件了,想要添加变量直接在程序中添加。

看下源程序应该就知道怎么添加了。

IO监控功能比较简单,自行查看代码就好。






程序框架是基于.net framework 4.8创建的,如果打不开请确认安装这个框架

批量编辑Excel模版内含有plc变量INI配置文件 报警配置文件示例项目 以及excel生成文件格式

以及测试程序中在上位机交互的变量全部列在EXCEL中

还有一些是和PLC交互的按钮 输入框 显示文本的自动代码生成格式

这些结合代码来使用,明白代码是怎样运作的,就知道怎么用这些模版了

这些模版是为添加不同的变量报警或控件而制作的

程序主窗口是FormMain,加载后先弹出登录输入,可以查看login窗口的代码了解登录验证过程。

目前设置的登录账号 user admin expert 密码都是123456

plc的IP地址在app.config配置文件中修改。

附带的200smart测试程序,大部分程序逻辑都删掉了,符号表都还在

关于报警的映射部分还在,结合代码,报警配置文件alarmlist.ini和PLC程序可以更方便理解

data.ini文件是plc所有变量的循环读的配置文件

这些文件默认路径在bin\debug下面

数据库也在这个路径下,文件名为data.sqlite 这是程序自动创建的,用数据库管理软件可以打开查看

我使用的Dbgate这个免费小软件来管理查看数据库的。
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则