Skip to main content
Call Eric:863-698-8266
CURRYCONTROLS.COMControls & Automation Knowledge Hub
How-ToHow-ToSCADAHMIDocumentationProgramming

How to Build a Tag

Create a SCADA tag that is correct, documented, and consistent with every other tag: name it by the convention, bind it to the right controller address or name, and verify it against the live value and the I/O list before it goes on a screen.

7 min readUpdated Sep 5, 2026Published Sep 5, 2026By Eric Sullivan

The short answer

How to Build a Tag

To build a tag, take its identity from the I/O list or the controller tag database, name it by the plant convention so that the name says the site, the equipment, and the parameter, bind it to the controller tag by name or to the register address with the right data type and word order, set the engineering units and, only if the controller does not already scale it, the scaling, write a description that a stranger would understand, apply the alarm limits and the history settings from the standard for that kind of tag, and verify it: the live value against the controller, the units against the I/O list, and the alarm against a forced condition. A tag built any other way is a tag that will be wrong somewhere for years.

Key points

  • The tag identity comes from the I/O list or the controller database, never invented at the screen.
  • Name by the convention: site, equipment, parameter, with the suffix for the tag kind.
  • Bind by controller tag name where the platform allows; by address with explicit data type and word order otherwise.
  • Scale in the controller; the SCADA tag carries units and a description, not a second scaling.
  • Apply the alarm and history standard for the tag class, then verify against the live value.

What you need

  • The I/O list or the controller tag export for the point
  • The plant tag naming convention and the tag class standards for alarms and history
  • The SCADA designer or tag editor with rights to create tags
  • A live connection to the controller for verification
  • The screen or template the tag will be used on

Procedure

  1. 1

    Identify the point

    From the I/O list or the controller tag database: what it is, its range and units, its controller tag or address, and its data type. If it is not on the list, it goes on the list first.

  2. 2

    Name it

    By the convention: for example site, equipment, parameter, and kind, such as LS12_P1_RUN or WTP_FIT101_PV. The name must sort with its siblings and tell a reader what it is without the description.

  3. 3

    Bind it

    To the controller tag by name on platforms that browse the controller, or to the register address with the function code or table, the data type, the word order for 32-bit values, and the unit identifier. Test the bind by reading the value.

  4. 4

    Set the type and units

    Boolean, integer, or float to match the source; engineering units as a label; no scaling if the controller already provides engineering units, and the exact controller scaling if it does not.

  5. 5

    Describe it

    A description a stranger would understand: Lift station 12, pump 1 running feedback. Not the tag name repeated.

  6. 6

    Apply the class standard

    For an analog process value: alarm limits from the alarm list, deadband, delay, history at the standard interval and deadband. For a discrete status: history on change. For a setpoint: write access by role, limits, audit. The standard says which; the tag gets it.

  7. 7

    Group it

    Into the folder, area, or structure the platform uses, so that security, alarm areas, and screens find it. On platforms with user-defined types, the tag is an instance member, not a loose tag.

  8. 8

    Verify

    Live value against the controller display; units and range against the I/O list; the alarm by forcing the condition; the history by trending it. Then put it on the screen.

  9. 9

    Record

    The tag export or the change log entry, so the tag database and the I/O list stay in step.

FieldComes fromCommon mistake
NameConventionInvented at the screen; inconsistent with siblings
Address or bindingController database or mapWrong table, offset by one, wrong word order
Data typeControllerFloat bound as integer; signed as unsigned
UnitsI/O listMissing, or different from the controller
ScalingController, ideally none in SCADADouble scaling; a percent tag displayed as engineering
DescriptionI/O listBlank or the name repeated
AlarmsAlarm list and class standardLimits guessed; no deadband; wrong priority
HistoryClass standardNot historized; or historized at a rate that fills the disk

Frequently asked questions

Should the SCADA tag scale the raw value?
No, if the controller can scale it, which it can. The controller holds the engineering value in a float; SCADA displays it. Scaling in SCADA creates a second place for the range to be wrong.
What goes in the description?
What the point is, where, and in what units, in words: Clearwell level, feet above floor. The description appears in alarm messages and tag browsers and is what a new operator reads.
How do I keep tag names consistent across sites?
A written convention, a template per equipment class, and a review of every tag export against the convention before it goes live. Naming drift is the main reason screens from two integrators look like two plants.
The value shows on the screen but is wrong.
Check the binding: table, offset, data type, word order, and unit identifier; then the scaling in both places. Read the raw value at the controller and compare.

Direct contact

Have a controls question?

Reach Eric Sullivan directly about anything on this site, a controls or automation topic, or one of his personal projects.