From a0f3f4ab89cc6975d37a0b6e9650af7b1a1248bb Mon Sep 17 00:00:00 2001 From: Joseph Doherty Date: Thu, 11 Jun 2026 15:14:09 -0400 Subject: [PATCH] docs(uns): document the equipment page tabs; repoint alarm-editing surface MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Update Uns.md to show Equipment as a leaf in the browse tree (Area → Line → Equipment), add the /uns/equipment/{id} page with its Details/Tags/Virtual Tags/Alarms tabs, and adjust the actions table and sub-sections accordingly. ScriptedAlarms.md and AlarmTracking.md required no changes — neither referenced the standalone /scripted-alarms editing page. --- docs/Uns.md | 50 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 33 insertions(+), 17 deletions(-) diff --git a/docs/Uns.md b/docs/Uns.md index 4c3ec1de..4fba23a3 100644 --- a/docs/Uns.md +++ b/docs/Uns.md @@ -8,16 +8,16 @@ global master tree. ## The tree -The page shows every layer of the UNS as one expandable tree: +The page shows every layer of the UNS as one expandable tree. Equipment is a +**leaf** in the tree — tags, virtual tags, and alarms live on a dedicated +equipment page, not inline: ``` Enterprise (read-only grouping — ServerCluster.Enterprise) └─ Site / Cluster (read-only grouping — a ServerCluster row) └─ Area (editable — UnsArea) └─ Line (editable — UnsLine) - └─ Equipment (editable — Equipment) - ├─ Tag (editable — equipment-bound Tag) - └─ Virtual tag (editable — VirtualTag) + └─ Equipment (leaf — Equipment; opens its own page) ``` **Enterprise and Site/Cluster are read-only here.** They are derived from @@ -31,27 +31,40 @@ equipment, the combined tag + virtual-tag count). ### Navigating -- **Expand all / Collapse all** toggle the structural levels. Equipment - nodes are left collapsed by Expand-all because their tags/virtual-tags are - **lazy-loaded** — they fetch on first expand (you'll see a brief spinner). +- **Expand all / Collapse all** toggle the structural levels. - **Filter by name** does a case-insensitive substring match on the names of a node's direct children. ## Creating and editing -Every editable row has inline actions; clicking one opens a modal: +Every editable row has inline actions: | Node | Actions | |---|---| | Cluster | **+ Area** | | Area | **+ Line**, Edit, Delete | | Line | **+ Equipment**, Edit, Delete | -| Equipment | **+ Tag**, **+ Virtual tag**, Edit, Delete | -| Tag / Virtual tag | Edit, Delete | +| Equipment | **Open**, Delete | A **+ Child** action pre-fills the parent for you (e.g. **+ Line** on an area opens the Line modal with that area already selected). Build a branch -top-down: Area → Line → Equipment → Tag / Virtual tag. +top-down: Area → Line → Equipment. Tags, virtual tags, and scripted alarms +are managed on the equipment page (see below). + +## Equipment page (`/uns/equipment/{id}`) + +Clicking **Open** on an Equipment row (or **+ Equipment** on a Line) navigates +to the equipment page. The page is organised into four tabs: + +| Tab | Content | +|---|---| +| **Details** | Equipment identity — name, description, OPC-40010 namespace fields, driver binding, and served-by cluster. (This is the former EquipmentModal, now a full page.) | +| **Tags** | Equipment-bound driver tags. Each tag uses the driver-typed config editor (same editors as before — Modbus, S7, AB CIP, etc.) with the same client-side validation. | +| **Virtual Tags** | Virtual tags driven by C# scripts. The inline Monaco script editor with Roslyn IntelliSense, completions, and live diagnostics is available here per tag. | +| **Alarms** | Scripted-alarm definitions bound to this equipment. Create, edit, or delete predicates here; the Monaco editor is available for each predicate script. | + +**"Add equipment"** under a Line uses the URL `/uns/equipment/new?lineId=...`, +pre-filling the parent line. Saving redirects to the new equipment's page. ### Served-by cluster @@ -63,10 +76,11 @@ it is simply `UnsArea.ClusterId`. ### Tags vs. Galaxy / SystemPlatform tags -Tags created here are **equipment-bound** and require a driver instance. -The driver list in the Tag modal is scoped to the equipment's cluster and to -drivers on an **Equipment-kind** namespace, so a driver-less equipment shows -no eligible drivers until you bind one (edit the equipment and pick a driver). +Tags created on the equipment page are **equipment-bound** and require a driver +instance. The driver list on the Tags tab is scoped to the equipment's cluster +and to drivers on an **Equipment-kind** namespace, so a driver-less equipment +shows no eligible drivers until you bind one (edit the equipment on the Details +tab and pick a driver). **Galaxy / AVEVA System Platform tags are not shown in this tree.** They hang off the driver's folder path and are auto-materialised from the Galaxy @@ -77,8 +91,9 @@ the live Galaxy hierarchy. ### Virtual tags A virtual tag is bound to an equipment and driven by a **script** (no driver). -Pick its script in the Virtual tag modal; the data type is chosen from the -standard OPC UA type list. +Add and edit virtual tags on the equipment page's **Virtual Tags** tab; the +data type is chosen from the standard OPC UA type list and the Monaco script +editor is available inline. ## Bulk import @@ -95,4 +110,5 @@ page) to push them into the running address space. - [Configuration.md](Configuration.md) — the underlying config entities. - [VirtualTags.md](VirtualTags.md) — the scripting/virtual-tag engine. +- [ScriptedAlarms.md](ScriptedAlarms.md) — scripted-alarm engine internals (predicates, state machine, ack/shelve). - Design + decision log: [plans/2026-06-08-global-uns-management-design.md](plans/2026-06-08-global-uns-management-design.md).