Instances & Commissioning
A device type is a reusable template — a signal surface, state machine, alarms, commands and UI declared once and published in a library. It carries no site-specific wiring. A device instance is what you get when you stamp that type into a real plant: a named asset at a site, whose canonical tags are mapped to actual controller tag paths.
This page covers stamping an instance, mapping its tags, the commissioning workflow designed to guard the model’s integrity, and how AI assists the workflow without ever commissioning on its own.
From type to instance
Section titled “From type to instance”Stamping a type into a site creates a DeviceInstance — the canonical process-model object. It carries the device’s stable identity and place in the plant, and is deliberately thin:
- a stable instance id (
dev_…with a Crockford-base32 suffix, e.g.dev_7H2K9P4M), generated by Consystence when the instance is created, so operators never type it — the create call returns it, whether the instance is added on the web, through the API or with the CLI - a display name
- a reference to its device type and version
- the controller its tags are acquired from (
ctl_…) — required by the web form and the CLI, validated against the site’s controller model - the
AssetNumber— the operator-facing tag for the physical asset (e.g.PP-01) - location (site code, optional area)
- relationships in the process graph (powered-by, feeds, isolates, monitors)
A device can also be placed in the site’s equipment hierarchy. A placed device takes its area from its place, and the web console’s plant-model navigator shows the hierarchy, read-only; each device’s faceplate and engineering page show where it sits.
The instance id is stable across an asset swap: replace the physical pump and the DeviceInstance — its identity, history and place in the process model — survives. (Asset-specific metadata such as vendor, model and serial is designed to separate into a DeviceInstanceProfile sibling; that separation is planned, so for now asset metadata travels on the instance configuration.)
Add an instance on the web: open the site’s Devices list and choose Add device. You can also create one through the API. The csy CLI does the same; CLI access is arranged through a beta engagement:
csy instance create \ --site dam-pump-station \ --name "Dam Transfer Pump 1" \ --type consystence.pump.centrifugal \ --type-version 1.0.0 \ --asset-number PP-01 \ --controller ctl_7Q4W9K2M \ --area "Transfer" \ --tag Running=Program:DamTransfer.Pump1.Running \ --tag Speed=Program:DamTransfer.Pump1.Speed \ --tag SpeedSetpoint=Program:DamTransfer.Pump1.SpeedSPThe controller (--controller, or the form’s Controller field) is required: every device is assigned to a controller (ctl_…) declared in the site’s controller model — see the engineering model — and that assignment determines how the device’s tags are acquired and where reads and writes execute.
csy instance list --site dam-pump-stationcsy instance get --site dam-pump-station dev_7H2K9P4MCreating instances is an admin operation on the site surface (/api/sites/{siteId}/instances), so it requires the admin or owner org role — see roles and the API reference. On a site server, the Add device page also admits a user signed in by site PIN whose site role is owner, admin, site admin or engineer.
Tag mappings
Section titled “Tag mappings”A type declares canonical tag names (Running, Speed, SpeedSetpoint) with their dataType (Bool/Int/DInt/Real/String), access (Read/Write/ReadWrite), physicalRole (Input/Output/Internal/System) and engineering metadata. An instance’s tagMappings bind each canonical name to a real path in the controller’s address space:
tagMappings: # canonical name → controller path Running: "Program:DamTransfer.Pump1.Running" Speed: "Program:DamTransfer.Pump1.Speed" FlowRate: "Program:DamTransfer.FT001.PV" SpeedSetpoint: "Program:DamTransfer.Pump1.SpeedSP"The mapping is the only place the vendor-specific address surfaces — everything above it (alarms, commands, UI, AI context) speaks the canonical names. A read of dev_7H2K9P4M/Speed returns the instance’s current value for Speed, with its quality and timestamp. That value is kept current from Program:DamTransfer.Pump1.Speed on the controller, which is read through an edge (see controller communication). The data type, access and physicalRole come from the type, not the mapping — see tags for what each carries.
The commissioning lifecycle
Section titled “The commissioning lifecycle”Consystence defines a lifecycle for instances, from declaration through to running control.
Every mapped path should resolve to a data point in the authoritative tag register the controller exposes (built from its modules and a full tag browse — see the engineering model). Confirming the signal surface against the register — rather than against a proposal — is what keeps the model tractable for alarms, P&ID bindings, AI context and the historian. The target lifecycle:
flowchart LR
D["Declared<br/>DeviceInstance exists<br/>no tag mappings yet"] --> C["Configured<br/>type stamped<br/>tag mappings declared"]
C --> V{"Mappings resolve to<br/>controller data points?"}
V -- "no — fix mapping" --> C
V -- "yes — deploy & start control" --> O["Operational<br/>alarms · historian · AI live"]
- Declared — the engineer has surveyed the site and added the device to the process model. The
DeviceInstanceexists and is visible, but has no confirmed control wiring. Not operational, not simulatable. - Configured — the type is stamped and
tagMappingsare declared. The device’s control behaviour is described (modelled as aDeviceControlInstance), but it is not yet running. - Operational — control is deployed to its target topology and started; real or simulated inputs now produce live state. Confirming the mappings against the register is the engineering discipline that precedes this step.
Commissioning is done device by device, mirroring physical commissioning: the engineer reviews each device’s mappings, corrects exceptions, and confirms.
AI-assisted generation and commissioning
Section titled “AI-assisted generation and commissioning”On first connect to a controller, the platform is designed to use AI to accelerate the engineering work that precedes commissioning. The designed pipeline:
- Connect controller — read identity, firmware and the backplane slot map.
- Enumerate modules — read each module’s identity, channel count and channel types; propose module profiles. High confidence, because hardware identity is deterministic.
- Build the tag register — full tag browse, so every tag has physical context (which module and channel it originates from).
- Propose device types and instances — read the program structure (AOI/UDT usage) and configuration values, and propose a signal surface, state machine, config and candidate
tagMappings. Each proposed mapping is confidence-scored, and uncertain mappings are flagged. - Commission — the engineer reviews proposals per device, bulk-approves the high-confidence mappings, corrects the flagged exceptions, confirms the tag mappings against the register, and marks the device commissioned.
Where to next
Section titled “Where to next”- Type system — the reusable template you stamp from.
- Tags — data types, access and
physicalRolethat an instance’s mappings bind to. - Engineering model — controller → module → channel → tag register that mappings resolve against.
- Alarms & commands — the alarm and command surfaces an instance carries.
- Simulation — running a device’s behaviour against the same instance before, or instead of, real IO.