Tags
Name a robot signal once and reuse it across every control.
A tag is a name for one robot signal. Instead of every control referring to
DO[5], you declare a tag called clamp_closed once and controls refer to that.
When a signal moves to a different address, changing the tag updates every control that refers to it.
Tags live in the document, so a document carries its own bindings — export it, import it on another controller, and the names come with it.
Signal kinds
Section titled “Signal kinds”| Kind | What it is | Direction |
|---|---|---|
DI / DO |
Digital input / output | read / write |
RI / RO |
Robot input / output | read / write |
AI / AO |
Analog input / output | read / write |
GI / GO |
Group input / output | read / write |
F |
Flag | write |
R |
Numeric register | write |
SR |
String register | write |
TIMER |
TP timer, in seconds | read |
LPOS |
Cartesian position component — X, Y, Z, W, P, R | read |
JPOS |
Joint position component — J1 to J6 | read |
SYS |
A system value from a fixed list. See System values. | mixed |
KAREL |
A variable inside a KAREL program, by program and variable name. See KAREL variables. | read / write |
LOCAL |
A scratch value that lives only in the HMI and never reaches the controller | write |
Adding tags
Section titled “Adding tags”- Open the Tags panel and press + Add tag.
- Choose the kind and index —
DOand5forDO[5]. - Give it a name. A new tag is named after its signal (
DO[5]becomesdo_5) so it is never nameless; rename it to what the signal does.
Names are what labels interpolate and what expressions reference.
What a name may contain
Section titled “What a name may contain”Letters, digits and underscores, starting with a letter or an underscore:
part_present, do_5, Cycle2.
Spaces, &, - and other punctuation are not accepted. A name has to be usable
as {name} in label text, and a name with a space in it cannot be — the
placeholder would appear on the screen exactly as written.
A document written before this rule can still contain such a name. It keeps working for bindings, and the Validation panel reports it.
KAREL variables
Section titled “KAREL variables”A KAREL tag reads and writes a variable inside a KAREL program. Instead of
an index it takes three things:
- Program — the KAREL program that owns the variable.
- Variable — the variable’s name.
- Type — INT, REAL or STRING. The tag’s declaration decides how the variable is read and written, so it must match the declaration in the KAREL source.
With a controller connected, both fields are pickers — the programs and their variables are listed, and picking a variable fills in its type. Type a name… switches to a text field for an array element or structure field, or when authoring away from the cell.
Both names use letters, digits and underscores, starting with a letter or an
underscore. The variable must be declared at program level in the KAREL
program — a routine-local variable cannot be reached. The variable is a path:
an array element by its subscript (byteval[1]) and structure fields by
dots (struct.array[1].foo[2].bar), as long as the value at the end of the
path is an INT, REAL or STRING. A whole array or structure cannot be read,
and a multi-dimensional subscript ([1,2]) is not supported. INT tags also
read SHORT and BYTE variables; the controller wraps an out-of-range write
to them silently (256 into a BYTE becomes 0), so Validation flags a button
value outside the variable’s range.
A tag whose program is not loaded on the controller, or whose variable does not exist or has never been assigned, reads as no value — controls show their empty state. When the editor is connected to the controller, the Validation panel checks each KAREL tag against it and reports a missing program, a missing variable, or a declared type that does not match the variable’s real one.
A STRING value written from a screen cannot contain &, %, +, =, ;
or characters outside ASCII, and is limited to 200 characters. A value longer
than the variable’s declared length is silently cut short — the
controller reports no error — so declare a STRING variable the screen writes
to at least as long as anything it will be sent; STRING[254] makes that
impossible to hit. Validation also checks a
button’s literal value against the variable: a value that is not a number
cannot be sent to an INT or REAL, and text longer than the variable’s
declared length is flagged before it ever runs.
Using a tag
Section titled “Using a tag”Bind a control to a tag in its Inspector, reference it in an expression as
{tag_name}, or interpolate it into a label the same way. The Tag button
beside label and expression fields inserts the braces for you — on the pendant
keyboard they are two pages deep.
A read-only kind cannot be a write target: the tag pickers for a slider, a number input or a button’s write action only offer tags that can actually be written.
Related
Section titled “Related”- Expressions — using tags in conditions.
- System values — controller values usable by name, with no tag to declare.
- USB import & export — moving tags between documents.