技术论坛

 C#开发.NET控件实现WINCC用户归档(配方)的下拉框选择工艺

返回主题列表
作者 主题
梦到内河
侠客

经验值: 730
发帖数: 10
精华帖: 3
楼主    2018-11-09 00:05:25
主题:C#开发.NET控件实现WINCC用户归档(配方)的下拉框选择工艺 精华帖 

WINCC用户归档(配方)使用C#实现下拉列表选择工艺(传统方式要么使用按钮配合ID来控制,要么使用配方视图,按钮小的可怜),所有突发奇想就自己写了一个.NET控件来代替传统操作方式,当然是要WINCC自带的VBS脚本和C脚本也可以实现此功能,但是WINCC的脚本开发环境实在不好用,所有就放弃了;还是宇宙第一Visual Studio 好用


下面先来看下效果,后面再介绍怎么在WINCC里实现的



是不是感觉很方便,下拉框选择 工艺名称就可以自动调取相对应的参数列表,点击下载按钮就把数据下载到PLC里


下面来看看WINCC里怎么配置的,最后再解释C#里怎么编写的

1.添加C#写好的.NET控件,在我的控件里选择对象


2.选中.NET控件的路径,会自动出现控件内容,勾选上


3.添加之后会在我的控件里多出一个控件,可拖拽至画面中


4.拖拽到画面中就会看到红色区域内界面


5.添加一些内部变量,供用户归档控制使用(名称和数据类型必须和图内一致)



到这里WINCC的配置就结束了,是不是感觉很简单;没错,简单就对了 组态软件里要的就是简单粗暴。。。。。。。。




下面就来看看细腻的C#实现方法,这个可是麻烦又温柔的,别小看一个WINCC简单的控件,你不知道厂家在后台写了多少行代码才实现,比如WINCC里的IO域(输入的时候停止更新显示信息,而且输入的时候内容默认全选,输入完成后改变PLC变量状态,同时又继续更新显示) 这可是繁琐的事件操作,在我们看来也就是一拖一放一配置就完事了。。。。好了,废话不多说了,进入正题。。。。


1.咱们先来做好界面,在这里我就随便拖几个控件,不讲究美观了,实现功能为主



2.画面做好了,我们就来讲讲整个控件的思路,WINCC的用户归档数据全部存储在SQL数据库里,我们可以进入整个数据库来查看下具体数据,一旦能让我们进入数据库那么里面的数据还不任由我们C#代码提取了 ,下面来看看数据库里的内容:首先,数据库名字最后一个字母带R的就是我们正在运行的,然后UA#Recipe_1就是我们的用户归档名称,打开表就看到我们的数据内容了



3.在WINCC里我们知道控制用户归档的主要两个变量就是ID和JOB,这里ID只能为数字而且是增量不可更改,JOB是命令(控制新建,保存,下载,删除),还需要一个供我们用户识别的代号(工件名称),这时就需要再新建一个变量当做工件名称选择



4.主要以C#去查询工件名称这个变量信息再去索引与它相对应得ID号,这样就可以名称和ID对应,调取就不是事了,下面来看代码:






5.只有WINCC运行起来后才可调取数据库,因为数据库是在运行后才有的,我找了两个WINCC运行后才会出现的进程来判断WINCC是否运行



6.新建按钮,保存按钮,下载按钮,删除按钮都通过操作WINCC的内部变量来实现操作,这里使用到了一个dll, 只有在安装WINCC后计算机才会出现这个,这是WINCC提供外部程序访问变量的一个API




7.这里还使用到了ini文件的配置,为了掉电保存当前选择是哪一项工艺,当然也可以使用PLC变量来做(PLC有掉电保存区域),我在这里为了和PLC分离所有使用了ini来保存到计算机里,计时没有PLC也可以保持。





文章写到这里也该结束了,如果看不太明白的可以到GitHub下载源码来研究(一定要引用WinCC HMIRuntime 1.0 Type Library,否则没办法和WINCC通讯,且程序会报错)

GitHub地址: https://github.com/lt8300877/WinccRecipeLib

喜欢的可以Star或者Fork

有兴趣讨论的也可以加QQ:8300877  QQ群:923525781  一起学习一起进步


在这里来点杂谈,其实我们做为西门子的忠实粉丝,他的软件产品里太多微软的痕迹,不过也是基于.NET平台做的开发,不难发现在博图里数据结构什么的都和.NET里类似了,越来越接轨了,在高版本的1500里已经支持C/C++语言开发了,在这里给大家提点建议,我们能使用C#写一个配方的.NET控件来嵌入到WINCC里使用,同样以后遇到复杂的数据存储或者操作的时候WINCC往往满足不了功能需求,这时也可以自己开发一个控件嵌入WINCC使用,不失为一种好办法。


现在做工控的和IT接轨越来越近了,视觉 AI Python 什么的在这几年都应用到了工控领域,较多的工程师喜欢使用Halcon和OpenCV开发视觉识别,都是应用在工控领域,在十年前根本不可想象;还有现在比较前卫的HTML5+CSS开发WEB来代替传统SCADA;OPCUA的广泛应用,云端的推行,让手机,电脑,Ipad各种设备都能去监控工业数据,统统一个浏览器就搞定;这个趋势也是体现了工控行业已经不是老一套(玩玩PLC,搞搞组态,拖几个触摸屏)就能继续活下去时代。。。。。。。。。。


