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:
The following main concepts are key to properly organize your data in the Platform.
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.
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.
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.
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 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.
Creating DataTemplates:
Navigate to Unified Namespace → DataTemplates.
Use 'New' to create a User Data Type (UDT) for structuring data.
Define properties (variables) in the UDT for your data model.
Working with the Asset Tree:
Go to Unified Namespace → Asset Tree.
Create new asset folders and tags as needed.
Organize tags and assets hierarchically for easy navigation.
Leveraging Data Explorer Tools:
Utilize Data Explorer for visualizing and managing your data model.
Explore tags and assets, and modify properties directly from the tool.
Integrating TagProviders:
Add TagProvider Connections for integrating data from external systems.
Configure connections to external data sources like InfluxDB, MQTT, OPC UA, etc.
Map external data to your Unified Namespace.
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.
The UNS serves as the data foundation that all other pillars build upon:
Tags are the fundamental data variables in your solution:
Organize tags in a logical structure matching your process:
Create templates for complex equipment and systems:
Connect to external data sources without copying data:
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
Create base types and variations:
Navigate and search the unified namespace:
Verify tag configuration before runtime:
How tag values change during runtime:
OPC-compliant quality codes:
Tags generate events on:
Symptom | Likely Cause | Solution |
---|---|---|
Tag value not updating | No device mapping | Check device point configuration |
Quality shows "Bad" | Communication failure | Verify device connection |
Cannot write to tag | Security restriction | Check write permissions |
Expression not calculating | Syntax error | Review expression syntax |
UDT changes not reflected | Instances not updated | Recreate or refresh instances |
Asset tree not showing tags | Tags not assigned | Assign tags to asset nodes |
Provider tags unavailable | Connection failed | Check provider configuration |
Create UDT for complete equipment control:
Organize by ISA-95 levels:
Use expressions for real-time calculations:
Layer external data with TagProviders:
<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>