2. 变量管理基础

各位同学,欢迎来到第二章。上一章我们搭好了开发环境,今天咱们正式进入WinCC的“心脏”——变量管理。

变量是什么?说白了,就是PLC和WinCC之间的“传话筒”。你画面上那个电机转不转、温度显示多少度,背后全靠变量在撑。我见过不少新手,画面画得挺漂亮,结果变量一配错,整个项目跑不起来。嗯,今天我们就从根上把它搞明白。

2.1 变量管理器的界面布局

打开WinCC,在左侧项目管理器中找到“变量管理”。双击展开,你会看到这样的结构:

变量管理器界面布局 变量管理 内部变量 外部变量(连接) 原始数据 Bool变量 Int变量 Real变量 String变量 SIMATIC S7-1200 Modbus TCP设备 Profibus DP从站 DB块原始数据 I/Q/M区映射 提示:右键“变量管理”可添加新的驱动连接,每个连接下可创建多个变量组

我个人习惯,一进项目先看变量管理器。这里分三大块:

  • 内部变量:只存在于WinCC内部,不连任何PLC。适合做中间计算、临时标志位。
  • 外部变量:通过驱动连接PLC、变频器、仪表等。这才是我们真正要绑定的东西。
  • 原始数据:某些协议下直接读取的报文,一般用不上,但调试时偶尔有用。
我的习惯:每个外部连接下,按功能分区建变量组。比如“电机控制组”、“温度采集组”、“报警信号组”。别把所有变量堆在一个组里,后期维护你会哭的。

2.2 内部变量 vs 外部变量

很多新手搞不清这两个概念。我打个比方:

  • 内部变量 = 你笔记本上记的草稿。只有你自己看,不发给别人。
  • 外部变量 = 你和对讲机另一头的人通话。你说一句,那边回一句。

具体区别看这张表:

对比项 内部变量 外部变量
数据来源 WinCC自身 PLC/外部设备
是否需要硬件 不需要 需要通信连接
断电保持 不保持(重启归零) 取决于PLC侧
典型用途 画面切换标志、计算中间值 电机启停、温度PV值
创建方式 直接新建 需先建驱动连接
注意:内部变量不能用于配方绑定!配方必须用外部变量,因为配方数据最终要写到PLC里去。我曾经见过有人用内部变量做配方,结果数据根本下不去,查了半天才发现问题。

2.3 变量数据类型的定义

WinCC支持的数据类型,其实和PLC差不多。我列一下最常用的:

数据类型 长度 取值范围 典型场景
Bool 1位 True / False 电机启停、阀门开关
Byte 8位 0 ~ 255 原始数据、状态字
Int 16位 -32768 ~ 32767 计数器、速度给定
DInt 32位 -2^31 ~ 2^31-1 累计流量、高精度计数
Real 32位 ±1.18e-38 ~ ±3.4e38 温度、压力、液位
String 可变 最多255字符 批次号、操作员姓名

选类型时记住一个原则:够用就行,别浪费。比如一个温度值,用Real就够了,别用DInt。为什么?Real在WinCC里处理浮点运算更直接,DInt还得做转换,徒增麻烦。

避坑指南:我曾经在一个项目中,把Bool变量定义成了Int。结果PLC那边写True/False,WinCC这边读出来是1和0,画面上的“电机运行”指示灯死活不亮。后来发现是数据类型不匹配,改回Bool就好了。记住:Bool就是Bool,别用Int代替。

2.4 变量地址的映射规则

这是今天最核心的部分。变量地址,就是告诉WinCC:这个变量在PLC的哪个位置。

以西门子S7-1200为例,地址格式通常是:

DB块变量:DB1.DBD0   →  DB块1,双字,偏移0
           DB1.DBW2   →  DB块1,字,偏移2
           DB1.DBX4.0 →  DB块1,位,偏移4的第0位

M区变量:  MD0        →  双字,M区偏移0
           MW4        →  字,M区偏移4
           M10.0      →  位,M区偏移10的第0位

I区变量:  IW0        →  字,输入区偏移0
Q区变量:  QW0        →  字,输出区偏移0

地址映射的核心规则,我总结成三句话:

  1. 类型决定长度:Bool占1位,Byte/Char占1字节,Int占2字节,Real/DInt占4字节。
  2. 偏移量要连续:比如DB1.DBW0用了2字节,下一个变量要从DBW2开始,别跳着用。
  3. 对齐很重要:Real/DInt最好从4的倍数偏移开始(0、4、8、12...),否则有些PLC会报错。
我的经验:在PLC里建一个专门的“WinCC通信DB块”,把所有需要传给WinCC的变量集中放在这个DB里。这样地址管理一目了然,调试时也方便。我习惯把DB块的结构体和WinCC的变量表对照着做,两边一一对应,基本不会出错。

举个例子,假设PLC里有一个DB块(DB1),结构如下:

DB1:
  +0:   Bool     电机启动标志
  +2:   Int      速度给定值
  +4:   Real     实际温度值
  +8:   String[10]  批次号

那么在WinCC里,对应的变量地址就是:

WinCC变量名 数据类型 地址
Motor_Start Bool DB1.DBX0.0
Speed_Set Int DB1.DBW2
Temp_Actual Real DB1.DBD4
Batch_ID String DB1.DBB8
特别注意:String类型在WinCC里地址要写起始字节偏移,比如DB1.DBB8。而且String的长度必须在PLC和WinCC两端保持一致,否则读出来全是乱码。我踩过这个坑,调试了整整一个下午才发现是长度不匹配。

好了,变量管理的基础就这些。记住:界面要熟、内外要分、类型要对、地址要准。这四句话你记牢了,后面做配方绑定就顺了。