3. 配方数据结构设计:定义配方元素(变量),设置数据类型
好,咱们进入第三章。上一章我们把配方的基本概念和 WinCC 里的存储位置搞清楚了。这一章,咱们要动手干点实在的——设计配方的数据结构。
说白了,配方就是一组数据的集合。比如一个饮料配方,它包含:糖度、酸度、颜色、是否充气、生产日期。这些数据在 WinCC 里怎么表示?就是通过一个个的 配方元素,也就是变量。
我刚开始做项目时,觉得这步很简单,不就是定义几个变量嘛。结果有一次,一个老工程师看了我的配方设计,直接说:“你这配方,一运行就得崩。” 为什么?因为我把所有数据都定义成了整数,连温度、压力这种带小数点的也用了整数。后来果然,配方下载到 PLC 后,设备动作完全不对。从那以后,我对数据类型的选择就再也不敢马虎了。
3.1 配方元素是什么?
配方元素,就是配方里的一个“格子”。每个格子存一种数据。比如:
- 温度设定值 → 一个格子
- 压力上限 → 一个格子
- 产品名称 → 一个格子
- 是否启用报警 → 一个格子
在 WinCC 里,这些格子最终会对应到 PLC 里的变量或者 WinCC 的内部变量。你设计配方时,就是在决定:我的配方里需要多少个格子,每个格子叫什么名字,存什么类型的数据。
3.2 数据类型的选择
WinCC 配方支持四种基本数据类型。选对了,配方就稳了一半。选错了,轻则数据显示不对,重则设备误动作。
| 数据类型 | 说明 | 典型应用 | 我踩过的坑 |
|---|---|---|---|
| 整数 (INT/DINT) | 不带小数点的整数 | 计数、步数、档位选择 | 用 INT 存温度,结果 25.5℃ 变成了 25,精度丢失 |
| 浮点数 (FLOAT/REAL) | 带小数点的数 | 温度、压力、流量、重量 | 浮点数在配方里显示很多位小数,后来我统一设置了显示格式 |
| 字符串 (STRING/CHAR) | 文本数据 | 产品名称、批次号、操作员备注 | 字符串长度没设够,长名称被截断,产品追溯时查不到 |
| 布尔值 (BOOL) | 真/假,1/0 | 开关、启用/禁用、选择模式 | 布尔值在配方里显示为 0 和 1,操作员看不懂,后来我做了文本映射 |
你想想看,如果配方里有个“加热时间”,你用了整数,那 10.5 秒就变成了 10 秒或者 11 秒。对于精度要求高的工艺,这就是事故。所以,带小数点的,一律用浮点数。
3.3 定义配方元素的步骤
在 WinCC 里定义配方元素,其实就是在配方视图里添加变量。我习惯按这个流程走:
- 打开配方编辑器:在 WinCC 项目管理器中,找到“配方”节点,双击打开。
- 创建或选择配方:如果你还没创建配方,先新建一个。比如叫“饮料配方_001”。
- 添加元素:在配方编辑器的表格里,一行就是一个元素。点击添加行。
- 设置元素属性:给每个元素起个名字,选好数据类型,关联到对应的变量。
- 设置默认值:给每个元素一个初始值。这样新建配方时,数据不会空着。
举个例子,一个简单的饮料配方,它的元素定义可能是这样的:
配方名称:饮料配方_001
元素列表:
1. 元素名称:糖度设定值
数据类型:浮点数 (REAL)
关联变量:DB1.Sugar_Setpoint
默认值:5.0
2. 元素名称:酸度设定值
数据类型:浮点数 (REAL)
关联变量:DB1.Acid_Setpoint
默认值:0.3
3. 元素名称:产品名称
数据类型:字符串 (STRING[32])
关联变量:DB1.Product_Name
默认值:"" (空字符串)
4. 元素名称:是否充气
数据类型:布尔值 (BOOL)
关联变量:DB1.Carbonated
默认值:False
5. 元素名称:灌装速度
数据类型:整数 (INT)
关联变量:DB1.Fill_Speed
默认值:100
3.4 变量关联的注意事项
定义元素时,关联变量这一步最容易出问题。我见过不少新手,把变量名写错了,或者类型不匹配,结果配方下载后数据纹丝不动。
这里有几个要点:
- 变量名必须完全一致:WinCC 里变量名是区分大小写的。DB1.Sugar_Setpoint 和 DB1.sugar_setpoint 是两个不同的变量。
- 数据类型必须匹配:配方元素是浮点数,关联的变量也必须是浮点数。如果 PLC 里是整数,你配方里用浮点数,下载时会报错或者数据异常。
- 变量必须在 WinCC 变量管理器中已经存在:先建好变量,再来配方里关联。别在配方里临时输入一个不存在的变量名。
- 数组变量也可以作为配方元素:比如一个配方里有 10 个温度点,你可以定义一个数组变量,然后在配方里关联这个数组。但要注意,数组的每个元素在配方里是作为一个整体处理的。
3.5 数据结构设计的整体思路
说了这么多,咱们来画个图,把配方数据结构设计的整体思路理一理。
这张图把咱们刚才讲的内容串起来了。从列出参数开始,到选择数据类型,再到关联变量和设置默认值。每一步都有坑,每一步都得仔细。
3.6 一个完整的例子
咱们来看一个实际项目中的例子。这是一个反应釜的配方,包含 8 个元素:
| 元素名称 | 数据类型 | 关联变量 | 默认值 | 说明 |
|---|---|---|---|---|
| 反应温度 | 浮点数 (REAL) | DB10.Temp_Set | 120.0 | 单位:℃ |
| 反应压力 | 浮点数 (REAL) | DB10.Press_Set | 2.5 | 单位:bar |
| 搅拌速度 | 整数 (INT) | DB10.Agitator_Speed | 500 | 单位:rpm |
| 反应时间 | 浮点数 (REAL) | DB10.React_Time | 30.0 | 单位:分钟 |
| 产品批号 | 字符串 (STRING[16]) | DB10.Batch_ID | "" | 手动输入 |
| 是否冷却 | 布尔值 (BOOL) | DB10.Cooling_On | False | 默认不冷却 |
| 加料量 A | 浮点数 (REAL) | DB10.Feed_A | 100.0 | 单位:kg |
| 加料量 B | 浮点数 (REAL) | DB10.Feed_B | 50.0 | 单位:kg |
你看,这个配方里,温度、压力、时间、加料量都用浮点数,因为工艺要求精确到小数点后一位。搅拌速度用整数,因为电机转速只能整数值。产品批号用字符串,因为要记录文字信息。是否冷却用布尔值,就是一个开关。
1. 我的工艺需要哪些参数?
2. 每个参数是什么类型的数据?
3. 这些数据在 WinCC 里对应哪个变量?
把这三个问题搞清楚了,配方数据结构就设计好了。