设为首页
收藏本站
PLC技术网
开启辅助访问
切换到宽版
登录
注册哦
只需一步,快速开始
微信扫码登录
门户
Portal
论坛
BBS
导读
排行榜
积分充值
帖子
搜索
本版
文章
帖子
用户
PLC论坛-全力打造可编程控制器专业技术论坛
»
论坛
›
控制专题
›
『高级语言/组态软件/触摸屏』
›
源代码免费分享,从零开始手搓C#工控上位机代替WINCC ...
返回列表
发新帖
源代码免费分享,从零开始手搓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这个免费小软件来管理查看数据库的。
回复
举报
cxsljdn
|
2025-4-7 09:28:38
|
显示全部楼层
谢谢了
回复
举报
还有一些帖子被系统自动隐藏,点此展开
返回列表
发新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册哦
本版积分规则
发表回复
回帖后跳转到最后一页
北岛李工
回复楼主
返回列表
『运动控制/工业总线』
『机器视觉/AI/IoT/机器人论坛』
『高级语言/组态软件/触摸屏』
『操作系统xp/xin7/win10/linux』