制作一个基于Chrome内核的Wincc Web控件

随着当今计算机网络技术的发展,Web技术由于其良好的跨平台特性,其对于更新迭代较慢的工控行业的影响也越来越大。包括西门子在内的工业自动化巨头都将Web技术融入到自身最新控制系统中: WinCC Unified PCS7 neo等。但是在传统的SCADA系统中,往往对于最新的Web技术的兼容性不够理想。例如西门子公司的Wincc软件,由于强大的功能和可扩展性,在工控行业应用广泛,笔者在最近的项目中就遇到一个问题,因为某品牌称重模块的参数设置和校准是通Web页面来实现的,但是在用Wincc的WebBrowser Control控件时经常会遇到一个问题,那就是新打开网页的时候经常会报浏览器脚本执行错误,客户不接受系统有报错显示,所以必须想办法给予解决。通过查询相关资料得知,Wincc的WebBrowser Control控件因为采用的旧的IE内核的原因,对于JS脚本兼容性不够好。

那么有什么办法可以解决这个问题吗?既然旧的IE内核与JS兼容性不好,那么有没有办法可以给它换个完美兼容JS的内核呢。西门子自带的控件肯定是不能用了,那么只能自己制作一个支持.NET控件来实现了。

 新建Visual Studio项目

新建一个Windows窗体控件库项目,如下图所示。

图片

安装CefSharp包

因为Visual Studio自带的WebBrowser控件也是基于IE内核,所以为了一劳永逸,我们需要安装一个支持Chrome内核的第三方包。右键点击项目,选择“管理NuGet程序包”,搜索CefSharp.WinForms,并下载最新版本,如下图所示。 

图片

添加ChromiumWebBrowser控件

扩展包正确安装完成之后,在工具箱会多出两个控件,将下图中标红的控件添加到窗体控件中,并添加一个TextBox控件用于IP地址的显示,如下图所示。 

图片

将URL作为参数传入用户窗体控件

笔者的项目,称重模块是在浏览器中通过输入IP地址进行模块校准,当用户自行实施校准操作时,因为模块比较多,加之IP地址又不好记。显然,要用户直接输入IP地址操作是不够友好的。所以需要在Wincc中根据不同的称重模块动态化的写入IP地址,用户只需要根据传感器所在工艺流程图的位置选择对应的模块即可。IP地址将其作为参数传入我们制作的.NET控件。为此我们需要为用户窗体控件新增一个属性,通过这个属性来传递URL。在用户窗体画面双击空白处,进入控件类的定义,新增一个名称“IPAddress”,返回值类型为String的属性,代码如下图所示。

图片

加载URL

URL参数传入之后,我们需要浏览器控件加载我们的URL,这里需要用到ChromiumWebBrowser控件的Load()方法加载我们的URL。代码如下图所示。 

图片

生成DLL文件

至此我们已经完成控件的代码编写工作了,我们只需要输出DLL文件就完成控件制作工作了,点击生成解决方案就可以在输出文件夹中输出我们需要的DLL了,如下图所示。 

图片

在Wincc中调用.NET控件

接着我们需要在Wincc中调用我们制作的控件,打开Wincc画面编辑器,在控件栏选择.NET控件,右键单击添加。选择名称为Visual Studio中项目名称的DLL。然后添加进Wincc系统中。 

图片

动态化URL

控件添加成功后,拖放至画面中,通过控件属性,我们可以看到控件属性中新增了一条名称为“IPAddress”的属性,这个属性用来传递URL参数,在这里我们可以输入固定的值,也可以通过动态绑定Wincc的变量。 

图片

我们激活运行之后打开网页就不会出现脚本错误的问题了,同时也可以在项目中通过脚本自动关连到不同称重模块的参数与校准界面,省掉用户手动输入IP地址的繁琐,演示效果如下图所示。 

图片

备注:本文中所用的开发软件为:Visual Studio Community 2022 (64 位)  Wincc7.4SP1+Upd16。

2023年8月

图片