Bulk Editing PLC Tag Values: Ignition and Studio 5000 Methods

Jason IP6 min read
Other ManufacturerOther TopicTechnical Reference
Licensed PE Working through this on a live machine? A Maine-licensed engineer can take it from here — included with IMD hardware, by the hour for everything else. Book an engineer

Overview: The Multi-Server Tag Editing Problem

Managing setpoints, alarm limits, and configuration values across a campus of identical PLC-controlled buildings is a recurring engineering problem. When each building hosts its own Ignition gateway (or a parallel set of HMI/SCADA nodes) and shares 30–50 tags with the same semantic role, manual point-and-click editing becomes error-prone. This reference compares three field-proven workflows: Ignition scripting with system.tag.writeBlocking and system.tag.configure, Studio 5000 Logix Designer CSV import/export, and KEPServerEX bulk write. Each method fits a different layer of the automation stack and a different ownership model.

Method 1: Ignition Gateway Script Console (Recommended for Cross-Building Tag Writes)

Ignition by Inductive Automation exposes a Python-compatible scripting environment on every gateway, and the same script can be authored once and pushed to N gateways via the Ignition 8.1 Scripting Functions appendix. The recommended pattern is to keep the source-of-truth spreadsheet in Excel, generate a JSON payload, and use the script console as the write engine.

Prerequisites

  • Ignition 8.1.x or later (script console, system.tag module)
  • Uniform tag folder structure per building (e.g., [default]BuildingA/Setpoints/SP_Temp)
  • Read/write permission on the target tag provider for the script-runner account

Step-by-Step Procedure

  1. Build an Excel template with three columns: tag_path, value, and datatype (optional, for verification).
  2. Use a VBA macro to format the rows into a JSON array, e.g. [{"path":"[default]BuildingA/Setpoints/SP_Temp","value":72.5},...].
  3. Copy the JSON into the Ignition Script Console payload field.
  4. Run a generic write script that iterates the payload and calls system.tag.writeBlocking in batches of 25–50 paths to avoid gateway timeouts.

Working Script

# Ignition Script Console - generic bulk writer
payload = [{'path':'[default]BuildingA/Setpoints/SP_Temp','value':72.5},
           {'path':'[default]BuildingA/Setpoints/SP_Press','value':14.2}]

paths   = [p['path']  for p in payload]
values  = [p['value'] for p in payload]

results = system.tag.writeBlocking(paths, values)
failed  = [(paths[i], values[i]) for i,r in enumerate(results) if not r.isGood()]
print 'Wrote', len(results)-len(failed), 'of', len(results), 'tags'
print 'Failures:', failed

For property changes (engineering units, alarm limits, deadbands) that writeBlocking cannot touch, escalate to system.tag.getConfiguration and system.tag.configure per the system.tag scripting reference. The PLCtalk thread on bulk-editing AOI tags documents the same pattern at the Studio 5000 layer, where an L5X export is the equivalent of the JSON payload.

Tag Report Tool Alternative

For one-time bulk edits of a single property to a single value, the built-in Tag Report Tool in the Ignition Designer web interface supports multi-select tag operations without scripting. The tool is useful for setting documentation strings or initial alarm limits but does not scale to per-tag calculated values, which is where the JSON payload method dominates.

Method 2: Studio 5000 Logix Designer CSV Import/Export

When the source of truth lives in Logix Designer (CompactLogix, ControlLogix) rather than in Ignition, the L5X/CSV export-import cycle is the canonical bulk-edit path. The Inductive Automation CSV import demo shows the analogous workflow for Ignition's own tag database.

Procedure for Studio 5000 v33/v34

  1. Open the AOI or program that contains the bulk tags.
  2. Export → .L5X (XML). For Logix Designer v33 and later, the CSV Export/Import option is available under Logic → Export Tags and Import Tags.
  3. Edit the CSV externally (Excel, Notepad++). Required columns: Name, DataType, Value (or Specifier).
  4. Re-import and allow Logix Designer to merge or overwrite based on your selection.
  5. Verify by reading the tags through Monitor Tags in Studio 5000 or via RSLinx.
Caution: CSV import overwrites the full tag definition, not just the value. Always export the working AOI first, and use a version-controlled SCM (Git) to diff changes before going online with the controller.

Method 3: KEPServerEX Bulk Write via Quick Client or API

