UNS Tags (Reference) represent real-time variables and their associated historical records, providing a structured way to model process information by linking to physical devices, databases, or calculated values.
Tags in the Unified Namespace provide:
- Real-time data representation
- Historical record association
- Device communication mapping
- Hierarchical organization
- Type-safe data handling
- Array and template support
Tags form the foundation of the solution's data model, connecting field devices to visualization, logic, and storage.
In this page:
Tag Types
Built-in Types
Type | .NET Type | Description | Range |
---|---|---|---|
Digital | Int32 | Binary value | 0 or 1 |
Integer | Int32 | Whole numbers | ±2,147,483,647 |
Long | Int64 | Extended integers | ±9.2×10¹? |
Double | Double | Floating point | ±1.79×10³?? |
Decimal | Decimal | High precision | 28-29 significant digits |
Text | String | Unicode text | 2GB max |
Json | String | JSON structured data | Built-in parsing |
DateTime | DateTimeOffset | Date and time | Year 0001-9999 |
TimeSpan | TimeSpan | Duration | Days to milliseconds |
Guid | Guid | Unique identifier | 128-bit |
DataTable | DataTable | In-memory table | Structured data |
Image | Byte[] | Binary content | Any size |
Timer | Int32 | Time patterns | Multiple modes |
Timer Types
Mode | Behavior | Use Case |
---|---|---|
SquareWave | Toggle 0/1 at interval | Blinking, heartbeat |
Pulse | Momentary 0→1→0 | Triggers, events |
DelayOff | Hold value then reset | TOF timer |
Comparer | Daily schedule | Time-based control |
Reference Type
Dynamic tag addressing:
csharp
// Set reference target
@Tag.Reference1.Link = @Tag.TankFarm/Tank1/Level.GetName();
// Use reference
double level = @Tag.Reference1.Value;
Configuration Properties
Property | Description | Required |
---|---|---|
Name | Unique tag identifier | Yes |
Type | Data type selection | Yes |
Path | Asset tree location | No |
Array | Array size (0 to N) | No |
StartValue | Initial value at startup | No |
Parameters | Type-specific settings | No |
Min/Max | Value limits | No |
ScaleMin/Max | Engineering scale | No |
Retentive | Value persistence | No |
Domain | Server/Client scope | No |
Visibility | External access level | No |
Format | Display formatting | No |
Units | Engineering units | No |
Description | Documentation (1024 char) | No |
Creating Tags
Method 1: Asset Tree
- Navigate to Unified Namespace → Asset Tree
- Right-click folder or click New Tag icon
- Enter tag name and properties
Method 2: Tags Grid
- Go to Unified Namespace → Tags
- Options:
- Click New Item for dialog
- Type directly in Name column
- Paste from external source
Method 3: Import
- Copy from another solution
- Import from CSV files
- Use Solution Import Tools
- EngWrapper API
Tag Parameters
Deadband
Limits value updates:
Absolute: ±5 units from last value
Percentage: 10% change required
EnumerationSet
Map values to text:
0 → "Off"
1 → "On"
2 → "Auto"
Domain Configuration
Domain | Scope | Use Case |
---|---|---|
Server | Global across all clients | Device data, shared values |
Client | Local to each session | User settings, local states |
Visibility Levels
Level | External Access | Use Case |
---|---|---|
Private | None | Internal only |
Protected | Read-only | Monitor only |
Public | Read/Write | Full access |
Affects: OPC UA Server, MQTT Broker, TcpDataAccess
Retentive Options
Setting | Saves | Use Case |
---|---|---|
None | Nothing | Temporary values |
ValueOnly | Value only | Operator setpoints |
Properties | All including value | Complete state |
PropertiesOnly | All except value | Configuration |
Storage: Dataset.DB.Retentive database
Format Strings
Numeric Formats
N0 → 123 (no decimals)
N2 → 123.45 (2 decimals)
C → $123.00 (currency)
P → 12.34% (percentage)
X → 7B (hexadecimal)
E → 1.23E+02 (scientific)
DateTime Formats
d → 3/15/2024 (short date)
T → 14:30:00 (long time)
yyyy-MM-dd HH:mm:ss → 2024-03-15 14:30:00
Array Configuration
Array size N creates elements [0] to [N]:
Array = 5 creates:
Tag[0], Tag[1], Tag[2], Tag[3], Tag[4], Tag[5]
(6 elements total)
DataTable Tags
Using Queries
csharp
@Tag.DataTableTag = @Dataset.Query.MyQuery.SelectCommand();
Manual Population
csharp
@Tag.DataTableExample.StartBlockSet();
@Tag.DataTableExample[1].Column1 = value1;
@Tag.DataTableExample[2].Column2 = value2;
@Tag.DataTableExample.CommitBlockSet();
Runtime Attributes
Core Properties
Property | Type | Description |
---|---|---|
Value | Tag Type | Current value |
Quality | Integer | OPC quality (0/64/192) |
Timestamp | DateTimeOffset | Last change time |
Quality Codes
- 0: Bad quality
- 64: Uncertain quality
- 192: Good quality
Additional Configuration
Device Integration
- Node: Communication node
- Address: PLC/device address
- AccessType: Read/Write/ReadWrite
Alarm Settings
- Condition: Trigger logic
- Groups: Alarm categorization
- Limits: Threshold values
Historian
- Table: Storage location
- Deadband: Recording threshold
- DeadbandType: Absolute/Percentage
Best Practices Checklist
- Use meaningful names - Follow naming conventions
- Set appropriate types - Match data characteristics
- Configure retentive - Preserve critical values
- Apply deadbands - Reduce unnecessary updates
- Document tags - Use Description field
- Organize in assets - Logical hierarchy
- Set security - Control access levels
Troubleshooting
Tag not updating:
- Check device communication
- Verify Quality = 192
- Review deadband settings
- Confirm not disabled
Wrong value format:
- Check Format string
- Verify Units configuration
- Review scale settings
Array issues:
- Confirm index in range
- Check array size setting
- Verify element access
Retentive not working:
- Check database connection
- Verify retentive setting
- Review database permissions
In this section...