[BUG] Errors modifying UDTs

8.0.1

I’ve noticed a few bugs when adding and modifying UDTs in v8.

One in particular is the following when I attempted to add a number of OPC tags into a UDT into the
‘Details’ folder. The changes seems to have gone through however, but the tag editor just comes up with this on OK. The changes haven’t gone in

14:05:55.172 [AWT-EventQueue-0] ERROR com.inductiveautomation.ignition.designer.tags.editing.dialog.TagEditorDialog - Error saving tag changes.
java.util.concurrent.ExecutionException: java.lang.IndexOutOfBoundsException: Index 20 out of bounds for length 20
	at java.base/java.util.concurrent.CompletableFuture.reportGet(Unknown Source)
	at java.base/java.util.concurrent.CompletableFuture.get(Unknown Source)
	at com.inductiveautomation.ignition.designer.tags.editing.dialog.TagEditorDialog.doApplyAction(TagEditorDialog.java:420)
	at com.inductiveautomation.ignition.designer.tags.editing.dialog.TagEditorDialog.doOkAction(TagEditorDialog.java:466)
	at com.inductiveautomation.ignition.designer.tags.editing.dialog.TagEditorDialog$2.actionPerformed(TagEditorDialog.java:182)
	at java.desktop/javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at java.desktop/javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.desktop/java.awt.Component.processMouseEvent(Unknown Source)
	at java.desktop/javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.desktop/java.awt.Component.processEvent(Unknown Source)
	at java.desktop/java.awt.Container.processEvent(Unknown Source)
	at java.desktop/java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.Component.dispatchEvent(Unknown Source)
	at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.desktop/java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.Component.dispatchEvent(Unknown Source)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
	at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.desktop/java.awt.EventQueue$5.run(Unknown Source)
	at java.desktop/java.awt.EventQueue$5.run(Unknown Source)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.desktop/java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.lang.IndexOutOfBoundsException: Index 20 out of bounds for length 20
	at java.base/jdk.internal.util.Preconditions.outOfBounds(Unknown Source)
	at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Unknown Source)
	at java.base/jdk.internal.util.Preconditions.checkIndex(Unknown Source)
	at java.base/java.util.Objects.checkIndex(Unknown Source)
	at java.base/java.util.ArrayList.get(Unknown Source)
	at com.inductiveautomation.ignition.gateway.util.GroupMapCollate.lambda$groupMapCollateIndexed$4(GroupMapCollate.java:57)
	at java.base/java.util.concurrent.CompletableFuture.uniAcceptNow(Unknown Source)
	at java.base/java.util.concurrent.CompletableFuture.uniAcceptStage(Unknown Source)
	at java.base/java.util.concurrent.CompletableFuture.thenAccept(Unknown Source)
	at com.inductiveautomation.ignition.gateway.util.GroupMapCollate.lambda$groupMapCollateIndexed$5(GroupMapCollate.java:55)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.HashMap$EntrySpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.collect(Unknown Source)
	at com.inductiveautomation.ignition.common.util.Futures.sequence(Futures.java:26)
	at com.inductiveautomation.ignition.gateway.util.GroupMapCollate.groupMapCollateIndexed(GroupMapCollate.java:62)
	at com.inductiveautomation.ignition.gateway.util.GroupMapCollate.groupMapCollate(GroupMapCollate.java:28)
	at com.inductiveautomation.ignition.client.tags.impl.ClientTagManagerImpl.saveTagConfigsAsync(ClientTagManagerImpl.java:284)
	... 38 common frames omitted

That definition of this UDT is:

