Building smarter SCADA systems with AVEVA™ InTouch HMI’s user defined types (UDTs)

Posted: June 23, 2025

Beyond tags, using UDTs for engineering efficiency

When you hear “InTouch,” you probably think HMI. Maybe you picture traditional tag-based development and a reliable design platform. But what if I told you that everything you thought you knew is evolving — and fast?

With the 2023 R2 release, AVEVA InTouch HMI introduced a powerful new feature: User defined types (UDTs) enable object-based design techniques to streamline HMI SCADA development and boost efficiency.

Why do UDTs matter?

UDTs allow users to define a structured hierarchy of tags, enabling you to represent assets as complete objects rather than loose collections of variables. You can think of them as object-oriented programming for industrial applications — each UDT is like a class, and each instance like an object. But here’s the kicker: UDTs allow nesting of up to six levels. That’s a game-changer for modeling complex systems like pumps, mixers, and reactors.

Even better, UDTs support relative referencing with owning objects. That means you can design a single graphic and reuse it across multiple assets—dynamically switching context based on runtime selection. If you’ve ever wished for a smarter way to manage assets and equipment in AVEVA InTouch, this is it.

Building smarter structures — A step-by-step guide to using UDTs

Let’s walk through how you can use UDTs and Open Platform Communications (OPC) Unified Architecture (UA) to model a reactor system that includes a pump and mixer. Along the way, you’ll learn how to harness the power of relative referencing and embedded graphics.

In this case study, we are using a reactor simulation code. If you would like to use this code, you can download the Reactor.zip file from our GitHub site: https://github.com/edeh-1/WonderLAB.

After you download the file, drill into the reactor folder and then double-click to run the reactor application to follow along.

A command window will open. Enter the port number for the OPC UA Server. Then you can enter the number of reactors.

Define the building blocks

Start by creating the base UDTs: Pump, Mixer, and Discharge.

For the Pump UDT, define these members:

  • FlowRate (I/O Real)
  • SP (I/O Real)
  • StartCmd (I/O Discrete)
  • StopCmd (I/O Discrete)

Set the access name for each member to OPCUA and check “Name as item name.” This maps the tag directly to the OPCUA address.

For Mixer, define:

  • PV (I/O Real)
  • SP (I/O Real)
  • StartCmd (I/O Discrete)
  • StopCmd (I/O Discrete)
  • State (I/O Discrete)

Again, set the access name for each member to OPCUA and check “Name as item name.”

For Discharge, add a new member with the data type Pump. When you select Pump as the type, the new member inherits the four tags created for the Pump data type.

Nest and expand with a Reactor UDT

For your next step, create a Reactor UDT with two members:

  • Discharge (Type: Discharge)
  • Mixer (Type: Mixer)
  • Name (Type: Memory Message)

Create two instances of the Reactor UDT: Reactor_1 and Reactor_2.

Set the Name for Reactor_1 and Reactor_2 accordingly.

Create a reusable graphic

Create a new graphic called ReactorFaceplate and build a visual layout using “me.” referencing. This allows each tag to be resolved based on the owning object at runtime. For example, add a Value Display animation where you want to display the values, and use “me.” referencing for the Reference, such as me.Mixer.SP or me.Discharge.Pump.FlowRate.

Create a script for dynamic switching

Let’s take it a step further. Create a second graphic called ReactorFaceplateOO. Embed the ReactorFaceplate graphic into the new graphic’s industrial graphic editor.

Add a combo box to choose between Reactor_1 and Reactor_2. Set the reference to be ReactorFaceplate1.OwningObject.

In the Properties for the embedded Reactor Faceplate graphic, set the OwningObject as Reactor_1.

Runtime flexibility: See it in action

Now that the structure and the scripting are in place, launch WindowViewer, and from the combo box select Reactor_1 and then select Reactor_2. This kind of dynamic runtime behavior not only streamlines your HMI design — it empowers operators with a cleaner, more efficient interface.

Why it matters

This kind of modular, scalable architecture reduces engineering time, increases consistency, and makes your HMI smarter. It’s not just about reducing tags or reusing graphics — it’s about enabling true object-based modeling in a traditionally tag-centric environment.

If you’re building complex systems in AVEVA InTouch HMI, don’t miss the opportunity to leverage UDTs. Start small, modularize your assets, and embrace relative referencing — your future self will thank you.

What are you waiting for?

Contact AVEVA
Live Chat
Schedule Demo