这次就到这里吧,等下次再研究出来新功能了继续和大家分享干货,第一次看帖的可以进我的个人信息看看之前发的几篇帖子,都是干货哦


Zaxife
至圣

经验值: 12573
发帖数: 2503
精华帖: 31
1楼    2018-11-09 07:47:45
主题:回复:C#开发.NET控件实现WINCC用户归档(配方)的下拉框选择工艺
其实,我还是喜欢直接用文本列表做菜单;
我比较喜欢能够直观的看到所有配方以及配方的所有数据;
所以,原配控件刚好WinCC7感觉调用不同版本.net各种兼容性问题太拉仇恨了。
至于Web,nodejs+chorme浏览器棒棒的。nodejs有全套webserver组件可用,串口、以太网…乃至各种协议。chorme浏览器特性比其他浏览器多太多浏览网页的不二选择。
至于MSVS宇宙最好用?java笑了,众多嵌入式笑了,就微笑的看着你不说话。
xxctjd
侠圣

经验值: 4241
发帖数: 583
精华帖: 3
2楼    2018-11-09 08:34:27
主题:回复:C#开发.NET控件实现WINCC用户归档(配方)的下拉框选择工艺

太强大了,最近在测试C#编写的服务软件与PLC远程交互的通讯速度,目前结果还不错。

华山松柏
奇侠

经验值: 5622
发帖数: 541
精华帖: 3
3楼    2018-11-09 09:48:19
主题:回复:C#开发.NET控件实现WINCC用户归档(配方)的下拉框选择工艺

感觉楼主好强大,C#语言比较难学,VB。NET研究过一段时间感觉好掌握一点,不过也就了解一下,以后跨界IT是工控人必须掌握的。

学无止境
渔明鱼工
至圣

经验值: 23901
发帖数: 2059
精华帖: 78
4楼    2018-11-09 09:57:08
主题:回复:C#开发.NET控件实现WINCC用户归档(配方)的下拉框选择工艺


不错的分享。

网鱼能够改善伙食,还能释放工作中的压力。
z349568117
侠士

经验值: 1225
发帖数: 43
精华帖: 0
6楼    2018-11-09 11:28:32
主题:回复:C#开发.NET控件实现WINCC用户归档(配方)的下拉框选择工艺

感谢楼主的分享

黑猫警长W
至圣

经验值: 18392
发帖数: 2409
精华帖: 1
7楼    2018-11-09 13:22:19
主题:回复:C#开发.NET控件实现WINCC用户归档(配方)的下拉框选择工艺


高手,原代码也有!

不断攀登
至圣

经验值: 12543
发帖数: 1843
精华帖: 0
8楼    2018-11-10 08:21:49
主题:回复:C#开发.NET控件实现WINCC用户归档(配方)的下拉框选择工艺

感谢 分享!

邮箱 yongquancun@126.com
yuyongxing
奇侠

经验值: 7323
发帖数: 94
精华帖: 0
9楼    2018-11-10 08:38:41
主题:回复:C#开发.NET控件实现WINCC用户归档(配方)的下拉框选择工艺

学习了,最近有相关的脚本程序需要编制一下,谢谢

Do my best everyday
master_mb
侠圣

经验值: 4030
发帖数: 1259
精华帖: 6
10楼    2018-11-10 08:49:31
主题:回复:C#开发.NET控件实现WINCC用户归档(配方)的下拉框选择工艺

 

最近在做一个c#通过1500集成的web server访问PLC的测试。

想搞成类似于HMI功能的画面,无需任何驱动,只需通过网页访问。

实现倒是实现了,感觉速度太慢了。(是server刷新的速度慢,不是访问速度慢)

有做过类似应用的希望交流。

 

另外

msvs确实是多数人公认的宇宙第一开发环境。

据说.netcore也要支持UI跨平台了,拭目以待吧。

QQ 402550360 TEL 17606539722
imycat
侠士

经验值: 1321
发帖数: 276
精华帖: 0
14楼    2018-11-13 15:44:47
主题:回复:C#开发.NET控件实现WINCC用户归档(配方)的下拉框选择工艺

楼主的想法不错,可惜路走偏了,记住不要去read wincc sql, 没有打击楼主的意思


  1. 添加WinCC UserArchiveControl 1.2 Type Library

  2. 拿到所有列的名字

 var cols = ccuc.GetColumnCollection();


            var colCount = cols.Count;


            for (int i = 0; i < colCount; i++)

            {

                var col = cols[i] as ICCAxUAColumn;

                Trace.WriteLine(col.Name);

            }

3. 拿到选定的row

var row = ccuc.GetSelectedRow();


            if(row!=null)

            {

                var count = row.CellCount;


                for (int i = 1; i <= count; i++)

                {

                    Trace.WriteLine(row.CellText[i]);

                }

            }

枚举所有row

var rows = ccuc.GetRowCollection();


            foreach (ICCAxDataRow r in rows)

            {

                var count = r.CellCount;


                for (int i = 1; i <= count; i++)

                {

                    Trace.WriteLine(r.CellText[i]);

                }

            }


您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。