Condition child nodes carry the condition type's ns=0 NodeIds (direct Read hits the type node) #629

Closed
opened 2026-10-08 09:21:55 -04:00 by dohertj2 · 1 comment
Owner

Found while landing the #597/#599 alarm work (W4). The Part 9 condition nodes the server materialises have child nodes (for example UnshelveTime, i=9189) that carry the condition type's own ns=0 NodeIds instead of NodeIds unique to the instance. A direct Read of such a child therefore reaches the type node (or the wrong node), not the condition instance's value. Event delivery and the Part 9 method calls were not observed to be affected.

Sources: OtOpcUaNodeManager.cs (condition materialisation, UnshelveTime projection added in #597); ConditionMethodEventTests.

  • Reproduce: Read a condition child (e.g. <condition>/ShelvingState/UnshelveTime) directly and show which node answers
  • Assign instance-scoped NodeIds to every condition child in the namespace (or confirm the SDK's pattern and why it does not here)
  • Confirm browse/translate of the child paths return the instance ids
  • Over-the-wire test: Read of a child returns the condition instance's value (an ALLOW test; a type-node answer must fail it)
  • Check alarm clients (ScadaBridge) are not relying on the type ids

Filed 2026-10-08 by the hardware-available issue sweep.

Found while landing the #597/#599 alarm work (W4). The Part 9 condition nodes the server materialises have child nodes (for example `UnshelveTime`, i=9189) that carry the **condition type's own ns=0 NodeIds** instead of NodeIds unique to the instance. A direct Read of such a child therefore reaches the type node (or the wrong node), not the condition instance's value. Event delivery and the Part 9 method calls were not observed to be affected. Sources: `OtOpcUaNodeManager.cs` (condition materialisation, `UnshelveTime` projection added in #597); `ConditionMethodEventTests`. - [ ] Reproduce: Read a condition child (e.g. `<condition>/ShelvingState/UnshelveTime`) directly and show which node answers - [ ] Assign instance-scoped NodeIds to every condition child in the namespace (or confirm the SDK's pattern and why it does not here) - [ ] Confirm browse/translate of the child paths return the instance ids - [ ] Over-the-wire test: Read of a child returns the condition instance's value (an ALLOW test; a type-node answer must fail it) - [ ] Check alarm clients (ScadaBridge) are not relying on the type ids *Filed 2026-10-08 by the hardware-available issue sweep.*
Author
Owner

Fixed in 5051275b (Merge b626-629): condition children get instance-scoped NodeIds ({ConditionId}/{browse path}); shelve methods keep resolving via adopted MethodDeclarationIds; subtree is forgotten on teardown.

Fixed in 5051275b (Merge b626-629): condition children get instance-scoped NodeIds ({ConditionId}/{browse path}); shelve methods keep resolving via adopted MethodDeclarationIds; subtree is forgotten on teardown.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: dohertj2/lmxopcua#629