Tag Registration
A [tag] is a name given to one memory cell in a PLC. Since each PLC uses a different memory address notation, refer to the page for your specific PLC model.
- Mitsubishi: formats like
D100,M50 - Siemens: formats like
%DB1.DBW0 - LS: formats like
D00309 - OPC-UA: formats like
ns=2;s=Channel1.Device1.Tag1
For detailed notation, see the [PLC Address] section on each PLC page → PLC Type Guide
Input Fields
Enter the following information for each tag line:
| Field | What to enter |
|---|---|
| Tag Name | Name displayed on screen. Korean characters allowed (e.g., 펌프1 회전수) |
| PLC Address | Address notation from the PLC manual (e.g., D100) |
| Data Type | One of Float, Integer, Boolean, String, Long, Double |
Format Helper (format) | DW for 32-bit, REAL for floating-point, etc. (optional) |
| Formula | Post-processing expression such as unit conversion (optional). See Apply Formula for details |
| Description | Notes. Displayed alongside the tag on screen |
Data Type Guide
| Data Type | Width/Sign | When to use | Example |
|---|---|---|---|
Boolean | 1 bit | On/off, ON/OFF | Pump running / Alarm ON |
Integer | 16-bit signed | Integer (including negatives) — most common | Counter, rotation speed |
Long | 64-bit signed | Large integers (exceeding 32-bit) | Cumulative production count |
Float | 32-bit float | Values with decimal points | Temperature, pressure, speed |
Double | 64-bit float | High-precision decimal values | Precision measurement data |
String | Variable | String | Batch name, recipe name |
Precision types that specify sign/width in the name (same meaning as Kepware):
| Data Type | Width/Sign | When to use |
|---|---|---|
Short | 16-bit signed | Same as Integer (explicit name) |
Word | 16-bit unsigned | 0–65535 counter (no negatives) |
DInt | 32-bit signed | 32-bit integer (replaces old Integer+DW combination) |
DWord | 32-bit unsigned | Cumulative counters exceeding 2.1 billion (2^31) — values that used to fail with Integer |
QWord | 64-bit unsigned | Large unsigned counters |
Byte | 8-bit unsigned | Status byte |
- S7
Integer: Corrected from misreading as unsigned (u16) to signed (s16) — resolves the issue where negatives appeared as values like 65531. UseWordif unsigned is needed. - S7 / MELSEC
Long: Unified from 32-bit reading to 64-bit standard. Tags previously reading 32-bit viaLongshould be changed toDInt(signed) orDWord(unsigned).
Array Tags (Base[N])
Registering in the format elementType[count] as in DInt[10] reads a contiguous region as a single tag and stores it as a JSON array string ("[1,2,3]").
Supported drivers (expanded as of 2026.07): EIP + MELSEC / S7 / Modbus / LS. Only numeric element types are actually collected.
(String arrays cannot be registered; Boolean/Byte arrays are unsupported by drivers — values will be empty.)
Per-driver limits: Modbus total 125 words · LS total 64 words · MELSEC by series (Q/L·iQ-R 960 / QnA 480 / A 32 words)
S7 negotiated PDU − 19 bytes — if exceeded, values are empty, so reduce N or split the tag. Array tags are read-only (write not supported).
Format Helper (format) Guide
Even with the same PLC address, the value can differ depending on how it's interpreted. This includes cases like combining two 16-bit memory cells to read as 32-bit, or combining four cells to read as a 64-bit float.
| Your value type | 데이터 형식 | 형식 보조 |
|---|---|---|
| 16-bit integer (most common) | Integer | (leave empty) |
| 16-bit unsigned integer | Integer | UI |
| 32-bit integer (two memory cells) | Integer | DW |
| 32-bit float (most common float type) | Float | REAL |
| 64-bit float (high precision) | Double | LREAL |
| 1 bit (on/off) | Boolean | (leave empty) |
| Specific bit within a word | Boolean | BIN[3] (bit 3) |
| String of N characters | String | STR[N] (e.g., STR[10]) |
If you have a 32-bit / 64-bit value but leave the format helper empty, it will be misread as 16-bit, making the value abnormally small or large. In that case, fill the format field with values like DW, REAL, LREAL.
Advanced Tag Settings (Kepware Reference)
Tags can also store the following optional settings (if all unset, existing behavior remains).
Currently specified via backup/restore JSON (/connect/restore) or REST; values are stored alongside the tag row.
| Setting | Value | Meaning |
|---|---|---|
byte_order | AB_CD BA_DC CD_AB DC_BA | 32/64-bit byte/word order (unset = protocol default) |
scaling_type | linear sqrt | Raw value → engineering unit conversion |
raw_low/raw_high | number | Scaling input (raw) range |
scaled_low/scaled_high | number | Scaling output (engineering) range |
clamp | true/false | Clamp output to scaled range |
negate | true/false | Sign inversion |
units | string | Unit label (e.g., degC) |
client_access | R / RW | When R, write API is rejected (read-only) |
deadband | number | Skip publishing if change from previous value is below this threshold |
scan_divisor | integer | Read once every n cycles (multiple of collection interval) |
Example — linear conversion of raw 0..4095 from 4–20mA to 0..100%, with minor fluctuation suppression:
{"tags":[{ "opc_id":"OPC_X", "tag_id":"TAG_PCT", "tag_name":"압력%",
"data_type":"Float", "plc_address":"D100",
"scaling_type":"linear", "raw_low":0, "raw_high":4095,
"scaled_low":0, "scaled_high":100, "clamp":true, "deadband":0.5 }]}
Can be used together with formulas (fomula) — the formula is applied on top of the scaling result.
The same settings can be specified in CSV batch registration (/ui/connect/csv) — optional columns after the default 9 columns:
RAW_TYPE, BYTE_ORDER, SCALING_TYPE, RAW_LOW, RAW_HIGH, SCALED_LOW, SCALED_HIGH, CLAMP, NEGATE, UNITS, CLIENT_ACCESS, DEADBAND, SCAN_DIVISOR, TAG_GROUP.
Existing 9-column CSVs work unchanged. JSON backup/restore always includes these settings (items unset are omitted from the file).
How to Register
Method 1 — Add Together in the PLC Registration Form
The [Add Connection] or [Edit] screen includes a tag input table. Press the [+ Add Tag] button to add a row, enter each tag line by line, then press [Save].
Method 2 — Add Tags to an Already Registered PLC
- [Connections] menu → click the PLC on the left
- Click the [Add Tag] button above the [Tag List] on the right
- Add tags one by one. Values start coming in at the next collection interval immediately.
Method 3 — CSV Batch Upload
If you have dozens or more tags, the [CSV Batch Upload] button at the top right of [Connections] is faster. The CSV template can be downloaded from the upload screen.
Verifying Registration
Click on the PLC to see registered tags in the [Tag List] on the right.
| Column | Meaning |
|---|---|
| Tag Name / Address / Type | As registered |
| Current Value | Most recently collected value (auto-refreshes every 5 seconds) |
| Collection Time | When that value was received |
| Status | 정상 / 오류 |
If an error appears, it's likely a typo in the PLC address notation or a data type mismatch. Refer to Troubleshooting — Values look wrong.
Modifying / Deleting Tags
- Click a row in the tag list to open the edit form.
- Use the [Delete] button at the end of each row to delete one at a time.
Changes apply at the next collection interval.
FAQ
Q. How do I find out the PLC address?
- PLC programmer / equipment manufacturer manuals often include a "data mapping table."
- You can check addresses in use via the "Watch table / monitor screen" in PLC programming tools (GX Works, TIA Portal, XG5000, etc.).
- For OPC-UA, using a free client like UA Expert to click/copy addresses is the most accurate method.
Q. How is the tag ID assigned?
The gateway automatically assigns IDs in the <connection-id>_TAG_<number> format. You can specify them manually, but only use English letters, numbers, and underscores.
Q. Can I register the same address as two tags?
Yes. This is often used when applying different formulas to the same raw value to send it in two units (e.g., temperature raw + temperature_F Fahrenheit conversion).
Q. How many tags can I register per PLC?
Several hundred is no problem. However, since all must be read within the collection interval, consider how much time the PLC needs to respond. If tags for one PLC exceed 1000, it's advisable to monitor PLC load / network latency as well.