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 endpoint → Equipment Library → Phases → select filter-wash.
graph TD
Start([initial]) --> OF[open_filtrate<br/>cycle_count := 0]
OF -->|"filtrate.FB"| SV[start_vacuum]
SV -->|"vacuum.POS >= 80%"| OW[open_wash<br/>++cycle_count]
OW -->|"wash.FB"| WS[washing]
WS -->|"T >= wash_volume_time"| CW[close_wash]
CW -->|"NOT wash.FB"| DW[drain_wash]
DW -->|"flow < 0.5"| CK{check_cycles}
CK -.->|"cycle_count < wash_cycles<br/>priority 0 (loop)"| OW
CK -->|"cycle_count >= 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_wash → washing → close_wash → drain_wash → check_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:
open_filtrateopens the filtrate drain and zeroeswash_cycle_count.start_vacuumwritesvacuum_setpointand waits for the pump to ramp to 80 % of setpoint.open_washopens the wash valve and incrementswash_cycle_count. This is the per-cycle re-entry point.washingholds forwash_volume_time.close_washcloses the wash valve and waits forFB = FALSE.drain_washholds until filtrate flow drops below 0.5, which confirms the wash solvent has drained through.check_cyclesis the loop decision step:priority 0(loop back toopen_wash) ifwash_cycle_count < wash_cyclespriority 1(exit todone) 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¶
- HMI endpoint → Batch Execution → + New →
sim-filter-dry-m1→ Start - Wait for the
washstep to activate onfilter-dryer-1 - Watch the active step cycle through
open_wash→washing→close_wash→drain_wash→check_cycles→ back toopen_washfor each wash iteration - Open Data endpoint → Trends on
filtrate_flow_sensor.PVto see the flow rise during wash and fall during drain