I was using system.tag.configure to alter some existing UDT tags to a different type based on a dataset that represented the tag folder and tag quantity. Most of the tags were created with no issue, however there were somewhere between 2-5 in each group of about 45 tags that were unable to be created and had a quality in the returned status list of Error_Exception. The error for one of the tag edits from the logs and the script are both pasted below. This is using b2019031502. Once I deleted the offending tags and ran the script with the tags nonexistent the tags were created fine.
Script:
pcsDataset = system.tag.readBlocking(['[NC21-SITE]Configuration/Device Quantities/PCS/Inverters'])[0].value
rowCount = pcsDataset.getRowCount()
for row in range(rowCount):
pcsNum = pcsDataset.getValueAt(row,'PCS')
invQty = pcsDataset.getValueAt(row,'Inverter Quantity')
print 'PCS =',pcsNum
print 'Inverter Quantity -',invQty
basePath = '[NC21-SITE]PCSs/PCS '+str(pcsNum)+'/Inverters'
tagList = []
for invNum in range(1,invQty+1):
deviceName = 'PCS '+str(pcsNum)+' Smart Logger'
offset = ((invNum - 1) * 25) + 51000
parameters = {'InverterID':invNum,
'Offset':offset,
'DeviceName':deviceName,
'UnitId':'1'}
tagName = 'Inverter '+str(invNum)
tagType = 'UdtInstance'
typeID = 'Inverters/INV SMRT LOG V2'
tagDict = {'name':tagName,
'accessRights':'Read_Write',
'tagType':tagType,
'typeID':typeID,
'parameters':parameters}
tagList.append(tagDict)
smartLoggerDeviceName = 'PCS '+str(pcsNum)+' Smart Logger'
totalInverters = invQty
smartLoggerUnitID = '1'
smartLoggerParameters = {'DeviceName':smartLoggerDeviceName,
'TotalInverters':totalInverters,
'UnitId':smartLoggerUnitID}
smartLoggerTagDict = {'name':'Smart Logger',
'tagType':'UdtInstance',
'typeId':'Smart Logger/SMRT LOG V2',
'accessRights':'Read_Write',
'parameters':smartLoggerParameters}
tagList.append(smartLoggerTagDict)
print basePath
print len(tagList)
system.tag.configure(basePath,tagList)
Error from gateway logs:
provider 19Mar2019 14:35:02
Error processing edit for tag path '[NC21-SITE]PCSs/PCS 8/Inverters/Inverter 7': Error_Exception
provider 19Mar2019 14:35:02
Error encountered processing tag edit
java.util.ConcurrentModificationException: null
at java.base/java.util.HashMap$HashIterator.nextNode(Unknown Source)
at java.base/java.util.HashMap$ValueIterator.next(Unknown Source)
at com.inductiveautomation.ignition.gateway.tags.subscriptions.ProviderSubscriptionManagerImpl$SubscriptionNode.registerSourceNode(ProviderSubscriptionManagerImpl.java:457)
at com.inductiveautomation.ignition.gateway.tags.subscriptions.ProviderSubscriptionManagerImpl.register(ProviderSubscriptionManagerImpl.java:169)
at com.inductiveautomation.ignition.gateway.tags.runtime.nodes.BasicTagDefinition.applyPropertyChangesToTag(BasicTagDefinition.java:652)
at com.inductiveautomation.ignition.gateway.tags.runtime.nodes.FolderNode.applyPropertyChangesToTag(FolderNode.java:303)
at com.inductiveautomation.ignition.gateway.tags.runtime.nodes.complex.AbstractComplexTagNode.applyPropertyChangesToTag(AbstractComplexTagNode.java:121)
at com.inductiveautomation.ignition.gateway.tags.runtime.nodes.complex.AbstractComplexTagDefinitionNode.applyPropertyChangesToTag(AbstractComplexTagDefinitionNode.java:119)
at com.inductiveautomation.ignition.gateway.tags.runtime.nodes.complex.AbstractTopLevelUdtTag.applyPropertyChangesToTag(AbstractTopLevelUdtTag.java:284)
at com.inductiveautomation.ignition.gateway.tags.runtime.nodes.complex.UdtInstanceNode.applyPropertyChangesToTag(UdtInstanceNode.java:68)
at com.inductiveautomation.ignition.gateway.tags.runtime.nodes.BasicTagDefinition.managePropertyChanges(BasicTagDefinition.java:622)
at com.inductiveautomation.ignition.gateway.tags.runtime.nodes.BasicTagDefinition.startPropModel(BasicTagDefinition.java:401)
at com.inductiveautomation.ignition.gateway.tags.runtime.nodes.BasicTagDefinition.activate(BasicTagDefinition.java:738)
at com.inductiveautomation.ignition.gateway.tags.runtime.nodes.BasicTagDefinition.onValidityChanged(BasicTagDefinition.java:697)
at com.inductiveautomation.ignition.gateway.tags.runtime.nodes.BasicTagDefinition.refreshValidity(BasicTagDefinition.java:447)
at com.inductiveautomation.ignition.gateway.tags.runtime.nodes.BasicTagDefinition.setInheritedConfiguration(BasicTagDefinition.java:466)
at com.inductiveautomation.ignition.gateway.tags.runtime.nodes.complex.TypesFolder$AbstractTypeNode.onValidityChanged(TypesFolder.java:446)
at com.inductiveautomation.ignition.gateway.tags.runtime.nodes.complex.TypesFolder$AbstractTypeNode.setValidityState(TypesFolder.java:430)
at com.inductiveautomation.ignition.gateway.tags.runtime.nodes.complex.TypesFolder$AbstractTypeNode.refreshValidity(TypesFolder.java:358)
at com.inductiveautomation.ignition.gateway.tags.runtime.nodes.complex.TypesFolder$AbstractTypeNode.setSuperType(TypesFolder.java:297)
at com.inductiveautomation.ignition.gateway.tags.runtime.nodes.complex.TypesFolder$AbstractTypeNode.notifyParentTypeChanged(TypesFolder.java:275)
at com.inductiveautomation.ignition.gateway.tags.runtime.nodes.complex.AbstractComplexTagDefinitionNode.applyPropertyChangesToTag(AbstractComplexTagDefinitionNode.java:121)
at com.inductiveautomation.ignition.gateway.tags.runtime.nodes.complex.AbstractTopLevelUdtTag.applyPropertyChangesToTag(AbstractTopLevelUdtTag.java:284)
at com.inductiveautomation.ignition.gateway.tags.runtime.nodes.complex.UdtInstanceNode.applyPropertyChangesToTag(UdtInstanceNode.java:68)
at com.inductiveautomation.ignition.gateway.tags.runtime.nodes.BasicTagDefinition.managePropertyChanges(BasicTagDefinition.java:622)
at com.inductiveautomation.ignition.gateway.tags.runtime.nodes.BasicTagDefinition.lambda$new$0(BasicTagDefinition.java:92)
at com.inductiveautomation.ignition.gateway.tags.runtime.nodes.TagPropertyModel.dispatchPropertiesChanged(TagPropertyModel.java:81)
at com.inductiveautomation.ignition.gateway.tags.runtime.nodes.TagPropertyModel.onPropertiesChanged(TagPropertyModel.java:42)
at com.inductiveautomation.ignition.gateway.tags.runtime.nodes.BasicTagDefinition.configureTag(BasicTagDefinition.java:533)
at com.inductiveautomation.ignition.gateway.tags.runtime.TagEvaluationManagerImpl.processNewTag(TagEvaluationManagerImpl.java:391)
at com.inductiveautomation.ignition.gateway.tags.runtime.TagEvaluationManagerImpl.processEditInternal(TagEvaluationManagerImpl.java:282)
at com.inductiveautomation.ignition.gateway.tags.runtime.TagEvaluationManagerImpl.processEdit(TagEvaluationManagerImpl.java:236)
at com.inductiveautomation.ignition.gateway.tags.TagProviderImpl.saveTagConfigInternal(TagProviderImpl.java:574)
at com.inductiveautomation.ignition.gateway.tags.TagProviderImpl.lambda$saveTagConfigsAsync$9(TagProviderImpl.java:534)
at com.inductiveautomation.ignition.gateway.tags.TagProviderImpl.lambda$exec$2(TagProviderImpl.java:315)
at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)