抖音粉丝群1
『7x24小时有问必答』

AI浪潮下的计算机行业——从业者现状与未来展望
很早之前我用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这个免费小软件来管理查看数据库的。
主题回复
倒序浏览

73.9k查看1回复

发新帖
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码