2. AF元素模板设计
在AF(Asset Framework)中,元素模板(Element Template)是资产建模的“类定义”。它规定了某一类设备应该拥有哪些属性、这些属性的数据类型与默认值、以及可以挂载哪些子元素。如果把AF数据库比作面向对象的程序,元素模板就是类,而基于模板创建的元素就是实例。模板设计的好坏,直接决定了后续数百上千台设备能否被一致地实例化、检索和复用。本节围绕命名规范、属性集设计和分类策略三个核心问题展开,并以泵、换热器、储罐三类典型设备为例,给出可直接落地的模板结构。
一、命名规范:让模板可读、可查、可排序
模板命名不是审美问题,而是检索与治理问题。AF中模板名称会出现在模板库、元素创建向导、AF SDK查询以及PI Vision的资产切换器中,命名混乱会直接导致选错模板。建议采用“设备类别_结构特征_版本”的三段式命名法,例如 Pump_Centrifugal_V1、HeatExchanger_ShellTube_V1、Tank_VerticalAtmospheric_V1。三段分别回答“是什么设备”“什么结构形式”“哪一版模板”。
命名中应遵守几条硬约束:统一使用英文与下划线,避免空格和中文,因为部分AF SDK接口和URL参数对空格处理不一致;版本号必须显式出现,模板一旦被实例化就不应再修改属性结构,需要变更时新建V2并保留V1;同一层级内不得出现仅靠大小写区分的名称。属性命名同样需要规范,建议采用“物理量_单位”或“物理量_位置”的形式,例如 Flow_Rate、Discharge_Pressure、Suction_Temperature,避免使用 Tag1、Value2 这类无语义名称。
二、属性集设计:区分静态属性、动态属性与计算属性
属性集是模板的核心。设计时应把属性分为三类,分别对应不同的数据来源和更新方式。
- 静态属性(Static):设备铭牌、设计参数、安装位置等不随时间变化的信息,如
Manufacturer、Model、Design_Pressure、Install_Date。这类属性在元素创建时填写,之后基本不变,适合作为检索和分组依据。 - 动态属性(Dynamic):来自PI Data Archive的实时或历史数据引用,如
Discharge_Pressure、Bearing_Temperature。它们通过PI Point引用或AF分析输出获得,是PI Vision趋势和KPI计算的数据源。 - 计算属性(Calculated):由AF分析(Analysis)基于其他属性计算得到,如泵的
Hydraulic_Power、换热器的LMTD、储罐的Volume_Percent。计算属性不直接绑定PI Point,而是引用表达式,便于统一维护计算逻辑。
三类属性在模板中应通过命名前缀或分类(Category)加以区分,例如用 s_、d_、c_ 前缀,或在AF的Category中标记为Static/Dynamic/Calculated。这样在批量导出属性清单或做数据质量检查时,可以快速筛选。
三、分类策略:用Category和模板继承控制复杂度
当模板数量增长到几十个时,仅靠命名已经不够。AF提供两种分类手段:Category和模板继承(Base Template)。Category是横向标签,用于跨模板检索,例如给所有旋转设备模板打上 Rotating 标签,给所有承压设备打上 Pressurized 标签。模板继承是纵向复用,例如先建立 Equipment_Base 模板,包含 Asset_ID、Location、Status 等通用属性,再让 Pump_Centrifugal_V1 继承它,避免每个模板重复定义通用字段。
继承层次不宜超过三层,否则属性来源难以追踪。推荐结构为:Equipment_Base → 设备大类模板(如 Pump_Base)→ 具体结构模板(如 Pump_Centrifugal_V1)。子模板只定义差异化属性,通用属性全部上移。
四、三类典型设备的模板落地示例
下面给出泵、换热器、储罐模板的具体属性配置。所有参数均为教学示例,实际项目应根据设备铭牌和工艺要求调整。
离心泵模板 Pump_Centrifugal_V1:继承 Pump_Base。静态属性包括 Manufacturer、Model、Design_Flow(示例值 120 m³/h)、Design_Head(示例值 45 m)、Seal_Type(机械密封/填料密封)。动态属性包括 Discharge_Pressure(PI Point: P101_DISCH_PRESS)、Suction_Pressure、Bearing_Temperature、Motor_Current。计算属性 Hydraulic_Power 的表达式为 Design_Flow * Design_Head * 9.81 / 3600 / Efficiency,其中 Efficiency 为静态属性,示例值 0.72。这样当流量和扬程变化时,功率自动重算,无需人工维护。
管壳式换热器模板 HeatExchanger_ShellTube_V1:继承 HeatExchanger_Base。静态属性包括 Shell_Diameter、Tube_Count(示例 256 根)、Tube_Length(示例 6 m)、U_Coefficient(示例 850 W/(m²·K))、Fouling_Factor。动态属性包括 Hot_Inlet_Temp、Hot_Outlet_Temp、Cold_Inlet_Temp、Cold_Outlet_Temp、Hot_Flow、Cold_Flow。计算属性 LMTD 使用对数平均温差公式,Heat_Duty = U_Coefficient * Area * LMTD,其中 Area 由 Tube_Count * π * Tube_Diameter * Tube_Length 计算得到。这些计算属性让换热器性能评估不再依赖外部Excel。
立式常压储罐模板 Tank_VerticalAtmospheric_V1:继承 Tank_Base。静态属性包括 Diameter(示例 12 m)、Height(示例 10 m)、Roof_Type(拱顶/浮顶)、Max_Volume(示例 1130 m³)。动态属性包括 Level、Product_Temperature、Inlet_Flow、Outlet_Flow。计算属性 Volume_Percent = Level / Height * 100,Mass = Volume * Density,其中 Density 可来自实验室属性或在线密度计。储罐模板还应包含 Hi_Hi_Level、Hi_Level、Lo_Level 等报警限值属性,供AF分析触发通知。
五、模板设计中的常见陷阱与检查要点
第一,不要把PI Point名称硬编码进模板属性名。属性名应表达物理含义,PI Point引用放在属性的Data Reference中,这样更换数据源时只需改引用,不改属性结构。第二,计算属性要避免循环引用,例如A引用B、B又引用A,AF分析会报错。第三,模板一旦被实例化,修改属性名会导致所有实例的属性引用失效,因此版本管理必须严格。第四,Category不要滥用,每个模板的Category数量建议控制在3~5个,过多会失去筛选意义。
总结来说,AF元素模板设计的核心是“先分类、再继承、后属性”。命名规范保证可检索,属性集分类保证数据来源清晰,继承与Category保证复用和治理。泵、换热器、储罐三类模板覆盖了旋转设备、换热设备和存储设备三种典型模式,掌握它们的结构后,风机、压缩机、阀门等模板可以按同样思路快速派生。