Skip to content

Phase Template: tank-mix

Fill the mixing tank to a target level, agitate for the configured duration, and drain back to a target floor level. Use this phase for a self-contained mix operation on the 500 L mix tank. It gates every hand-off (fill, mix, drain) behind an operator confirmation prompt, making it safe to run attended without direct command access.

Where to find it

System endpointEquipment LibraryPhases → select tank-mix.

graph TD
    Start([initial]) --> OI[open-inlet]
    OI -->|"inlet.FB"| FL[filling]
    FL -->|"level >= fill_level"| CI[close-inlet]
    CI -->|"NOT inlet.FB"| CF[confirm-fill]
    CF -->|"prompt ack"| SA[start-agitator]
    SA -->|"agitator.POS >= 80% speed"| MX[mixing]
    MX -->|"mixing.T >= mix_duration"| STA[stop-agitator]
    STA -->|"agitator.POS < 2"| CM[confirm-mix]
    CM -->|"prompt ack"| OO[open-outlet]
    OO -->|"outlet.FB"| DR[draining]
    DR -->|"level <= drain_level"| CO[close-outlet]
    CO -->|"NOT outlet.FB"| CD[confirm-drain]
    CD -->|"prompt ack"| Done([complete])

See Phases for the diagram conventions.

What you see when it runs

Clicking the active phase on HMI endpointBatch Execution opens a detail panel with:

Element Meaning
Active step The current SFC step — the phase parks on confirm-fill, confirm-mix, and confirm-drain until an operator answers the prompt
Prompt When parked on a confirm step, a modal appears asking the operator to acknowledge before the phase advances
Parameters fill_level, agitator_speed, mix_duration, drain_level resolved from the recipe formula
Elapsed Step-elapsed timer — relevant during mixing

HMI screenshot pending

An annotated capture of a running tank-mix phase parked on a confirm prompt will be added here.

Parameters

Parameter Type Unit Range Default Required
fill_level REAL L 10-500 yes
agitator_speed REAL % 10-100 yes
mix_duration TIME 10s-10m yes
drain_level REAL L 0-50 5 no

TIME parameters take duration strings ("45s", "1m30s", "5m"), not bare numbers.

Required control modules

Role Module type Description
inlet_valve discrete-valve Tank inlet valve (on/off) for filling
outlet_valve discrete-valve Tank outlet valve (on/off) for draining
agitator analog-control Tank agitator
level_sensor analog-sensor Tank level measurement

Capability: mixing.

How it works

Each scan the SFC engine drives one active step. The chart has three segments with an operator-prompt gate between each:

  1. Fill: open-inlet commands the inlet open and waits for feedback, filling watches the level sensor until PV >= fill_level, then close-inlet closes the valve and waits for FB = FALSE.
  2. Operator confirm (confirm-fill): a PROMPT() writes to the phase's prompt channel. The transition holds until the operator responds on the phase detail panel.
  3. Mix: start-agitator writes agitator_speed to the agitator and waits for POS to reach 80 % of the setpoint, mixing holds for mix_duration, stop-agitator zeroes the agitator and waits for POS < 2.
  4. Operator confirm (confirm-mix): second prompt.
  5. Drain: open-outlet, draining watches the level sensor until PV <= drain_level, close-outlet.
  6. Operator confirm (confirm-drain): final prompt before complete.

This is a level-guard phase. The primary termination for fill and drain is a process measurement from the level sensor, and no timer backs it up. If the level sensor freezes, the phase hangs forever without a timeoutSeconds backstop. Pair with a hardware-limit alarm on the level sensor. See Phases § Level-guard phase.

Used in recipes

Try it

  1. HMI endpointBatch Execution+ Newsim-tank-blend-m1Start
  2. Expand the procedural tree until the mix step becomes active on mix-tank-1
  3. Watch the level sensor climb as the inlet opens. The phase pauses on confirm-fill when the level reaches fill_level
  4. Respond to the prompt on the phase detail panel — the phase advances to start-agitator and the agitator ramps up
  5. Watch the mix duration tick down, respond to the next prompt, then watch the drain and respond to the final prompt