# Alias sets

> Named sets of channel names, one per product for example, applied to a unit beside its bindings or pinned to a procedure so that staging it applies them.

An **alias set** is a named column of channel names: for each channel of the model that a unit
may rename, the name that unit reads the channel under once the set is applied. It is the way a
whole unit is renamed in one gesture, for a product or a customer, instead of retyping every
alias. It lives under Process > Models > model > Setup > **Aliases**, and it needs the **Edit
recipes & evaluations** permission. An alias set is presentation only: the channel's own name
stays the key every artifact of the model references.

## The Aliases folder {#the-aliases-folder}

Selecting the **Aliases** row opens the folder page ("Named sets of channel names, one per product
for example. Applying a set to a unit renames its channels in one gesture, and a procedure may pin
one so that starting it applies the set.") with one card per set; clicking a card opens it and the
X removes it. With none, the page says "No alias sets yet. Add one to name this model's channels
for a product or a customer, then apply it to a unit beside its bindings."

| Command | What it does | Greyed when (situation) | Not drawn when (role) |
| --- | --- | --- | --- |
| **Alias set** (detail bar, folder selected; right-click **Add alias set**) | Adds `Alias set <n>` naming nothing yet, and selects it. | Any unit holds a run, or the runtime is stopped. | Without Edit recipes & evaluations. |

## The set's page {#the-sets-page}

The header carries the set's name and one pill counting what it renames: "1 channel named" or
"`<n>` channels named". A set that names nothing changes nothing when it is applied.

### Definition {#definition}

| Field | What it is | Values / default | Effect |
| --- | --- | --- | --- |
| **Name** | What the set is called in the tree, in the Apply picker on Channels and in a procedure's Alias set picker. | Free text, committed when you leave the field; `Alias set <n>` at creation. | Renames the tree row. |

### Channel names {#channel-names}

The card explains its own rule: "A blank alias leaves that channel on the name it already reads
under. Applying this set to a unit overwrites every alias of that unit, so what it does not name
goes back to the channel's own name." Under it stands a grid with one row per channel of the
model, in the model's channel order, so a channel is named at most once by construction.

| Column | What it is | Values / default |
| --- | --- | --- |
| **Channel** | The channel, as `Ch<number> · <name>`. | Read-only. |
| **Alias** | The name this set gives the channel. The placeholder shows the name the channel reads under on the model (its own alias, or its name). | Free text, committed when you leave the field; blank by default. Typing a name creates the entry; blanking it removes the entry, so the set stores only the channels you actually named. |

A channel the model keeps on one name (its **Allow unit alias** switch off on the Channels grid)
refuses the entry: the cell is disabled with the tooltip "This channel keeps one name for every
unit. Allow it to change per unit on the Channels grid first." A set is how a unit is renamed, so
it cannot be the way around that declaration.

## Who applies a set {#who-applies-a-set}

A set does nothing by itself. Two gestures apply it to a unit, and both are a full, visible
overwrite of that unit's per-unit aliases: every channel the set names takes the set's name (the
binding is created if the channel was still unbound), every renameable channel the set does not
name has its alias cleared and falls back to the channel's own name, and a channel the model keeps
on one name is left untouched either way.

| Gesture | Where | What happens |
| --- | --- | --- |
| **Apply** beside a unit's bindings | Definition > Channels: pick a unit in the units list; the set picker and **Apply** stand with that unit's binding table ("Apply a named set of channel names to the aliases above. Manual edits win until you re-apply."). See [Channels and bindings](process-channels#the-binding-table-of-the-picked-unit). | The set is written onto that unit's aliases at once and saved. Aliases you edit by hand afterwards stay until you apply a set again. |
| A procedure **pins** a set | Setup > Procedures: the **Name** stage of the procedure has an **Alias set** picker. | The pin is checked when the procedure is staged on a unit: if that unit's aliases already match the set, nothing is written; if they differ, the set is applied to the unit and saved as the procedure is staged, and the journal records "Alias set pinned: '`<set>`' applied to '`<model>` · `<unit>`' by staging '`<procedure>`'". Writing the set is a configuration change, so staging is refused while a unit is running, with "This procedure pins a channel alias set. Applying it changes configuration, which is locked while a unit is running.", and the unit keeps the procedure it had staged. If the set or the unit's aliases move afterwards, Start is refused with "The procedure's pinned alias set is not applied on this unit. Stage the procedure again." |

The procedure page's stage line reads "Renames `<n>` channels on the unit when this procedure is
staged on it", which names the moment the write happens, as above.

Both gestures are configuration writes: they refuse while any unit holds a run and while the
runtime is stopped, and the Apply button on Channels needs the Manage process permission that
screen requires.

## Where the alias shows {#where-the-alias-shows}

The name in force for a channel on a unit is one rule: the unit's own alias when the channel
allows one and the unit holds one, otherwise the channel's own alias, otherwise the channel's
name. An alias set only writes the first of the three.

| Surface | What it reads |
| --- | --- |
| The **Channels** card of a panel under Operate and on the View page | Each series is named by the name in force on that unit. |
| A resolved dashboard of the model | The `{channel.name:...}` token becomes the name in force (see [Dashboards of a model](process-dashboards)). |
| The run file | Start freezes the alias in force for every recorded column beside the channel's name and number. |
| The run's chart in Histories | Each column reads `Ch<number> · <alias>`, or the channel's name when no alias was in force. |
| The PDF report | The alias frozen in the run, or the channel's name when there was none. |
| The CSV and XLSX exports | The channel's name (with its engineering unit), never the alias. |
| Logic addresses, occurrence conditions | The channel's name. An alias never changes `Process.<Model>.<Unit>.Channels.<Channel>` or `Channels.<Channel>` in a condition. |

## Remove alias set {#remove-alias-set}

**Remove alias set** stands in the detail bar's danger cluster with the set selected, on its
right-click menu, and as the X on the folder page's card. It asks first ("Delete alias set", "This
removes the alias set and its entries."). A procedure that pinned the set empties its Alias set
reference; a unit the set was applied to keeps the aliases already written, because those are the
unit's own. It needs Edit recipes & evaluations and is greyed under the engineering lock and the
stopped runtime.

## What an alias set does not do {#what-an-alias-set-does-not-do}

- It renames no channel and no address. The model's channel names, the Logic address space, the
  occurrence conditions and the exports keep the channel's own name.
- It does not apply itself. Editing a set after it was applied changes nothing on any unit until
  the set is applied again, by hand or by starting a procedure that pins it.
- It cannot name a channel the model keeps on one name, and it cannot turn that switch on: that
  decision is the channel's, on the Channels grid.
- It writes nothing into a running unit: applying is a configuration write and waits for the
  engineering lock like every other one.
