3. WinCC内部变量与过程变量联合使用

内部变量与过程变量的分工

WinCC 中的变量分为两类:内部变量不连接 PLC,由 WinCC 自身读写,适合保存画面切换状态、当前登录用户、权限等级等运行期数据;过程变量通过通信通道映射到 PLC 地址,用于反映设备真实状态。本案例的目标是让两者协同工作:内部变量负责“界面与权限”,过程变量负责“设备状态”,并在画面中形成联动。

下面先明确本案例使用的变量清单与地址映射,再实现联动逻辑。

变量名类型连接/地址数据类型用途
CurrentScreen内部变量—无符号 16 位记录当前画面编号,用于画面切换
CurrentUser内部变量—文本 8 位字符集保存当前登录用户名
UserLevel内部变量—无符号 8 位权限等级:0=操作员,1=工程师,2=管理员
Pump_Run过程变量S7-300, DB1.DBX0.0二进制(BOOL)泵运行状态反馈
Valve_Open过程变量S7-300, DB1.DBX0.1二进制(BOOL)阀门开到位反馈
Tank_Level过程变量S7-300, DB1.DBW2有符号 16 位储罐液位(0~27648 对应 0~100%)

创建内部变量

在 WinCC 项目管理器的“变量管理”中,右键“内部变量”选择“新建变量”,依次建立 CurrentScreen、CurrentUser、UserLevel。内部变量不需要选择驱动和地址,只需指定数据类型和初始值。建议将 CurrentScreen 初始值设为 1,UserLevel 初始值设为 0,避免画面启动时出现未定义状态。

创建过程变量

在“变量管理 → SIMATIC S7 Protocol Suite → MPI”下新建连接,命名为“S7_300_Line1”,然后在该连接下新建 Pump_Run、Valve_Open、Tank_Level 三个过程变量,分别填写上表中的地址。创建完成后打开变量仿真或连接实际 PLC,观察“质量代码”列是否变为“良好”,确认通信正常。

联动逻辑设计

联动的核心是:内部变量决定“谁能操作、在哪个画面操作”,过程变量决定“操作对象当前是什么状态”。具体规则如下:

  • 画面切换按钮写入 CurrentScreen,画面窗口根据 CurrentScreen 的值切换显示内容。
  • 登录按钮写入 CurrentUser 和 UserLevel;UserLevel 控制操作按钮的“允许操作”属性。
  • 泵和阀门的图形对象绑定 Pump_Run、Valve_Open,用颜色表示状态;只有 UserLevel ≥ 1 时,操作按钮才可点击。
  • 液位棒图绑定 Tank_Level,并按 0~27648 线性映射到 0~100%。
内部变量(WinCC 内部) CurrentScreen(画面编号) CurrentUser(用户名) UserLevel(权限等级) 过程变量(S7-300 映射) Pump_Run DB1.DBX0.0 Valve_Open DB1.DBX0.1 Tank_Level DB1.DBW2 画面联动逻辑 CurrentScreen → 画面窗口切换 UserLevel → 按钮允许操作 Pump_Run → 泵颜色/状态 Valve_Open → 阀颜色/状态 Tank_Level → 液位棒图 0~100% 主画面对象与变量绑定 画面切换按钮 写入 CurrentScreen 登录/权限按钮 写入 CurrentUser/UserLevel 泵图形对象 绑定 Pump_Run 阀门图形对象 绑定 Valve_Open 液位棒图 绑定 Tank_Level,0~27648 映射 0~100% UserLevel ≥ 1 才可操作

关键实现:按钮与画面窗口的联动

以“画面切换按钮”为例,在按钮的鼠标点击事件中写入 C 脚本:

// 画面切换按钮:点击后切换到工艺流程画面
SetTagWord("CurrentScreen", 2);

画面窗口的“画面名称”属性使用动态对话框,选择“变量”方式,绑定 CurrentScreen,并配置值范围:1 对应主画面,2 对应工艺流程画面,3 对应报警画面,4 对应趋势画面,5 对应参数设置画面。

权限控制按钮的脚本如下:

// 登录按钮:根据输入的用户名设置权限等级
char* user = GetTagChar("CurrentUser");
if (strcmp(user, "admin") == 0)
    SetTagByte("UserLevel", 2);
else if (strcmp(user, "engineer") == 0)
    SetTagByte("UserLevel", 1);
else
    SetTagByte("UserLevel", 0);

泵操作按钮的“允许操作”属性绑定 UserLevel,动态对话框配置为:UserLevel ≥ 1 时允许操作,否则禁用。这样操作员只能查看,工程师和管理员才能下发指令。

过程变量状态显示

泵图形对象的填充颜色通过动态对话框绑定 Pump_Run:值为 1 时填充绿色(运行),值为 0 时填充灰色(停止)。阀门对象同理绑定 Valve_Open。液位棒图的“过程驱动连接”选择 Tank_Level,并设置线性映射:变量值 0 对应 0%,27648 对应 100%。

验证方法:在变量仿真中强制 Pump_Run=1,观察泵图形是否变绿;强制 Valve_Open=1,观察阀门是否变色;修改 Tank_Level=13824,观察液位棒图是否显示约 50%。同时切换 UserLevel=0,确认操作按钮变为禁用状态。

常见问题与排查

  • 过程变量质量代码不是“良好”:检查 MPI 连接参数、PLC 地址是否正确,以及 PLC 是否处于运行状态。
  • 内部变量写入后画面无变化:确认动态对话框绑定的变量名拼写一致,且变量类型匹配(如 CurrentScreen 为无符号 16 位)。
  • 权限按钮始终可点击:检查“允许操作”动态对话框的表达式是否使用了 UserLevel,并确认比较运算符正确。
  • 液位显示跳变或超范围:确认 Tank_Level 的数据类型为有符号 16 位,且映射范围与 PLC 侧一致。