ModulesAsset Framework Deep-Dive
AF Hierarchy Design
A well-designed AF hierarchy is the foundation of effective PI System deployment. The standard hierarchy follows industrial ISA-95 levels:
Enterprise
└── Site (Plant / Facility)
└── Area (Production Area / Department)
└── Unit (Process Unit / Line)
└── Equipment (Asset)
└── Component (Sub-asset)Design Principles
- Reflect physical reality: Mirror your plant layout for intuitive navigation
- Normalize depth: Aim for 4-6 levels; deeper hierarchies slow queries
- Use templates: Never create elements without a template
- Separate concerns: Keep process hierarchy separate from maintenance hierarchy
Element Templates and Inheritance
Base Equipment Template
├── Name (String)
├── Location (String)
├── InstallDate (DateTime)
└── Status (String)
Pump Template (inherits Base Equipment)
├── [inherited attributes]
├── FlowRate (PI Point reference)
├── Pressure_In (PI Point reference)
├── Pressure_Out (PI Point reference)
├── MotorCurrent (PI Point reference)
└── VibrationLevel (PI Point reference)Configuring a PI Point Data Reference
Attribute: FlowRate
Data Reference: PI Point
Configuration:
Server: PISERVER01
Tag Name: %Element%.FLOW_001
(uses element name substitution for reuse across instances)PI Analysis Service
Expression Analysis
// Calculate differential pressure
Attribute: DifferentialPressure
Expression: 'Pressure_In' - 'Pressure_Out'
Trigger: On Change
Output: Write to PI tag DP_001Rollup Analysis
// Sum flow across all pumps in an area
Rollup: TotalAreaFlow
Function: Sum
Source: All child elements with FlowRate attribute
Output: AREA_TOTAL_FLOW
Trigger: Periodic (every 1 minute)Event Frames
| Event Type | Trigger | Captured Data |
|---|---|---|
| Downtime | Equipment stopped | Duration, reason code, operator |
| Batch | Production run | Product, quantity, quality |
| Alarm | Threshold exceeded | Max value, duration, response |
| Maintenance | Work order created | Technician, work type, duration |
Performance Optimization
Scalability Guidelines
| Deployment Size | Elements | Analyses | Recommended Config |
|---|---|---|---|
| Small | < 10,000 | < 1,000 | Single AF Server |
| Medium | 10K-100K | 1K-10K | AF Server + Analysis Server |
| Large | > 100K | > 10K | AF Collective (HA) |
Hands-on Scenario: Condition-Based Monitoring
Step 1: Create Hierarchy
PumpStation_001
├── Pump_A (Centrifugal Pump Template)
│ ├── FlowRate → PUMP_A_FLOW
│ ├── Pressure_In → PUMP_A_PIN
│ ├── Pressure_Out → PUMP_A_POUT
│ ├── MotorCurrent → PUMP_A_AMPS
│ └── VibrationLevel → PUMP_A_VIB
└── Pump_B (same structure)Step 2: Create Analyses
Analysis 1: DifferentialPressure
Expression: 'Pressure_Out' - 'Pressure_In'
Output: PUMP_A_DP
Analysis 2: EfficiencyIndex
Expression: ('FlowRate' * 'DifferentialPressure') / ('MotorCurrent' * 0.746)
Output: PUMP_A_EFF
Analysis 3: VibrationAlert (Event Frame)
Start: 'VibrationLevel' > 8.5
End: 'VibrationLevel' < 7.0