ISA-101-Compliant HMI (How-to Guide) applies to FrameworX, the ISA-101 consistent methodology for designing, building, and managing Human-Machine Interfaces (HMIs) in industrial automation. This guide implements ISA-101 principles within FrameworX displays, ensuring effective operator UI that enhance situational awareness and reduce human error.
Primary Purpose: Enable operators to maintain safe, efficient process control
Design Principles:
Process States (Not Alarms):
Alarm States (ISA-18.2 Aligned):
Background Standards:
Font Hierarchy:
Text Colors:
<!-- FrameworX Navigation Template -->
<NavigationBar>
<HomeButton target="Level1_Overview"/>
<Breadcrumb maxLevels="3"/>
<AreaSelector>
<Area name="Production" target="Level2_Production"/>
<Area name="Utilities" target="Level2_Utilities"/>
<Area name="Packaging" target="Level2_Packaging"/>
</AreaSelector>
<AlarmSummary visible="always"/>
</NavigationBar>
Bar Graphs: Primary method for analog values
Trend Sparklines:
State Display:
Faceplates:
[Tag Name]
PV: [####.#] [EU]
SP: [####.#] [EU]
OP: [###.#] %
Mode: [AUTO/MAN/CAS]
[Alarm Status]
Interaction Standards:
Embedded Alarm Indicators:
Alarm Summary Objects:
Priority | Area | Tag | Description | Value | Time
HIGH | UNIT-01 | TIC-1001 | Temperature High | 185°F | 14:23:45
MEDIUM | UNIT-02 | PIC-2001 | Pressure Deviation | 65 PSI | 14:22:10
Situation Awareness:
Display Effectiveness Metrics Dashboard:
<!-- Level 2 Control Display Template -->
<Display name="Level2_Template">
<Grid rows="12" columns="16">
<NavigationBar row="0" colspan="16"/>
<AlarmBanner row="1" colspan="16"/>
<ProcessArea row="2" rowspan="8" colspan="12"/>
<TrendArea row="2" rowspan="4" colspan="4"/>
<KPIPanel row="6" rowspan="4" colspan="4"/>
<ControlPanel row="10" rowspan="2" colspan="16"/>
</Grid>
</Display>
// Standard Pump Symbol
class PumpSymbol extends FrameworXSymbol {
properties = {
tagName: String,
state: ['Running', 'Stopped', 'Fault'],
mode: ['Auto', 'Manual', 'Maintenance']
};
render() {
return {
fill: this.state === 'Running' ? '#2D862D' : '#808080',
stroke: this.hasAlarm ? this.alarmColor : '#000000',
strokeWidth: this.hasAlarm ? 3 : 1,
animation: this.state === 'Fault' ? 'flash' : 'none'
};
}
}
{
"themes": {
"dayShift": {
"background": "#F0F0F0",
"text": "#000000",
"borders": "#808080"
},
"nightShift": {
"background": "#1A1A1A",
"text": "#E0E0E0",
"borders": "#606060"
}
}
}
Requirements Phase:
Design Phase:
Implementation Phase:
Operation Phase:
Version Control:
Testing Requirements:
? Use grayscale as default - Color only for abnormal conditions
? Implement consistent navigation - Same pattern across all displays
? Minimize animation - Static displays with emphasis on abnormal
? Group related information - Logical clustering of data
? Provide context - Show relationships between values
? Design for worst case - Test with maximum alarm load
? Color for normal states - Leads to rainbow displays
? 3D effects and gradients - Reduces clarity
? Excessive detail - Information overload
? Inconsistent symbols - Operator confusion
? Poor contrast - Readability issues
? Animation overuse - Distraction from critical information
-- Display Performance Query
SELECT
DisplayName,
AVG(LoadTime) as AvgLoadTime,
MAX(LoadTime) as MaxLoadTime,
COUNT(*) as AccessCount
FROM DisplayMetrics
WHERE Timestamp > DATEADD(day, -7, GETDATE())
GROUP BY DisplayName
HAVING AVG(LoadTime) > 2.0 -- Flag slow displays
Navigate to Displays → Themes
Configure Displays → Symbols
Setup Displays → Layouts
In Alarms → Global Settings:
Configure AlarmViewer control:
// Scripts → Tasks → DisplayMetrics
public void MonitorDisplayPerformance()
{
double loadTime = @Display.CurrentDisplay.LoadTime;
int objectCount = @Display.CurrentDisplay.DynamicObjects;
if (loadTime > 2.0 || objectCount > 200)
{
@Alarm.CustomMessage(
$"Display performance issue: {loadTime}s load, {objectCount} objects",
"Performance",
"Warning"
);
}
}
ISA-101 establishes a consistent methodology for designing, building, and managing Human-Machine Interfaces (HMIs) in industrial automation. This guide implements ISA-101 principles within FrameworX displays, ensuring effective operator UI that enhance situational awareness and reduce human error.
Process States (Not Alarms):
Running: #2D862D (Dark Green)
Stopped: #808080 (Gray)
Transition: #FFD700 (Yellow/Gold)
Manual Mode: #4169E1 (Blue)
Alarm States (ISA-18.2 Aligned):
Critical: #FF0000 (Red)
High: #FF8C00 (Orange)
Medium: #FFD700 (Yellow)
Low: #00BFFF (Cyan)
Suppressed: #9370DB (Purple)
Background Standards:
Level 1 Overview: #F0F0F0 (Light Gray)
Level 2 Control: #D3D3D3 (Medium Gray)
Level 3 Detail: #C0C0C0 (Darker Gray)
Level 4 Support: #F5F5F5 (Off-White)
Font Hierarchy:
Text Colors:
<!-- FrameworX Navigation Template -->
<NavigationBar>
<HomeButton target="Level1_Overview"/>
<Breadcrumb maxLevels="3"/>
<AreaSelector>
<Area name="Production" target="Level2_Production"/>
<Area name="Utilities" target="Level2_Utilities"/>
<Area name="Packaging" target="Level2_Packaging"/>
</AreaSelector>
<AlarmSummary visible="always"/>
</NavigationBar>
Bar Graphs: Primary method for analog values
Trend Sparklines:
Faceplates:
[Tag Name]
PV: [####.#] [EU]
SP: [####.#] [EU]
OP: [###.#] %
Mode: [AUTO/MAN/CAS]
[Alarm Status]
Interaction Standards:
Embedded Alarm Indicators:
Alarm Summary Objects:
Priority | Area | Tag | Description | Value | Time
HIGH | UNIT-01 | TIC-1001 | Temperature High | 185°F | 14:23:45
MEDIUM | UNIT-02 | PIC-2001 | Pressure Deviation | 65 PSI | 14:22:10
Situation Awareness:
Display Effectiveness:
Metrics Dashboard:
- Average time on display
- Click-through rates
- Error recovery time
- Alarm response time
<!-- Level 2 Control Display Template -->
<Display name="Level2_Template">
<Grid rows="12" columns="16">
<NavigationBar row="0" colspan="16"/>
<AlarmBanner row="1" colspan="16"/>
<ProcessArea row="2" rowspan="8" colspan="12"/>
<TrendArea row="2" rowspan="4" colspan="4"/>
<KPIPanel row="6" rowspan="4" colspan="4"/>
<ControlPanel row="10" rowspan="2" colspan="16"/>
</Grid>
</Display>
// Standard Pump Symbol
class PumpSymbol extends FrameworXSymbol {
properties = {
tagName: String,
state: ['Running', 'Stopped', 'Fault'],
mode: ['Auto', 'Manual', 'Maintenance']
};
render() {
return {
fill: this.state === 'Running' ? '#2D862D' : '#808080',
stroke: this.hasAlarm ? this.alarmColor : '#000000',
strokeWidth: this.hasAlarm ? 3 : 1,
animation: this.state === 'Fault' ? 'flash' : 'none'
};
}
}
{
"themes": {
"dayShift": {
"background": "#F0F0F0",
"text": "#000000",
"borders": "#808080"
},
"nightShift": {
"background": "#1A1A1A",
"text": "#E0E0E0",
"borders": "#606060"
}
}
}
Requirements Phase:
Design Phase:
Implementation Phase:
Operation Phase:
Version Control:
Testing Requirements:
? Use grayscale as default - Color only for abnormal conditions ? Implement consistent navigation - Same pattern across all displays ? Minimize animation - Static displays with emphasis on abnormal ? Group related information - Logical clustering of data ? Provide context - Show relationships between values ? Design for worst case - Test with maximum alarm load
? Color for normal states - Leads to rainbow displays ? 3D effects and gradients - Reduces clarity ? Excessive detail - Information overload ? Inconsistent symbols - Operator confusion ? Poor contrast - Readability issues ? Animation overuse - Distraction from critical information
-- Display Performance Query
SELECT
DisplayName,
AVG(LoadTime) as AvgLoadTime,
MAX(LoadTime) as MaxLoadTime,
COUNT(*) as AccessCount
FROM DisplayMetrics
WHERE Timestamp > DATEADD(day, -7, GETDATE())
GROUP BY DisplayName
HAVING AVG(LoadTime) > 2.0 -- Flag slow displays
ISA-101–Compliant HMI Design (Reference)
Where: under Industry Standards (Reference) (same place you list ISA-95, FDA 21 CFR 11, NERC-CIP, etc.).
From concept pages (Platform Overview → Technology & Architecture → Security & Compliance), link down to this Reference page; from UI tutorials (Operator UI Design), link sideways to it as background.
Page outline (bullets you can drop in)
Purpose
What ISA-101 is and why it matters for HMI design; who should read (HMI designers, control engineers, O&M).
Core principles
Display hierarchy (Level 1 Overview → Level 4 Support/Diagnostics).
Situational awareness; minimalism; color usage rules (alarm colors reserved; neutral palette).
Consistent navigation, typography, and symbol conventions.
Mapping ISA-101 to FrameworX
Display hierarchy in FrameworX: how to structure Overview/Area/Detail/Support pages; recommended naming.
Themes & color standards: using Displays → Themes to enforce palettes; alarm color reservations.
Symbols & templates: building a reusable symbol library; applying symbol wizards.
Alarms: configuring severities/states; AlarmViewer conventions (filters, duration, notes).
Trends & analysis: TrendChart behaviors (annotations, saved views) for operator investigations.
Units, localization & accessibility: Displays → Units Conversion / Localization guidelines.
Design patterns & examples
Example screen set: L1 overview, L2 area, L3 equipment detail, L4 diagnostics—what to show on each.
Navigation bar & alarm banner standards; KPI tiles; contextual trends.
Verification checklist
Palette applied site-wide; alarm colors reserved; max points per display; common widgets sized consistently; operator tasks ≤3 clicks from L1.
UX tests: alarm scenarios, trend drill-downs, legibility at typical viewing distances.
Related How-to Guides (link out)
Operator UI Design (Tutorials): Add Elements, Canvas Animations, Create Dashboards, Modify & Apply Symbols, TrendChart Properties.
Alarms Recipes (How-to): Alarm Areas, Notifications, History Filters.
References
High-Performance HMI resources; internal color/typography standard; symbol library.
Optional companion (Concepts)
If you want a short primer too, add “ISA-101 for FrameworX Designers (Concepts)” with a 1-page overview that points to the Reference above and to the UI How-to tutorials.