Skip to the content.

NeqSim Alarm System Configuration Guide

Overview

The NeqSim alarm system provides a comprehensive framework for monitoring process variables and managing alarm states throughout the lifecycle of process operations. This guide demonstrates how to configure and handle alarms in a consistent and easy way.

Key Components

1. AlarmConfig (Builder Pattern)

Configure alarms using the fluent builder pattern:

AlarmConfig pressureAlarmConfig = AlarmConfig.builder()
    .lowLowLimit(10.0)        // LOLO alarm threshold
    .lowLimit(20.0)           // LO alarm threshold
    .highLimit(80.0)          // HI alarm threshold
    .highHighLimit(90.0)      // HIHI alarm threshold
    .deadband(2.0)            // Deadband to prevent chattering
    .delay(3.0)               // Time delay before activation (seconds)
    .unit("bara")             // Engineering unit
    .build();

2. Alarm Levels

Four standard alarm levels aligned with ISA-18.2:

3. ProcessAlarmManager

Centralized coordinator for all process alarms:

ProcessAlarmManager alarmManager = new ProcessAlarmManager();

// Register measurement devices
alarmManager.register(pressureTransmitter);
alarmManager.register(temperatureTransmitter);
alarmManager.register(flowTransmitter);

// Evaluate alarms during simulation
double measuredValue = transmitter.getMeasuredValue();
List<AlarmEvent> events = alarmManager.evaluateMeasurement(
    transmitter, measuredValue, dt, currentTime);

// Acknowledge all active alarms
List<AlarmEvent> ackEvents = alarmManager.acknowledgeAll(currentTime);

// Get active alarms
List<AlarmStatusSnapshot> activeAlarms = alarmManager.getActiveAlarms();

// Get complete alarm history
List<AlarmEvent> history = alarmManager.getHistory();

Alarm Configuration Examples

Pressure Alarms

PressureTransmitter pt = new PressureTransmitter("PT-101", stream);

AlarmConfig pressureAlarms = AlarmConfig.builder()
    .highLimit(55.0)          // HI: 55 bara
    .highHighLimit(58.0)      // HIHI: 58 bara
    .deadband(1.0)            // 1 bara deadband
    .delay(2.0)               // 2 second delay
    .unit("bara")
    .build();

pt.setAlarmConfig(pressureAlarms);
alarmManager.register(pt);

Temperature Alarms

TemperatureTransmitter tt = new TemperatureTransmitter("TT-101", stream);

AlarmConfig tempAlarms = AlarmConfig.builder()
    .highLimit(45.0)          // HI: 45°C
    .highHighLimit(60.0)      // HIHI: 60°C
    .deadband(2.0)            // 2°C deadband
    .delay(5.0)               // 5 second delay (slower response)
    .unit("C")
    .build();

tt.setAlarmConfig(tempAlarms);
alarmManager.register(tt);

Flow Alarms (with Low Limits)

FlowTransmitter ft = new FlowTransmitter("FT-201", stream);

AlarmConfig flowAlarms = AlarmConfig.builder()
    .lowLowLimit(100.0)       // LOLO: 100 kg/hr
    .lowLimit(500.0)          // LO: 500 kg/hr
    .highLimit(20000.0)       // HI: 20000 kg/hr
    .deadband(50.0)           // 50 kg/hr deadband
    .delay(3.0)               // 3 second delay
    .unit("kg/hr")
    .build();

ft.setAlarmConfig(flowAlarms);
alarmManager.register(ft);

Level Alarms (Full Range)

LevelTransmitter lt = new LevelTransmitter("LT-101", separator);

AlarmConfig levelAlarms = AlarmConfig.builder()
    .lowLowLimit(15.0)        // LOLO: 15%
    .lowLimit(30.0)           // LO: 30%
    .highLimit(75.0)          // HI: 75%
    .highHighLimit(90.0)      // HIHI: 90%
    .deadband(2.0)            // 2% deadband
    .delay(4.0)               // 4 second delay
    .unit("%")
    .build();

lt.setAlarmConfig(levelAlarms);
alarmManager.register(lt);

Alarm Event Handling

Event Types

Three types of alarm events:

  1. ACTIVATED: Alarm becomes active
  2. CLEARED: Alarm returns to normal
  3. ACKNOWLEDGED: Operator acknowledges the alarm

Processing Alarm Events

List<AlarmEvent> events = alarmManager.evaluateMeasurement(
    transmitter, measuredValue, dt, time);

