One indicator can show green for inactive, red for active and unacknowledged, yellow for active and acknowledged. Use a multi-state object only when its input carries three distinct values; with the usual two bits, layer a green base under an overlay driven by alarm-on visibility and acknowledgment color.
One indicator can show all three alarm states on one row: green when the alarm is inactive, red when it is active and unacknowledged, yellow when it is active and acknowledged. A single multi-state object does this only when the tag feeding it carries three distinct values. With what most panels expose, an alarm-on bit and an acknowledgment bit, build the row as two layers: a green static base carrying the alarm description, and an overlay whose visibility follows the alarm-on bit and whose color follows the acknowledgment bit. The state logic comes from the ISA-18 alarm standard, the build is five steps, and a four-transition test tells you it works before the shift sees it.
The two questions behind the three colors
Alarm practice asks two independent questions about every alarm. Is the condition present? Has the operator acknowledged it? ANSI/ISA-18.2, the standard for alarm systems in the process industries, builds its alarm state model on those two questions and treats alarms as a managed lifecycle from definition through performance monitoring. HMI documentation across platforms uses the same pairs of words: active and inactive for the condition, acknowledged and unacknowledged for the operator's response.
Your colors answer both questions at once. Green: condition absent. Red: condition present, no acknowledgment yet. Yellow: condition present, acknowledged. Two tags carry everything the row needs.
A common convention flashes the red while the alarm is unacknowledged, then holds a steady color once acknowledged. Use the flash if your editor has that property; where it has none, the steady colors carry the same information, because the color change itself encodes the acknowledgment.
One process note: acknowledgment records that an operator saw the alarm. The corrective action is still a separate job.
What you need on the panel
Two Boolean tags per alarm:
- Alarm-on: 1 while the alarm condition is present, 0 when it clears. This comes from the machine program.
- Acknowledgment status: 0 until an operator acknowledges, 1 after. This comes from the panel's acknowledgment action or the alarm system's status word.
Plus, per alarm row:
- One static shape set to green, sized to the indicator area.
- One text element with the alarm description. Size it for where the operator stands: at an 8 ft read, using the safer planning figure of 20 ft of viewing distance per inch of capital height, that is 8 ÷ 20 = 0.4 in capitals. Where the description wraps to a second line, keep line spacing at 1.7 times the capital height.
- One dynamic indicator or light placed over the green area, with a visibility property and at least two appearances.
Check the polarity of the acknowledgment tag before you assign colors. Some projects expose 1 as acknowledged, others expose the opposite sense on a similarly named tag. Wire the colors to the meaning, then verify against the panel's live values.
Build the row in five steps
- Place the static green shape and set its color. Put the description text on it or beside it, never under the area the overlay will cover.
- Place the dynamic indicator in the same rectangle, in front of the green base.
- Bind the overlay's visibility to the alarm-on tag: hidden at 0, visible at 1. This is the same binding used to gate a button on a PLC bit.
- Drive the overlay's appearance from the acknowledgment tag: red at 0, yellow at 1. Editors with state-dependent appearance do this on one object.
- Group the layers and the text so the row moves as one, and name the group after the alarm.
The green base shows whenever the overlay is hidden, so the inactive state needs no binding at all.
The logic in one table
| Alarm-on | Acknowledged | What the row shows |
|---|---|---|
| 0 | 0 | Green base, overlay hidden |
| 0 | 1 | Green base, overlay hidden |
| 1 | 0 | Overlay visible, red |
| 1 | 1 | Overlay visible, yellow |
Both inactive rows show green. The acknowledgment tag only matters while the alarm is on, and that is exactly the three states you set out to display.
Example scenario: one low-coolant alarm, two bits to one value
This is the second route, for editors where one object is preferred. The case is one machine alarm, a low coolant level, shown on a single row an operator reads from 6 ft. The inputs:
- Alarm-on bit: 1 while the level switch is below its trip point, 0 above it. Source: the machine program. In this scenario the tank level sits at 40 mm of a 150 mm tank, below the 50 mm trip point, so the alarm-on bit reads 1.
- Acknowledgment bit: 0 until the operator presses the row's acknowledge button, 1 after. Source: the panel's acknowledgment action. In this scenario it still reads 0.
- Operator read distance: 6 ft. At the safer planning figure of 20 ft per inch of capital height, that is 6 ÷ 20 = 0.3 in capitals for the description text.
The rule: combine the two bits into one integer, value = 2 × alarm-on + ack. The multiplier on alarm-on keeps the active states numerically apart from the inactive states.
Arithmetic for this scenario's live condition and the other three:
- Current condition, active and unacknowledged: 2 × 1 + 0 = 2. The indicator shows red in 0.3 in of accompanying text.
- Inactive: 2 × 0 + 0 = 0. The indicator shows green.
- Active, acknowledged: 2 × 1 + 1 = 3. The indicator shows yellow.
The fourth combination, inactive with the acknowledgment flag still set, gives 2 × 0 + 1 = 1. Map both 0 and 1 to green.
Result: with the tank at 40 mm and no acknowledgment, one multi-state indicator with value 0 mapped to green, 1 to green, 2 to red and 3 to yellow shows red on this row from a single object, and the text reads cleanly from 6 ft.
Decision: compute this value in the machine program or in a script the panel runs, and the single object works. When the panel sees only the raw bits, the layered build needs no computation, which makes it the default choice.
Check it worked: four transitions in order
Toggling the alarm-on bit alone exercises two states out of three. Walk the full sequence and watch the color and the text together:
- With the alarm inactive, the row is green and the description reads cleanly.
- Activate the alarm and leave it unacknowledged: the overlay appears red.
- Acknowledge while the condition is still present: the overlay turns yellow, and the text stays visible.
- Clear the condition: the row returns to green and the overlay hides.
Run the cycle twice. A color that survives step 4 points at the visibility binding or at an acknowledgment flag that latched; check those two bindings before touching the colors. The wording of the description is its own task: see operator text in alarms.
The fourth state you are choosing not to show
When a condition clears while the alarm is still unacknowledged, fuller alarm models hold a separate cleared-and-unacknowledged state, and alarm systems document that transition from active to cleared. Your three-color row shows green for it, because the condition is gone. For a machine row indicator that is the common choice, and it matches the three states you set out to display.
If your plant wants operators to acknowledge an alarm after it has cleared, put that rule in the alarm summary, where alarm table colors and historic records already follow the state logic, and keep the row at three colors. When these events also need a history, log alarms to a circular event buffer on the controller side.
What this row is for
This build is an operator row: it belongs on the screen where a person stands, reads and acknowledges. A board the whole floor reads from across the aisle is a different job with different sizes; see factory status display or operator HMI for where each one wins.
Two maintenance rules. First, record in the project documentation which tag is alarm-on and which is acknowledgment, next to the row's name. Second, keep the three colors. A red and green two-state light drops the acknowledgment distinction, and the operator who acknowledged a standing alarm loses the yellow that said so.
Recommendation: build the green base plus one overlay, visibility on the alarm-on bit and color on the acknowledgment bit, whenever the panel gives you only the two bits. Compute 2 × alarm-on + ack in the machine program when you want a single multi-state object. Ship the row only after all four transitions pass on the panel, twice.
Questions
Can one multi-state indicator show all three alarm states?
Yes, when the tag feeding it carries distinct values for each state. Compute 2 × alarm-on + ack in the machine program: 0 is inactive, 2 is active and unacknowledged, 3 is active and acknowledged, and value 1, an inactive alarm with the acknowledgment flag still set, also maps to green. When the panel sees only the alarm-on bit, use the layered build instead.
Does acknowledging an alarm clear it?
No. Acknowledgment records that an operator has seen the alarm; the condition can still be present. On this row the color goes from red to yellow at acknowledgment and returns to green only when the alarm condition itself clears. The corrective action is separate from both.
What should the row show when the alarm clears before anyone acknowledges it?
Green. The condition is gone, so the row returns to its inactive state. Fuller alarm models keep a separate cleared-and-unacknowledged state, and plants that require acknowledgment after clearing handle it in the alarm summary, not in the row indicator. Decide that rule once for the plant and keep the row at three colors.
Should the unacknowledged color flash?
Flashing red while unacknowledged is a common convention and it helps on panels with many rows. Use it if the editor has a flash property. Where there is none, steady red and yellow carry the same information, because the color change, not the flash, is what encodes acknowledgment.
Why one overlay instead of three objects switched by a script?
Two bindings, no runtime logic. The overlay's visibility is one tag and its appearance is one tag, and the green base needs no binding. Three mutually exclusive objects need three visibility conditions that must stay in step, and a panel update between two of them can show two colors at once.
Planning information, not legal or engineering advice. Rules differ by place: check codes and permits with your local authority and your licensed trades.