Creating Internal Tags
This guide covers creating and configuring Memory Tags, I/O Mapping Tags, Logic Tags, and System Tags.
When to Use This Page
Use this page when:
- you do not yet have hardware
- you want the fastest route to a working demo
- you want to test view binding, alarms, and basic interactivity before device integration
- you want to add I/O mapping or logic layers inside the project
Before You Start
Make sure:
- a project is already open in Editor
- you can reach the tag area
- you are ready to test values in Start Debug after creating the tags
Recommended Day-1 Result
For a first project, start with a small memory-tag set:
| Tag Name | Type | Suggested initial value | Why it helps |
|---|---|---|---|
Temperature | Float32 | 25.0 | Basic analog display and trend testing |
Pressure | Float32 | 1.2 | Second analog display and comparison |
MotorRunning | Bool | false | Simple status indicator and alarm testing |
Setpoint_Temperature | Float32 | 30.0 | Optional writable input test |
Day-1 Shortcut: Create Three Memory Tags First
If this is your first internal-tag project, do this before reading the rest of the page:
- create one Memory Tags channel
- add
Temperature,Pressure, andMotorRunning - optionally add
Setpoint_Temperatureif you want to test numeric input writing later - save the tag configuration
- click Start Debug
- manually change one value and confirm the update appears correctly
After this quick path works, use the sections below to expand into I/O mapping, logic tags, and system tags.
Memory Tags
Purpose: General-purpose storage for calculations, user inputs, and temporary data.
Create a Memory Tag Channel
- Navigate to Internal Channels tab
- Click Add → Internal Variable
- Enter channel name
- Select Memory Tags type
- Click Confirm
Configure Memory Tag Properties
| Property | Description | Options |
|---|---|---|
| Tag Name | Unique identifier | ProductionCount, UserInput_Speed |
| Description | Human-readable label | Daily production counter |
| Data Type | Value type | Bool, Int8-64, Float32/64, Date, Time, DateTime, String |
| Initial Value | Value on system startup | Set Value, Saved Value, None |
| Historian | Enable historical logging | Enabled / Disabled |
Initial Value Modes
| Mode | Behavior |
|---|---|
| Set Value | Load a predefined value on startup |
| Saved Value | Restore the last value before shutdown |
| None | Reset to default (0, false, or empty) |
Data Type Ranges
| Data Type | Min Value | Max Value |
|---|---|---|
| Int8 | -128 | 127 |
| UInt8 | 0 | 255 |
| Int16 | -32,768 | 32,767 |
| UInt16 | 0 | 65,535 |
| Int32 | -2,147,483,648 | 2,147,483,647 |
| UInt32 | 0 | 4,294,967,295 |
| Int64 | -9,223,372,036,854,775,808 | 9,223,372,036,854,775,807 |
| UInt64 | 0 | 18,446,744,073,709,551,615 |
| Float32 | -3.402823E+38 | 3.402823E+38 |
| Float64 | -1.7976931348623157E+308 | 1.7976931348623157E+308 |
Advanced Tag Types for Later
For the first success milestone, Memory Tags are usually enough.
Return to the sections below when you need more maintainability or more engineering flexibility:
- I/O Mapping Tags when you want to decouple views from device addresses
- Logic Tags when values should be calculated inside the project
- System Tags when the runtime should use built-in context such as time, user, or device state
I/O Mapping Tags
Purpose: Decouple views and scripts from physical device addresses. Change the underlying device without reconfiguring views.
Use Cases
- Pre-configuration: Design views before PLC addresses are finalized
- Address Changes: Update one mapping instead of hundreds of view bindings
- Device Swaps: Replace a PLC without touching view configurations
Create an I/O Mapping Channel
- Navigate to Internal Channels tab
- Click Add → I/O Mapping
- Enter channel name
- Click Confirm
Configure I/O Mapping Tag Properties
| Property | Description |
|---|---|
| Tag Name | Unique identifier (e.g., Process_Temperature) |
| Description | Human-readable label |
| Data Type | Matches the linked external tag (auto-filled) |
| Link to I/O | Select the external tag to map |
| Access Mode | Read/Write, Read Only, Write Only |
| Historian | Enable historical logging |
Workflow Example
If the external source for Temperature changes, you only update the mapping layer and the view can remain unchanged.
Logic Tags
Purpose: Perform calculations and transformations on tag values.
Create a Logic Tag Channel
- Navigate to Internal Channels tab
- Click Add → Logic Variable
- Enter channel name
- Click Confirm
Configure Logic Tag Properties
| Property | Description |
|---|---|
| Tag Name | Unique identifier |
| Description | Human-readable label |
| Data Type | Result type of the expression |
| Logic Expression | Formula using tags and operators |
| Historian | Enable historical logging |
Expression Examples
| Use Case | Expression |
|---|---|
| Temperature conversion | Temperature_C * 1.8 + 32 |
| Average of sensors | (Sensor1 + Sensor2 + Sensor3) / 3 |
| Conditional logic | Temperature > 80 ? 1 : 0 |
| String concatenation | "Batch_" + BatchNumber |
💡 Tip: Click the Expression Builder button to access a visual formula editor with tag picker and function library.
System Tags
Purpose: Predefined tags providing system information.
Available System Tags
| Tag Name | Type | Description | Scope |
|---|---|---|---|
System_Date | String | Current date (YYYY-MM-DD) | Server |
System_Time | String | Current time (HH:MM:SS) | Server |
System_DateTime | String | Current date and time | Server |
System_Shift | String | Current shift name | Server |
System_ShiftDate | String | Current shift date | Server |
Client_LoginUser | String | Logged-in username | Client |
Dev_<ChannelName>_State | Bool | Device communication status | Server |
⚠️ Caution: System tags are read-only and cannot be modified. They are automatically created and updated by the system.
Scope Explanation:
- Server: Value is the same for all clients (e.g., system time)
- Client: Value is unique per client session (e.g., logged-in user)
Batch Operations
Batch Create Tags
Quickly create multiple similar tags:
- Select an existing tag
- Click Batch Create
- Enter the number of tags to create
- Click Confirm
The system creates copies with auto-incrementing names (e.g., Temperature_01, Temperature_02, Temperature_03).
Batch Edit Tags
Modify properties of multiple tags at once:
- Select multiple tags (Ctrl+Click or Shift+Click)
- Click Batch Edit
- Choose properties to modify:
- Tag name pattern (find/replace)
- Address offset (increment addresses)
- Poll interval
- Access mode
- Historian settings
- Click Apply
📷 [UG-TAGS-INT-01] Batch edit dialog with find/replace and offset options
Import/Export Tags
Export Tags:
- Select a channel or group
- Click Export
- Choose file format (CSV or Excel)
- Save the file
Import Tags:
- Select a channel or group
- Click Import
- Choose the file
- Select import mode:
- Update: Modify existing tags, add new ones
- Replace: Delete all existing tags, import new ones
- Click Confirm
⚠️ Caution: Replace mode deletes all tags in the selected channel/group. Use Update mode to preserve existing tags.
Best Practices
Use I/O Mapping for Flexibility
Always use I/O Mapping Tags in views and scripts. This allows you to:
- Change PLC addresses without touching views
- Swap devices without reconfiguring the application
- Test with simulated tags before connecting real devices
Mark Poll Mode on Views
Enable Poll Mode Markers in the view editor to visually identify which components use "Page Usage" tags. This helps verify that critical tags are set to "Service Running".
📷 [UG-TAGS-INT-02] View editor with poll mode markers showing colored borders on components
Next Steps
- Understanding Views: Move on after the starter tags work in Start Debug
- Creating Monitoring Views: Bind the internal tags to a first runtime screen
- Configuring Historian: Add time-series history after the basic monitoring view already runs
- Tags Reference: Return here for data types, quality codes, and troubleshooting