Creating External Tags
This guide shows you how to create external tags that communicate with PLCs, sensors, and other industrial devices.
When to Use This Page
Use this page when:
- you already have a real controller or device
- you know the protocol and at least a few test addresses
- you want to keep an external-channel structure even before hardware arrives
If you have no hardware and only want the fastest learning path, start with Creating Internal Tags first.
Before You Start
Make sure:
- a project is already open in Editor
- you know the protocol, IP address, and basic address format
- you have one small test set of tags instead of importing everything at once
Expected Result
After this page, you should have:
- one external communication channel
- one group under that channel
- three verified starter tags
- a successful check in Start Debug
Note: Depending on the build, the main creation action may appear as Add or New. Use the action that opens the channel or tag creation dialog in your project.
Day-1 Quick Path
For the first success milestone, keep the path short:
- create one channel
- create one group
- manually add three starter tags
- save and optimize
- verify values in Start Debug
If your protocol supports browsing or bulk import, you can still use it later. It is usually better to validate a few manual tags first.
Step 1: Create a Communication Channel
- Navigate to External Channels tab
- Click Add → External Device
- Select the protocol (e.g., Modbus TCP, Siemens S7, OPC UA)
- Enter channel name
- Configure connection parameters
Example: Modbus TCP Configuration
📷 [UG-TAGS-EXT-01] Modbus TCP channel configuration dialog
| Parameter | Description | Example |
|---|---|---|
| Device IP | IP address of the PLC/device | 192.168.1.100 |
| Device ID | Modbus slave ID | 1 |
| Port | TCP port number | 502 (default) |
| Timeout | Communication timeout | 3000 ms |
| Base Address | Address offset (0 or 1) | 1 (default) |
Advanced Settings:
| Parameter | Description | Default |
|---|---|---|
| Byte Order | Endianness for 32/64-bit values | 2143 (CDAB) |
| Independent Link | Dedicated TCP connection | Disabled |
| PDU Diagnostics | Protocol validation | Enabled |
| PDU Length | Max bytes per request | 220 |
| PDU Immediate Submit | Skip batching for faster response | Disabled |
| Static Simulation | Test mode without real device | Disabled |
💡 Tip: Enable Static Simulation during development to test views without connecting to physical devices.
Step 2: Create Groups
Organize tags into logical groups:
- Select the channel
- Click Add Group
- Enter a group name (e.g.,
Temperature_Sensors,Motor_Controls) - Click Confirm
Step 3: Add External Tags
Method 1: Manual Creation
- Select a group
- Click Add in the toolbar
- Configure tag properties in the list
Method 2: Load from Device (Advanced)
Some protocols (OPC UA, S7Comm Plus, EtherNet/IP) support browsing device tags:
- Select a group
- Click Load Tags
- Browse the device tag tree
- Select tags to import
- Click Add
📷 [UG-TAGS-EXT-02] OPC UA tag browser showing device hierarchy
Recommended First External Tag Set
For the first external-tag test, keep the scope small:
| Tag Name | Type | Example Address | Why start with it |
|---|---|---|---|
Temperature | Float32 | 400001 | Easy analog value to display on a screen |
Pressure | Float32 | 400003 | Second analog value for comparison and trends |
MotorRunning | Bool | 300001 | Simple status bit for indicators and alarms |
If you are using Static Simulation, use the same tag set so the rest of the guides still match your project.
Step 4: Configure Tag Properties
| Property | Description | Example |
|---|---|---|
| Tag Name | Unique identifier (letters, numbers, underscore, dot; must start with letter/underscore) | Temperature |
| Description | Human-readable label | Main process temperature |
| Group | Parent group | Process_Values |
| Data Type | Value type | Float32, Int16, Bool, String |
| Address | Device register address | 400001 (Modbus holding register) |
| Access Mode | Read/write permissions | Read/Write, Read Only, Write Only |
| Poll Interval | Update frequency | 100ms, 500ms, 1s |
| Poll Mode | When to collect data | Service Running, Page Usage |
| Scale Factor | Multiply raw value | 10 (display 100 for raw value 10) |
| Decimal Places | Precision | 2 (show 12.34) |
| Rounding Rule | How to round | Round, Truncate, Ceiling |
| Historian | Enable historical logging | Enabled / Disabled |
Modbus TCP Address Format
| Register Type | Address Range | Bit Address | Data Types | Access |
|---|---|---|---|---|
| Coil Status | 000001-065536 | N/A | Bool | Read/Write |
| Discrete Input | 100001-165536 | N/A | Bool | Read Only |
| Input Register | 300001-365536 | 0-15 | Bool, Int, Float, String | Read Only |
| Holding Register | 400001-465536 | 0-15 | Bool, Int, Float, String | Read/Write |
⚠️ Caution: Address formats vary by protocol. Refer to the "Device Communication Manual" for protocol-specific details.
Step 5: Optimize Tag Configuration
Click Save and Optimize to validate your tag configuration:
Validation Checks:
- Address Overlap: Detects tags with overlapping memory addresses (writing one tag may change another)
- PDU Length: Ensures tag size doesn't exceed the PDU limit
📷 [UG-TAGS-EXT-03] Optimization results showing warnings with hover tooltips
Hover over warning icons to see details. Fix issues or click Ignore to dismiss warnings.
Step 6: Test Communication
- Click Start Debug in the toolbar
- Monitor tag values in real-time
- Write test values to writable tags
- Check quality status codes
Quality Status Codes:
| Code | Description | Action |
|---|---|---|
0 | Success | Normal operation |
1 | Tag name not found | Verify tag exists |
2 | Data type mismatch | Check data type compatibility |
3 | Device disconnected | Troubleshoot network/device |
4 | Other error | Check logs for details |
Debug Columns:
- Current Value: Live tag value (editable for write operations)
- Quality: Status code (see table above)
- Last Change: Timestamp of last value change
- Poll Status:
true(actively polling) orfalse(not polling)
💡 Tip: Use Poll Mode = Page Usage for HMI applications to reduce CPU load. Tags only poll when displayed on an active view.
Best Practices
Naming Conventions
Use consistent, descriptive names:
<Line>_<Equipment>_<Parameter>_<Index>
Examples:
Station_A_Temperature_01
Station_A_Pressure_01
Station_A_MotorRunning
Organize with Groups
Group tags by:
- Equipment:
Pump_Tags,Motor_Tags - Function:
Temperature_Sensors,Motor_Controls - Location:
Station_A_Tags,UtilityRoom_Tags
Optimize Poll Intervals
| Update Frequency | Poll Interval | Use Case |
|---|---|---|
| Critical control | 100ms | Safety interlocks, fast loops |
| Real-time monitoring | 500ms - 1s | HMI displays, alarms |
| Slow processes | 5s - 1m | Temperature, batch status |
| Status checks | 1m+ | Equipment health, diagnostics |
Next Steps
- Understanding Views: Move on after your tags show healthy values or successful simulation behavior
- Creating Monitoring Views: Bind the verified tags to your first runtime screen
- Configuring Historian: Add history after the first monitoring path is working
- Tags Reference: Return here for data types, quality codes, and troubleshooting