# Using Tag Parameter in UDT

**URL:** <https://forum.inductiveautomation.com/t/using-tag-parameter-in-udt/111136>\
**Category:** Ignition\
**Created:** [October 1, 2025, 3:59pm UTC](https://forum.inductiveautomation.com/t/using-tag-parameter-in-udt/111136 "2025-10-01T15:59:12Z")\
**Posts on this page:** 17\
**Page:** 1

<div class="post-metadata">

**Author:** ![dis](https://avatars.discourse-cdn.com/v4/letter/d/e99b99/32.png) [@dis](https://forum.inductiveautomation.com/u/dis)\
**Post date:** [October 1, 2025, 3:59pm UTC](https://forum.inductiveautomation.com/t/using-tag-parameter-in-udt/111136/1 "2025-10-01T15:59:12Z")

</div>

I have a UDT that I generated by browsing the tags in the PLC. I’ve added a parameter that is named idx it’s datatype is Integer.

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/3/2/325dacaa7e2f345bb9c4e65323939908888ca9f5.png)

The AGITATOR tag has the OPC Item Path set to

`ns=1;s=[PLC]Formulas[{idx}].HEADER.AGITATOR`

The INGR\_CALCTYPE tag has the OPC Item Path set to

`ns=1;s=[PLC]Formulas[{idx}].STEP[1].INGR_CalcType`

When I create a new tag from the UDT and set the idx the tags under the HEADER folder have the {idx} replaced with the value of the parameter. However none of the tags under STEP\STEP\_1\_ get the paramter replaced. The tag in the browser shows {idx}.

Is there a limit to the number of levels that Ignition traverses when a tag is created?

---

<div class="post-metadata">

**Author:** ![MMaynard](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/mmaynard/32/3366_2.png) [@MMaynard](https://forum.inductiveautomation.com/u/MMaynard)\
**Post date:** [October 1, 2025, 4:54pm UTC](https://forum.inductiveautomation.com/t/using-tag-parameter-in-udt/111136/2 "2025-10-01T16:54:14Z")

</div>

no limits afaik.

Does the instance of the UDT show any errors if you right click the tag and choose View Tag Diagnostics?

Can you show us screenshots of the UDT properties and then the UDT instance that is showing this?

---

<div class="post-metadata">

**Author:** ![robertm](https://avatars.discourse-cdn.com/v4/letter/r/ea5d25/32.png) [@robertm](https://forum.inductiveautomation.com/u/robertm)\
**Post date:** [October 1, 2025, 5:25pm UTC](https://forum.inductiveautomation.com/t/using-tag-parameter-in-udt/111136/3 "2025-10-01T17:25:36Z")

</div>

From the PLC side looks like you have nested arrays of UDTs. Formula is an array of one UDT that contains another array of STEP UDT. What is the Calc\_Type? Is that a supported datatype and not another root UDT type?

One test, go to the OPC browser and drag that one tag into the tag provider and make sure the generated syntax matches what you’re using.

---

<div class="post-metadata">

**Author:** ![dis](https://avatars.discourse-cdn.com/v4/letter/d/e99b99/32.png) [@dis](https://forum.inductiveautomation.com/u/dis)\
**Post date:** [October 1, 2025, 5:36pm UTC](https://forum.inductiveautomation.com/t/using-tag-parameter-in-udt/111136/4 "2025-10-01T17:36:25Z")

</div>

CalcType is a string tag. The UDT was created by browsing to the PLC and creating the structure from tag in the PLC.

The PLC Tag is an array type of a UDT Formula.

The Formula UDT has a 2nd UDT with tag members of Integer, Boolean, Float, String datatypes

Step is an array of a 3rd UDT with tag members of Integer, Boolean, Float, String datatypes

```python
Formula[1..99].HEADER.TagA
...
Formula[1..99].HEADER.TagF

Formula[1..99].STEP[1..99].TagA
...
Formula[1..99].STEP[1..99].TagF

```

I’m not sure why the Step

---

<div class="post-metadata">

**Author:** ![dis](https://avatars.discourse-cdn.com/v4/letter/d/e99b99/32.png) [@dis](https://forum.inductiveautomation.com/u/dis)\
**Post date:** [October 1, 2025, 5:39pm UTC](https://forum.inductiveautomation.com/t/using-tag-parameter-in-udt/111136/5 "2025-10-01T17:39:32Z")

</div>

You can when the tag was created the system did not replace with parameter placeholder {idx} with the value of the parameter.

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/7/a/7a9492bbc3fd8ad1b68bcc8e1516037629277c24.png)

---

<div class="post-metadata">

**Author:** ![lrose](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/lrose/32/62724_2.png) [@lrose](https://forum.inductiveautomation.com/u/lrose)\
**Post date:** [October 1, 2025, 5:41pm UTC](https://forum.inductiveautomation.com/t/using-tag-parameter-in-udt/111136/6 "2025-10-01T17:41:32Z")

</div>

Can you show how the OPC Item Path is configured for the STEP UDT?

---

<div class="post-metadata">

**Author:** ![dis](https://avatars.discourse-cdn.com/v4/letter/d/e99b99/32.png) [@dis](https://forum.inductiveautomation.com/u/dis)\
**Post date:** [October 1, 2025, 5:58pm UTC](https://forum.inductiveautomation.com/t/using-tag-parameter-in-udt/111136/7 "2025-10-01T17:58:30Z")

</div>

Digging a bit deeper I found an issue but not sure how to fix it.

The tags under HEADER show up that they are linked with a parameter

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/2/7/2735642c269baec68662cd6d4c0b79ba8ec949d2.png)

For the Step tags it doesn’t recognize the paramter no blue link

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/9/6/969bf0eddffa44a535da04bd49575442f128c4ca.png)

---

<div class="post-metadata">

**Author:** ![vtran](https://avatars.discourse-cdn.com/v4/letter/v/779978/32.png) [@vtran](https://forum.inductiveautomation.com/u/vtran)\
**Post date:** [October 1, 2025, 6:18pm UTC](https://forum.inductiveautomation.com/t/using-tag-parameter-in-udt/111136/8 "2025-10-01T18:18:14Z")

</div>

if you go to the UDT definition, locate the tag in the tag browser, and right click on the `INGR_CalcType` and select `Edit (raw)`. Do you see `opcItemPath` as an object or a value?

It should be something like this

```python
{
  "opcItemPath": {
    "bindType": "parameter",
    "binding": "..."
  }
}

```

if it’s just a string value, then the binding might not be active.

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [October 1, 2025, 6:19pm UTC](https://forum.inductiveautomation.com/t/using-tag-parameter-in-udt/111136/9 "2025-10-01T18:19:46Z")

</div>

> [@dis](#):
>
> For the Step tags it doesn’t recognize the paramter no blue link

That usually means that setting (including curly braces) was created by writing that bare string to the tag property, via scripting or JSON import. As @vtran points out, the effective binding has `bindType` and `binding` keys in the JSON.

---

<div class="post-metadata">

**Author:** ![Leor\_Fishman](https://avatars.discourse-cdn.com/v4/letter/l/e19adc/32.png) [@Leor\_Fishman](https://forum.inductiveautomation.com/u/Leor_Fishman)\
**Post date:** [October 1, 2025, 6:29pm UTC](https://forum.inductiveautomation.com/t/using-tag-parameter-in-udt/111136/10 "2025-10-01T18:29:31Z")

</div>

(somewhat off topic)  
i retain that this is a really really weird design choice by ignition and that bare string values containing brackets should automatically default to having bindType parameter

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [October 1, 2025, 6:32pm UTC](https://forum.inductiveautomation.com/t/using-tag-parameter-in-udt/111136/11 "2025-10-01T18:32:51Z")

</div>

I'm pretty sure the interpretation of curly braces as parameters is done strictly in the designer tag editor, for human-entered strings. I suspect it doesn't actually exist elsewhere. Other interactions with the tag configuration are expected to supply properly parsed objects.

(If so, this is unlikely to be conveniently changed as you desire.)

---

<div class="post-metadata">

**Author:** ![Leor\_Fishman](https://avatars.discourse-cdn.com/v4/letter/l/e19adc/32.png) [@Leor\_Fishman](https://forum.inductiveautomation.com/u/Leor_Fishman)\
**Post date:** [October 1, 2025, 6:34pm UTC](https://forum.inductiveautomation.com/t/using-tag-parameter-in-udt/111136/12 "2025-10-01T18:34:04Z")

</div>

The only place that it actually matters for me is human entered strings, if I’m producing OPC definitions from a script I can just set them all to default bindtype

(By human entered i mean human copy pasted)

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [October 1, 2025, 6:36pm UTC](https://forum.inductiveautomation.com/t/using-tag-parameter-in-udt/111136/13 "2025-10-01T18:36:06Z")

</div>

I don't recall any repeatable demonstration of this particular situation that came from a string entered into the tag editor by a human.

---

<div class="post-metadata">

**Author:** ![Leor\_Fishman](https://avatars.discourse-cdn.com/v4/letter/l/e19adc/32.png) [@Leor\_Fishman](https://forum.inductiveautomation.com/u/Leor_Fishman)\
**Post date:** [October 1, 2025, 6:36pm UTC](https://forum.inductiveautomation.com/t/using-tag-parameter-in-udt/111136/14 "2025-10-01T18:36:34Z")

</div>

edited to clarify i meant ‘human copy pasted json’, which is a footgun i’ve seen people run into a few times on this forum and elsewhere.

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [October 1, 2025, 6:38pm UTC](https://forum.inductiveautomation.com/t/using-tag-parameter-in-udt/111136/15 "2025-10-01T18:38:18Z")

</div>

Meaning JSON that was hand-edited to include a curly-brace parameter without the bindtype? If so, yes, that is operator error.

---

<div class="post-metadata">

**Author:** ![dis](https://avatars.discourse-cdn.com/v4/letter/d/e99b99/32.png) [@dis](https://forum.inductiveautomation.com/u/dis)\
**Post date:** [October 1, 2025, 7:01pm UTC](https://forum.inductiveautomation.com/t/using-tag-parameter-in-udt/111136/16 "2025-10-01T19:01:40Z")

</div>

You mean when I use Notepad++ to search for Formulas\[[0-9]+\] and replace with {idx}?

Thank you. Now I under that there needs to be another step to set up the binding as I sheepishly thought the system was keying off the existence of {}. The syntax highlighting in the editor was “lying” to me.

That is exactly what happened. I’ll go back and fix it.

Knowing is half the battle©

---

<div class="post-metadata">

**Author:** ![vtran](https://avatars.discourse-cdn.com/v4/letter/v/779978/32.png) [@vtran](https://forum.inductiveautomation.com/u/vtran)\
**Post date:** [October 1, 2025, 7:14pm UTC](https://forum.inductiveautomation.com/t/using-tag-parameter-in-udt/111136/17 "2025-10-01T19:14:30Z")

</div>

if you’re using Notepad++, probably can use Regular Expression to change it to binding real quick

you can find

```python
"opcItemPath": "(.*{.+}.*)"

```

and replace with

```python
"opcItemPath": {"bindType": "parameter", "binding": "$1"}

```

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/d/5/d549882a274491076b1572e2c4459f23c7f2a29d.png)

That will find anything opcItemPath with curly braces in their value string and convert to the binding object format

As always, make a backup of the UDT just in case.
