Tower lamp logic maps machine states to lamps: green for running, amber for ready or manual, red for a fault, with flashing red and the buzzer for a new unacknowledged fault. A flashing bit from a timer pair (or a BLINK block) drives the flash, Silence acknowledges the fault and stops the buzzer, and a lamp test input turns everything on.
- Agree one colour scheme for the plant and document it
- Flash = needs attention; steady = known state
- Silence stops the buzzer but not the red lamp
- Lamp test finds blown bulbs before an operator misses a fault
Colours mean different things in different plants. The scheme below follows common practice in line with IEC 60204-1 indicator colours: red for emergency/fault, amber (yellow) for abnormal or attention, green for normal running. Agree it with the customer before programming.
Step 1: Define the State-to-Lamp Table
| Machine state | Green | Amber | Red | Buzzer |
|---|---|---|---|---|
| Running in auto | ON | off | off | off |
| Auto, ready, not running | off | ON | off | off |
| Manual mode | off | FLASH | off | off |
| New fault, not acknowledged | off | off | FLASH | ON |
| Fault acknowledged, still active | off | off | ON | off |
| Lamp test pressed | ON | ON | ON | ON |
Step 2: Build the Flash Bit and Lamp Rungs
(* 1 Hz flash bit from two TONs *)
T_FlashOn(IN := NOT T_FlashOff.Q, PT := T#500ms);
T_FlashOff(IN := T_FlashOn.Q, PT := T#500ms);
Flash_1Hz := T_FlashOn.Q;Tower lamp simulator
Switch Auto and Running, then trigger a fault: red flashes and the buzzer sounds until Silence. Clear the fault, try Manual (Auto off) and the lamp test.
Green contact = passing power. Orange moving wire = rung is true and the output is energised.
Step 3: Silence, Acknowledge and Lamp Test
| Function | Logic | Result |
|---|---|---|
| New fault detection | Rising edge of Any_Alarm (R_TRIG) → SET Unack | Every new fault sounds the buzzer once more |
| Silence | DI_Silence_PB → RESET Unack | Buzzer off, red goes steady |
| Fault cleared and reset | Any_Alarm FALSE → RESET Unack | Red off |
| Lamp test | DI_Lamp_Test_PB ORed into every lamp output | All lamps (and buzzer briefly) on |
| Amber flash in manual | Sts_Manual_Mode AND Flash_1Hz | Operator sees the machine is not in auto |
Step 4: Test the Tower Lamp
| ID | Check | How to check | Pass criterion | Result |
|---|---|---|---|---|
| Tower lamp tests | ||||
| L-01 | Lamp test | Press lamp test | All segments and buzzer on | |
| L-02 | Running | Start in auto | Green steady | |
| L-03 | New fault | Trip MPCB | Red flashing, buzzer on | |
| L-04 | Silence | Press silence | Buzzer off, red steady | |
| L-05 | Manual | Select manual | Amber flashing | |
Practice Exercise
Add a blue lamp for “waiting for material” (auto, running allowed, no part at entry for 30 s). Decide its priority against amber and add it to the state table first.
Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
| Lamp flickers instead of flashing | Flash bit written twice or timer instance shared | One flash generator, separate instances |
| Buzzer will not stop | Silence resets but rising edge retriggers every scan | Use R_TRIG on Any_Alarm, not the level |
| Lamp test does nothing on one colour | Lamp test not ORed into that output | Add the parallel contact |
| Red stays on after reset | Another alarm still active | Check HMI_Alarm_Word |
Frequently asked questions
What do tower lamp colours mean on a machine?
Commonly green = running normally, amber/yellow = attention or abnormal (ready, manual, warning), red = fault or emergency. Confirm the plant standard before programming.
How do I make a lamp flash in an ABB PLC?
Create a flash bit with two TON timers that restart each other, or a BLINK block from the utility library, and AND it with the lamp condition.
What is the difference between silence and reset?
Silence acknowledges the alarm and stops the buzzer. Reset clears the alarm once the fault has gone.
Why add a lamp test?
A failed lamp hides a fault. Lamp test turns all lamps on so a blown lamp is found during routine checks.