For installations where KEPServerEX is the OPC DA/UA server fronting a Mitsubishi, Allen-Bradley, or Siemens PLC, the PTC community thread on KEPServerEX bulk updates confirms that the Quick Client and the KEPServerEX Configuration API both support iterating the tag list and writing each value. For 2,000+ tags, batch the writes in groups of 100 to avoid exhausting the OPC session's subscription buffer.

KEPServerEX REST Config API Skeleton

POST /config/v1/project/channels/Channel1/devices/PLC1/tags
Authorization: Basic <base64 user:pass>
Content-Type: application/json

[
  {"common.ALLTYPES_NAME":"SP_Temp","servermain.TAG_DATA":"72.5"},
  {"common.ALLTYPES_NAME":"SP_Press","servermain.TAG_DATA":"14.2"}
]

This is a write to the tag definition, not a runtime value override. For runtime value writes from the Ignition side, use the Ignition KEPware driver or the OPC-UA client; the runtime path is preferred for setpoint changes that should not persist to the server's project file.

Method Comparison

Criterion Ignition Script Console Studio 5000 CSV/L5X KEPServerEX Config API
Layer SCADA/HMI runtime Controller program OPC server project
Best for Setpoints, alarm limits, mode bits AOI instance parameters, tag database overhaul Initial commissioning, 2,000+ tag sweeps
Change scope Value + select properties Full tag definition Tag definition (not runtime value)
Rollback Re-run script with prior JSON Git diff on L5X Server project backup restore
Multi-gateway scaling High (same script, N gateways) Medium (one program per controller) Low (one server per site)
Prereq tools Excel + VBA, Python in Ignition Logix Designer v33+

Field-Proven Caveats and Standards References

Three operational constraints surface repeatedly when bulk-editing tags across a campus:

  1. Atomicity. Neither writeBlocking nor the L5X import is transactional. A partial failure leaves the database in a mixed state. Always log successes and failures, and design the JSON payload to be idempotent (re-runnable without side effects).
  2. Permissions. Per the Ignition Gateway Security documentation, the script console runs under the gateway's user context, which may differ from a designer session. Confirm the role has Tag - Write on the target provider.
  3. Standards. OPC UA Part 100 (IEC 62541) defines bulk-read/bulk-write service sets that Ignition's writeBlocking and KEPServerEX's WriteTags COM call both implement. For regulated environments (21 CFR Part 11, IEC 62443), maintain an audit log of the JSON payloads, the operator ID, and a hash of the pre/post tag values.

Verification Procedure

After any bulk edit, verify in three layers:

  1. Controller layer: Read back the tag from the PLC via RSLinx/Studio 5000 (if Studio 5000 path) or via an OPC-UA browse.
  2. SCADA layer: Confirm in an Ignition Vision or Perspective client window that the new value is bound and showing good quality.
  3. Application layer: Trigger a downstream consumer (PID loop, alarm, interlock) and observe correct response within the expected scan period.

What is the fastest way to bulk-write 50 setpoints to one Ignition gateway?

Build a JSON array of {path, value} pairs in Excel using a VBA macro, paste it into the Ignition Script Console, and run a script that calls system.tag.writeBlocking(paths, values) in batches of 25–50. Total runtime is typically under 2 seconds for 50 tags on a local gateway.

Can I edit the same 50 tags across 10 Ignition gateways in one operation?

Yes, but not from a single script. Author the JSON payload once, then either (a) script the writes remotely through the Gateway Network, or (b) paste the payload into each gateway's Script Console and execute. Option (b) is the most auditable; option (a) requires a Gateway Network configuration and is faster but harder to roll back per-site.

Does Studio 5000 CSV import overwrite tag values or full definitions?

In Logix Designer v33 and later, the CSV Import operation can be scoped to values only or to full definitions. Always export the current AOI/program to an L5X file first, perform the CSV edit, and diff the L5X before going online to confirm no unintended structural changes.

How do I bulk-write 2,000 tags through KEPServerEX?

Use the KEPServerEX Configuration REST API (POST to /config/v1/project/channels/.../tags) in batches of 100, or use the COM WriteTags call from a Python/C# script. The Quick Client is useful for one-off spot checks but is not designed for 2,000-tag sweeps.

Where can I find the official scripting reference for Ignition's system.tag module?

The canonical reference is the Inductive Automation system.tag scripting functions page for Ignition 8.1, which documents writeBlocking, getConfiguration, configure, and the asynchronous writeAsync variant.

Back to blog