Skip to the content.

Process Logic Framework Implementation Summary

What Was Implemented

A comprehensive Process Logic Framework for NeqSim that enables coordinated, multi-step automation sequences for ESD, startup, shutdown, and general process control.

Core Components Created

1. Base Framework (neqsim.process.logic)

2. Action Implementations (neqsim.process.logic.action)

3. ESD Logic (neqsim.process.logic.esd)

4. Enhanced PushButton

5. Example

Key Benefits

1. Single Trigger, Multiple Actions

ESDLogic esdLogic = new ESDLogic("ESD Level 1");
esdLogic.addAction(new TripValveAction(esdValve), 0.0);      // Immediate
esdLogic.addAction(new ActivateBlowdownAction(bdValve), 0.5); // After 0.5s
esdLogic.addAction(new SetSplitterAction(splitter, factors), 0.0);

PushButton button = new PushButton("ESD-PB-101");
button.linkToLogic(esdLogic); // One button, three coordinated actions!

2. Reusable Logic Sequences

Define once, use across multiple simulations:

// Create standard startup sequence
StartupLogic standardStartup = createStandardStartup();

// Use in multiple simulations
processSystem1.addLogic(standardStartup);
processSystem2.addLogic(standardStartup.clone());

3. Clear Separation of Concerns

4. Configurable Timing

esdLogic.addAction(action1, 0.0);   // Execute immediately
esdLogic.addAction(action2, 2.0);   // Wait 2 seconds
esdLogic.addAction(action3, 0.5);   // Wait additional 0.5 seconds

5. Future Extensibility

Easy to add:

Usage Pattern

Basic ESD Sequence

// 1. Create equipment
ESDValve esdValve = new ESDValve("ESD-XV-101", stream);
BlowdownValve bdValve = new BlowdownValve("BD-101", stream);
Splitter splitter = new Splitter("Splitter", stream, 2);

// 2. Create logic sequence
ESDLogic esdLogic = new ESDLogic("ESD Level 1");
esdLogic.addAction(new TripValveAction(esdValve), 0.0);
esdLogic.addAction(new ActivateBlowdownAction(bdValve), 0.5);
esdLogic.addAction(new SetSplitterAction(splitter, new double[]{0.0, 1.0}), 0.0);

// 3. Link to trigger
PushButton esdButton = new PushButton("ESD-PB-101");
esdButton.linkToLogic(esdLogic);

// 4. Execute in simulation
esdButton.push(); // Activates logic

while (!esdLogic.isComplete()) {
  esdLogic.execute(timeStep);
  equipment.runTransient(timeStep, id);
}

Architecture Diagram

┌─────────────────┐
│  Push Button    │ ──triggers──┐
└─────────────────┘             │
                                ▼
┌─────────────────────────────────────────┐
│         ProcessLogic (ESDLogic)         │
│  ┌────────────────────────────────────┐ │
│  │ Step 1: Trip ESD Valve (delay 0s) │ │──executes──▶ ESDValve.trip()
│  └────────────────────────────────────┘ │
│  ┌─────────────────────────────────────┐│
│  │ Step 2: Open BD Valve (delay 0.5s) ││──executes──▶ BlowdownValve.activate()
│  └─────────────────────────────────────┘│
│  ┌─────────────────────────────────────┐│
│  │ Step 3: Set Splitter (delay 0.0s)  ││──executes──▶ Splitter.setSplitFactors()
│  └─────────────────────────────────────┘│
└─────────────────────────────────────────┘

Future Enhancements

Phase 1: Conditions (Next Priority)

public interface LogicCondition {
  boolean evaluate();
  String getDescription();
}

// Example usage:
startupLogic.addStep("Open valve")
    .addAction(new OpenValveAction(valve))
    .addPrecondition(new PressureCondition(separator, "<", 5.0, "bara"))
    .addCompletionCondition(new ValvePositionCondition(valve, ">", 95.0));

Phase 2: Startup/Shutdown Logic

StartupLogic startup = new StartupLogic("Separator Train Startup");
startup.addStep("Pre-checks").addPermissive(/* ... */);
startup.addStep("Open isolation").addAction(/* ... */);
startup.addStep("Ramp up flow").addAction(/* ... */);
startup.enableAutoProgression(); // Automatic step advancement

Phase 3: Advanced Features

Comparison: Before vs After

Before (Manual Coordination)

esdButton.push();           // Activates BD valve only
esdValve.trip();           // Manual call
gasSplitter.setSplitFactors(new double[]{0.0, 1.0}); // Manual call
// Timing not coordinated, easy to forget steps

After (Logic Framework)

esdButton.push();  // Activates entire coordinated sequence
// All steps executed in correct order with proper timing
// Nothing forgotten, fully documented in logic sequence

Industry Standards Alignment

IEC 61511 (Functional Safety)

IEC 61131-3 (PLC Programming)

ISA-88 (Batch Control)

Files Created

Core Framework

Actions

ESD Implementation

Examples

Documentation

Modified Files

Testing Recommendations

  1. Unit Tests for Actions
    • Test each action independently
    • Mock equipment for isolation
  2. Integration Tests for Logic
    • Test complete ESD sequences
    • Verify timing accuracy
    • Test failure modes
  3. Example Tests
    • Run ESDLogicExample and verify output
    • Compare with manual coordination
    • Performance benchmarking

Conclusion

The Process Logic Framework provides a powerful, extensible foundation for implementing complex automation in NeqSim. It:

  1. Simplifies complex multi-step operations
  2. Coordinates timing between equipment actions
  3. Documents operational sequences clearly
  4. Reuses logic across simulations
  5. Extends easily to new use cases (startup, batch, etc.)

The framework follows industry standards and best practices while maintaining NeqSim’s existing architecture and design patterns.