Skip to content

Phase Template: filter-wash

Wash solvent through the filter cake to displace impurities. Use this phase between smooth-cake and vacuum-dry, or on its own for repeat washes. Supports multiple wash cycles. Each cycle opens the wash valve, pulls wash solvent through the cake under vacuum, and drains via the filtrate valve. Between cycles the filtrate flow sensor confirms the cake is still permeable.

Where to find it

System endpointEquipment LibraryPhases → select filter-wash.

graph TD
    Start([initial]) --> OF[open_filtrate<br/>cycle_count := 0]
    OF -->|"filtrate.FB"| SV[start_vacuum]
    SV -->|"vacuum.POS &gt;= 80%"| OW[open_wash<br/>++cycle_count]
    OW -->|"wash.FB"| WS[washing]
    WS -->|"T &gt;= wash_volume_time"| CW[close_wash]
    CW -->|"NOT wash.FB"| DW[drain_wash]
    DW -->|"flow &lt; 0.5"| CK{check_cycles}
    CK -.->|"cycle_count &lt; wash_cycles<br/>priority 0 (loop)"| OW
    CK -->|"cycle_count &gt;= wash_cycles<br/>priority 1"| Done([done])

See Phases for the diagram conventions. The dashed back-edge is the per-cycle loop.

What you see when it runs

Element Meaning
Active step Cycles through open_washwashingclose_washdrain_washcheck_cycles per iteration
Shared variables wash_cycle_count — visible on the phase detail
Parameters wash_volume_time, vacuum_setpoint, wash_cycles

HMI screenshot pending

An annotated capture of a running filter-wash phase mid-cycle will be added here.

Parameters

Parameter Type Unit Range Default Required
wash_volume_time TIME 30s-30m yes
vacuum_setpoint REAL % 10-100 yes
wash_cycles INT 1-5 1 no

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

Required control modules

Role Module type Description
wash_valve discrete-valve Wash solvent inlet valve
filtrate_valve discrete-valve Filtrate drain valve
vacuum_controller analog-control Vacuum pump controller
pressure_sensor analog-sensor Vessel headspace pressure
filtrate_flow_sensor analog-sensor Filtrate flow rate

Capability: washing.

How it works

Each scan the SFC engine:

  1. open_filtrate opens the filtrate drain and zeroes wash_cycle_count.
  2. start_vacuum writes vacuum_setpoint and waits for the pump to ramp to 80 % of setpoint.
  3. open_wash opens the wash valve and increments wash_cycle_count. This is the per-cycle re-entry point.
  4. washing holds for wash_volume_time.
  5. close_wash closes the wash valve and waits for FB = FALSE.
  6. drain_wash holds until filtrate flow drops below 0.5, which confirms the wash solvent has drained through.
  7. check_cycles is the loop decision step:
    • priority 0 (loop back to open_wash) if wash_cycle_count < wash_cycles
    • priority 1 (exit to done) when the count is met

This is a level-guard phase with a bounded-cycle loop. The wash_cycles parameter is itself the safety counter. An unreachable flow threshold would otherwise loop forever. Pair with hardware-limit alarms on filtrate flow and a timeoutSeconds backstop. See Phases § Level-guard phase.

Used in recipes

Try it

  1. HMI endpointBatch Execution+ Newsim-filter-dry-m1Start
  2. Wait for the wash step to activate on filter-dryer-1
  3. Watch the active step cycle through open_washwashingclose_washdrain_washcheck_cycles → back to open_wash for each wash iteration
  4. Open Data endpointTrends on filtrate_flow_sensor.PV to see the flow rise during wash and fall during drain