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"
}
]
}