2. 食品产线设备层级与命名规范组态

为什么食品厂必须先定层级与位号,再谈画面

食品产线的SCADA变量数量大、命名相似度高:同一车间可能有多条灌装线,每条线都有杀菌、灌装、封盖、贴标等工段,每个工段又有温度、压力、液位、电机状态等点位。如果直接按“T1、P1、M1”这类顺序号命名,后期新增设备或复制产线时必然冲突,画面脚本、报警、历史趋势也会跟着错乱。因此本例的核心任务是:先建立“车间—产线—工段—设备”四级层级树,再用一套可解析的位号规则把变量挂到设备上,让命名本身携带位置信息。

层级树与位号规则的设计

层级树采用四级结构,每级用固定长度的编码段表示,段与段之间用下划线连接。这样既能在组态软件的树形目录中直观展开,也能让位号被程序按段拆分解析。

  • 车间(Area):2位字母,如 WS(灌装车间)、PK(包装车间)。
  • 产线(Line):2位数字,如 01、02。
  • 工段(Stage):3位字母缩写,如 PAS(杀菌)、FIL(灌装)、CAP(封盖)、LBL(贴标)。
  • 设备(Equip):3位字母+2位数字,如 PMP01(1号泵)、VLV02(2号阀)、TT01(1号温度变送器)。

位号在设备编码后追加“参数类型+序号”,参数类型用标准缩写:PV(过程值)、SP(设定值)、CMD(命令)、STS(状态)、ALM(报警)。完整位号示例:WS_01_PAS_TT01_PV,读作“灌装车间01线杀菌工段1号温度变送器的过程值”。

命名规则一旦确定,应写入工程命名规范文档并冻结;后续新增设备只在末段递增序号,绝不修改前四级编码,否则历史数据与报警配置会失去对应关系。
车间—产线—工段—设备 层级树与位号挂接 SCADA 工程树(四级) 车间 WS(灌装) 产线 01 工段 PAS(杀菌) 设备 TT01(温度变送器) 设备 PMP01(循环泵) 设备 VLV02(蒸汽阀) 位号命名规则(按段解析) WS 01 PAS TT01 PV 车间 产线 工段 设备 参数 WS_01_PAS_TT01_PV = 灌装车间01线杀菌工段1号温度变送器过程值 参数类型:PV 过程值 / SP 设定值 / CMD 命令      STS 状态 / ALM 报警 命名冲突对比 ✗ 顺序号命名(易冲突) T1、P1、M1 … 新增02线后 T1 重复,报警与趋势错挂 ✓ 层级编码命名(唯一可解析) WS_01_PAS_TT01_PV WS_02_PAS_TT01_PV

在组态工程中落地层级树

不同组态软件(如 WinCC、组态王、iFIX、Ignition)的树形目录入口名称不同,但操作逻辑一致:在工程浏览器中新建分组,按四级逐层嵌套,再把变量建在设备节点下。以下以通用组态逻辑描述关键动作,不依赖具体版本按钮。

  1. 在工程根节点下新建分组 WS,其下新建 01、02 两条产线分组。
  2. 在 01 下新建工段分组 PAS、FIL、CAP、LBL。
  3. 在 PAS 下新建设备分组 TT01、PMP01、VLV02。
  4. 在设备分组内建变量,变量名严格按 WS_01_PAS_TT01_PV 格式填写,并绑定PLC地址。

层级树与位号必须一一对应:树中的路径 WS/01/PAS/TT01 与位号前四段 WS_01_PAS_TT01 完全一致。这样即使有人只看位号,也能反推设备在车间中的物理位置。

用脚本批量校验位号,防止冲突

手工建几十个变量容易漏改段。可在组态软件支持的脚本环境(如 VBScript、Python 或软件内置脚本)中写一个校验函数,在建变量前先检查格式与重复。下面给出与软件无关的 Python 校验示例,可直接在工程外先跑通规则,再照此逻辑移植到组态脚本。

import re

# 四级编码 + 参数类型,段间用下划线
PATTERN = re.compile(
    r"^(WS|PK)_(\d{2})_(PAS|FIL|CAP|LBL)_([A-Z]{3}\d{2})_(PV|SP|CMD|STS|ALM)$"
)

def validate(tags):
    seen = {}
    errors = []
    for t in tags:
        m = PATTERN.match(t)
        if not m:
            errors.append(f"格式错误: {t}")
            continue
        if t in seen:
            errors.append(f"位号重复: {t}")
        seen[t] = True
    return errors

# 教学示例:两条产线同名设备,靠产线段区分
tags = [
    "WS_01_PAS_TT01_PV",
    "WS_01_PAS_TT01_SP",
    "WS_02_PAS_TT01_PV",
    "WS_01_PAS_TT01_PV",   # 故意重复
    "WS_1_PAS_TT01_PV",    # 产线段位数错误
]
for e in validate(tags):
    print(e)

预期输出为两条错误:重复位号 WS_01_PAS_TT01_PV,以及产线段位数不足的 WS_1_PAS_TT01_PV。这说明规则能同时拦住“重复”和“格式漂移”两类问题。

验证层级与命名是否真正生效

建完后不要只看树是否好看,要做三项检查:

  • 树路径检查:随机抽3个变量,确认其所在分组路径与位号前四段一致。
  • 唯一性检查:导出全部变量名,用上例脚本或表格去重,重复数为0。
  • 可解析检查:任取一个位号,按段拆分后能还原出车间、产线、工段、设备、参数类型五项信息。
若后续要复制产线,正确做法是复制整条产线分组后批量替换产线段(如 01→02),而不是逐个改变量名;替换后必须重跑唯一性检查,避免漏改变量造成跨线串数据。