Productivity 3000 Tag Import Needs Unique 6-Digit System IDs

Brian Holt8 min read
AutomationDirectHMI ProgrammingTroubleshooting
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

The Productivity 3000 tag database identifies every tag by the value in its ## System ID column. The tag name is only an attribute of that record. Most CSV import problems come from treating the name as the key. Three quick fixes usually come first, and each one fails in a different way. Work through them below, then use the procedure that builds new tags cleanly.

Stop Search-and-Replacing the Exported CSV

The usual first attempt goes like this:

  1. Export the tag database to get the column layout.
  2. Run search and replace on the tag names to make a second set, for example Pump1_ to Pump2_.
  3. Save the file and import it.

What happens: no new tags appear. The original tags in the program change to the new names.

Why: search and replace changed the names but left every ## System ID alone. When the importer finds a System ID that already exists in the project, it updates that record. You renamed your existing tags. Every ladder rung that used them now shows the new names, because the logic points at the System ID and not at the name text.

Stop here if you already did this on a live project. Go to the rename-recovery section before you edit anything else.

Do Not Blank the ## System ID Column

The second attempt is to delete everything in the ## System ID column and expect the software to assign IDs, the way the Add Tags dialog does.

What happens: the import fails with:

Unable to import tags, Error in Line 2, System ID is required

Why: the CSV importer does not generate IDs. Every row needs one. Line 1 is the header row, so Line 2 is the first tag, and the importer stops on the first row that has no ID. Nothing gets imported, so the project is unchanged. This failure is harmless, but it does not get you any closer to new tags.

Do Not Shorten the ID Number

The third trap is quieter. You type the IDs yourself and use a short number, such as C-0001.

What happens:

  • The import succeeds.
  • The tags show up in the tag database.
  • You can place them in ladder.
  • Compile then fails with an invalid tag name or system ID message.

Why: the numeric part of the System ID must be exactly six digits, padded with leading zeros. The import step does not check the digit count, but the compiler does. C-0001 gets through import and then fails at compile. C-000001 compiles. Changing every short ID to the six-digit form clears the compile error.

This one hurts most, because you may have written a lot of logic against the bad tags before you find out. Pad the IDs before you import, not after.

Understand What the Importer Keys On

Every row in the tag CSV has a System ID made of a data-type prefix, a hyphen, and a six-digit number:

Data type System ID format Example
Unsigned 16-bit integer US16-nnnnnn
Float, 32-bit F32-nnnnnn
Type using prefix C C-nnnnnn C-000001

nnnnnn is any unique number from 1 to 999999, always written with six digits. For the full list of type prefixes, open the programming software Help and search for topic P025, the tag Import topic. It defines each available data type and how to write its System ID. Check the prefix there before you build a large file. Do not guess a prefix from a tag name.

The importer handles each row according to the state of its System ID:

Symptom State of the System ID in the CSV Importer behavior Fix
Existing tags renamed, no new tags added Matches an ID already in the project Updates the existing record Give new tags new IDs
Unable to import tags, Error in Line 2, System ID is required Blank Rejects the whole import Fill in an ID on every row
Import OK, compile reports invalid tag name or system ID Fewer than six digits, for example C-0001 Accepted at import, rejected at compile Pad to six digits, for example C-000001
Clean import, new tags present, compile OK Correct prefix, six digits, not used in the project Creates a new record None

A new tag has one rule: its System ID must be unique and must not already be in use in the program. Treat the six-digit number as unique across the whole file, not just within one prefix. That removes any doubt about collisions.

Build a New Tag Set That Imports Clean

Get it running, then fix it properly. For a tag set that needs no Add Tags dialog work, follow these steps:

  1. Export the current tag database. Save an untouched copy with a name like tags_ORIGINAL.csv. This file is also your undo.
  2. Work in a second copy. Leave the existing rows exactly as exported. Do not edit their names or IDs.
  3. Find the IDs already in use. Sort or filter the ## System ID column and note the highest number used for each prefix.
  4. Pick a starting number above everything in use. Any number up to 999999 works if it is unused. A round block such as 500000 is easy to spot later.
  5. Add the new tags as new rows below the existing ones. Fill in the name and the other columns in the same layout as the export.
  6. Give each new row a System ID with the correct type prefix from Help topic P025 and a six-digit number from your block.
  7. Check for duplicates in the ## System ID column before you save.
  8. Save as CSV and import it into the project.
  9. Compile right away, before you write any logic against the new tags.

