西门子触摸屏(如 WinCC Flexible/WinCC Unified)中给变量赋值的函数,核心分基础赋值(直接写值) 和脚本赋值(动态 / 条件赋值) 两类,不同触摸屏软件版本(经典版 / Unified 版)函数名称略有差异,但逻辑一致,以下是最常用的函数及实操示例。
一、核心赋值函数(按软件版本分类)
1. WinCC Flexible(经典版,如 Smart Line/TP700 Comfort)
这是西门子主流触摸屏(Smart 700/1000、TP/MP 系列)的编程软件,赋值分两种场景:
(1)基础赋值(无脚本,直接组态)
无需写函数,通过 “按钮 / 输入域” 的 “事件 - 动作” 直接赋值,是最常用的方式:
(2)VBS 脚本赋值(动态 / 条件赋值)
需写 VBS 脚本,核心函数是 SetTagXXX(按变量类型区分),支持条件判断、运算后赋值:
| 函数名 | 功能 | 适用变量类型 | 示例 |
|---|---|---|---|
SetTagBit | 给布尔变量赋值 | 位变量(BOOL) | SetTagBit("Motor_Run", True) → 给变量 Motor_Run 赋值 True(1) |
SetTagWord | 给字变量赋值 | 16 位整数(INT/UINT) | SetTagWord("Speed_Set", 500) → 给速度设定值赋值 500 |
SetTagDWord | 给双字变量赋值 | 32 位整数(DINT/UDINT) | SetTagDWord("Position", 10000) → 给位置变量赋值 10000 |
SetTagFloat | 给浮点变量赋值 | 浮点数(REAL) | SetTagFloat("Temperature", 25.5) → 给温度变量赋值 25.5 |
脚本示例(按钮按下赋值):
vbscript
' 按下按钮,先判断变量值,再赋值
If GetTagWord("Speed_Set") < 1000 Then ' 读取当前值
SetTagWord("Speed_Set", 1000) ' 赋值为1000
Else
SetTagWord("Speed_Set", 0) ' 否则赋值为0
End If2. WinCC Unified(新一代,如 TP700 Unified)
基于 TIA Portal 的 Unified 触摸屏,使用 Javascript 脚本,核心赋值函数为 setValue:
javascript
运行
// 给布尔变量赋值Session.Scopes("PLC1.DB1.DBX0.0").setValue(true);// 给整数变量赋值Session.Scopes("PLC1.DB1.DBW2").setValue(200);// 运算后赋值(如当前值+10)let current = Session.Scopes("PLC1.DB1.DBW2").getValue();Session.Scopes("PLC1.DB1.DBW2").setValue(current + 10);3. 特殊场景:间接赋值(变量地址动态变化)
若需按条件给不同变量赋值(如选择不同工位赋值),用SetTagMulti函数(仅 Flexible 支持):
vbscript
' 同时给多个变量赋值 Dim Tags(1,1) ' 定义数组:行=变量名,列=值 Tags(0,0) = "DB1.DBW0" : Tags(0,1) = 100 Tags(1,0) = "DB1.DBW2" : Tags(1,1) = 200 SetTagMulti Tags ' 批量赋值
二、关键使用要点
三、常见错误与排查
| 错误现象 | 原因 | 解决方法 |
|---|---|---|
| 赋值后变量值不变 | 变量路径错误、PLC 通讯中断 | 核对变量路径;检查触摸屏与 PLC 的通讯状态 |
| 脚本报错 “类型不匹配” | 赋值类型与变量类型不符 | 如 BOOL 变量赋值 1→改为 True,REAL 变量赋值整数→加小数点(如 25→25.0) |
| 批量赋值失败 | SetTagMulti数组格式错误 | 数组需按 “变量名 - 值” 成对定义,下标从 0 开始 |