{
  "accessRights": "Read_Write",
  "dataType": "Int4",
  "name": "VSD",
  "tagGroup": "Default",
  "parameters": {
    "Unit": "",
    "Description": "",
    "Index": "",
    "PLCName": "",
    "DeviceName": "",
    "Global.": ""
  },
  "enabled": true,
  "tagType": "UdtType",
  "tags": [
    {
      "opcItemPath": {
        "bindType": "parameter",
        "binding": "ns\u003d1;s\u003d[{PLCName}]{Global.}{DeviceName}.SpeedSP"
      },
      "engUnit": {
        "bindType": "parameter",
        "binding": "{Unit}"
      },
      "accessRights": "Read_Write",
      "valueSource": "opc",
      "historyProvider": "SQLServer",
      "dataType": "Float4",
      "historyEnabled": true,
      "name": "Speed SP",
      "tagGroup": "Default",
      "enabled": true,
      "tagType": "AtomicTag",
      "opcServer": "Ignition OPC-UA Server"
    },
    {
      "opcItemPath": {
        "bindType": "parameter",
        "binding": "ns\u003d1;s\u003d[{PLCName}]{Global.}{DeviceName}.Alarms"
      },
      "accessRights": "Read_Write",
      "valueSource": "opc",
      "dataType": "Int2",
      "name": "VSD Alarm Word",
      "tagGroup": "Default",
      "enabled": true,
      "tagType": "AtomicTag",
      "opcServer": "Ignition OPC-UA Server"
    },
    {
      "valueSource": "expr",
      "expression": "case({[.]Status}\r\n, 0, \u0027Stopped\u0027\r\n, 1, \u0027Running\u0027\r\n, 2, \u0027Fault\u0027\r\n, \u0027Invalid\u0027)",
      "dataType": "String",
      "name": "Status Desc",
      "tagType": "AtomicTag"
    },
    {
      "opcItemPath": {
        "bindType": "parameter",
        "binding": "ns\u003d1;s\u003d[{PLCName}]{Global.}{DeviceName}.Sim"
      },
      "accessRights": "Read_Write",
      "valueSource": "opc",
      "historyProvider": "SQLServer",
      "dataType": "Boolean",
      "historyEnabled": true,
      "name": "Simulation",
      "engLimitMode": "Clamp_Both",
      "tagGroup": "Default",
      "enabled": true,
      "tagType": "AtomicTag",
      "opcServer": "Ignition OPC-UA Server"
    },
    {
      "opcItemPath": {
        "bindType": "parameter",
        "binding": "ns\u003d1;s\u003d[{PLCName}]{Global.}{DeviceName}.RunTimeResetPB"
      },
      "accessRights": "Read_Write",
      "valueSource": "opc",
      "dataType": "Boolean",
      "name": "Run Time Reset CMD",
      "tagGroup": "Default",
      "enabled": true,
      "tagType": "AtomicTag",
      "opcServer": "Ignition OPC-UA Server"
    },
    {
      "accessRights": "Read_Write",
      "dataType": "Int4",
      "name": "Alarms",
      "tagGroup": "Default",
      "enabled": true,
      "tagType": "Folder",
      "tags": [
        {
          "opcItemPath": {
            "bindType": "parameter",
            "binding": "ns\u003d1;s\u003d[{PLCName}]{Global.}{DeviceName}.Alm_ServiceWarn"
          },
          "accessRights": "Read_Write",
          "valueSource": "opc",
          "dataType": "Boolean",
          "alarms": [
            {
              "setpointA": 1.0,
              "activePipeline": "SMS",
              "name": "Alarm",
              "Category": "Process",
              "ackMode": "Auto",
              "label": {
                "bindType": "Expression",
                "value": "{itemName}"
              },
              "displayPath": {
                "bindType": "Expression",
                "value": "{Description}"
              }
            }
          ],
          "name": "Service Due",
          "tagGroup": "Default",
          "enabled": true,
          "tagType": "AtomicTag",
          "opcServer": "Ignition OPC-UA Server"
        },
        {
          "opcItemPath": {
            "bindType": "parameter",
            "binding": "ns\u003d1;s\u003d[{PLCName}]{Global.}{DeviceName}.Alm_CB_Fault"
          },
          "accessRights": "Read_Write",
          "valueSource": "opc",
          "dataType": "Boolean",
          "alarms": [
            {
              "setpointA": 1.0,
              "activePipeline": "SMS",
              "name": "Alarm",
              "label": {
                "bindType": "Expression",
                "value": "{itemName}"
              },
              "Category": "Process",
              "priority": "High",
              "displayPath": {
                "bindType": "Expression",
                "value": "{Description}"
              },
              "ackMode": "Auto"
            },
            {
              "name": "Alarm 3"
            },
            {
              "name": "Alarm 1"
            },
            {
              "name": "Alarm 2"
            }
          ],
          "name": "CB Fault",
          "tagGroup": "Default",
          "enabled": true,
          "tagType": "AtomicTag",
          "opcServer": "Ignition OPC-UA Server"
        },
        {
          "opcItemPath": {
            "bindType": "parameter",
            "binding": "ns\u003d1;s\u003d[{PLCName}]{Global.}{DeviceName}.Alm_FlowSwFault"
          },
          "accessRights": "Read_Write",
          "valueSource": "opc",
          "dataType": "Boolean",
          "alarms": [
            {
              "setpointA": 1.0,
              "activePipeline": "SMS",
              "name": "Alarm",
              "label": {
                "bindType": "Expression",
                "value": "{itemName}"
              },
              "Category": "Process",
              "priority": "High",
              "displayPath": {
                "bindType": "Expression",
                "value": "{Description}"
              },
              "ackMode": "Auto"
            },
            {
              "name": "Alarm 3"
            },
            {
              "name": "Alarm 1"
            },
            {
              "name": "Alarm 2"
            }
          ],
          "name": "Flow Switch Fault",
          "tagGroup": "Default",
          "enabled": true,
          "tagType": "AtomicTag",
          "opcServer": "Ignition OPC-UA Server"
        },
        {
          "accessRights": "Read_Write",
          "valueSource": "expr",
          "expression": "{[.]Failed to Start} ||\n{[.]Failed to Stop} ||\n{[.]VSD Fault}",
          "dataType": "Boolean",
          "name": "_AnyActive",
          "tagGroup": "Default",
          "enabled": true,
          "tagType": "AtomicTag"
        },
        {
          "opcItemPath": {
            "bindType": "parameter",
            "binding": "ns\u003d1;s\u003d[{PLCName}]{Global.}{DeviceName}.Alm_VSDFault"
          },
          "accessRights": "Read_Write",
          "valueSource": "opc",
          "dataType": "Boolean",
          "alarms": [
            {
              "setpointA": 1.0,
              "activePipeline": "SMS",
              "name": "Alarm",
              "label": {
                "bindType": "Expression",
                "value": "{itemName}"
              },
              "Category": "Mechanical",
              "priority": "High",
              "displayPath": {
                "bindType": "Expression",
                "value": "{Description}"
              },
              "ackMode": "Auto"
            },
            {
              "name": "Alarm 3"
            },
            {
              "name": "Alarm 1"
            },
            {
              "name": "Alarm 2"
            }
          ],
          "name": "VSD Fault",
          "tagGroup": "Default",
          "enabled": true,
          "tagType": "AtomicTag",
          "opcServer": "Ignition OPC-UA Server"
        },
        {
          "opcItemPath": {
            "bindType": "parameter",
            "binding": "ns\u003d1;s\u003d[{PLCName}]{Global.}{DeviceName}.Alm_ServiceWarn"
          },
          "accessRights": "Read_Write",
          "valueSource": "opc",
          "dataType": "Boolean",
          "alarms": [
            {
              "setpointA": 1.0,
              "activePipeline": "SMS",
              "name": "Alarm",
              "Category": "Process",
              "ackMode": "Auto",
              "label": {
                "bindType": "Expression",
                "value": "{itemName}"
              },
              "displayPath": {
                "bindType": "Expression",
                "value": "{Description}"
              }
            }
          ],
          "name": "Service Warning",
          "tagGroup": "Default",
          "enabled": true,
          "tagType": "AtomicTag",
          "opcServer": "Ignition OPC-UA Server"
        },
        {
          "opcItemPath": {
            "bindType": "parameter",
            "binding": "ns\u003d1;s\u003d[{PLCName}]{Global.}{DeviceName}.Alm_StopFault"
          },
          "accessRights": "Read_Write",
          "valueSource": "opc",
          "dataType": "Boolean",
          "alarms": [
            {
              "setpointA": 1.0,
              "activePipeline": "SMS",
              "name": "Alarm",
              "label": {
                "bindType": "Expression",
                "value": "{itemName}"
              },
              "Category": "Process",
              "priority": "High",
              "displayPath": {
                "bindType": "Expression",
                "value": "{Description}"
              },
              "ackMode": "Auto"
            },
            {
              "name": "Alarm 3"
            },
            {
              "name": "Alarm 1"
            },
            {
              "name": "Alarm 2"
            }
          ],
          "name": "Failed to Stop",
          "tagGroup": "Default",
          "enabled": true,
          "tagType": "AtomicTag",
          "opcServer": "Ignition OPC-UA Server"
        },
        {
          "opcItemPath": {
            "bindType": "parameter",
            "binding": "ns\u003d1;s\u003d[{PLCName}]{Global.}{DeviceName}.Alm_CommFault"
          },
          "accessRights": "Read_Write",
          "valueSource": "opc",
          "dataType": "Boolean",
          "alarms": [
            {
              "setpointA": 1.0,
              "activePipeline": "SMS",
              "name": "Alarm",
              "label": {
                "bindType": "Expression",
                "value": "{itemName}"
              },
              "Category": "Process",
              "priority": "High",
              "displayPath": {
                "bindType": "Expression",
                "value": "{Description}"
              },
              "ackMode": "Auto"
            },
            {
              "name": "Alarm 3"
            },
            {
              "name": "Alarm 1"
            },
            {
              "name": "Alarm 2"
            }
          ],
          "name": "Comms Fault",
          "tagGroup": "Default",
          "enabled": true,
          "tagType": "AtomicTag",
          "opcServer": "Ignition OPC-UA Server"
        },
        {
          "opcItemPath": {
            "bindType": "parameter",
            "binding": "ns\u003d1;s\u003d[{PLCName}]{Global.}{DeviceName}.Alm_StartFault"
          },
          "accessRights": "Read_Write",
          "valueSource": "opc",
          "dataType": "Boolean",
          "alarms": [
            {
              "setpointA": 1.0,
              "activePipeline": "SMS",
              "name": "Alarm",
              "label": {
                "bindType": "Expression",
                "value": "{itemName}"
              },
              "Category": "Process",
              "priority": "High",
              "displayPath": {
                "bindType": "Expression",
                "value": "{Description}"
              },
              "ackMode": "Auto"
            },
            {
              "name": "Alarm 3"
            },
            {
              "name": "Alarm 1"
            },
            {
              "name": "Alarm 2"
            }
          ],
          "name": "Failed to Start",
          "tagGroup": "Default",
          "enabled": true,
          "tagType": "AtomicTag",
          "opcServer": "Ignition OPC-UA Server"
        }
      ]
    },
    {
      "opcItemPath": {
        "bindType": "parameter",
        "binding": "ns\u003d1;s\u003d[{PLCName}]{Global.}{DeviceName}.Man"
      },
      "accessRights": "Read_Write",
      "valueSource": "opc",
      "dataType": "Boolean",
      "documentation": "0 - automatic, 1 - manual",
      "name": "Mode",
      "tagGroup": "Default",
      "enabled": true,
      "tagType": "AtomicTag",
      "opcServer": "Ignition OPC-UA Server"
    },
    {
      "valueSource": "expr",
      "expression": "numberFormat(floor({[.]/Run Total Seconds}/(60*60*24)), \u0027000\u0027) + \u0027:\u0027 + // Days\r\nnumberFormat(floor(({[.]/Run Total Seconds}/(60*60))%24), \u002700\u0027) + \u0027:\u0027 + //Hours \r\nnumberFormat(floor(({[.]/Run Total Seconds}/60)%60), \u002700\u0027) //Minutes",
      "dataType": "String",
      "name": "Run Time",
      "tagType": "AtomicTag"
    },
    {
      "valueSource": "expr",
      "expression": "case({[.]Mode}\r\n, 0, \u0027Auto\u0027\r\n, 1, \u0027Manual\u0027\r\n, \u0027Invalid\u0027)",
      "dataType": "String",
      "name": "Mode Desc",
      "tagType": "AtomicTag"
    },
    {
      "name": "Details",
      "tagType": "Folder",
      "tags": [
        {
          "opcItemPath": {
            "bindType": "parameter",
            "binding": "ns\u003d1;s\u003d[{PLCName}]{DeviceName}.MotorThermal"
          },
          "valueSource": "opc",
          "name": "Motor Thermal",
          "tagType": "AtomicTag"
        },
        {
          "opcItemPath": {
            "bindType": "parameter",
            "binding": "ns\u003d1;s\u003d[{PLCName}]{DeviceName}.NoOfStarts"
          },
          "valueSource": "opc",
          "name": "Number of Starts",
          "tagType": "AtomicTag"
        },
        {
          "opcItemPath": {
            "bindType": "parameter",
            "binding": "ns\u003d1;s\u003d[{PLCName}]{DeviceName}.ServiceRem"
          },
          "valueSource": "opc",
          "name": "Service Time Remaining",
          "tagType": "AtomicTag"
        },
        {
          "opcItemPath": {
            "bindType": "parameter",
            "binding": "ns\u003d1;s\u003d[{PLCName}]{DeviceName}.SpeedRPM"
          },
          "valueSource": "opc",
          "name": "Fault Code 4",
          "tagType": "AtomicTag"
        },
        {
          "opcItemPath": {
            "bindType": "parameter",
            "binding": "ns\u003d1;s\u003d[{PLCName}]{DeviceName}.ServicePB"
          },
          "valueSource": "opc",
          "name": "Service Time Reset CMD",
          "tagType": "AtomicTag"
        },
        {
          "opcItemPath": {
            "bindType": "parameter",
            "binding": "ns\u003d1;s\u003d[{PLCName}]{DeviceName}.Power"
          },
          "valueSource": "opc",
          "name": "Power",
          "tagType": "AtomicTag"
        },
        {
          "opcItemPath": {
            "bindType": "parameter",
            "binding": "ns\u003d1;s\u003d[{PLCName}]{DeviceName}.Current"
          },
          "valueSource": "opc",
          "name": "Current",
          "tagType": "AtomicTag",
          "opcServer": "Ignition OPC-UA Server"
        },
        {
          "opcItemPath": {
            "bindType": "parameter",
            "binding": "ns\u003d1;s\u003d[{PLCName}]{DeviceName}.Voltage"
          },
          "valueSource": "opc",
          "name": "Voltage",
          "tagType": "AtomicTag"
        },
        {
          "opcItemPath": {
            "bindType": "parameter",
            "binding": "ns\u003d1;s\u003d[{PLCName}]{DeviceName}.Voltage"
          },
          "valueSource": "opc",
          "name": "Fault Code 3",
          "tagType": "AtomicTag"
        },
        {
          "opcItemPath": {
            "bindType": "parameter",
            "binding": "ns\u003d1;s\u003d[{PLCName}]{DeviceName}.FaultCode"
          },
          "valueSource": "opc",
          "name": "Fault Code",
          "tagType": "AtomicTag"
        },
        {
          "opcItemPath": {
            "bindType": "parameter",
            "binding": "ns\u003d1;s\u003d[{PLCName}]{DeviceName}.ServiceIntSP"
          },
          "valueSource": "opc",
          "name": "Service Interval SP",
          "tagType": "AtomicTag"
        },
        {
          "opcItemPath": {
            "bindType": "parameter",
            "binding": "ns\u003d1;s\u003d[{PLCName}]{DeviceName}.SpeedRPM"
          },
          "valueSource": "opc",
          "name": "Speed RPM",
          "tagType": "AtomicTag"
        },
        {
          "opcItemPath": {
            "bindType": "parameter",
            "binding": "ns\u003d1;s\u003d[{PLCName}]{DeviceName}.Frequency"
          },
          "valueSource": "opc",
          "name": "Frequency",
          "tagType": "AtomicTag"
        },
        {
          "opcItemPath": {
            "bindType": "parameter",
            "binding": "ns\u003d1;s\u003d[{PLCName}]{DeviceName}.DriveThermal"
          },
          "valueSource": "opc",
          "name": "Drive Thermal",
          "tagType": "AtomicTag"
        }
      ]
    },
    {
      "value": {
        "bindType": "parameter",
        "binding": "{Description}"
      },
      "accessRights": "Read_Write",
      "valueSource": "memory",
      "dataType": "String",
      "name": "Description",
      "tagGroup": "Default",
      "enabled": true,
      "tagType": "AtomicTag"
    },
    {
      "opcItemPath": {
        "bindType": "parameter",
        "binding": "ns\u003d1;s\u003d[{PLCName}]{Global.}{DeviceName}.StopPB"
      },
      "accessRights": "Read_Write",
      "valueSource": "opc",
      "dataType": "Boolean",
      "name": "Stop CMD",
      "tagGroup": "Default",
      "enabled": true,
      "tagType": "AtomicTag",
      "opcServer": "Ignition OPC-UA Server"
    },
    {
      "valueSource": "expr",
      "expression": "({[.]/Run Hours}*60.0 + {[.]/Run Minutes})*60.0",
      "dataType": "Float8",
      "name": "Run Total Seconds",
      "tagType": "AtomicTag"
    },
    {
      "opcItemPath": {
        "bindType": "parameter",
        "binding": "ns\u003d1;s\u003d[{PLCName}]{Global.}{DeviceName}.ResetPB"
      },
      "accessRights": "Read_Write",
      "valueSource": "opc",
      "dataType": "Boolean",
      "name": "Alarm Reset CMD",
      "tagGroup": "Default",
      "enabled": true,
      "tagType": "AtomicTag",
      "opcServer": "Ignition OPC-UA Server"
    },
    {
      "opcItemPath": {
        "bindType": "parameter",
        "binding": "ns\u003d1;s\u003d[{PLCName}]{Global.}{DeviceName}.RunMin"
      },
      "accessRights": "Read_Write",
      "valueSource": "opc",
      "dataType": "Int8",
      "name": "Run Minutes",
      "tagGroup": "Default",
      "enabled": true,
      "engUnit": "min",
      "tagType": "AtomicTag",
      "opcServer": "Ignition OPC-UA Server"
    },
    {
      "opcItemPath": {
        "bindType": "parameter",
        "binding": "ns\u003d1;s\u003d[{PLCName}]{Global.}{DeviceName}.FS_Sts"
      },
      "accessRights": "Read_Write",
      "valueSource": "opc",
      "dataType": "Int8",
      "documentation": "Lead Order assigned to pump",
      "name": "Flow Switch",
      "tagGroup": "Default",
      "enabled": true,
      "engUnit": "hrs",
      "tagType": "AtomicTag",
      "opcServer": "Ignition OPC-UA Server"
    },
    {
      "opcItemPath": {
        "bindType": "parameter",
        "binding": "ns\u003d1;s\u003d[{PLCName}]{Global.}{DeviceName}.ActSpeed"
      },
      "engUnit": {
        "bindType": "parameter",
        "binding": "{Unit}"
      },
      "accessRights": "Read_Write",
      "valueSource": "opc",
      "historyProvider": "SQLServer",
      "dataType": "Float4",
      "historyEnabled": true,
      "name": "Speed PV",
      "tagGroup": "Default",
      "enabled": true,
      "tagType": "AtomicTag",
      "opcServer": "Ignition OPC-UA Server"
    },
    {
      "opcItemPath": {
        "bindType": "parameter",
        "binding": "ns\u003d1;s\u003d[{PLCName}]{Global.}{DeviceName}.Sts"
      },
      "accessRights": "Read_Write",
      "valueSource": "opc",
      "historyProvider": "SQLServer",
      "dataType": "Int8",
      "historyEnabled": true,
      "name": "Status",
      "tagGroup": "Default",
      "enabled": true,
      "tagType": "AtomicTag",
      "opcServer": "Ignition OPC-UA Server"
    },
    {
      "opcItemPath": {
        "bindType": "parameter",
        "binding": "ns\u003d1;s\u003d[{PLCName}]{Global.}{DeviceName}.RunHour"
      },
      "accessRights": "Read_Write",
      "valueSource": "opc",
      "dataType": "Int8",
      "name": "Run Hours",
      "tagGroup": "Default",
      "enabled": true,
      "engUnit": "hrs",
      "tagType": "AtomicTag",
      "opcServer": "Ignition OPC-UA Server"
    },
    {
      "opcItemPath": {
        "bindType": "parameter",
        "binding": "ns\u003d1;s\u003d[{PLCName}]{Global.}{DeviceName}.StartPB"
      },
      "accessRights": "Read_Write",
      "valueSource": "opc",
      "dataType": "Boolean",
      "name": "Start CMD",
      "tagGroup": "Default",
      "enabled": true,
      "tagType": "AtomicTag",
      "opcServer": "Ignition OPC-UA Server"
    }
  ]
}

