Direct object model exposing all platform modules as .NET namespaces without API layers
Platform → Technology → Supporting → Built-in Namespaces | Concept | Reference
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.
Architectural Foundation
The built-in namespaces embody a unique architectural pattern: a one-to-three mirror system where the same object model reflects across:
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.
The platform organizes namespaces following the Four Pillars architecture:
Category | Namespace | Type | Description |
---|---|---|---|
P1: UNS Foundation | Tag | Root | Solution Tags at root location |
AssetFolder | Asset("/path") | Asset tree organization | |
P2: Process Modules | Device | Device.* | Field device connections |
Alarm | Alarm.* | Alarm management system | |
Historian | Historian.* | Time-series data logging | |
OPCServer | OPCServer.* | Built-in OPC server | |
P3: Application Modules | Dataset | Dataset.* | Database connections |
Report | Report.* | Document generation | |
Script | Script.* | Business logic execution | |
P4: User Interface | Display | Display.* | HMI/SCADA screens |
Layout | Layout.* | Display frameworks | |
Security | Security.* | User management | |
System | Info | Info.* | Solution metadata |
Server | Server.* | Server runtime state | |
Client | Client.* | Client-specific state |
Unlike traditional systems requiring APIs or temporary variables, every object created in your solution immediately becomes a .NET object with full inheritance:
// 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
// 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
The namespace structure enables full IntelliSense throughout the platform:
Context | Syntax | Example |
---|---|---|
Scripts/CodeBehind | @ prefix required | @Tag.Temperature.Value |
Expressions/Grids | Direct access | Tag.Temperature.Value |
Display Binding | Filtered by type | Temperature (tags only) |
Namespaces automatically handle distributed architecture:
Even on a single computer, separate processes maintain this separation for security and performance.
// No temporary tags needed - direct access:
if (@Device.Channel.PLCChannel.IsActive)
{
@Display.StatusPanel.PLCStatus = "Connected";
@Display.StatusPanel.NodeCount = @Device.Node.Count;
}
// Built-in aggregation properties:
@Display.Header.CriticalCount = @Alarm.Group.Critical.ActiveCount;
@Display.Header.WarningCount = @Alarm.Group.Warning.ActiveCount;
@Display.Header.TotalAlarms = @Alarm.TotalCount;
// Access script execution metrics:
var cpuTime = @Script.Task.DataProcessor.LastCPUTime;
var execCount = @Script.Task.DataProcessor.ExecutionCount;
if (cpuTime > 100) // milliseconds
{
@Alarm.Group.System.HighCPU = true;
}
Understanding namespace organization provides mastery across the platform:
Learn Once | Apply Everywhere |
---|---|
Device.Channel.Node structure | Designer UI navigation SQL table relationships Git folder structure |
Alarm.Group.Item hierarchy | Configuration interface Database schema Runtime object access |
Display.Layout.Page organization | UI module structure Export file format Client navigation |
Direct object access eliminates traditional overhead: