System values
Built-in values like program state and override, usable by name with no tag to declare.
Some things about a controller are always true of every controller — which
program is selected, whether the robot is running, the speed override. These are
available as system values, and they need no tag. Use one by name in any
expression or label: {active_program}, {robot_running}.
Bind a control to one the same way: they appear in every tag picker under
System values, separate from the tags you defined. Read-only ones are
offered only where reading makes sense — a slider is offered override and not
robot_running.
The Tags panel lists the ones a document uses, under System values in use.
The names are reserved: a tag cannot be called override or active_program.
A document made with an older version may have a tag of kind SYS for one of
these. It still works, and Validate flags it for deleting — the name reads the
same value without it.
Available values
Section titled “Available values”| Value | What it holds | Writable |
|---|---|---|
active_program |
The program the controller currently has selected. | yes |
override |
Speed override, as a percentage. | yes |
program_state |
What the selected program is doing. | no |
robot_running |
Whether a program is executing. | no |
tp_enabled |
Whether the teach pendant is enabled. | no |
estop_op |
Operator panel emergency stop. | no |
estop_tp |
Teach pendant emergency stop. | no |
faulted |
Whether the controller has an active fault. | no |
step_mode |
Whether single-step mode is on. | no |
error_code |
The current alarm as a number; 0 after a reset. |
no |
alarm_message |
The current alarm’s text, as the pendant shows it. Empty after a reset. | no |
uframe_num |
The user frame the robot is in; 0 is WORLD. |
no |
utool_num |
The tool frame the robot is in. | no |
current_routine |
The program the robot is executing right now, a called subprogram included. Empty when nothing is running. | no |
current_line |
The line the robot is on, counted within current_routine; 0 when nothing is running. |
no |
date |
Today’s date from the controller clock, as 2026-09-15. |
no |
time |
The time of day from the controller clock, as 14:05:30. |
no |
clock |
The controller clock as one packed number. Use date and time instead. |
no |
Writing active_program changes the controller’s selection, and writing
override changes the speed. The rest are read-only.
uframe_num and utool_num are read-only on purpose. Both are selections a TP
program or the operator makes, and writing one from a screen changes the frame
the robot actually moves in — a decision worth making deliberately rather than
as a side effect of a slider someone dragged.
Date and time
Section titled “Date and time”{date} and {time} in a label show the controller’s clock:
{date} {time}To show them another way, add a format in double quotes after a |:
{date | "MM/dd/yyyy"}{time | "h:mm a"}{date | "MMM d, yyyy HH:mm"}Both names read the same clock, so a format on date can include the time
and one on time can include the date.
The format is made of these, for 2:05:30 PM on September 5, 2026:
| Part | Tokens |
|---|---|
| Year | yyyy 2026, yy 26 |
| Month | MM 09, M 9, MMM Sep |
| Day | dd 05, d 5 |
| Hour | HH 14, H 14 in 24-hour time; hh 02, h 2 in 12-hour time |
| Minute | mm 05, m 5 |
| Second | ss 30, s 30 |
| AM/PM | a PM |
Any other character is shown as typed. Keep words outside the braces, since a
letter from the table inside the format is a token: Updated {time | "HH:mm"}
rather than {time | "Updated HH:mm"}. Month names and AM/PM come from the
document’s language.
The clock is the controller’s, set on the pendant under System > Clock. It updates every few seconds on the screen, and the seconds are even: the controller stores time in two-second steps.
Common uses
Section titled “Common uses”Gate a Start button on the cell being safe and a program being selected:
{active_program} != "" && !{estop_op}Show a warning banner while the pendant is enabled, since the robot will not run in automatic while it is:
{tp_enabled}Put the selected program in a label so an operator can see what is about to run:
Ready to run {active_program}Show a recovery button only while there is something to recover from. Give a button a Run program action naming the recovery program, and set its Visible when to:
{faulted} || {program_state} == "ABORTED"faulted is the controller’s FAULT lamp: on while any fault is active, off
once it is reset. It is the same check a Run program action makes before
starting, so a button hidden by {faulted} never shows while a run would be
refused for that reason.
Warn that a Start will run one line at a time, so an operator does not read a stopped robot as a fault:
{step_mode}Show a control only for one alarm. The code is the facility number times
1000 plus the alarm number, so SRVO-001 is 11001 and SYST-045 is 24045. It is
set for alarms that do not light the FAULT lamp too, and goes back to 0 on
reset:
{error_code} == 11001Put the alarm’s text in a label. It is the same line the pendant shows,
SRVO-001 Operator panel E-stop, and it covers controller alarms only: an
alarm defined in the Alarms panel shows in the
banner, not here:
{alarm_message}Show where a program is, the way the pendant’s status line does. While
MAIN is inside a call to PICK_PART, active_program stays MAIN,
current_routine is PICK_PART, and current_line is the line within
PICK_PART, not the line of the call in MAIN:
{current_routine} line {current_line}Show which frame a job is set up for, so an operator can see at a glance that the wrong one is active:
UFRAME[{uframe_num}] / UTOOL[{utool_num}]Related
Section titled “Related”- Expressions — the syntax these are used in.
- Program control — reads
active_programwithout you naming it. - Dropdown — bind one to
active_programto change the selected program.