3. 自动化对象模型

在 AVEVA System Platform 中,工厂监控平台的一切可视化、报警、历史与逻辑都建立在同一个核心概念之上——AutomationObject(自动化对象)。它不是简单的画面元素,而是一个带有属性、脚本、报警与历史能力的“活对象”。理解 AutomationObject 的构成方式,是掌握整个平台建模方法的前提。

AutomationObject 是什么

AutomationObject 是 System Platform 中承载设备语义的最小可复用单元。一个泵、一个阀门、一个电机、一条生产线,都可以被抽象为一个 AutomationObject。它由若干关键部分组成:

  • 属性(Attribute):描述对象状态与参数的数据点,如 Speed、RunStatus、Setpoint、PV。
  • 脚本(Script):附着在对象上的逻辑,如启动联锁、状态判断、数据换算。
  • 报警与历史:属性可绑定报警限值与历史采集,使对象自带监控能力。
  • 图形符号:对象可关联画面符号,拖入画面即自动生成可视化。

AutomationObject 分为两类:模板(Template)与实例(Instance)。模板是“类”,定义结构与默认行为;实例是“对象”,继承模板结构并绑定具体设备。模板与实例之间通过继承关系连接,修改模板可批量影响所有实例,这是工厂建模效率的关键。

模板、实例与继承关系

模板定义属性、脚本、报警与图形符号。实例从模板派生,自动获得这些定义,并可在实例层覆盖默认值。继承关系是单向的:模板 → 实例。实例可以覆盖属性初值、绑定具体 PLC 地址、调整报警限值,但不能反向修改模板结构。

例如,定义一个 $Pump 模板,包含属性 Cmd、Status、Speed、Fault,并附带启动联锁脚本。创建实例 Pump_101 时,只需绑定 Cmd 到 PLC 地址 DB10.DBX0.0,其余结构自动继承。若后续在模板中新增 RunHours 属性,所有实例会自动获得该属性,无需逐个修改。

AutomationObject 模板—实例继承关系 模板 $Pump(类) 属性 Cmd 属性 Status 属性 Speed 属性 Fault 脚本:启动联锁 / 状态判断 实例 Pump_101 Cmd → DB10.DBX0.0 Speed 初值 = 1450 rpm 实例 Pump_102 Cmd → DB10.DBX1.0 Speed 初值 = 2900 rpm 实例 Pump_103 Cmd → DB10.DBX2.0 Speed 初值 = 1450 rpm 继承 继承 继承 实例覆盖规则: • 实例可覆盖属性初值、绑定地址、报警限值,但不可修改模板结构 • 模板新增属性 → 所有实例自动获得;模板修改脚本 → 所有实例同步生效 • 实例层覆盖值优先于模板默认值,未覆盖项继续继承模板

属性的类型与绑定

属性是 AutomationObject 的数据骨架。System Platform 中属性分为多种类型,常见的有:

属性类型用途示例
Boolean开关量状态RunStatus、Fault
Integer / Real数值量Speed、PV、Setpoint
String文本信息DeviceName、BatchID
DateTime时间戳LastStartTime

属性可绑定到 PLC 地址、其他对象属性或表达式。绑定方式决定了数据流向:输入绑定从 PLC 读取到对象,输出绑定从对象写入 PLC。例如 Status 绑定 DB10.DBX0.1 作为输入,Cmd 绑定 DB10.DBX0.0 作为输出。绑定关系在实例层配置,模板层只定义属性名与类型。

脚本与继承的协同

脚本附着在对象上,可访问本对象属性、其他对象属性以及系统函数。脚本分为模板脚本与实例脚本。模板脚本定义通用逻辑,所有实例自动继承;实例脚本用于处理该设备特有的逻辑,优先级高于模板脚本。

以泵的启动联锁为例,模板脚本可写:

If Me.Cmd == True And Me.Fault == False Then
    Me.Status = True
    Me.Speed = Me.Setpoint
Else
    Me.Status = False
    Me.Speed = 0
End If

该脚本在模板层定义后,Pump_101、Pump_102、Pump_103 均自动具备此逻辑。若 Pump_102 需要额外的温度联锁,可在实例层追加脚本,而不影响其他实例。这就是继承与覆盖的协同:共性放模板,个性放实例。

工厂设备建模的基本方法

掌握上述概念后,建模可按以下思路推进:

  1. 设备分类:将工厂设备按类型归并,如泵、阀、电机、罐、传送带。每类定义一个模板。
  2. 定义属性:为每类设备确定必要属性,区分输入、输出与内部计算量。属性命名保持统一规范,如 Cmd、Status、PV、SP。
  3. 编写模板脚本:将通用联锁、状态判断、单位换算写入模板脚本。
  4. 创建实例:从模板派生实例,绑定具体 PLC 地址与初始值。
  5. 关联图形符号:为模板指定画面符号,实例拖入画面后自动显示对应状态。
  6. 验证与调整:在实例层覆盖差异项,检查绑定与脚本执行结果。
建模时优先考虑“哪些属性所有同类设备都有”,将其放入模板;仅将地址、量程、报警限值等差异项留在实例层。这样后续新增设备只需创建实例并绑定地址,大幅减少重复工作。

建模示例:泵组对象结构

假设某车间有 3 台泵,共用同一模板 $Pump。模板定义属性 Cmd(Boolean,输出)、Status(Boolean,输入)、Speed(Real,输入)、Fault(Boolean,输入)、Setpoint(Real,内部)。模板脚本实现启停联锁。实例层分别绑定:

  • Pump_101:Cmd → DB10.DBX0.0,Status → DB10.DBX0.1,Speed → DB10.DBW2,Fault → DB10.DBX0.2
  • Pump_102:Cmd → DB10.DBX1.0,Status → DB10.DBX1.1,Speed → DB10.DBW4,Fault → DB10.DBX1.2
  • Pump_103:Cmd → DB10.DBX2.0,Status → DB10.DBX2.1,Speed → DB10.DBW6,Fault → DB10.DBX2.2

若后续需要为所有泵增加运行小时统计,只需在模板中新增 RunHours 属性并编写累加脚本,三个实例自动获得该能力,无需逐个修改。这正是 AutomationObject 继承机制在工厂建模中的核心价值。

实例层覆盖属性初值后,若模板后续修改了该属性的默认值,实例不会自动同步,仍保留自身覆盖值。因此建议只对确实需要差异化的属性做实例覆盖,避免继承关系被过度打断。

总结来说,AutomationObject 建模的核心逻辑是:模板定义结构与共性逻辑,实例绑定具体设备与差异参数,继承关系保证批量一致性,脚本赋予对象行为。掌握这四者的关系,就能以可维护、可扩展的方式完成工厂设备建模,为后续画面、报警与历史配置打下坚实基础。