Built-in Namespaces
Direct object model exposing all platform modules as .NET namespaces without API layers.
Platform → Technology → Supporting → Built-in Namespaces | Concept | Reference
The Platform Kernel
Built-in namespaces represent the kernel of ProView DS - 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
| Object Model | .NET-based classes with inherited properties | Access methods without custom code |
| IntelliSense | Context-aware auto-completion everywhere | Faster, 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:
| P1: UNS (Data Foundation) | Tag | Root | Solution Tags at root location |
| AssetFolder | Asset("/path") | Asset tree organization | |
| P2: Process Modules (Industrial Operations) | 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 (Business Operations) | Dataset | Dataset.* | Database connections |
| Report | Report.* | Document generation | |
| Script | Script.* | Business logic execution | |
| P4: Operator UI Modules (User Interactions) | 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 |
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 groupThis 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 ProView DS - 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
| Scripts/CodeBehind | @ prefix required | @Tag.Temperature.Value |
| Expressions/Grids | Direct access | Tag.Temperature.Value |
| Display Binding | Filtered by type | Temperature (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.UI.CurrentPage- last display page open
- @Client.DateTimeInfo.Date- current date in the client computer
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:
| 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 |
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