在WinCC项目应用中避免不了用户登录这一操作,但是使用系统的登录或者自定义的登录(网络常规教程)方式都有一些缺陷,最主要的就是每次登录的时候都需要输入用户名,在用户过多或者做的项目较多的情况下,设计者很难记得每个项目的用户名称具体都是什么。
针对这一现象我给的一个解决方案就是在自定义的登录(网络常规教程)的基础上增加用户名可选的下拉列表方式,可以给用户去选择相应的用户名,再输入正确的密码。
先给大家展示一下实现后的效果,避免各位同仁在看到上述文字后失去向下阅读的兴致;
我们可以看到用户名栏目可以进行一个下拉选择的操作。
展示完毕,现在就说说这个具体是如何实现的;
实现思路
具体实现
首先WinCC用户管理中的用户数据都是存在WinCC运行时数据库中一个叫做 《dbo.PW_USER WHERE》的表中,以我的项目为例表中的内容如下:
我们可以看到其中的内容不仅有用户名,还有用户组所以我们要通过SQL 查询语句进行筛选,SQL语句如下:SELECT NAME FROM dbo.PW_USER WHERE GRPID > 0
可以看到所需的用户名就已经被筛选出来了,接下来我们就可以写数据库连接查询和相关操作的脚本代码了
在画面的<事件>-<已加载>中添加VBS脚本,脚本撰写内容如下:
注意需要将第29行代码替换成实际项目中<组合框>的名称,不然无法实现效果;
我在实现上述内容遇到的问题,主要有一下几点:
1.数据库始终无法连接成功,主要原因为 <@DatasourceNameRT>变量中的内容,带有R后缀,而实际存储用户名的表是不带R的,所以要通过代码 第15行删除后缀R。
2.始终无法登录成功,主要原因为WinCC在设计表时NAME列的数据类型为nchar(25),当数据也就是用户不足25个文字时,字符串的长度始终为25个字符,不足的部分补【空格】,所以登录时始终显示不成功,这个问题折磨我一天,晚上整到12点还是没有解决(刚开始没有找到原因),找到这个原因后使用代码的第36行解决了这个问题;
上述步骤正确无误的实现完毕后,就可以在画面中的<组合框中>选择相应的用户名了,之后在LOGIN <按钮>-<事件>-<单击>中添加C脚本,脚本撰写内容如下:
注意需要将第14行代码替换成实际项目中<组合框>的名称,将第16行代码替换成实际项目中<I/O域>的名称,不然无法实现效果;
然后退出登录实现 LOGOFF <按钮>-<事件>-<单击>中添加C脚本,脚本撰写内容如下:
其中代码中的第13行主要功能为当退出登录后再关闭当前的窗口。因为我做的是弹窗的模式。同理用户登录成功以后也是要关闭当前窗口的,在登录脚本的第29-40有相应的业务逻辑。当然各位同仁也可以在成功后的处理中加入更多的功能,例如跳转页面之类的功能;
以上就是WinCC自定义用户登录(高级篇)的全部内容,欢迎大家指正讨论!
我这样做基本就是将这个登录界面与WinCC组态工程剥离了,也就是IT接称之为前后端分离吧,将这个登录框直接拷贝到任何项目中都是可以直接使用的,无需进行代码的更改!
附赠相关内容源代码:
源代码.zip