Engineering · PLC · Project 12 of 15 · Process and level · Level 2
Bottle filling station
Place a bottle, press START, the valve opens for 3 seconds and a DONE lamp lights until you remove the bottle.

You will learn
SET and RESET coils: DONE is switched on by one rung and only cleared by another. This is another way to remember an event, and it is the form used in alarm and batch programs.
How it works
- Click the bottle to place it under the nozzle.
- Press START. The valve opens for 3 s and the bottle fills.
- DONE lights. Remove the bottle to clear it.
In real life
Bottling lines, dosing machines, sauce and oil fillers.
Inputs, outputs and addresses
The same signals on seven PLC brands. Inputs and outputs are numbered in order; check your own hardware and software, because addresses depend on the model and module position.
| Name | What it is | Type | Siemens S7-1200 | Allen-Bradley CompactLogix | Mitsubishi iQ-F FX5U | Delta DVP / AS | Omron CP2E | Schneider M241 | Inovance H5U |
|---|---|---|---|---|---|---|---|---|---|
| START | START push-button | Input | %I0.0 | Local:1:I.Data.0 | X0 | X0 | 0.00 | %IX0.0 | X0 |
| STOP | STOP push-button (N.C.) | Input | %I0.1 | Local:1:I.Data.1 | X1 | X1 | 0.01 | %IX0.1 | X1 |
| BOTTLE | Bottle present sensor | Input | %I0.2 | Local:1:I.Data.2 | X2 | X2 | 0.02 | %IX0.2 | X2 |
| VALVE | Filling valve | Output | %Q0.0 | Local:2:O.Data.0 | Y0 | Y0 | 100.00 | %QX0.0 | Y0 |
| DONE | Done lamp | Output | %Q0.1 | Local:2:O.Data.1 | Y1 | Y1 | 100.01 | %QX0.1 | Y1 |
Ladder diagram (shown for Siemens, live state)
Green wires carry power in the moment captured below. Switch the brand and the language in the simulator.
Structured text, Siemens SCL
(* Siemens S7-1200, CPU 1214C DC/DC/DC - TIA Portal - SCL *)
(* Rung 1: Fill while the bottle is present *)
"FILLING" := ("START" OR "FILLING") AND "STOP" AND "BOTTLE" AND NOT "DONE";
(* Rung 2: Fill time (3 s) *)
"T1"(IN := "FILLING", PT := T#3s);
(* Rung 3: Open the valve *)
"VALVE" := "FILLING";
(* Rung 4: Set DONE when the time is up *)
IF "T1".Q THEN "DONE" := TRUE; END_IF;
(* Rung 5: Clear DONE when the bottle is removed *)
IF NOT "BOTTLE" THEN "DONE" := FALSE; END_IF;Structured text, Allen-Bradley
(* Allen-Bradley CompactLogix 5069 (L306ER) - Studio 5000 Logix Designer - Structured Text *)
(* Rung 1: Fill while the bottle is present *)
FILLING := (START OR FILLING) AND STOP AND BOTTLE AND NOT DONE;
(* Rung 2: Fill time (3 s) *)
Timer1.PRE := 3000; (* ms *)
Timer1.TimerEnable := FILLING;
TONR(Timer1);
(* Rung 3: Open the valve *)
VALVE := FILLING;
(* Rung 4: Set DONE when the time is up *)
IF Timer1.DN THEN DONE := TRUE; END_IF;
(* Rung 5: Clear DONE when the bottle is removed *)
IF NOT BOTTLE THEN DONE := FALSE; END_IF;Try this
- Remove the bottle in the middle of filling to see the valve stop.
- Change the time to 5 s.
Parts to buy
The links open a search on each store, so you see what is in stock today. Check the model, voltage and price before you order.
This is a learning tool. It teaches the logic, not the exact keystrokes of each vendor’s software. Check the manual of your own PLC.