Wincc按钮分角色配置权限与登录

应用场景:

在Wincc上面正确输入账号密码后,点击登录按钮进入不同的角色,在当前角色栏显示已登录角色名称,分别有游客(guest)、操作员(user)和管理员(admin),未登录时显示未登录。

游客权限:点击界面上任何按钮均无效

操作员权限:只能点击启动、停止按钮

管理员权限:所有按钮都可点击操作(启动、停止、绘图、导出)

这里有两种思路,一种是用Wincc自带权限控制来使按钮无法被点击,另一种是用C脚本控制按钮点击后的动作条件

示例画面:

登录和退出实现方法:

1、进入wincc首页用户管理器,添加三个用户guest、user和admin,并设置密码


2、在组态画面中,将两个输入输出域的变量分别设置为'user和'pas',并在【登录】按钮的【事件-单击鼠标】中添加C脚本。PWRTSilentLogin(x1, x2)表示静默登录,其中x1、x2为从输入输出域获取的用户名及密码。同样地,在【退出按钮】的【事件-单击鼠标】中添加C脚本,用PWRTLogout命令实现退出。

登录按钮C脚本(通过@CurrentUser里用户名的变化控制一个role_id的值变化):

#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
#pragma code("useadmin.dll")
#include "PWRT_API.H"
#pragma code()
char * x1;
char * x2;
char * x3;
char * name;
int n;

x1=GetTagChar("user"); //Return-Type: char*
x2=GetTagChar("pas"); //Return-Type: char*
name=GetTagChar("@CurrentUser");
PWRTSilentLogin(x1, x2);
if (strcmp(name,"admin")==0){SetTagWord("role_id",3);}
else if (strcmp(name,"user")==0){SetTagWord("role_id",2);}
else if (strcmp(name,"guest")==0){SetTagWord("role_id",1);}
else {SetTagWord("role_id",0);}

}

实时显示登录情况:

在对应的【静态文本】上设置【属性-字体-文本】,右击动态,选择【动态对话框】

通过【模拟量】形式,在不同的role_id下控制显示不同的文字

退出按钮C脚本:

#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
#pragma code ("useadmin.dll")
#include "PWRT_API.h"
#pragma code ()

PWRTLogout();
}

3、登录和退出按钮的操作原理

wincc中存在两个内部系统变量CurrentUser和CurrentUserName可记录登录名,可以看到admin登录以后它们的值都变成了admin,两个变量有区别,具体可以百度,这里我们主要用CurrentUser

Wincc系统自身权限控制方法:

1、根据需求,在用户管理器添加【启动停止】和【绘图导出】两个自定义权限,admin分配两个权限,user仅分配[启动停止]权限,游客不分配权限

2、直接在对应按钮的【属性-其它-授权】中选择对应权限,登录后点击相应按钮效果如下:

游客点击所有按钮,操作员点击绘图、导出,均会弹出“无操作员权限”提示。

C脚本控制按钮点击后的动作条件:

实现功能的思路是在对按钮进行点击动作时,以内部变量@currentUser的值作为判断依据,只有当@currentUser与相应的已登录用户名相对应,才进行变量赋值等动作

以启动按钮为例,将【属性-其它-授权】重新设置为无访问保护,然后在【事件-按左键】中添加C脚本:

#include "apdefap.h"
void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y)
{
char* name;
name=GetTagChar("@CurrentUser");
if (strcmp(name,"admin")==0 || strcmp(name,"user")==0)
{
SetTagBit("start",1);
}
}

即可实现鼠标按住按钮时将plc中start变量置1。这样的好处是能够记录到各用户点击按钮的动作,在脚本里再添加一个变量来记录点击动作即可。

  • 14
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南瓜鹅鹅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值