Distributed Control & Automation Framework (DCAF)

Showing results for 
Search instead for 
Did you mean: 

DCAF Arrays of Strings

Go to solution



I'm new to DCAF so I apologise if this is something straightforward. However, I have encountered my first issue.


I have a custom module with an 'Array of String' Processing Result.


I wish to display this on a UI reference module.


I am yet to have any success.


This is using the standard engine and configuration editor.


My hunch is that this is something to do with initialisation as if you try to 'replace array elements' into an empty string you won't have much luck!. (These next thoughts could be a red-herring though...) 


Therefore my thought is that maybe I need to set defaults for my channel tag and engine tag to ensure it isn't initialised with an empty array.

If I probe 'read default value Array of String', I can see that the channel tag from my module has the default I assigned but the engine tag has no default value (just an empty array). This surely means that the swap operations fail when trying to write to the engine data table?


A workaround could be to just use a delimited string but I would like to know where I am going wrong.

Any help is much appreciated!

0 Kudos
Message 1 of 6
Accepted by niNickC

Hi niNickC,


If the Array of Strings is a Processing Result you would want to initialize it somewhere. It this is running on an embedded system it could be a good idea initializing the array in init and then just doing Array Replaces. 


I just created a simple static module and the array is populating just fine. I am not connecting this to the UI module yet but the data is moving correctly within the engine. This is what I have in the user process.vi (see file attached). For simplicity I initialize in the first call. The other case just has a replace.


Would you be able to attach a simplified version of your module that reproduces the issue?



Andres GJ







Message 2 of 6


You don't mention, but 2D arrays are not supported. I once mapped to a 2D control and it broke the UI being updated.  Also check all labels on your UI are unique. 



0 Kudos
Message 3 of 6

Hi Nick,


As a sanity check, I set up a project that reads an array of strings from a UI ref module, then writes it back again. It works for all the cases I tried, such as changing array sizes and empty arrays. There's no issue with tags/channels defaulting to empty either.


Could you post the custom module?


We had a problem on some modules we wrote with wiring a for loop with an array coming in and out, but not checking the array dimensions coming in. One of the arrays was empty, so the for loop didn't excecute. That's the only time I can remember seeing something similar.



0 Kudos
Message 4 of 6

Thanks everyone for your support.

When I probe the 'Data Allocations' output from the module runtime init, you can clearly see an initialised array:


Allocations 1.png


However, when I probe the Result Allocation in the process method, the array is uninitialised so the replace array inside the data table function fails...


Allocations 2.png

Process VI.png

I have attached my module.

Many Thanks



0 Kudos
Message 5 of 6

Ok so using 'first call' to initialise as AGJ_CR suggested seems to have fixed the problem.


Thank you!


However, this is quite counter-intuitive to me, why did it not work inside the init function?

0 Kudos
Message 6 of 6