for (AlarmEvent event : events) {
    switch (event.getType()) {
        case ACTIVATED:
            System.out.println("⚠ ALARM: " + event.getSource() + 
                              " " + event.getLevel() + 
                              " at " + event.getValue());
            // Trigger operator notification
            // Log to SCADA system
            break;
            
        case CLEARED:
            System.out.println("✓ CLEARED: " + event.getSource() + 
                              " " + event.getLevel());
            // Log clearance
            break;
            
        case ACKNOWLEDGED:
            System.out.println("✋ ACKNOWLEDGED: " + event.getSource());
            // Update alarm display
            break;
    }
}

Alarm Status Monitoring

Get Active Alarms

List<AlarmStatusSnapshot> activeAlarms = alarmManager.getActiveAlarms();

System.out.println("Active Alarms: " + activeAlarms.size());
for (AlarmStatusSnapshot alarm : activeAlarms) {
    String status = alarm.isAcknowledged() ? "[ACK]" : "[NEW]";
    System.out.println(status + " " + 
                      alarm.getLevel() + " - " + 
                      alarm.getSource() + ": " + 
                      alarm.getValue());
}

Alarm History

List<AlarmEvent> history = alarmManager.getHistory();

// Count events by type
long activations = history.stream()
    .filter(e -> e.getType() == AlarmEventType.ACTIVATED)
    .count();
    
long clearances = history.stream()
    .filter(e -> e.getType() == AlarmEventType.CLEARED)
    .count();
    
long acknowledged = history.stream()
    .filter(e -> e.getType() == AlarmEventType.ACKNOWLEDGED)
    .count();

Integration with Safety Logic

Alarm-Triggered ESD

Alarms can be integrated with ESD logic to trigger automatic actions:

// Monitor pressure alarms
List<AlarmEvent> events = alarmManager.evaluateMeasurement(
    pressureTransmitter, pressure, dt, time);

// Check for HIHI alarm activation
for (AlarmEvent event : events) {
    if (event.getType() == AlarmEventType.ACTIVATED && 
        event.getLevel() == AlarmLevel.HIHI) {
        // Trigger ESD logic
        esdLogic.activate();
        System.out.println("ESD triggered by HIHI pressure alarm");
    }
}

Best Practices

1. Alarm Configuration

2. Alarm Priorities

3. Alarm Management

4. Safety Integration

Example Application

See ProcessLogicWithAlarmsExample.java for a complete demonstration showing:

Architecture Diagram

┌─────────────────────────────────────────────────────────────┐
│                 ProcessAlarmManager                         │
│  - Centralized alarm coordination                           │
│  - Alarm history tracking                                   │
│  - Active alarm monitoring                                  │
└────────────────────┬────────────────────────────────────────┘
                     │
        ┌────────────┼────────────┬────────────┐
        │            │            │            │
┌───────▼──────┐ ┌──▼──────┐ ┌──▼──────┐ ┌──▼──────┐
│ Pressure TX  │ │ Temp TX │ │ Flow TX │ │Level TX │
├──────────────┤ ├─────────┤ ├─────────┤ ├─────────┤
│ AlarmConfig  │ │AlarmCfg │ │AlarmCfg │ │AlarmCfg │
│ - HI: 55     │ │- HI: 45 │ │- LO:500 │ │- HI: 75 │
│ - HIHI: 58   │ │-HIHI:60 │ │-LOLO:100│ │-HIHI:90 │
│ - Deadband:1 │ │-Dband:2 │ │-HI:20000│ │- LO: 30 │
│ - Delay: 2s  │ │-Delay:5s│ │-Dband:50│ │-LOLO:15 │
└──────────────┘ └─────────┘ └─────────┘ └─────────┘
        │            │            │            │
        └────────────┴────────────┴────────────┘
                     │
        ┌────────────▼────────────────┐
        │     AlarmEvent Stream       │
        │  - ACTIVATED                │
        │  - CLEARED                  │
        │  - ACKNOWLEDGED             │
        └────────────┬────────────────┘
                     │
        ┌────────────▼────────────────┐
        │  Integration Points         │
        │  - ESD Logic Triggers       │
        │  - SCADA Display            │
        │  - Historian Logging        │
        │  - Operator Notifications   │
        └─────────────────────────────┘

Summary

The NeqSim alarm system provides:

Consistent Configuration: Builder pattern for all alarm types
Flexible Limits: Support for LOLO, LO, HI, HIHI levels
Smart Behavior: Deadband and delay to prevent nuisance alarms
Centralized Management: ProcessAlarmManager for system-wide coordination
Event Tracking: Complete lifecycle from activation to acknowledgement
Safety Integration: Seamless connection to ESD and control logic

This framework enables reliable process monitoring with minimal code complexity while maintaining industrial alarm management best practices.