Add element to array of cluster
I have an array of cluster. Cluster contains two elements. How to add an element in cluster at run time on the second position efficiently? In other words dont want another copy of cluster which contains three elements and copy the original two elements plus the new element.
Original array of cluster lets say has two element Temp1 and Pressure 1.
Need to add another element in cluster and now the array of cluster will be Temp1, Volt1 and Pressure 1. So Volt 1 is added to all cluster elements at second order throughout the array of clusters programatically.
CLD,CTD
Attachments:
TestAddElementToCluster.vi 10 KB
It is unclear from your original post what the problem you need to solve actually is. Are you trying to create a user interface? Do you need to dynamically add arbitrary data to a data set, or is it a fixed set of functionality that can be dynamically changed in predetermined ways?
Having done it, I will recommend you not try the scripting and subpanels approach. There are almost always better ways.
Remember that your data structures do not need to mirror your user interface. If you were trying to display the temperature, voltage, and pressure data to the user, a multicolumn listbox may be more appropriate than a raw cluster in an array. Internally, this would allow you to maintain the temperature, voltage, and pressure as separate arrays and only display the ones you want in the listbox.
Please give us a more information on the problem so we can help you with an easier solution.
This account is no longer active. Contact ShadesOfGray for current posts and information.
Similar Messages
-
Hi,
I have one String array.
I need to create another String array with the content of 1st array and additional 1st element in the 2nd array with "Product" text.
2nd array[0] = Product;
How do i do it
ThanksString[] array1 = {"1", "2", "3"};
String[] array2 = {"4", "5"};
String[] array3 = new String[array1.length+array2.length];
System.arraycopy(array1, 0, array3, 0, array1.length);
System.arraycopy(array2, 0, array3, array1.length, array2.length);
here, the array3 will have all the elements in order ie, 1,2,3,4,5.
In case you need to use array2, assign array3 to array2 ie, array2 = array3
Hope that helps.
Regards,
Sumant -
Add elelment by element in an array of cluster
Hi All,
I have a problem in extracting data from array of cluster to a single cluster. Please have a look at the attachment.I have found the solution but it consumes lot of memory because of shif registers andi am using this many places which is loading to nearly 100% in RT. Please provide an better alternative solution.
Attachments:
Array of Clusters.JPG 153 KBAutoTEC wrote:
Hi,
No i am almost at the end of coding . If i change the entire architecture affects. Only problem is this logic consumes more time. Pls any other idea...
Standard situation if a propper data management is not done before coding OR lead to the wrong architekture.
Do you use type definitions? Help a lot to avoid the horror of optimizing the datastructure.
Since it is much faster to rebuild a cluster by indexing the elements from your cluster of arrays than generating a cluster of arrays from an array of cluster (Puh!)
AND you have timing problems I see only two solutions : Faster hardware or a reorganisation of your data.
So change the datasturcture , create a subvi 'IndexMyData2Cluster' and whereever you indexed the array of cluster replace it with that vi.
Or run both structures in parrallel (BRRR, race conditions, inconsistent data , uuuaaahhh)
Greetings from Germany
Henrik
LV since v3.1
“ground” is a convenient fantasy
'˙˙˙˙uıɐƃɐ lɐıp puɐ °06 ǝuoɥd ɹnoʎ uɹnʇ ǝsɐǝld 'ʎɹɐuıƃɐɯı sı pǝlɐıp ǝʌɐɥ noʎ ɹǝqɯnu ǝɥʇ' -
Hello,
in my vi I have a chart with 5 Plots displaying measurement data.
The user should be able to save all the history data from the chart at anytime. (e.g. the user watches the chart and some event happens, then he presses a "save"-button)
I know, that I can read out the history data with a property node. That is not the problem. The problem is, how do I handle the data? The type of the history data is a 1-D array of cluster of 5 elements.
I have to convert that data somehow into a 2 D-array of numbers or strings, so that I can easily save it in a text-file.
How do I convert a 1-D array of cluster of 5 elements into a 2-D array of numbers?
I use LabVIEW 7.1
Johannes
Greetings Johannes
Using LabVIEW 7.1 and 2009 recently
Solved!
Go to Solution.Gerd,
thank you for the quick response and the easy solution.
Look what I did in the meantime. I solved the problem too, but muuuch more complicate :-)
And I have converted the numbers to strings, so that I can easily write them into a spreasheet file.
Johannes
Message Edited by johanneshoer on 04-28-2009 10:39 AM
Greetings Johannes
Using LabVIEW 7.1 and 2009 recently
Attachments:
SaveChartHistory.JPG 57 KB
SaveChartHistory.JPG 57 KB -
Is there a way you can add elements dynamically to an existing array??
hey guys... i need to add elements to an array dynamically... how do i do that?
for example... in one of my functions i do..
for each(var item:Object in fileList){
fileListArr.push(item);
and in a later function i need to add one more element to my fileListArr...
so i tried doing
fileListArr[indexNum].push({
key:videoKey
so i need to have an array which resembles something like this...
Before adding elements...
fileListArr:
[0]: name:test1
Size:12K
caption:testing caption
number:1
[1]: name:test2
Size:12K
caption:testing caption
number:2
after adding key to array
fileListArr:
[0]: name:test1
Size:12K
caption:testing caption
number:1
key:xyxyyy11y1yy1y1y2y2u33n
[1]: name:test2
Size:12K
caption:testing caption
number:2
key:iiduudjmenri112jj2n4n3m2j1j21
any ideas?hmm interesting... so i made the changes... i changed the array to arraylist and the code i have is as follows... but i still get an error... the error says ... "ReferenceError: Error #1056: Cannot create property key on flash.net.FileReference."
public var videoReference:VideoHandler;
public var fileRef:FileReferenceList = new FileReferenceList();
[Bindable] public var fileListArr:ArrayList = new ArrayList();
[Bindable] public var fileNames:ArrayCollection = new ArrayCollection();
public function selectionHandler(event:Event):void{
fileRef.removeEventListener(Event.SELECT, selectionHandler);
var numSelected:int = event.target.fileList.length;
var fileList:Array = event.target.fileList;
for each(var item:Object in fileList){
fileListArr.addItem(item);
fileNames.addItem({
num: fileNames.length + 1,
name: item.name,
size: formatFileSize(item.size),
status: ""
var newListLength:Number = fileListArr.length;
if(fileCounter > 0){
loopList(fileCounter);
else
loopList(0);
public function loopList(value:int):void{
//trace("looplist -->");
if(value < fileListArr.length){
_numCurrentUpload = value;
file = new FileReference();
file = FileReference(fileListArr.getItemAt(value));
file.addEventListener(Event.COMPLETE, loadVideo);
file.addEventListener(ProgressEvent.PROGRESS, fileProgress);
file.load();
public function setUploadKey(event:ResultEvent):void{
if(event.result.ThereWasAnError){
Alert.show(event.result.ErrorMessages[0]);
}else{
videoKey = event.result.UploadKey;
if(fileCounter >= fileListArr.length){
trace("in if");
fileCounter = 0;
uploadLoopList(fileCounter);
}else{
trace("in else");
//fileListArr[fileCounter - 1]['videoKey'] = videoKey;
-----> get an error here --->fileListArr.getItemAt(fileCounter - 1).key = videoKey;
//fileListArr[fileCounter - 1] = [{key: videoKey}];
loopList(fileCounter); -
Array of cluster to array of element - or - Cluster of arrays?
Hi all,
I have a large cluster (lets call it C_data) containing measured data e.g. 10 Temperatures, Pressure, (Temp_1, ...).....
All these data are measured once per second. I now collect all data
measured over a certain time in an array of the aforementioned cluster,
that is
an array of C_data. In order to display time series of data in graphs I
need to extract arrays of elements from this array of C_data.
In a text based programming language this could look like the following:
Struct C_data {Temp_1, Temp_2, P_1.....}
ar_C_data is an array of C_data
now I want to do something like:
array_of_Temp_1 = ar_C_data[*].Temp_1
In some programming languages this works but I cannot unbundle_by_name the array of Temp_1 from ar_data in Labview.
Since my cluster is large and may change in structure (for this reason I use a typedef) a generic solution would be the best.
I know that I could: loop over all elements of ar_C_data, unbundle by
name, index elements into arrays, and use these but this seems very
inefficient if it is done every second on a large cluster (30 elements) with several thousand array elements....
OlafYou can minimize the overhead of scanning through all elements and extracting if you pre-define the array and use "replace array subset". This avoide having to re-size the array which is costly.
Or you can keep an array separately in memory. When one cluster element is added, the corresponding element is added to the array too. Causes some memory overhead, but you're going to have that anyway if you generate them "on the fly".
I don't see a way to do this other than either search through the array and pick the elements you need -or-
keep a copy of the data in a form you can use.
It's a common question of how to structure data to best suit two sometimes conflicting needs - efficiency and useability.
What might be of interest is to change the "Array" - "Cluster" order and have a single cluster C-Data with arrays of each element required. Might be a bit more difficult to use, it depends on your application.
This way you have all arrays ready at all times, but generating a single cluster requires bundling the individual units on the fly.
Shane.
Using LV 6.1 and 8.2.1 on W2k (SP4) and WXP (SP2) -
1D Array of Cluster of 2 Elements Write to Spreadshee​t
Hi all, first time using LabView in many years. I am trying to write a VI that will acquire data from our cDAQ (right now just trying to get it to work with a single thermocouple in a NI 9211, but eventually will be 8 X thermocouple, 4 X pressure transducer), display it in realtime on a plot, and then when the acquisition is stopped, output the data to a file for later use. I am currently using the Base LabView package.
My problem (as I remember it was 7 years ago when I last used this) is with the data types not working together. This is my thought process currently on building this VI. Everything is inside a While Loop with the Wait function at 1000ms.
- Acquire a point of data using the DAQ assistant
- Send that point of data into a bundle
- Send the iteration count into the same bundle (as a timestamp)
- Send the resulting cluster of 2 elements into a Build Array function
- Send the resulting 1D array to a shift register in the While Loop, as well as to an XY graph for realtime plotting
- Wire the incoming point on the shift register back into the Build Array function
In my mind, this allows the XY graph to plot the complete array every iteration, giving a realtime view of the signal. Everything works fine up to this point. My problems are:
When I stop and restart the program, the shift register is not cleared, so the existing data in the array remains on the graph. I know I need to initialize the shift register to clear it, but I cannot figure out what to wire to it that will be compatible with the data type (I just get broken wires with everything I tried).
Similarly, I cannot figure out how to output this data to a spreadsheet after I Stop the While Loop. I think I should wire the "Write to Spreadsheet File" VI to the outgoing shift register, but again, I can't get compatibility with data types (source is a 1D array of cluster of 2 elements).
I have attached my current program "Production" to this post.
I look forward to the help!
Brad
Attachments:
Production.vi 46 KBHi Brad,
I would suggest you change your architecture. First, to answer your questions:
1.
In order to ensure that your shift register is not reading the last
value from it's memory location, you just need to create a constant for
the shift register. To do this, right-click at the input of the
'left-placed' shift register and create a constant.
2. The Write
to Spreadsheet is expecting a 1-d or 2-d array while you are wiring a
Dynamic Data Type. Use the Convert from Dynamic Data Type to convert
the data into the appropriate waveform after which you can get the
waveform attributes which includes the values and the timestamp data. Or, you can use the Write to Measurement File to write to a .lvm file which can be opened in Excel as well.
Changes to your architecture:
Since
you are using a lot of channels, I would advise you use a
producer/consumer architecture. You can have a look at this
architecture by navigating to File -> New.. and searching for the
Producer/Consumer template. You will notice that this architecture uses
queues. The way you will design your VI is to use DAQ to acquire the
data into your producer loop, convert this data into a waveform and
then send this data to the consumer loop via queues. In your consumer
loop, you can write this data to a file. At this point, I would
encourage you to write to a binary file instead of a spreadsheet file. The write will happen faster and you will be using less space on your hard disk when compared to ASCII writes.
I know this can be real confusing for a beginner, so be sure to post back if you have any questions.
Adnan Zafar
Certified LabVIEW Architect
Coleman Technologies -
Write an 1d-array of cluster with 3 elements
Hi,
I have to make a "Power spectral densities" analyse from my waveform data. The results from this VI is an array of cluuster with 3 elemments. Now I want to write this array of cluster with 3 elements to a file. And later it must be able to use this file with EXCEL!!
thanksHi
I found some outer Forum entries about this topic.
Look at this links:
http://forums.ni.com/ni/board/message?board.id=170&message.id=49553&requireLogin=False
http://forums.ni.com/ni/board/message?board.id=170&message.id=51526&requireLogin=False
I hope this helps
Manuel -
How can I write a 1d array of cluster with 3 elements to a file?
Hi,
I have to make a "Power spectral densities" analyse from my waveform data. The results from this VI is an array of cluuster with 3 elemments. Now I want to write this array of cluster with 3 elements to a file. And later it must be able to use this file with EXCEL!!
thanksHello schloronzo,
make a for loop feeded with your array. Inside the for loop unbundle
the cluster, "format into string" the 3 values, adding the result to
the ones before and collect them in a shift register. Then save the
resulting string to a txt-file. If you make a good format string then
Excel is able to read your txt-file (use tab a separator and CR/LF
after each 3 values aka "csv format").
Best regards,
GerdW
CLAD, using 2009SP1 + LV2011SP1 + LV2014SP1 on WinXP+Win7+cRIO
Kudos are welcome -
Write 1d array of cluster with 2 elements to file
HI!
I'm new at LabView so I hope the question is very simple to you:
I am using a waveform graph to display several measurements.
Now I want to save these Measuremens. The data are stored in 1d array of cluster with 2 elements.
What is the easiest way to do this??
ThanksIf you are already using waveforms you can simply wire right up to "Write Waveforms to File.vi" in the Waveform palette under Waveform File I/O.
Daniel L. Press
PrimeTest Corp.
www.primetest.com -
Connect 1 D array of cluster of 2 elements with dynamic data
Hello
The type of source is 1D array of cluster of 2 elements and the type of sink is dyanamic data. Can any one guide me how to connect these 2 elements together. Any response would be highly appreciated.
ThanksFirst, this question would more appropriately be posted to the LabVIEW Board. It is not a signal conditioning issue.
The dynamic data type (DDT), sometimes referred to as the "evil dynamic data type," completely obscures the internal data structure. The only way someone could help is if you tell us what the source is expecting the internal data structure to be. The only objects which want DDT inputs are Express VIs, which are also good at obscuring thier contents. Implementing the sampe funcitonality with standard VIs might be a better approach.
You also have not completely specified the source. What are the data types of the cluster elements?
Lynn -
How can I access the sub elements of the Nested Cluster-2
would like to know the label a sub element of a Nested Cluster. I have included the vi. I am trying to programmetically read the Text label of the data elements in Value N mode cluster (Max , Min Mode). I was looking into the Type descriptor document. It can tell me how many and what type of elements are in the cluster. But it does not gove me Refnum to those objects.
Let me know if you have an solution to my question."
Attachments:
cluster_1.vi 24 KBHi
You need to do a recursion. If the reference you get from the array "controls[]" if of type cluster, then you have to loop through recursively.
Openg toolkit has variant tools that might be of some help to you (www.openg.org).
Good luck
PJM
Got EasyXML?
JKI.VIPM.EasyXML.OpenG.LAVA.Builder.blog -
Hello,
i'm using array of cluster to allow user entering differents setting
But in some case i would like to adapt viewing to hide some parameters or displaying 0 or a null field
my problem is when creating a ref on control in the list how to know wich line is concerned to modify the good one
here a vi for example
when case 1 is seleced in first column other ctl can be any of choices
when case 2 is selected i would like the mofify two others to be 0 and none
is there an other way than playing with coordonate and size of elements to know which line is the current one ?
Regards
Tinnitus
CLAD / Labview 2011, Win Xp
Mission d'une semaine- à plusieurs mois laissez moi un MP...
RP et Midi-pyrénées .Km+++ si possibilité de télétravail
Kudos always accepted / Les petits clicks jaunes sont toujours appréciés
Don't forget to valid a good answer / pensez à valider une réponse correcte
Solved!
Go to Solution.
Attachments:
list of ctl.vi 8 KBI was able to simplify that VI to the point where I can post the code to demonstrate the idea. Here it is in both 8.6 and 9 (it seems to have lost some font formatting when saving back to 8.6). I haven't used XControls at all but it seems like the sort of thing that could be converted to one easily if I had the time and need for it.
Attachments:
Array of Clusters in Table.vi 52 KB
Array of Clusters in Table 8.6.vi 33 KB -
How to add elements into Object[][] type of list, in runtime?
I have Object list, ie.
final Object[][] data = {
{"January", new Integer(150) },
{"February", new Integer(500) },
{"March", new Integer(54) },
{"April", new Integer(-50) }
};How can I dynamicly add new elements in it, at the runtime?
Thank you in advance!Do I have to remove 'final' for that, and then add
elements?
No. you can't change an array's size.
You can do this
Object[][] arr = new Object[numRows][numCols];But once you've created it, its size can't change.*
I don't know what you're doing, though, and what actual data you're putting in, but Object[][] holding rows of [String, Integer] is almost certainly a poor data structure. Think about creating a class the represents one "row" here and then create a 1D array of that class.
* Okay, you can kinda sorta effectively "change" the size of second and subsequent dimensions, since a multidimensional array is an array of arrays. I wouldn't recommend it though: int[][] arr = new int[3][2]; // a 3 x 2 rectangular array of int--it's an array of array of int, with 3 "rows", each of which is an array of int with 2 elements.
arr[0] = new int[10]; // now it's a jagged array whose first row has 10 elments instead of 2Here we haven't changed an array's size, just replaced one of its elements, which is also an array, with a new, larger array. -
Programmatically Change Array to Cluster Size
Hello,
I have a Chart with several values scrolling across it. The number of
values is variable. To prepare the data for the Chart, I use the Array to
Cluster element. Is there a way I can programmatically change the size of
the cluster output?
Thanks,
PeterPeter,
As far as I know, you cannot programatically chage the size of the cluster output in the Array to Cluster vi. However, you may not need to convert to a cluster for charting. The chart will take a 2D array and plot mutiple lines. See the attached example which uses Reshape Array to form the data for a chart.
The only hitch is that it erases the plot when you change the number of values to plot. This may or may not be important to you.
Tim
Attachments:
Reshape_array_for_chart.vi 18 KB
Maybe you are looking for
-
One Webi Report with multiple Cascade Prompts
HI I have a requirement to create Cascading prompts on WebI reports. I have two questions. 1) Can one Webi report have two or more sets of Cascading prompts. 2) The universe is used by several groups of business useres. But only one group ne
-
Calling A Report Program From DIALOG Program ?
Hi helping Minds , My requirement is like.... I have a screen, where Datas Are displayed after all the calculation in TABLECONTROL . The user wants a button REPORT on the same Screen , By clicking the REPORT button, it will call a SELECTION SCREEN to
-
American credit card with foreign billing address
Hello! My little cousing just got an iPod Touch as a birthday present, and I am trying to set up her Apple account. My uncle gave me his credit card, but it turns out it is an American card with a Venezuelan billing address. I already tried setting i
-
Installing PSE 12 on laptop that is not connected to internet
I purchased and installed Photoshop Elements 12 several months ago on my desktop computer. I am taking a class on Photoshop Elements and would like to install the program onto my laptop computer in order to take it to the class; however, my laptop
-
? dont get it. why would you make an interface? can't you just declerate all the methods in the classes?