2. 变量管理基础
各位同学,欢迎来到第二章。上一章我们搭好了开发环境,今天咱们正式进入WinCC的“心脏”——变量管理。
变量是什么?说白了,就是PLC和WinCC之间的“传话筒”。你画面上那个电机转不转、温度显示多少度,背后全靠变量在撑。我见过不少新手,画面画得挺漂亮,结果变量一配错,整个项目跑不起来。嗯,今天我们就从根上把它搞明白。
2.1 变量管理器的界面布局
打开WinCC,在左侧项目管理器中找到“变量管理”。双击展开,你会看到这样的结构:
我个人习惯,一进项目先看变量管理器。这里分三大块:
- 内部变量:只存在于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
地址映射的核心规则,我总结成三句话:
- 类型决定长度:Bool占1位,Byte/Char占1字节,Int占2字节,Real/DInt占4字节。
- 偏移量要连续:比如DB1.DBW0用了2字节,下一个变量要从DBW2开始,别跳着用。
- 对齐很重要: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两端保持一致,否则读出来全是乱码。我踩过这个坑,调试了整整一个下午才发现是长度不匹配。
好了,变量管理的基础就这些。记住:界面要熟、内外要分、类型要对、地址要准。这四句话你记牢了,后面做配方绑定就顺了。