Skip to main content
Version: Next

Running screens

This page explains where a saved screen runs, how operators move between screens, and what changes with the user's role, a lost connection or a replay. It is for operators and for engineers deciding how a station will be set up.

Operators always see the saved screen. Unsaved work in the editor is visible only in its preview; see Screen designer.

Two places to run a screen​

PlaceURLWhat it is
Inside the dashboard/hmi and /hmi/<slug>The screen beside the dashboard navigation. The Screens group in the rail lists each pinned screen, All screens (/hmi, pinned screens first, then every screen by folder) and, for engineers, Editor.
App view/app and /app/<slug>A full-window viewer with its own compact header, for a station that shows nothing else. The browser tab title becomes <screen name> — scadex.

Both need a signed-in session; the app view redirects to /login otherwise. Any signed-in user can open any screen by name, whatever role they have: roles only shape menus and what a widget may do.

Screens whose Used as is Faceplate popup or Template, and screens that declare parameters, are parts. They are left out of both lists and of the screen picker; they appear only embedded in another screen or as a popup.

Slugs​

A screen is addressed by the slug of its name: lower case, spaces replaced by -, everything except a-z, 0-9 and - removed, repeated - collapsed. Pump station overview is /hmi/pump-station-overview. Renaming a screen changes its address; an old link then shows "This screen isn't available" with a link back to the list.

The dashboard viewer​

/hmi/<slug> shows the screen name, its folder and an Example badge for example content. Its header offers:

  • Size: Fit or Actual size, remembered per browser. The choice is hidden when the screen's In the viewer setting is Stretch, and a screen set to Always fit scales regardless.
  • Edit (engineers and administrators) opens the screen in the editor.
  • Full screen opens the same screen, with the same parameters, in the app view.

The app view​

/app is a picker: the pinned screens (the default marked Default) and then all screens. If the user's or the gateway's open on launch setting is on, /app goes straight to the user's start screen; a start screen whose view was deleted is skipped. See Start screens.

/app/<slug> runs the screen under a header with:

  • Back to the previous screen, and the screen name, which opens a searchable list of all screens grouped by folder.
  • The pinned-screens switcher (shown once the user can see two or more start screens).
  • An Example data badge for example screens, and a View only badge when the user's role cannot write tags.
  • A connection pill: Connected, Connecting, Reconnecting or Offline, and a clock.
  • Fit to window or 100% (unless the screen stretches), Full screen (F11 toggles the page's own full-screen mode), Edit this screen (engineers), and Leave to the dashboard.

Under the header, an alarm strip and, when the connection is lost, a connection notice; then the screen.

A Navigate action, or a script returning a navigate directive, names the target by screen id or by name; a name is matched exactly or by slug. Navigation stays where it started: a screen opened inside the dashboard navigates to /hmi/<slug>, one in the app view to /app/<slug>.

Parameters passed on navigation​

A navigate action can carry parameters, usually tag-path references for a screen that declares parameters. They travel in the address as ?p=, a base64-encoded JSON object such as {"motor":"Plant.Line1.M101"}. The target screen substitutes them into its tag paths before subscribing. A link with ?p= can therefore be bookmarked or opened in the app view with Full screen.

Popups​

An Open popup action, or a script returning an openPopup directive, opens another screen in a movable window over the current one. The popup's size is the action's width and height, otherwise the target screen's own size, otherwise 640 × 480. It opens centered; its title bar drags it, and a title parameter replaces the screen name in that bar. Close, or Esc, closes it; a modal popup also dims the screen and closes when the backdrop is clicked. Opening a popup that is already open for the same screen and parameters closes it instead, so a symbol's click toggles its faceplate. Details are in Templates and popups.

Live values​

The viewer subscribes to every tag a screen references, including tags inside embedded templates and tags used by actions, over the /sync WebSocket, and redraws in batches of 80 ms rather than once per value. The list of screens with their components is fetched once and kept for 30 seconds, so moving between screens does not reload the whole set; a save from this browser refreshes it at once, another person's save shows within that time.

Connection loss​

When /sync drops, the connection pill turns to Reconnecting and after 20 seconds to Offline; a notice says since when values stopped updating and that commands cannot be sent. Every value on the screen is marked stale until the link returns, and controls that write are disabled while the link is down.

Viewers and operators​

Writing a tag from a screen needs the operator role or higher. The viewer role sees the same screen with these differences:

  • The header shows View only.
  • A write is refused in the browser with "Your role can read this value but not change it." An event list that contains Write tag, Toggle tag or Set variable does not run at all for a role that cannot write; screen-level open, close and timer lists follow the same rule.
  • Command and setpoint widgets, and an editable field, stop accepting input when the role cannot write, when the connection is down, or when the value's quality is lost.

Engineers and administrators get an Edit button on top of what operators see. See Users and roles.

Replay​

The dashboard's replay runs per browser. While it is on, every tag subscription is given the replayed value instead of the live one, so screens show the plant as it was at the replayed moment, and the alarms shown are the replayed ones. Writes, screen scripts and alarm actions are refused: the gateway refuses tag.write and screen.event while the socket is in a replay, the client refuses writes locally with "Replay is on. Return to live to change values.", and each refusal is shown as a toast. Diagnostic @gateway tags keep their live values, except @gateway.time, which follows the replay. See History and replay.

Alarm strip​

Both viewers render an alarm strip directly under the header, above any connection notice. It lists every active or acknowledged alarm, the most severe first (then the most recent), with an acknowledge control, and disappears when there are none. A screen can also place an Alarm summary widget, optionally limited to tags under one path.

Screen-level events​

A screen's open list runs when the screen mounts, close when it unmounts, and timer every timerMs milliseconds (default 5000, floor 250). A timer tick is skipped, not queued, while the previous one is still running or the socket is disconnected.