Stop here if step 3 shows IDs near 999999 for a type you need. There is no room left above them. Pick unused numbers lower in the range and check each one against the export.

Generate the IDs in the Spreadsheet

Typing hundreds of IDs by hand is how short or duplicate numbers get in. Let the spreadsheet build them. The example below assumes the new tags start on spreadsheet row 200 and uses a starting block of 500000. Change both numbers to match your file.

Unsigned 16-bit integer:
="US16-"&TEXT(500000+ROW()-200,"000000")

Float, 32-bit:
="F32-"&TEXT(500000+ROW()-200,"000000")

Duplicate check (put in a spare column, fill down):
=COUNTIF($B:$B,B200)>1

Notes:

  • TEXT(...,"000000") forces six digits. This is the step that prevents the C-0001 compile failure.
  • Adjust $B:$B to the column that holds ## System ID in your export.
  • Before saving, copy the formula cells and use Paste Values. The CSV must contain the ID text, not formulas.
  • Delete the duplicate-check column before saving, or it will be imported as extra data.
  • Keep the header row and column order exactly as exported. The importer expects the export layout.

Undo an Accidental Rename

If a search-and-replace import already renamed tags in the project, the logic is still intact. The rungs still point at the same System IDs. Only the names changed. The importer updates names by ID, so you can put the old names back the same way:

  1. Find the export you made before the edit, with the original names and IDs.
  2. Import that file. Each matching System ID gets its original name back.
  3. Open a few rungs that use the affected tags and confirm the original names show.
  4. Now build the second tag set with the procedure above.

If you have no pre-edit export, reverse the search and replace on the edited file (new text back to old text) and import that. Stop here if the edit was not a simple one-to-one text swap, for example if two old names now read the same. Restore the project from its last saved backup instead of guessing.

Verify Before You Download

  1. Tag count: the tag database should hold the original count plus the number of rows you added. If the count did not grow, your new rows reused existing IDs.
  2. Original names intact: spot-check several existing tags in ladder. They should still have their original names.
  3. Re-export and compare: export again and compare it with tags_ORIGINAL.csv. The existing rows should match exactly. Only the new rows should be different.
  4. Compile clean: a compile with no invalid tag name or system ID message confirms every ID has the correct six-digit format.
  5. Use one new tag of each type in a test rung and compile again before you commit to the full set.

FAQ

Can I leave the System ID blank and let Productivity 3000 assign it on import?

No. A blank ## System ID stops the import with "Unable to import tags, Error in Line 2, System ID is required." Only the Add Tags dialog assigns IDs automatically, so every CSV row needs a prefix plus a six-digit number.

Does search and replace on an exported tag CSV create new tags?

No. The System IDs still match the existing tags, so the import renames them. To add tags, append new rows with System IDs that are not used anywhere in the program.

Can I use C-0001 instead of C-000001 as a System ID?

It imports and you can use it in ladder, but compile fails with an invalid tag name or system ID message. Always write six digits, for example C-000001, , or .

Can I reuse a System ID number that already exists in the project?

Not for a new tag. An ID already in use tells the importer to update that existing tag, so it overwrites the tag instead of adding one. Pick numbers from 1 to 999999 above the highest in-use value in your export.

Can I fix an import that still fails after the IDs are unique and six digits?

Compare your file with a fresh export for column order, header text, and type prefixes from Help topic P025, then try one row at a time to find the bad line. If a single correctly formatted row still fails, or the tag database looks damaged after an import, stop editing the project. Restore the last saved backup and contact AutomationDirect technical support with the CSV, the exact error text, and your software version.

Back to blog