I tried this with your UDT on a 8.0.2 nightly build, and didn’t hit the same error. At some point, can you try the nightly build and see if the same error is still there?

I can never seem to reproduce these errors. They just seem to happen sporadically and they cause other strange things as well with the tags. For example I copied this udt with a new name and set the instances to use the new one, then these instances suddenly had no tags in them. I tried changing the instances back to the old udt but same thing. In the end, resaving the tag provider in the gateway resolved the issues. It seems to get itself in a twist after a while.

1 Like

I think, Never rename tags, include delete and paste/create again.
I use 8.1.20 now, but UDT always report error, and prevent saving. So if I make a mistake, I just delete whole UDT.

I havent had any issues like this for a very long time, probably since I posted here last. We're on 8.1.18 at the moment soon to be 22. Somewhere along the line though, I imported all of my tags into a new tag provider. Perhaps something happened in the 7 to 8 migration, and this fixed it?

Funny enough, I had this same issue just now and saw your recent revival of this post. I was trying to make a new UDT with a few nested UDTs, and somewhere in the copy/pasting of child UDTs things got strange. I deleted all the child UDTs and was able to save the parent UDT. Then when I opened the parent again, the child UDTs were still in there, but one was under a folder instead of just being a UDT by itself. I'm thinking that copying and pasting in the "new and improved" version 8 tag editor can sometimes give strange results. Delete changes, save UDT, reopen, and recreate changes seems to have done the trick for me.

Oddly, I haven't had this happen to me for two weeks since the last time. I didn't upgrade ignition or restart the gateway, just restarted the designer.