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号温度变送器的过程值”。
在组态工程中落地层级树
不同组态软件(如 WinCC、组态王、iFIX、Ignition)的树形目录入口名称不同,但操作逻辑一致:在工程浏览器中新建分组,按四级逐层嵌套,再把变量建在设备节点下。以下以通用组态逻辑描述关键动作,不依赖具体版本按钮。
- 在工程根节点下新建分组
WS,其下新建01、02两条产线分组。 - 在
01下新建工段分组PAS、FIL、CAP、LBL。 - 在
PAS下新建设备分组TT01、PMP01、VLV02。 - 在设备分组内建变量,变量名严格按
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。
- 可解析检查:任取一个位号,按段拆分后能还原出车间、产线、工段、设备、参数类型五项信息。