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 at commission time so operators never type it — the create call returns it, whether initiated from the CLI or the API - a display name
- a reference to its device type and version
- the controller its tags are acquired from (
ctl_…) — required by 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)
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.)
Hand-register an instance with the CLI (csy):
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.SpeedSP--controller 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.
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 resolves through the mapping to Program:DamTransfer.Pump1.Speed, fetches the value over the edge PLC path, and returns it stamped with the unit and data type from the type definition. 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.