# Feature gaps — driver-side limitations and decisions Cross-driver registry of known capability gaps, the workaround we ship, and whether the gap is on the roadmap. Each row links to the driver-specific deep-dive document. Closed entries stay in the table for traceability — they are not deleted, only marked. | # | Driver | Gap | Status | Workaround / decision | Roadmap | Reference | |---|--------|-----|--------|-----------------------|---------|-----------| | 1 | S7 | **Optimized DB / S7Plus** — S7netplus speaks classic S7comm only and cannot read S7-1200 / S7-1500 DBs that have "Optimized block access" checked (the TIA Portal V14+ default). Absolute-offset reads against an Optimized DB return `BadDeviceFailure`. | **Decided — Track 1 + Track 3 (closed by [#304](https://github.com/dohertj2/lmxopcua/issues/304))** | **Track 1 (docs):** operators uncheck "Optimized block access" in TIA Portal on every DB the driver reads, recompile, and download. **Track 3 (bridge):** for shops that won't or can't disable Optimized access, run an `OpcUaClient` driver instance against the S7-1500 V2.5+ CPU's onboard OPC UA server (Siemens runtime OPC UA license required). | **Track 2 (custom S7Plus library) is out of scope** unless a customer funds the ≥4-week initial implementation plus ongoing protocol-revision maintenance. Sharp7 / Snap7Net don't help — they are also classic-S7comm-only. | [`docs/v2/s7.md` § Optimized DB constraint](v2/s7.md#optimized-db-constraint-s7plus) · [`docs/drivers/OpcUaClient.md`](drivers/OpcUaClient.md) | ## How to read this table - **Status** is one of `Open` (work pending), `Decided` (architectural decision made; docs reflect it; no code change planned), or `Closed` (delivered). - **Roadmap** captures whether the gap is funded for the next phase. A blank cell means "no roadmap; doc-only outcome." - The numeric **#** is stable — new rows append at the bottom and keep their number across deletions/edits so cross-references survive.