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.
Term | Description | Details |
---|---|---|
Object Model | .NET-based classes with inherited properties | Access methods without custom code |
IntelliSense | Context-aware auto-completion everywhere | Faster, error-free configuration |
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 |
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:
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!
// 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:
This means you get hundreds of methods and properties automatically - no coding required!
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.
// 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(); }
// 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;
// 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;
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: