TO DO: Text Development and coliation




Introduction

This guide focuses on building an effective data model within the platform, utilizing the Unified Namespace architecture. It covers the concepts of DataTemplates, Asset Tree, and DataExplorer tools, and explains how to integrate TagProviders for a comprehensive data management solution.

On this page:




Design Concepts

The following main concepts are key to properly organize your data in the Platform. 

DataTemplates

The use of UDT (User Data Types) and their planning at the start of modeling is essential. Gather information about whether your field equipment or other data sources already have that definition, and import them into the platform when possible.

You can also easily create the DataTemplate within the platform and use the Scripts and Devices module to map the data model you defined to the data sources, which can provide the data in a completely distinct way.

In summary, follow conventions when available, and extend with the platform features. All time invested beforehand in properly defining your Unified Namespace is largely recovered during the development and maintenance of the application.

Advanced DataTypes

Each tag supports various types, from basic types such as Digital and Double to advanced ones like Timers, DataTable, and References. Each tag can also be an array of up to three dimensions. The correct selection and use of the Tag Types greatly simplify the use of those tags later in the Displays, Scripts, and Database Connections.

Server Tags vs Client Tags

The concept of Server Tags and Client Tags is explained in the section Client-Server Programming.

Essentially, the Client Tags will hold all the operations (Displays Client Users). As much as possible, you should leverage the built-in Client.DataContext properties and the built tools to persist user configurations.

Root Tags vs Tags in the Asset Tree

Each tag can have a single name, like Temp1, or be positioned inside the Asset Tree, like /Line1/Machine1/Temp1.

When a tag is not positioned in an Asset Folder tree, it's called a 'Root Tag'. Typically, all variables that are internal to your solution and you don't want to expose to other applications connecting with your solution can be kept as a Root Tag. The tags that will be used on the Displays and eventually served to other applications using the MQTT Broker or the OPC Server, or other integration API, should be placed in the Asset hierarchy.

A good practice to avoid the list of Root Tags growing too much is to use DataTemplates. For instance, you can create a Client Root Tag named 'UI' that is based on the Data Template 'UI'. In that template, you can place all custom tags related to managing the User Interface, like ReportStartDate, or any tag you need to create for client context to use in the user interface. Similarly, you can create a Server Tag and a Template named "Admin" for all variables you need for your internal administration of the application, instead of creating multiple variables in the root.

When to use TagProviders Connections

When you have applications connecting with data sources that regularly change Tag Names, addresses, and assets, that is the typical scenario to use TagProviders. The TagProvider features allow you to insert a node in your Asset Tree hierarchy that is dynamically populated with the current tags and assets available at that time from the external data source.

Configuration Workflow

  1. Creating DataTemplates:

  2. Working with the Asset Tree:

  3. Leveraging Data Explorer Tools:

  4. Integrating TagProviders:



Unified Namespace (Foundation)

Overview

The Unified Namespace (UNS) is the foundational data layer of your FrameworX solution, providing a single source of truth for all real-time and configuration data. It creates a standardized, hierarchical data model that all other modules reference, ensuring consistency across your entire application. Think of the UNS as the central nervous system of your solution - every piece of data flows through and is organized within this structure.

Where It Fits in the Solution

The UNS serves as the data foundation that all other pillars build upon:

Core Components

Tags - Real-Time Data Points

Tags are the fundamental data variables in your solution:

Asset Tree - Hierarchical Organization

Organize tags in a logical structure matching your process:

User Data Types (UDTs) - Reusable Templates

Create templates for complex equipment and systems:

TagProviders - External Data Integration

Connect to external data sources without copying data:

Configuration in Designer

Creating Tags

Using the Tag Grid

  1. Navigate to Unified NamespaceTags
  2. Click in empty row or press Insert
  3. Configure essential properties:

Tag Data Types

Bulk Tag Creation

Building the Asset Tree

Creating Asset Hierarchy

  1. Go to Unified NamespaceAsset Tree
  2. Right-click to add levels:

Organizing Tags in Assets

Asset Properties

Creating User Data Types

Defining a UDT

  1. Navigate to Unified NamespaceUser Data Types
  2. Click New Type
  3. Add members:

Example: Motor UDT

Motor (User Data Type)
??? Running (Boolean) - Motor running status
??? Speed (Float) - Current speed in RPM
??? Current (Float) - Motor current in Amps
??? Hours (Double) - Runtime hours
??? StartCmd (Boolean) - Start command
??? StopCmd (Boolean) - Stop command
??? FaultCode (Integer) - Fault status
??? Properties
    ??? Scaling - Speed 0-1800 RPM
    ??? Alarms - High current, Fault
    ??? History - Log speed and current

UDT Inheritance

Create base types and variations:

Configuring TagProviders

Adding External Sources

  1. Go to Unified NamespaceTagProviders
  2. Click New Provider
  3. Select provider type:

Provider Configuration

Tag Properties & Configuration

Essential Properties

Scaling & Engineering Units

Advanced Properties

Security & Access

Data Explorer

Browsing Namespace

Navigate and search the unified namespace:

Testing Values

Verify tag configuration before runtime:

Import/Export Tools

Runtime Behavior

Value Updates

How tag values change during runtime:

Quality Management

OPC-compliant quality codes:

Event Generation

Tags generate events on:

Best Practices

Naming Conventions

Organization Strategy

Performance Optimization

Data Integrity

Troubleshooting

SymptomLikely CauseSolution
Tag value not updatingNo device mappingCheck device point configuration
Quality shows "Bad"Communication failureVerify device connection
Cannot write to tagSecurity restrictionCheck write permissions
Expression not calculatingSyntax errorReview expression syntax
UDT changes not reflectedInstances not updatedRecreate or refresh instances
Asset tree not showing tagsTags not assignedAssign tags to asset nodes
Provider tags unavailableConnection failedCheck provider configuration

Common Patterns

Pattern 1: Equipment Module

Create UDT for complete equipment control:

Pattern 2: Process Area

Organize by ISA-95 levels:

Pattern 3: Calculated KPIs

Use expressions for real-time calculations:

Pattern 4: External Integration

Layer external data with TagProviders:

Related Modules


AI Assistant Data

<details> <summary>Structured Information for AI Tools</summary>

json

{
  "module": "Unified Namespace",
  "pillar": "Foundation",
  "purpose": "Central data model and single source of truth",
  "components": {
    "tags": {
      "types": ["Boolean", "Integer", "Long", "Float", "Double", "String", "DateTime"],
      "features": ["Scaling", "Retentive", "Arrays", "Security", "Quality"]
    },
    "assetTree": {
      "levels": ["Enterprise", "Site", "Area", "Line", "Equipment"],
      "organization": "Hierarchical navigation structure"
    },
    "UDTs": {
      "capabilities": ["Templates", "Inheritance", "Nesting", "Reusability"],
      "commonTypes": ["Motor", "Valve", "PID", "Tank", "Pump"]
    },
    "tagProviders": {
      "types": ["OPC UA", "MQTT", "Database", "REST API"],
      "purpose": "External data integration"
    }
  },
  "commonTasks": [
    "Create tags",
    "Build asset hierarchy",
    "Define UDTs",
    "Configure providers",
    "Import from Excel",
    "Set security"
  ],
  "dependencies": {
    "feeds": ["Devices", "Scripts", "Providers"],
    "consumers": ["Displays", "Alarms", "Historian", "Reports"]
  },
  "bestPractices": [
    "Consistent naming",
    "Logical hierarchy",
    "Appropriate data types",
    "Security configuration",
    "Documentation"
  ]
}

</details>