Dynamic external data integration through runtime-managed discovery and extensibility services.

Platform → TechnologySupporting → TagProvider Services | Concept | Reference


Beyond Traditional Tag Management

TagProvider Services extend the Unified Namespace beyond traditional tag management, enabling dynamic discovery of external data sources and embedding of third-party modules. These services represent a shift from static configuration to dynamic, runtime-managed connectivity.

Two Service Types:

  • Tag Discovery — Connect to external data sources (MQTT brokers, OPC UA servers, PLCs, databases) and auto-discover their namespace. The runtime creates tags on demand without pre-configuration.
  • Module Extension — Embed third-party modules (analytics, AI, custom logic) as native UNS components with full Designer support.




TagProvider Services are completely independent from the Devices module. Both can connect to external systems, but TagProvider Services focus on auto-discovery and dynamic namespace integration, while the Devices module provides explicit point-by-point control with full tag metadata.

Some protocols (MQTT, OPC UA, ControlLogix) are available in both, with different workflows..

Service Types

Service Type

Purpose

Key Benefit

Example Use

Tag Discovery

Auto-discover external tags without pre-mapping

Runtime-managed, on-demand communications

MQTT, OPC UA, ControlLogix, SQL, Beckhoff

Module Extension

Embed third-party modules as native UNS components

Full Designer integration, standard UNS access

Sorba.AI, custom analytics

Not a TagProvider Service

Storage Locations (Historian module) allow archiving to external databases such as Canary, InfluxDB, or GE Proficy. While the underlying library is shared with TagProvider Services, Storage Locations are configured in the Historian module and serve a completely different purpose — they send data out for archiving, not discover data in. See Historian Module for details.


Tag Discovery

The primary TagProvider service. It enables three patterns for connecting external data into the UNS. The runtime creates actual tags in the real-time database (RTDB) so that all modules (alarms, displays, historians) access external data uniformly.

Connection Patterns

Pattern

How It Works

Access Method

DataLink Property

Local Tags

Tag created in UNS configuration. No external binding — values come from Devices, scripts, or manual entry.

Tag.TagName

Not set

Linked Tags

Tag created in UNS configuration with the DataLink property pointing to a TagProvider path. The runtime auto-manages communication to the external source.

Tag.TagName

Set (e.g. MyMQTT/sensors/temperature)

Dynamic Tags

No tag pre-created. At runtime, Asset("path") resolves directly to an external source. Tag is created in RTDB on demand and cleaned up automatically.

Asset("/Provider/path")

N/A — resolved dynamically

DataLink

DataLink is a property on UnsTags. When set, it binds a local tag to a path in a TagProvider's discovered namespace. The runtime automatically manages the connection — communication is activated on demand when the tag is read, and released when no longer needed. This is the key mechanism behind Linked Tags.

Governance Models

The choice between patterns depends on where namespace governance resides:

Local UNS Governance (Local Tags and Linked Tags):

  • Tags defined in solution configuration
  • Full control over tag names, types, metadata, alarms, historian
  • Solution architect decides the namespace structure
  • Linked Tags add DataLink to bind values from an external source while keeping local governance

External Governance (Dynamic Tags):

  • Zero pre-configuration — the external source defines what exists
  • Tags created at runtime when accessed via Asset()
  • Namespace adapts automatically as the external source changes
  • Ideal for IIoT monitoring where the broker defines the data model

Module Extension

Enables third-party modules to integrate as native FrameworX components with full Designer support. Shipping ~Q2 2026 with Sorba.AI as the first partner.

Integration Process

  1. Partner creates XML descriptor and .NET DLL
  2. Files placed in FrameworX extensions folder
  3. Module appears in Designer under UNS → TagProvider Services (Extension Module radio button)
  4. Configure connection settings
  5. Module elements appear in the Asset Tree

Example: Sorba.AI Integration

Once configured, Sorba.AI module elements appear in the Asset Tree alongside regular tag folders:

  • Plant
    • Area1
      • SorbaModel (Module Extension)
        • Predictions
        • Anomalies
        • Parameters
        • ModelStatus

The module exposes all properties through standard UNS access patterns — accessible via Asset() syntax and standard tag bindings like any native data.


Common Characteristics

Both service types share these runtime behaviors:

  • Auto-discovery — Resources discovered at runtime from the external source
  • On-demand activation — Communication activated only when data is actually consumed
  • Automatic cleanup — Resources released when no longer needed
  • RTDB integration — All data flows through the real-time database, so alarms, historian, displays, and scripts work uniformly
  • Unified configuration — Both configured in Designer under UNS → TagProvider Services

Service Type

Protocol Requirement

Available Connectors

Tag Discovery

Protocol must support browsing/discovery

~16 connectors (MQTT, OPC UA, ControlLogix, SQL, Beckhoff, Codesys, and others)

Module Extension

.NET assembly with XML descriptor

Partner-provided (Sorba.AI first)


TagProvider Services vs. Devices Module

Both TagProvider Services and the Devices module connect FrameworX to external systems, but they serve different workflows:

Aspect

TagProvider Services

Devices Module

Design philosophy

Auto-discover, bind dynamically

Define explicitly, validate strictly

Tag creation

Optional (Dynamic Tags need none)

Required — every point maps to a tag

Namespace control

External source can define structure

Solution architect defines everything

Metadata (alarms, historian, units)

Full control on Linked Tags; limited on Dynamic Tags

Full control on every point

Available protocols

~16 (discovery-capable only)

~100 (all industrial protocols)

Best for

IIoT monitoring, dynamic environments, UNS integration

SCADA control, regulatory compliance, FDA validation

Can coexist?

Yes — same solution can use both, even for the same protocol

Yes

When to Use Each

Use TagProvider Services

Use Devices Module

External source has a browsable namespace (MQTT, OPC UA)

Protocol requires explicit point addressing (Modbus registers)

Data model is dynamic or changes frequently

Fixed, well-known set of control points

Monitoring and visualization are the primary use case

Tight control loops, setpoint writing, regulatory compliance

Engineering speed is a priority — minimize configuration

Full metadata (alarms, scaling, units) needed per point


Deployment Patterns

Enterprise System

  • Local Tags for control logic and setpoints
  • Linked Tags for equipment with multiple data sources
  • Dynamic Tags for enterprise/MES data integration
  • Module Extensions for AI and analytics

Edge Device

  • Local Tags for field devices via Devices module
  • Dynamic Tags for diagnostic and remote monitoring access
  • Minimal TagProvider configuration

Hybrid Architecture

  • Mix governance models per subsystem
  • Critical control: Local Tags with Devices module
  • Enterprise data: Dynamic Tags via TagProvider
  • Flexible equipment: Linked Tags with DataLink

Under the Hood

Implementation Note — For Developers and Partners

TagProvider Services are powered by a protocol library that supports runtime discovery, on-demand communication, and automatic resource management. This same underlying library is also used by the Historian module for Storage Locations (external archiving to Canary, InfluxDB, GE Proficy, etc.).

From the user's perspective, these are separate features in separate modules — TagProvider Services live in UNS, Storage Locations live in Historian. The shared library is an implementation detail, not an architectural relationship.

Partners building Module Extensions or custom connectors may encounter this shared foundation when working with the SDK.


In this section...