diff --git a/docs/drivers/MTConnect.md b/docs/drivers/MTConnect.md index 1a8921d5..e29d226b 100644 --- a/docs/drivers/MTConnect.md +++ b/docs/drivers/MTConnect.md @@ -94,6 +94,19 @@ request/response handshake — is a different mechanism and remains deferred; se | `IRediscoverable` | watches the Agent's `Header.instanceId` | No consumer wires it today — see [Known limitations](#known-limitations) | | `IAlarmSource` | CONDITION observations off the same `/sample` pump → Part 9 transitions keyed by the alarm tag's RawPath | Opt-in per raw tag (`alarm` object) — see [CONDITION alarms](#condition-alarms-626) | +### Feature status at a glance (#613) + +| Feature | Status | Detail | +|---------|--------|--------| +| SAMPLE / EVENT / CONDITION values | **Supported** | EVENT values are Strings carrying the Agent's own word | +| CONDITION as native Part 9 alarms (#626) | **Supported, opt-in** per raw tag via the `alarm` object | [CONDITION alarms](#condition-alarms-626) | +| `TIME_SERIES` arrays (#627) | **Supported** as variable-length `double[]` (Float64 tags only) | [TIME_SERIES arrays](#time_series-arrays-627) | +| One Agent client per driver, one `/raw` Device (#628) | **Enforced** (`MTConnectMultipleDevices` deploy error); multi-device Agents use several driver instances | [Known limitations](#known-limitations) | +| Write-back (`IWritable`) | **Supported, off by default** (`Write.Enabled` + Agent `AllowPut`) | [Write-back](#write-back--observation-injection-off-by-default) | +| EVENT controlled vocabularies as OPC UA enumerations | **Not supported** (stay String); not scheduled | See [Deferred](#deferred-not-in-this-build) | +| `DATA_SET` / `TABLE` representations | **Not supported** - read as `BadNotSupported` | [Quality mapping](#quality-mapping) | +| MTConnect Interfaces, SHDR ingest | Not built | [Deferred](#deferred-not-in-this-build) | + **`IReadable.ReadAsync` is never called by the running server.** The production data plane is entirely `ISubscribable` — `DriverInstanceActor` subscribes once and lives off `OnDataChange`. `ReadAsync` exists for the @@ -469,7 +482,7 @@ and records a state only when an alarm handler was attached to receive it. Conse re-subscribe; that is a host-wide gap shared with every native source.) - An alarm-only driver (no value tags) still runs the `/sample` pump. -**EVENT controlled vocabularies as OPC UA enumerations — won't fix.** EVENT values (`Execution`, +**EVENT controlled vocabularies as OPC UA enumerations — not built (parked, low priority).** EVENT values (`Execution`, `ControllerMode`, …) stay Strings carrying the Agent's own word; an enumeration would need a per-type vocabulary table that vendors extend freely. @@ -571,7 +584,9 @@ for anything beyond values-and-conditions. - **P1.5 fast-follow** (design [§9](../plans/2026-07-15-mtconnect-driver-design.md#9-phasing--effort)): CONDITION → native Part 9 alarms **shipped** (#626, see [CONDITION alarms](#condition-alarms-626)); EVENT - controlled-vocabulary values → OPC UA enumerations is **won't-fix**. + controlled-vocabulary values → OPC UA enumerations is **not built** (EVENTs stay Strings), and + structured `DATA_SET`/`TABLE` observations stay `BadNotSupported`; both are tracked as a low-priority + follow-up, not part of P1.5. - **P2 (on demand): SHDR adapter ingest.** A `SourceMode: "Agent" | "Shdr"` switch that opens the raw pipe-delimited SHDR TCP socket directly. Loses auto-discovery (no device model without an Agent in front, so