Phase Template: react¶
Execute a reaction hold: heat, agitate, hold at temperature, then cool. Use this phase whenever a recipe needs to drive the reactor jacket to a configurable output, spin the agitator, and hold the combination for the requested duration. It is the core reaction step of every riverbend reactor recipe.
Where to find it¶
System endpoint → Equipment Library → Phases → select react.
graph TD
Start([initial]) --> S1[start_reaction]
S1 -->|"start_reaction.T >= duration"| S2[cool_down]
S2 --> Done([done])
S1 -.->|"interlock: jacket PV > maxTemp"| SH[safe_hold]
S2 -.->|"interlock: jacket PV > maxTemp"| SH
See Phases for the diagram conventions.
What you see when it runs¶
Clicking the active phase on HMI endpoint → Batch Execution opens a detail panel with:
| Element | Meaning |
|---|---|
| Active step | start_reaction while heating and holding; cool_down during the final cooling moment; safe_hold if the over-temperature interlock trips |
| Parameters | jacketOutput, agitatorSpeed, duration, maxTemp resolved from the recipe formula |
| Bound modules | The concrete jacket_controller and agitator instances for this unit |
| Elapsed | Step-elapsed timer compared against duration |
Open a trend chart on the unit's temperature sensor, the jacket
CMD/POS, and the agitator CMD/POS to see the hold profile
evolve.
HMI screenshot pending
An annotated capture of a running react phase alongside the
temperature trend will be added here.
Parameters¶
| Parameter | Type | Unit | Range | Default | Required |
|---|---|---|---|---|---|
jacketOutput |
REAL | % | 0-100 | — | yes |
agitatorSpeed |
REAL | % | 0-100 | — | yes |
duration |
TIME | — | 30s-1h |
— | yes |
maxTemp |
REAL | degC | 0-200 | 120 |
no |
TIME parameters take duration strings ("45s", "1m30s", "5m"),
not bare numbers.
Required control modules¶
| Role | Module type | Description |
|---|---|---|
jacket_controller |
analog-control | Jacket heating/cooling control |
agitator |
analog-control | Reactor agitator |
Capability: reaction.
How it works¶
A linear timed phase. Each scan the SFC engine:
- Activates
start_reaction. The action ST writesjacketOutputtojacket_controller.CMDandagitatorSpeedtoagitator.CMD. - Holds on
start_reactionuntilstart_reaction.T >= duration. - Advances to
cool_down, which writes0tojacket_controller.CMD. The agitator is intentionally left running so operators can stop it explicitly in a later phase.
In parallel, two interlock transitions (marked interlock: true,
priority: -1 so they evaluate before the normal flow) guard both
start_reaction and cool_down. If the jacket temperature
(READ('jacket_controller.PV')) exceeds maxTemp, the SFC jumps to
safe_hold, which kills the heater and agitator and drops the phase
to a held state for operator intervention. This is a BPCS-level
protection layer. It is not an SIS function. See
Alarms and Interlocks for the distinction
and how it factors into protection-layer (PHA/LOPA) analysis.
This is a timed phase. The timer cannot detect a failed jacket or
a stuck agitator. Pair this phase with deviation alarms on the
jacket temperature (critical, since a silent heater failure wastes
the hold) and the agitator, plus a timeoutSeconds backstop on the
phase call.
See Phases § Timed phase.
Used in recipes¶
Try it¶
- HMI endpoint → Batch Execution → + New
- Choose
sim-reactor-heat-m1and create the batch - Click Start and wait for the procedural tree to reach the
reactstep - Expand the phase detail to see
start_reactionactive and the step-elapsed timer counting up - Open Data endpoint → Trends and chart reactor temperature,
jacket_controller.CMD,jacket_controller.POS,agitator.CMD, andagitator.POSon one view to see the ramp, hold, and shutoff