Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

DEVICE MODULE                           DISCOVERY SERVICES
(Pillar 2: Devices)                     (Technology under Pillar 1: UNS)
?????????????????  
--------------------------- ????????????????????????????????--------------------------------- • Define local tags FIRST • NO local tags needed • Create Channel → Node → Points • Give address, system discovers • Explicit polling, scan rates • On-demand, auto-managed • ~100 protocols • ~17 protocols (discovery-capable) • Full control, deterministic • Dynamic, flexible • Governance: LOCAL • Governance: EXTERNAL

...

Modules involved: UNS (Discovery Services connection only). No tags, no devices.

Pattern Selection Guide

If your data...UseWhy
Requires deterministic polling with explicit scan ratesPattern 1 (Local Tags + Devices)Only way to control timing
Uses legacy/proprietary protocols without discoveryPattern 1Only option for non-discovery protocols
Needs local governance + alarms + historian, but flexible sourcingPattern 2 (DataLink)Best of both worlds
Has stable structure but multiple sites or changing sourcesPattern 2Template once, link many
Is temporary or diagnosticPattern 3 (Dynamic/Asset)No configuration overhead
Has unknown or changing structurePattern 3Dynamic discovery at runtime
Has thousands of tags, mostly for monitoringPattern 3Zero engineering per tag
Needs alarms on some points from a dynamic sourceMixed: Pattern 3 for browsing + Pattern 2 for alarm pointsUse DataLink for the critical subset

Most production systems use multiple patterns simultaneously. A typical split:

...

Only protocols with built-in discovery capability can be used. Currently 17 connectors:

ConnectorTypeNotes
AB Rockwell ControlLogixPLCDiscovers controller tags
Beckhoff TwinCATPLCDiscovers TwinCAT symbols
Canary HistorianHistorianAlso usable as Storage Location
Codesys PLC HandlerPLCDiscovers Codesys variables
DataHub Communication ServiceApplicationConnects to Cogent DataHub
FlowTimebaseDB DatabaseHistorianTime-series database
GE Proficy HistorianHistorianAlso usable as Storage Location
InfluxDB DatabaseHistorianAlso usable as Storage Location
LineMonitorApplicationProduction monitoring
MQTT ClientMessagingStandard MQTT broker
MQTT Sparkplug B CollectorMessagingSparkplugB-specific metadata
OPC UA ClientIndustrialStandard OPC UA discovery
OSIsoft Aveva PI SystemHistorianAlso usable as Storage Location
Server to ServerApplicationConnect to another FrameworX solution
SQL DatabaseDatabaseGeneric SQL data source
SQL Database NormalizedDatabaseNormalized schema variant

Important: The Device Module has ~100 protocols. Discovery Services has ~17. They are independent lists. Do not confuse them.

...

int intValue    = TK.ToInt(Asset("/path"));
double dblValue = TK.ToDouble(Asset("/path"));
string strValue = TK.ToString(Asset("/path"));
bool boolValue  = TK.ToDigital(Asset("/path"));

Asset() vs Tag Syntax

SyntaxWhen to useExample
@Tag.Folder/NameLocal tags, Linked Tags (DataLink)@Tag.Plant1/TankLevel
Asset("path")Dynamic tags from Discovery ServicesAsset("/MQTT/plant/tank01/level")
Asset(expression)Dynamic UIs driven by user selectionAsset(Client.Context.AssetPath + "/Temp")

Note: Asset() also works with local tags. It's sometimes used even with local tags because the string argument can be an expression, enabling dynamic display patterns.

Common Pitfalls

MistakeWhy it happensHow to avoid
Creating UnsTags for dynamic Discovery Services dataHabit from Device Module workflowDynamic tags don't need local tags — that's the whole point. Only create UnsTags if you need alarms/historian or want DataLink.
Confusing Device Module protocols with Discovery Services protocolsBoth can use MQTT/OPC UADevice Module has ~100 protocols. Discovery Services has ~17. Check list_protocols() for Discovery Services availability.
Setting alarms on dynamic tagsDynamic tags have no local tag to attach alarms toCreate a local tag with DataLink to the specific path, then configure alarms on that tag.
Using DataLink without a Discovery Services connectionDataLink needs the underlying TagProvider technologyA UnsTagProviders entry for the matching protocol must exist. DataLink binds to paths in that connection.
Thinking Discovery Services replaces DevicesThey are independent systemsBoth can coexist in the same solution. Use Devices for control, Discovery Services for monitoring/IoT.
Wrong PrimaryStation formatEach protocol has its own formatAlways call list_protocols('<protocol>') before writing UnsTagProviders.

Mixed-Mode Example

A typical production solution combining all three patterns:

...