diff --git a/src/Core/ZB.MOM.WW.OtOpcUa.Commons/OpcUa/IOpcUaAddressSpaceSink.cs b/src/Core/ZB.MOM.WW.OtOpcUa.Commons/OpcUa/IOpcUaAddressSpaceSink.cs index 45f0eb7e..cd63287f 100644 --- a/src/Core/ZB.MOM.WW.OtOpcUa.Commons/OpcUa/IOpcUaAddressSpaceSink.cs +++ b/src/Core/ZB.MOM.WW.OtOpcUa.Commons/OpcUa/IOpcUaAddressSpaceSink.cs @@ -55,7 +55,7 @@ public interface IOpcUaAddressSpaceSink /// Ensure a Variable node exists at , parented under /// (or the namespace root when null). Created with /// Bad quality + null value; subsequent calls update both. - /// Used by Phase7Applier to materialise Galaxy / SystemPlatform tags ahead of any + /// Used by Phase7Applier to materialise equipment-namespace tags ahead of any /// driver-side subscribe so OPC UA clients can browse them. Idempotent. /// /// The OPC UA node ID for the variable. diff --git a/src/Core/ZB.MOM.WW.OtOpcUa.Configuration/Entities/Tag.cs b/src/Core/ZB.MOM.WW.OtOpcUa.Configuration/Entities/Tag.cs index e6517171..26661534 100644 --- a/src/Core/ZB.MOM.WW.OtOpcUa.Configuration/Entities/Tag.cs +++ b/src/Core/ZB.MOM.WW.OtOpcUa.Configuration/Entities/Tag.cs @@ -4,10 +4,9 @@ namespace ZB.MOM.WW.OtOpcUa.Configuration.Entities; /// /// One canonical tag (signal) in a cluster's generation. set ⟺ the -/// tag participates in the Equipment tree, regardless of the driver's namespace kind. A -/// GalaxyMxGateway-bound equipment tag is an alias — a Galaxy attribute surfaced -/// under a UNS name, with its Galaxy reference carried in TagConfig.FullName. -/// is NULL for SystemPlatform mirror tags (FolderPath-scoped). +/// tag participates in the Equipment tree. A GalaxyMxGateway-bound equipment tag is an +/// ordinary equipment tag (GalaxyMxGateway is a standard Equipment-kind driver) that carries its +/// Galaxy attribute reference in TagConfig.FullName — there is no separate alias concept. /// public sealed class Tag { diff --git a/src/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer/OtOpcUaNodeManager.cs b/src/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer/OtOpcUaNodeManager.cs index f125cedf..ebc52232 100644 --- a/src/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer/OtOpcUaNodeManager.cs +++ b/src/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer/OtOpcUaNodeManager.cs @@ -626,8 +626,8 @@ public sealed class OtOpcUaNodeManager : CustomNodeManager2 /// Ensure a Variable node exists at parented under /// (or root when null). Initial value=null, quality=Bad, /// timestamp=epoch — fills these in once driver data flows. - /// Idempotent. Materialises Galaxy / SystemPlatform tags so they're browseable before the - /// Galaxy driver issues SubscribeBulk. + /// Idempotent. Materialises equipment-namespace tags so they're browseable before drivers + /// issue SubscribeBulk. /// /// The node identifier of the variable. /// The node identifier of the parent folder; null to use the namespace root. diff --git a/src/Server/ZB.MOM.WW.OtOpcUa.Runtime/Drivers/DriverHostActor.cs b/src/Server/ZB.MOM.WW.OtOpcUa.Runtime/Drivers/DriverHostActor.cs index f71b3a08..c0e587d3 100644 --- a/src/Server/ZB.MOM.WW.OtOpcUa.Runtime/Drivers/DriverHostActor.cs +++ b/src/Server/ZB.MOM.WW.OtOpcUa.Runtime/Drivers/DriverHostActor.cs @@ -383,10 +383,12 @@ public sealed class DriverHostActor : ReceiveActor, IWithTimers // tags registered); production binds the mux via the RuntimeActors extension. _dependencyMux?.Tell(msg); - // Also push the value to the OPC UA sink so the materialised variable reflects live data - // instead of staying BadWaitingForInitialData. For SystemPlatform / Galaxy tags the variable - // NodeId is exactly the dot-form MXAccess reference the driver subscribed to, so the published - // FullReference maps straight onto the sink NodeId. + // Also push the value to the OPC UA sink. NOTE: equipment-tag variables are materialised with + // folder-scoped NodeIds (EquipmentId/FolderPath/Name), while the driver publishes keyed by + // FullReference (the tag's FullName). The value therefore only lands on the variable once the + // FullName→NodeId routing — the equipment-tag "live values" milestone — is wired; until then + // the variable stays BadWaitingForInitialData. (The retired SystemPlatform mirror matched only + // because its NodeId WAS the FullName.) _opcUaPublishActor?.Tell(new ZB.MOM.WW.OtOpcUa.Runtime.OpcUa.OpcUaPublishActor.AttributeValueUpdate( msg.FullReference, msg.Value, msg.Quality, msg.TimestampUtc)); }