No, it’s just not a functionality those drivers have.
What’s your use case? Array support in Ignition tags is weak and there is no performance gain at the driver level either way - it reads the array not individual tags at that level.
A solution I have implemented is a polled opc read, which converts the data into a Ignition Float Array tag. When I want to write back, I have a Float Array tag with a change script.
Here is the function I use, works pretty well, you just need to remember to set the correct size.
def getArrayValues(opcPath,size):
return [i.value for i in system.opc.readValues('Ignition OPC UA Server', ['{}[{}]'.format(opcPath,i) for i in range(0,size)])]
def setArrayValues(opcPath,values,size):
itemPaths= ['{}[{}]'.format(opcPath,i) for i in range(0,size)]
system.opc.writeValues('Ignition OPC UA Server', itemPaths, [round(x,2) for x in values])
What’s the use case for using float array tags? I use array folders within UDTs or of UDTs and it seems to make management, indirects and organization so much easier.
If you have a very specific need for this, it is implemented in my alternate driver. But note that writes to individual array members are not supported.
I was trying to grab an array all at once with one opc tag, to minimize the number of tags created in ignition. It is not like it was too long to create individual tags, I experimenting with that datatype just to know how it worked.
Sounds good, my use case doesn’t require it. I can work with it, I was just experimenting with that datatype and I was curious if I was doing something wrong on my end. Thanks Kevin!