# Adding a UDT in Ignition

**URL:** <https://forum.inductiveautomation.com/t/adding-a-udt-in-ignition/108495>\
**Category:** Ignition\
**Created:** [July 15, 2025, 4:22pm UTC](https://forum.inductiveautomation.com/t/adding-a-udt-in-ignition/108495 "2025-07-15T16:22:07Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![bessahi](https://avatars.discourse-cdn.com/v4/letter/b/51bf81/32.png) [@bessahi](https://forum.inductiveautomation.com/u/bessahi)\
**Post date:** [July 15, 2025, 4:22pm UTC](https://forum.inductiveautomation.com/t/adding-a-udt-in-ignition/108495/1 "2025-07-15T16:22:07Z")

</div>

Hi everyone, I am currently trying to add a similar udt from TIA Portal to ignition, and although i followed the documentation, there was no indication of how to add structs inside the udt from an ignition prespective, does the dataset type mean "struct"? and how can i add the two structs "cmd" and "cfg" under the udt "udtConveyor" ?

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/8/9/89f81740618d17bcb69d834196c532e665a251c1.png)  
 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/6/9/695aa20253d2d44f2b1b2c80a7ef490cd4b8e05b.png)

---

<div class="post-metadata">

**Author:** ![Rick\_de\_Man](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/rick_de_man/32/75670_2.png) [@Rick\_de\_Man](https://forum.inductiveautomation.com/u/Rick_de_Man)\
**Post date:** [July 15, 2025, 4:36pm UTC](https://forum.inductiveautomation.com/t/adding-a-udt-in-ignition/108495/2 "2025-07-15T16:36:18Z")

</div>

Checkout the documentation

> **[User Defined Types - UDTs | Ignition User Manual](https://www.docs.inductiveautomation.com/docs/8.1/platform/tags/user-defined-types-udts#creating-a-udt-definition-and-instance)**
>
> UDTs (User Defined Types), also referred to as Complex Tags, offer the ability to leverage object-oriented data design principles in Ignition. UDTs are extremely important in Ignition. With UDTs, you can dramatically reduce the amount of work...

---

<div class="post-metadata">

**Author:** ![bessahi](https://avatars.discourse-cdn.com/v4/letter/b/51bf81/32.png) [@bessahi](https://forum.inductiveautomation.com/u/bessahi)\
**Post date:** [July 15, 2025, 4:38pm UTC](https://forum.inductiveautomation.com/t/adding-a-udt-in-ignition/108495/3 "2025-07-15T16:38:09Z")

</div>

This is the documentation i checked, i don't know what type of tag should i use, derived or memory , ... it doesn't specifically indicate a conventional struct data type which will prompt me to add all items inside the structure, that's my problem

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [July 15, 2025, 4:39pm UTC](https://forum.inductiveautomation.com/t/adding-a-udt-in-ignition/108495/4 "2025-07-15T16:39:14Z")

</div>

Those structs would be their own UDTs in Ignition. You need to define the child UDTs first, then add instances of them to the parent UDT.

---

<div class="post-metadata">

**Author:** ![bessahi](https://avatars.discourse-cdn.com/v4/letter/b/51bf81/32.png) [@bessahi](https://forum.inductiveautomation.com/u/bessahi)\
**Post date:** [July 15, 2025, 4:43pm UTC](https://forum.inductiveautomation.com/t/adding-a-udt-in-ignition/108495/5 "2025-07-15T16:43:29Z")

</div>

Okay, and for those child udts, what type of tag should i have for the elemnts : bStart, bStop, ... etc ?

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [July 15, 2025, 4:44pm UTC](https://forum.inductiveautomation.com/t/adding-a-udt-in-ignition/108495/6 "2025-07-15T16:44:03Z")

</div>

Booleans?

OPC tag if the source will be from an OPC server.

---

<div class="post-metadata">

**Author:** ![bessahi](https://avatars.discourse-cdn.com/v4/letter/b/51bf81/32.png) [@bessahi](https://forum.inductiveautomation.com/u/bessahi)\
**Post date:** [July 15, 2025, 4:46pm UTC](https://forum.inductiveautomation.com/t/adding-a-udt-in-ignition/108495/7 "2025-07-15T16:46:30Z")

</div>

Yeah, i am using an OPC UA server from an S7-1500, actually i was following one of your previous posts on how to access udt data from PLC, topic link : [OPC UA struct data type?](https://forum.inductiveautomation.com/t/opc-ua-struct-data-type/26905)

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [July 15, 2025, 4:53pm UTC](https://forum.inductiveautomation.com/t/adding-a-udt-in-ignition/108495/8 "2025-07-15T16:53:06Z")

</div>

Ok, a little different strategy then. You still need to create the child UDTs first, but they need to use memory or derived tags as described in those other posts.

---

<div class="post-metadata">

**Author:** ![Rick\_de\_Man](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/rick_de_man/32/75670_2.png) [@Rick\_de\_Man](https://forum.inductiveautomation.com/u/Rick_de_Man)\
**Post date:** [July 15, 2025, 4:53pm UTC](https://forum.inductiveautomation.com/t/adding-a-udt-in-ignition/108495/9 "2025-07-15T16:53:30Z")

</div>

Tag types are described here.

> **[Types of Tags | Ignition User Manual](https://www.docs.inductiveautomation.com/docs/8.1/platform/tags/types-of-tags)**
>
> There are many different types of Tags in Ignition: standard Tags, System Tags, and Vision Client Tags. All these Tag types are available in the Tag Browser.

There you can find out what the difference between them.

---

<div class="post-metadata">

**Author:** ![bessahi](https://avatars.discourse-cdn.com/v4/letter/b/51bf81/32.png) [@bessahi](https://forum.inductiveautomation.com/u/bessahi)\
**Post date:** [July 15, 2025, 4:55pm UTC](https://forum.inductiveautomation.com/t/adding-a-udt-in-ignition/108495/10 "2025-07-15T16:55:40Z")

</div>

Yes, i changed to memory tags, i don't know which is better, derived or memo, but i am still unsure of how to make the connection between local ignition udts and the actual plc udts, gotta dive in a little bit deeper in your post!, sucks being a newbie lol

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [July 15, 2025, 4:57pm UTC](https://forum.inductiveautomation.com/t/adding-a-udt-in-ignition/108495/11 "2025-07-15T16:57:58Z")

</div>

UDTs in general are useful because they can be parameterized.

You're going to end up using these parameters to device the OPC Item Path of the "source" OPC tags that are described in this strategy.

Our support guys can probably help you out with this if you get stuck.

---

<div class="post-metadata">

**Author:** ![bessahi](https://avatars.discourse-cdn.com/v4/letter/b/51bf81/32.png) [@bessahi](https://forum.inductiveautomation.com/u/bessahi)\
**Post date:** [July 15, 2025, 5:06pm UTC](https://forum.inductiveautomation.com/t/adding-a-udt-in-ignition/108495/12 "2025-07-15T17:06:19Z")

</div>

So basically, i have created the udts in ignition and i don't quite understand the "OPC item path" part.

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/3/4/34316d36358e2bdd468e904623ee2664967280bf.png)

---

<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:** [July 15, 2025, 7:09pm UTC](https://forum.inductiveautomation.com/t/adding-a-udt-in-ignition/108495/13 "2025-07-15T19:09:49Z")

</div>

Usually, in the UDT, you create a parameter that defines the path to the root of the UDT in your plc. Lets call that parameter tagpath.

Say your PLC tag address architecture is something like this:  
MyPLCUDT.HMIStartPB  
MyPLCUDT.HMIStopPB

So in the Ignition UDT youll create members as an example:

StartPB  
StopPB

Their OPC values will be:

{tagpath}.HMIStartPB  
{tagpath}.HMIStopPB

When you create an instance of the UDT as a tag in Ignition, youll enter in the parameter tagpath for that tag the full OPC qualified text to the root of your PLC UDT. Something like ns=1;s=[PLCprovider]MyPLCUDT

I dont know what your exact tag path would be for your driver, but you can OPC browse and drag a tag into the tag database and use that as an example.

Once you do the above, each of your UDT members will resolve to the correct OPC path. For each instance of that type UDT, you just change the parameter value to point to the root of your PLC UDT tag.

---

<div class="post-metadata">

**Author:** ![bessahi](https://avatars.discourse-cdn.com/v4/letter/b/51bf81/32.png) [@bessahi](https://forum.inductiveautomation.com/u/bessahi)\
**Post date:** [July 16, 2025, 12:22am UTC](https://forum.inductiveautomation.com/t/adding-a-udt-in-ignition/108495/14 "2025-07-16T00:22:03Z")

</div>

Thank you for the instruction, i have followed the steps, here is what i got in ignition :

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/4/2/422cdce57064ffe29fe7ca6f81a812dc90308ab9.png)  
This is how data is structured in the PLC :  
 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/f/8/f848bd1f1fcad8ee2aef5bfe40f9a27fd39a45ca.png)  
Now, when i try to make an instance of the udt in igntion, i managed to the enter in tagpath parameter, the full text OPC path and still got an error

---

<div class="post-metadata">

**Author:** ![nminchin](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/nminchin/32/6911_2.png) [@nminchin](https://forum.inductiveautomation.com/u/nminchin)\
**Post date:** [July 16, 2025, 2:35am UTC](https://forum.inductiveautomation.com/t/adding-a-udt-in-ignition/108495/15 "2025-07-16T02:35:49Z")

</div>

I would avoid parameter names like "tagpath" to be honest, as it clashes with pre-existing nomenclature and it isn't very explicit in what it's value is supposed to be. For something like a parameter for a UDT name in a PLC, I have used "DeviceName", although I've since regretted not associating it with the PLC, so I would tend more towards "PlcUdtName" or similar now to be explicit about what it's expecting.

Did you set those opc item paths via the tag editor or via find/replace of the tag JSON and importing it back?  
The latter option will not create the bindings for you when you import it.

Can you show a screenshot of your udt instance that includes the Parameters expanded as well as one of those tags expanded, with the opcitempath in view? (or just paste the tag JSON of the udt instance here - Right click on the instance, Copy JSON)

Edit:  
oh wait, you created a "param.tagpath" inside the _PLC UDT_, not inside the _Ignition UDT_. This is the issue, you will need to add the parameter into Ignition's UDT definition, not to the PLC.

I'd also recommend that you look at the (free) Inductive University

---

<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:** [July 16, 2025, 2:39am UTC](https://forum.inductiveautomation.com/t/adding-a-udt-in-ignition/108495/16 "2025-07-16T02:39:11Z")

</div>

Also, it appears your parameter is declared as an int. Would be a string in the ignition udt.

---

<div class="post-metadata">

**Author:** ![bessahi](https://avatars.discourse-cdn.com/v4/letter/b/51bf81/32.png) [@bessahi](https://forum.inductiveautomation.com/u/bessahi)\
**Post date:** [July 16, 2025, 2:51pm UTC](https://forum.inductiveautomation.com/t/adding-a-udt-in-ignition/108495/17 "2025-07-16T14:51:39Z")

</div>

Thank you for your reply, i have corrected the udt in PLC, and removed the param tagpath as shown below :

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/e/a/ea6e9a346e5b7a31a7b189a49ce7be7781ae518f.png)  
However, in ignition this is how i created the udt :  
 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/8/3/838feaa11f56f109e3a99589f4f924a4deb3e281.png)  
Do you mean, i need to create the param in this section here :  
 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/7/2/723fb2bfca78c1efb16877aded6375d2c1952d6f.png)  
And if yes, how do i link this param to the root of the udt in the PLC, thanks

---

<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:** [July 16, 2025, 4:02pm UTC](https://forum.inductiveautomation.com/t/adding-a-udt-in-ignition/108495/18 "2025-07-16T16:02:13Z")

</div>

When you create a tag of type UDT, set the parameter DeviceName to point to the PLC OPC path root.

If youre unsure what that syntax is, use the tag OPC browser, navigate to that tag and temporarily bring it into your tag database. Then open one of the tags and copy the portion of the OPC path that you need that gets you to the CV-001 root.

---

<div class="post-metadata">

**Author:** ![bessahi](https://avatars.discourse-cdn.com/v4/letter/b/51bf81/32.png) [@bessahi](https://forum.inductiveautomation.com/u/bessahi)\
**Post date:** [July 16, 2025, 4:56pm UTC](https://forum.inductiveautomation.com/t/adding-a-udt-in-ignition/108495/19 "2025-07-16T16:56:09Z")

</div>

Not sure if i pointed the param to the right path here :

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/5/4/54d9469d727eb2aabe218b3160b98f23948263c3.png)  
Same with this path :  
 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/e/f/ef3dea9e2a4675dbfe58069ce7686309fc519b4c.png)

---

<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:** [July 16, 2025, 6:11pm UTC](https://forum.inductiveautomation.com/t/adding-a-udt-in-ignition/108495/20 "2025-07-16T18:11:43Z")

</div>

The [siemens.com](http://siemens.com) doesn't look right.

Drag a tag like your startpb from the OPC browser into ignition and show that OPC path here.

[Next page](https://forum.inductiveautomation.com/t/adding-a-udt-in-ignition/108495.md?page=2)
