2. WinCC用户管理器深入

WinCC的用户管理器(User Administrator)是运行系统权限体系的“根节点”。它并不是一个简单的用户名列表,而是一套由用户组、用户、权限等级、登录/注销机制、密码策略共同构成的授权模型。理解它的结构,才能正确回答“谁能操作哪个画面、哪个按钮、哪个归档值”这类工程问题。

从结构上看,用户管理器采用“组—用户”两级树形组织。左侧是用户组(Group),右侧是组内用户(User)。权限不直接挂在用户身上,而是先定义在组上,用户通过“属于哪个组”继承权限。这种设计的工程意义在于:当现场有20个操作员时,只需维护一个“操作员”组,而不是逐个用户配置权限。用户管理器内部维护的核心对象关系如下:

WinCC 用户管理器授权模型与运行系统关联 用户管理器(组态侧) 用户组:Operator(操作员) 权限等级:Level 4 · 可操作画面切换/趋势查看 用户组:Engineer(工程师) 权限等级:Level 6 · 可修改参数/下载配方 用户组:Admin(管理员) 权限等级:Level 9 · 全部权限/用户管理 用户(User) op01 / op02 → 属于 Operator 组 eng01 → 属于 Engineer 组 admin → 属于 Admin 组 运行系统(Runtime) 登录对话框 输入用户名 + 密码 → 校验 当前登录用户上下文 @CurrentUser / 权限等级变量 画面/控件权限检查 按钮、I/O域、归档的授权等级 操作审计记录 操作员、时间、动作、结果 注销 / 超时自动注销 释放权限上下文,防止未授权操作 超时时间可配置(如 10 分钟) 下载/激活 权限等级数值越大权限越高;用户继承所属组的权限,也可在用户级别单独覆盖

用户与用户组的创建要点

在WinCC项目中打开“用户管理器”,默认会看到Administrator组和Guest组。工程实践中不建议直接使用Administrator进行日常操作,而应新建业务组。创建顺序是:先建组、再设权限、最后建用户并归组。

新建用户组时,需要设置组名(建议用英文,如Operator、Engineer、Admin)和权限等级。WinCC的权限等级通常用数字表示,数值越大权限越高。例如:

  • Level 1:仅查看,不能操作任何控件;
  • Level 4:可切换画面、查看趋势、确认报警;
  • Level 6:可修改设定值、下载配方;
  • Level 9:可管理用户、修改组态、执行关键操作。

创建用户时,需要填写用户名、密码、所属组,并可选择是否启用“用户必须修改密码”“密码永不过期”等选项。一个用户只能属于一个组,但可以在用户级别单独调整权限等级,用于处理“某操作员临时需要更高权限”的场景。需要注意的是,用户级别的权限覆盖只影响该用户,不会影响同组其他成员。

登录与注销机制

运行系统中的登录通过登录对话框完成。WinCC提供标准的登录/注销函数,例如在画面中使用按钮调用PWRT_Login或通过脚本调用@CurrentUser相关函数。登录成功后,系统会记录当前用户名和权限等级,后续所有控件权限检查都基于这个上下文。

注销同样重要。如果操作员离开工位而未注销,下一个人可能以他的权限继续操作,造成审计断链。因此工程上通常配置自动注销超时:在用户管理器的“设置”中指定空闲时间(例如10分钟),超时后系统自动注销并返回登录画面。此外,关键操作完成后可主动调用注销函数,强制释放权限。

登录/注销的典型脚本示例如下:

// 登录按钮的鼠标点击事件
#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
    // 调用登录对话框
    if (PWRTSilentLogin("op01", "123456"))
    {
        SetTagBit("LoginOK", 1);
    }
}

// 注销按钮
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
    PWRTSilentLogout();
    SetTagBit("LoginOK", 0);
}

注意:PWRTSilentLogin是静默登录,适合在脚本中自动登录;如果希望弹出标准登录对话框,应使用PWRTSilentLogin之外的对话框函数或直接调用系统登录画面。实际项目中,建议在登录按钮上使用标准对话框,避免密码硬编码在脚本中。

密码策略配置

密码策略在用户管理器的“设置”中配置,主要包括:最小密码长度、密码复杂度要求、密码有效期、密码历史记录数量、登录失败锁定次数。这些策略直接影响运行系统的安全性和可维护性。

一个合理的工程示例配置如下:

策略项建议值说明
最小密码长度8低于8位易被暴力破解
密码复杂度字母+数字可进一步要求大小写混合
密码有效期90天到期强制修改
密码历史5次防止重复使用旧密码
登录失败锁定3次锁定后需管理员解锁

需要特别注意的是,密码策略一旦启用,必须确保现场操作员知晓并能够执行。如果密码过期后无人修改,可能导致生产中断。因此建议在密码到期前7天通过画面提示或报警提醒用户。

用户管理器与运行系统的关联方式

用户管理器与运行系统的关联体现在三个层面:

  1. 权限等级映射:画面中每个控件(按钮、I/O域、趋势控件)都有一个“授权”属性,设置为某个权限等级。运行时,系统将当前登录用户的权限等级与控件要求比较,决定是否允许操作。
  2. 当前用户变量:WinCC提供内部变量@CurrentUser,可在脚本中读取当前登录用户名,用于记录操作日志或显示欢迎信息。
  3. 审计记录:登录、注销、权限变更、关键操作都可以写入审计跟踪。审计记录通常包含时间戳、用户名、操作类型、结果。工程上应确保审计记录存储在断电不丢失的介质中,并定期归档。
建议在项目初期就规划好用户组和权限等级,避免后期因权限混乱而返工。一个实用的做法是:先列出所有需要权限控制的操作,再按操作风险划分等级,最后映射到用户组。
不要将管理员密码设置为空或默认值。WinCC的Guest组默认可能允许匿名登录,如果不需要,应在用户管理器中禁用Guest组或设置强密码。

总结来说,用户管理器是WinCC权限体系的配置中心,运行系统是权限的执行现场。组态时把“组—用户—权限等级—密码策略”设计清楚,运行时才能做到“该能操作的能操作,不该能操作的碰不到”,同时留下完整的审计线索。