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 秒。对于精度要求高的工艺,这就是事故。所以,带小数点的,一律用浮点数。

特别注意: 字符串类型在 WinCC 配方里是有长度限制的。我曾经定义一个产品名称字段,只给了 10 个字符。结果现场操作员输入“浓缩苹果汁”,保存后变成了“浓缩苹果”。产品追溯时死活找不到这个批次。后来我统一把字符串长度设为 32 或 64,留足余量。

3.3 定义配方元素的步骤

在 WinCC 里定义配方元素,其实就是在配方视图里添加变量。我习惯按这个流程走:

  1. 打开配方编辑器:在 WinCC 项目管理器中,找到“配方”节点,双击打开。
  2. 创建或选择配方:如果你还没创建配方,先新建一个。比如叫“饮料配方_001”。
  3. 添加元素:在配方编辑器的表格里,一行就是一个元素。点击添加行。
  4. 设置元素属性:给每个元素起个名字,选好数据类型,关联到对应的变量。
  5. 设置默认值:给每个元素一个初始值。这样新建配方时,数据不会空着。

举个例子,一个简单的饮料配方,它的元素定义可能是这样的:

配方名称:饮料配方_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
核心要点: 每个配方元素必须关联一个变量。这个变量可以是 PLC 里的,也可以是 WinCC 内部的。配方的作用,就是把一组变量的值保存下来,或者把保存的值写回到变量里去。

3.4 变量关联的注意事项

定义元素时,关联变量这一步最容易出问题。我见过不少新手,把变量名写错了,或者类型不匹配,结果配方下载后数据纹丝不动。

这里有几个要点:

  • 变量名必须完全一致:WinCC 里变量名是区分大小写的。DB1.Sugar_Setpoint 和 DB1.sugar_setpoint 是两个不同的变量。
  • 数据类型必须匹配:配方元素是浮点数,关联的变量也必须是浮点数。如果 PLC 里是整数,你配方里用浮点数,下载时会报错或者数据异常。
  • 变量必须在 WinCC 变量管理器中已经存在:先建好变量,再来配方里关联。别在配方里临时输入一个不存在的变量名。
  • 数组变量也可以作为配方元素:比如一个配方里有 10 个温度点,你可以定义一个数组变量,然后在配方里关联这个数组。但要注意,数组的每个元素在配方里是作为一个整体处理的。
我的小技巧: 在定义配方元素之前,先把所有需要用到的变量在 WinCC 变量管理器里建好,并且测试一下变量能不能正常读写。变量通了,配方才能通。我曾经跳过这一步,结果配方调试时发现变量地址错了,所有配方数据都要重新关联,那叫一个痛苦。

3.5 数据结构设计的整体思路

说了这么多,咱们来画个图,把配方数据结构设计的整体思路理一理。

配方数据结构设计流程图 配方数据结构设计流程 1. 列出工艺参数 2. 选择数据类型 整数 / 浮点数 字符串 / 布尔值 数组 / 结构体 3. 关联 WinCC 变量 4. 设置默认值 💡 避坑提醒 变量名区分大小写 类型必须完全匹配

这张图把咱们刚才讲的内容串起来了。从列出参数开始,到选择数据类型,再到关联变量和设置默认值。每一步都有坑,每一步都得仔细。

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 里对应哪个变量?
把这三个问题搞清楚了,配方数据结构就设计好了。