Direct object model exposing all platform modules as .NET namespaces without API layers.

Platform → TechnologySupporting → Built-in Namespaces | Concept | Reference


The Platform Kernel

Built-in namespaces represent the kernel of FrameworX - the convergence of real-time database technology, .NET framework, and Unified Namespace architecture. This creates a framework on top of frameworks, where every platform module becomes a directly accessible .NET namespace. No APIs, no temporary variables, no middleware - just direct object access.


Key Concepts 

TermDescriptionDetails
Object Model.NET-based classes with inherited propertiesAccess methods without custom code
IntelliSenseContext-aware auto-completion everywhereFaster, error-free configuration

Architectural Foundation

The built-in namespaces embody a unique architectural pattern: a one-to-three mirror system where the same object model reflects across:

  • Designer UI - Module organization in configuration interface
  • SQL Database - Table structure for configuration storage
  • Git/DevOps - JSON export structure for version control

This triple mirror means learning one structure teaches you three - the UI navigation, the database schema, and the version control organization all follow the same namespace hierarchy.


Namespace Hierarchy

The platform organizes namespaces following the Four Pillars architecture:

CategoryNamespaceTypeDescription
P1: UNS FoundationTagRootSolution Tags at root location
AssetFolderAsset("/path")Asset tree organization
P2: Process ModulesDeviceDevice.*Field device connections
AlarmAlarm.*Alarm management system
HistorianHistorian.*Time-series data logging
OPCServerOPCServer.*Built-in OPC server
P3: Application ModulesDatasetDataset.*Database connections
ReportReport.*Document generation
ScriptScript.*Business logic execution
P4: User InterfaceDisplayDisplay.*HMI/SCADA screens
LayoutLayout.*Display frameworks
SecuritySecurity.*User management
SystemInfoInfo.*Solution metadata
ServerServer.*Server runtime state
ClientClient.*Client-specific state

Object Model Power

All configured objects inherit from .NET classes, providing native functionality without custom coding. Unlike traditional systems requiring APIs or temporary variables, every object created in your solution immediately becomes a .NET object with full inheritance:

Built-in Intelligence Examples

csharp

DateTime Tag Operations

Tag.DateTimeExample.Value.DayOfWeek // Returns Monday, Tuesday, etc.
Tag.DateTimeExample.Value.AddDays(7) // Date arithmetic
Tag.DateTimeExample.Value.ToString("yyyy-MM-dd") // Formatting

Script Performance Monitoring:

Script.Task.Example1.LastCPUTime // CPU usage tracking
Script.Task.Example1.LastExecutionTime // Performance metrics
Script.Task.Example1.ExecutionCount // Execution statistics


Automatic Property Access
// Create an alarm group "ProductionAlerts" in Designer
// Immediately accessible at runtime:
Alarm.Group.ProductionAlerts.TotalCount      // Active alarm count
Alarm.Group.ProductionAlerts.UnackedCount    // Unacknowledged count
Alarm.Group.ProductionAlerts.Disable()       // Method to disable group


This means you get hundreds of methods and properties automatically - no coding required!


.NET Class Inheritance

// Tags are full .NET objects - use any .NET method:
Tag.StartDateTime.Value.DayOfYear           // .NET DateTime property
Tag.ProductName.Value.ToUpper()             // .NET String method
Tag.Temperature.Value.ToString("F2")        // .NET formatting

// Not programmed by FrameworX - inherited from .NET

.NET Namespaces Available:

  • String manipulation (Substring, Replace, Trim)
  • Mathematical operations (Min, Max, Round)
  • Collection handling (Count, First, Last)
  • Data conversion (ToInt32, ToDouble)

This means you get hundreds of methods and properties automatically - no coding required!


IntelliSense Navigation

The namespace structure enables full IntelliSense throughout the platform:

  • Auto-completion in all configuration fields
  • Type-safe property access
  • Method signature hints
  • Real-time validation

Context-Aware Syntax

ContextSyntaxExample
Scripts/CodeBehind@ prefix required@Tag.Temperature.Value
Expressions/GridsDirect accessTag.Temperature.Value
Display BindingFiltered by typeTemperature (tags only)

Server-Client Domain Separation

Namespaces automatically handle distributed architecture:

Server Domain

  • @Server.* - Global server properties
  • Tag.* - Process values (synchronized)
  • Alarm.* - System-wide alarms
  • Device.* - Communication status

Client Domain

  • @Client.* - Local client properties
  • @Client.Username - Current user
  • @Client.DisplayName - Active display
  • @Client.MousePosition - Local UI state

Even on a single computer, separate processes maintain this separation for security and performance.


Practical Examples

Display Navigation Control

// Direct display control without navigation APIs:
bool success = @Display.MainPage.Open();         // Open specific display
string current = @Client.DisplayName;            // Current display name
@Display.AlarmPanel.Close();                     // Close display

// Navigate based on conditions: if (@Tag.SystemMode.Value == 1) { @Display.ProductionView.Open(); } else { @Display.MaintenanceView.Open(); }


Historian Runtime Access

// Access historian objects at runtime - no API needed:
int rowCount = @Historian.Table.ProcessData.RowCount;
DateTime lastStore = @Historian.Table.ProcessData.LastStoredTimeStamp;

// Query methods directly available: DataTable data = @Historian.Table.ProcessData.QueryData(startTime, endTime);


// Module control properties: bool isRunning = @Historian.IsStarted; string status = @Historian.OpenStatusMessage;


Device Communication Status

// Direct access to device hierarchy:
bool channelActive = @Device.Channel.PLCChannel.IsActive;
int nodeCount = @Device.Channel.PLCChannel.NodeCount;
string status = @Device.Node.PLC1.Status;

// Access specific device points: double value = @Device.Node.PLC1.Point.Temperature.Value; int quality = @Device.Node.PLC1.Point.Temperature.Quality;




One-to-One Correspondence Benefits

Understanding namespace organization provides mastery across the platform:

Learn OnceApply Everywhere
Device.Channel.Node structureDesigner UI navigation
SQL table relationships
Git folder structure
Alarm.Group.Item hierarchyConfiguration interface
Database schema
Runtime object access
Display.Layout.Page organizationUI module structure
Export file format
Client navigation



Performance Implications

Direct object access eliminates traditional overhead:

  • No API serialization/deserialization
  • No intermediate data structures
  • Native .NET performance
  • Compile-time optimization
  • Type-safe execution


In this section...