docs(opcua): note FB-7 surgical-shape reach (stable-FullName drivers only)
Live-verify finding: the surgical DataType/array path only fires for drivers whose TagConfig carries a stable top-level FullName (Galaxy/OpcUaClient). For protocol drivers (Modbus/S7/...), ExtractTagFullName falls back to the raw TagConfig blob, so a shape edit also mutates FullName → safe full-rebuild fallback. Comment-only.
This commit is contained in:
@@ -401,6 +401,12 @@ public sealed class AddressSpaceApplier
|
||||
// differences still fall through to a rebuild — FullName/DriverInstanceId re-route the node to a different
|
||||
// driver point, Name re-derives the NodeId, and an alarm flip turns the node into a Part 9 condition. The
|
||||
// override-unequal default also covers any future field.
|
||||
// REACH (live-verified FB-7): the shape path only fires for drivers whose TagConfig carries a stable
|
||||
// top-level "FullName" (Galaxy = tag_name.AttributeName; OpcUaClient = the node id) — there a DataType/array
|
||||
// edit leaves FullName untouched ⇒ surgical. For structured-TagConfig protocol drivers (Modbus/S7/AbCip/…)
|
||||
// AddressSpaceComposer.ExtractTagFullName falls back to the RAW TagConfig blob as FullName, so a DataType/
|
||||
// array edit also mutates that blob ⇒ FullName differs ⇒ this returns false ⇒ full rebuild. That is the
|
||||
// correct safe default (a protocol driver's subscription needs re-spawning for a new shape anyway).
|
||||
private static bool TagDeltaIsSurgicalEligible(AddressSpacePlan.EquipmentTagDelta d) =>
|
||||
d.Previous.Alarm is null && d.Current.Alarm is null &&
|
||||
(d.Previous with
|
||||
|
||||
Reference in New Issue
Block a user