3. AF属性与数据引用
在AF(Asset Framework)中,元素模板定义的是“这一类设备长什么样”,而属性(Attribute)才真正决定“这台设备此刻是什么状态”。模板上的属性是抽象定义,只有当元素实例化后,属性才会与具体位号、具体PI Point、具体计算逻辑绑定,从而产生实际的数据引用。本节围绕四类最常用的属性——静态属性、PI Point引用属性、公式属性、字符串属性——说明它们各自的配置方式,以及模板属性如何落到实际位号上。
一、四类属性的定位与适用场景
AF属性按数据来源可分为两大类:一类不依赖PI Data Archive,值由人工或外部系统写入,称为静态属性(Static Attribute);另一类需要从PI点或其它属性派生,包括PI Point引用属性、公式属性、字符串属性等。理解它们的差别,是正确建模的前提。
- 静态属性:值直接存储在AF数据库中,不随时间序列变化。典型用途是设备铭牌参数,如额定功率、设计流量、安装日期、设备编号。它适合描述“不随工况变化”的元数据。
- PI Point引用属性:属性本身不存值,而是指向一个PI Point,读取时实时取该点的当前值或历史值。典型用途是温度、压力、流量、振动等过程量。
- 公式属性:值由表达式计算得出,表达式可以引用同一元素内的其它属性、PI Point引用属性,甚至跨元素引用。典型用途是效率、偏差、累计量、状态判断。
- 字符串属性:值为文本类型,可由静态赋值、公式拼接或PI Point的字符串点提供。典型用途是位号描述、运行模式、报警文本、设备状态标签。
这四类属性并非互斥,一个元素上往往同时存在。关键在于:模板中定义属性时,要明确它的数据引用类型(Data Reference),实例化后由绑定关系决定它指向哪个具体位号。
二、静态属性的配置要点
静态属性在模板中创建时,Data Reference选择“None”,值类型根据实际选择Number、String、DateTime等。实例化后,每个元素可以独立填写自己的值。例如给泵模板定义RatedPower(额定功率,单位kW),P-101A填75,P-101B填90,两者互不影响。
静态属性虽然简单,但有两个容易忽略的细节。第一,单位(UOM)要显式设置,否则后续公式计算时单位不一致会导致结果错误。第二,如果某静态属性需要参与公式,建议在模板中就把它的默认值或取值范围约定清楚,避免实例化后出现空值导致公式报错。对于设备编号、位号描述这类文本型静态属性,值类型应选String,而不是Number。
三、PI Point引用属性的绑定
PI Point引用属性是AF与PI Data Archive之间的桥梁。在模板中创建属性时,Data Reference选择“PI Point”,此时属性本身没有值,只有一个“指向”。实例化后,需要为每个元素指定具体的PI Point名称,例如P-101A的OutletTemp绑定到P101A_TE01,P-101B绑定到P101B_TE01。
绑定方式有两种:一是在元素实例的属性页手动填写PI Point路径;二是利用模板的“PI Point命名规则”或AF的替换参数(Substitution Parameters),让系统根据元素名自动生成点路径。例如模板中把点路径写成“%Element%_TE01”,实例化P-101A时自动解析为P101A_TE01。这种方式在批量建模时效率极高,但前提是PI点命名必须规范统一。
四、公式属性的表达式与依赖
公式属性的Data Reference选择“Formula”,在Expression编辑器中编写表达式。表达式可以引用同一元素内的其它属性,引用方式为属性名,例如“'OutletTemp' - 'InletTemp'”。也可以引用PI Point引用属性,因为公式引擎会自动解析其当前值。
以换热器效率为例,假设模板中已有OutletTemp、InletTemp两个PI Point引用属性,以及RatedPower静态属性,可以定义:
Efficiency = ('OutletTemp' - 'InletTemp') * 'FlowRate' / 'RatedPower'
公式属性有几个关键约束。第一,被引用的属性必须在同一元素内存在,且名称完全一致(AF属性名区分大小写)。第二,公式的计算时机取决于属性的“计算方式”:可以按需计算(On Demand),也可以按固定周期计算并写入PI Point。第三,如果公式引用了PI Point引用属性,而该点当前没有数据,公式结果会返回“No Data”或空值,需要在分析时区分“计算错误”和“数据缺失”。
公式属性还可以引用其它元素的属性,实现跨元素计算。例如在机组层级定义一个“总效率”属性,引用各台泵的效率属性。这种跨元素引用需要写完整的路径,如“..\P-101A|Efficiency”。路径中的“..”表示父元素,竖线后是属性名。跨元素引用会带来依赖关系,修改被引用元素时要注意影响范围。
五、字符串属性的三种来源
字符串属性的值类型为String,来源有三种。第一种是静态赋值,直接在实例中填写文本,如RunMode = "自动"。第二种是公式拼接,用公式把多个属性组合成一段文本,例如:
StatusText = 'PumpName' + " 当前效率 " + Format('Efficiency', "0.0") + "%"
第三种是引用PI Point的字符串点。PI Data Archive中除了数值点,也可以有String类型的点,AF属性绑定到这类点后,读取的就是文本值。字符串属性常用于生成报警描述、运行模式标签、设备状态说明,便于在AF分析或PI Vision中直接显示。
六、模板属性到实际位号的绑定检查
模板属性配置完成后,真正决定数据是否正确的是实例化后的绑定关系。建议按以下顺序检查:先确认静态属性的值是否填写完整,特别是参与公式的数值属性;再核对每个PI Point引用属性的绑定路径是否指向正确的位号;然后检查公式属性的表达式是否引用了正确的属性名,以及被引用属性是否都有有效值;最后查看字符串属性的拼接结果是否符合预期。
一个实用的验证方法是在AF中打开元素的属性列表,观察每个属性的“值”和“时间戳”。静态属性应显示固定值,PI Point引用属性应显示当前值及最新时间戳,公式属性应显示计算结果。如果某个属性显示“No Data”或“Bad”,需要沿着依赖链逐级排查:是PI点没有数据,还是公式引用了空属性,还是绑定路径写错。
总结来说,静态属性解决“设备是什么”,PI Point引用属性解决“设备现在怎么样”,公式属性解决“从原始数据能算出什么”,字符串属性解决“如何把状态表达成人能读的文本”。四者配合,模板属性才能真正落到实际位号上,形成可运行、可维护的AF资产模型。