2. AVEVA Application Server对象模型搭建
包装线对象模型的层级设计
在AVEVA System Platform中,对象模型的核心是模板(Template)与实例(Instance)的分离。模板定义可复用的属性、脚本和报警,实例则继承模板并绑定具体设备。对于一条包装线,推荐建立三层结构:产线层 → 设备层 → 工位层。产线层承载整线状态与产量统计,设备层对应灌装机、封口机、贴标机等独立设备,工位层则细化到每个设备的执行单元(如灌装头、封口模具)。
层级设计的关键约束:属性继承方向自上而下,即产线层定义的公共属性(如LineSpeed、ShiftName)可被设备层和工位层继承;设备层定义的设备专属属性(如RatedCapacity)可被工位层继承,但不可反向传递。脚本和报警的继承遵循同样规则。
模板定义与实例化操作
在System Platform的IDE中,模板通过Galaxy → Templates创建。以下以灌装机为例,说明模板定义的关键步骤:
- 在Templates节点下新建Base Template,命名为
$Filler($前缀表示抽象模板,不可直接实例化)。 - 在
$Filler下添加属性:RatedCapacity(Int,单位瓶/分钟)、FillVolume(Real,单位mL)、CurrentState(String,枚举:Idle/Running/Fault)。 - 添加脚本
OnScan,实现状态机逻辑:当RatedCapacity > 0且FillVolume > 0时,CurrentState置为Running。 - 在
$Filler下创建Derived Template,命名为Filler_ModelA,覆盖RatedCapacity默认值为120。 - 将
Filler_ModelA拖拽到产线实例PackagingLine下,生成实例Filler_01,并绑定实际PLC的I/O地址。
工位层模板$FillHead继承自$Filler,增加NozzleDia和FlowRate属性。实例化时,每个灌装头自动获得父级RatedCapacity和FillVolume的当前值,无需重复配置。
复用性验证方法:在
PackagingLine下再实例化一台Filler_ModelA为Filler_02,修改Filler_01的FillVolume为500,观察Filler_02的FillVolume是否保持模板默认值(应为独立值,不联动)。若联动,说明误用了Reference而非Instance。
继承关系与属性覆盖规则
| 层级 | 对象 | 可定义内容 | 继承行为 |
|---|---|---|---|
| 产线层 | PackagingLine | LineSpeed、ShiftName、TotalOutput | 向下传递至所有设备与工位 |
| 设备层 | Filler_01 | RatedCapacity、FillVolume、CurrentState | 继承产线属性;向下传递至工位 |
| 工位层 | FillHead_01 | NozzleDia、FlowRate | 继承设备与产线属性;不可反向覆盖 |
属性覆盖遵循就近原则:若工位层重新定义了FillVolume,则工位层值优先,但设备层和产线层的值不受影响。脚本继承则采用链式执行:产线层OnScan先执行,设备层OnScan后执行,工位层最后执行。
常见错误:在设备层直接修改产线层属性(如
LineSpeed),会导致该设备脱离产线统一控制。正确做法是在设备层创建本地覆盖属性(Local Override),仅影响当前实例。
模型验证与复用性检查
完成对象模型搭建后,通过以下方式验证:
- 属性传播检查:在
PackagingLine的LineSpeed写入100,检查Filler_01和FillHead_01的LineSpeed是否同步为100。 - 实例独立性检查:修改
Filler_01的FillVolume为500,确认Filler_02的FillVolume仍为模板默认值。 - 脚本执行顺序检查:在产线层、设备层、工位层的
OnScan中分别写入日志,观察执行顺序是否为产线→设备→工位。 - 报警继承检查:在
$Filler模板中定义HighTemp报警,确认所有Filler_ModelA实例均自动获得该报警配置。
若以上检查全部通过,说明对象模型具备可复用性,后续新增设备只需实例化模板并绑定I/O,无需重复定义属性与脚本。