Building an array with custom counter

I want to use a counter as index in an array (see attached vi). I've tried to put the counter and the "energy consumption" into a txt file. That really worked well. But I don't want to use a txt file. I want to have my recorded numbers in an array, indexed by the counter so that I can go back in the vi to a specific index of the array.
Any ideas?
Thanks in advance.
The German Guy
The German Guy
Attachments:
Energy_consumption_simulation_counters_create txt file.vi ‏59 KB

Hello Neighbour in the east
What do you want to do? You want to store the 'energy consumption' in an array at a point indexed by the counter?
In that case you have to determine what your maximum counter and your resolution should be.
With that info you can initialize an array before the the while loop filled with NaN's.
And with a shift register fill this array at the correct point (look out this will overwrite elements!!)
Then afterwards you can save this array to a file, you only have to make sure to save the offset and resolution of the array as well.
Ton
Sorry I can't post an attachment
Free Code Capture Tool! Version 2.1.3 with comments, web-upload, back-save and snippets!
Nederlandse LabVIEW user groep www.lvug.nl
My LabVIEW Ideas
LabVIEW, programming like it should be!

Similar Messages

  • How to build a array with high sampling rates 1K

    Hi All:
    Now I am trying to develop a project with CRio.
    But I am not sure how to build a array with high sampling rates signal, like >1K. (Sigle-point data)
    Before, I would like to use "Build Arrary" and "Shift Register" to build a arrary, but I found it is not working for high sampling rates.
    Is there anyother good way to build a data arrary for high sampling rates??
    Thanks
    Attachments:
    Building_Array_high_rates.JPG ‏120 KB

    Can't give a sample of the FPGA right now but here is a sample bit of RT code I recently used. I am acquiring data at 51,200 samples every second. I put the data in a FIFO on the FPGA side, then I read from that FIFO on the RT side and insert the data into a pre-initialized array using "Replace Array subset" NOT "Insert into array". I keep a count of the data I have read/inserted, and once I am at 51,200 samples, I know I have 1 full second of data. At this point, I add it to a queue which sends it to another loop to be processed. Also, I don't use the new index terminal in my subVI because I know I am always adding 6400 elements so I can just multiply my counter by 6400, but if you use the method described further down below , you will want to use the "new index" to return a value because you may not always read the same number of elements using that method.
    The reason I use a timeout of 0 and a wait until next ms multiple is because if you use a timeout wired to the FIFO read node, it spins a loop in the background that polls for data, which rails your processor. Depending on what type of acquisition you are doing, you can also use the method of reading 0 elements, then using the "elements remaining" variable, to wire up another node as is shown below. This was not an option for me because of my programs architecture and needing chunks of 1 second data. Had I used this method it would have overcomplicated things if I read more elements then I had available in my 51,200 buffer.
    Let me knwo if you have more qeustions
    CLA, LabVIEW Versions 2010-2013
    Attachments:
    RT.PNG ‏36 KB
    FIFO read.PNG ‏4 KB

  • How to build a array with collected data

    Hi,
    I have collected data from serial port with VISA. Now I want to build a array with 100 date points. Should I connect VISA Read with Build Array directly? How to do it?
    PS: All of them are in a While Structure.
    Thank you!

    An inefficient way to create the array is to use the build array and a shift register as shown below. It's more effecient in terms of memory management to create the array and then use the replace array subset as shown in the other image. Of course, if you don't need the array inside the loop, just wire the value out of the while loop and on the exit tunnel, right click and select 'Enable Indexing'.
    Message Edited by Dennis Knutson on 07-03-2007 10:25 PM
    Message Edited by Dennis Knutson on 07-03-2007 10:26 PM
    Attachments:
    Crude Build Array.PNG ‏4 KB
    Better Build Array.PNG ‏6 KB

  • Building a dvd with custom disk size (disk, ISO, or dvd folder)

    My goal at the end of all this is to get a DVD format of video at 6mbps with menu's to be burned to a blu-ray 25GB disk.
    Using Encore CS6 on a Windows 7 (4.7Gzh 8-core, 16gb ram @2400mhz)
    1st attempt:  I used a bluray disk and tried to burn a dvd format and it ejected my disk and said please insert a black dvd. (used custom disk of 25GB showing extra space available)
    2nd attempt: I thought perhaps I would build it to an ISO (also tried dvd folder) to burn later. it responded with an error message saying, "disk capacity is too small - building navigation failed"
    I dont care how I can get this to work but I would like to get all the video and menu's onto a single disk. Encore limits the "custom disk size" to 99GB so I assume it should work for 25GB (23.2GB).
    The reason I dont want to make a bluray format is because it requires high bitrate and the video is so old it would be a waist of space. I dont need 720p of video from 1935. (unless I can make a bluray format at a 6mbps)
    Thank you for any help you can provide
    bullfrogberry

    You can do this in Encore.
    I am assuming you are only picking presets, and not customizing one. You pick prests in the Transcode Settings dialog. Do you see the "Edit Quality Presets" button? Pick it, customize one by setting the bitrates to get the results you want, then SAVE IT as your own. Then pick that in the transcode setting. (In the transcode setting image, you can see my custom example "Stan Custom 4Mb CBR".) And yes, you can select all your video assets and apply this custom preset to all of them at once. I would do one short one to see if you are getting in the ball park. I would do 2 samples: one in MPEG2-Bluray and one in H.264-Blu-ray. (I'd follow Richard's recommendation to  you and use H.264.)

  • Build an array with 2 values assigned to 1 dimension

    I am wanting to build a 1D array where two values are assigned to each dimension.  For example:
    Index 0 would have a 1 and 4 assigned to it
    Index 1 would have a 2 and 3 assigned to it
    Index 2 would have a 0 and 1 assigned to it.
    Then I can unbundle this arrayand grab the two values for index 0, index 1, etc....  I want to put this array inside a typedef control.  Is this possible?
    Solved!
    Go to Solution.

    Thanks for the replies.  I considered using a cluster and had the typedef control modified to include the cluster.  I may just go back to this method if this is the simplest for the code I am modifiing.
    A 2D array assigns two values i.e. row and column to one number.  I need it the other way around.
    Here is what I am trying to do.  I need to control a rotary valve.  I am using compact filedpoint to control the rotary valve.  The valve requires a pulse (1 then 0) for the rotary valve to move 1 position. If the valve is on channel 1 of the fieldpoint module and I want it to turn to position 2, the I send two pulses to channel 1. 
    My thinking is I will have two values associated per rotary valve... a channel and a pulse value. So for example, valve 0 has a Boolean and a numeric value assigned to it in an array. Although, it doesn't have to be a boolean and a numeric.  it could be 2 numeric values for simplicity.
    I hope this makes sense because without knowing this posting a VI or image is useless.  Its the chicken before the egg thing. :-)

  • Build-time errors with custom tags in wkshop sp3

    We have custom tags which create tag variables declared in the .tld file as follows:
    <tag>
    <name>contentsIterator</name>
    <tag-class>org.cap.documentaccess.taglibs.ContentsIteratorTag</tag-class>     <tei-class>org.cap.documentaccess.taglibs.ContentsIteratorTEI</tei-class>
    <body-content>JSP</body-content>
    <display-name>Contents Iterator</display-name>
    <description>
    </description>
    <variable>          <name-from-attribute>id</name-from-attribute>          <variable-class>org.cap.documentaccess.Content</variable-class>
    <declare>true</declare>
    <scope>NESTED</scope>
    </variable>
    <attribute>
    <name>id</name>
    <required>false</required>
    <rtexprvalue>false</rtexprvalue>
    <description>
    </description>
    </attribute>
    The calling jsp contains the following:
    <cap:contentsIterator id="content">
    The app built fine in wkshop(sp2) but in sp3 we get the following:
    A name-from-attribute variable cannot reference a tag attribute that is request time or is not required.
    Has the sp3 compiler become less forgiving or was this an oversight in sp2?

    if u are using weblogic workshop for ur application import c.tld into WEB-INF
    and just import standard.jar, jstl.jar to WEB-INF/lib.
    if u are using other than weblogic work shop like tomcat
    1.just copy c.tld to WEB-INF.
    2.create a 'lib' directoty inside WEB-INF copy standard.jar,jstl.jar files to that lib directory.
    i think it should work.

  • How can I build an array not knowing final size at startup?

    Hi,
    I need to be able to build an array with a certain number of rows but that number is not known at runtime. Instead it can't exceed 5 in a certain time period. So my question is: every 20 seconds I need to send out the 5 row array but if lets say 10 rows of data come in in 20 seconds I am not sure how to handle the data to have it build 2 arrays and send them out one after another at the elapse of the 20 seconds as opposed to just sending an array with 10 rows and losing half the data on the receiving side. Please any help will be appreciated,
    Alex

    I understand that you have to send a least a message every 20 seconds (could be empty ?), but can you send more messages if you get more data (e.g. 3 message of 5 rows in 20 sec) ?
    If you can, then all you have to do is to trigger the sending of a message each time the array size reaches 5, or if 20s ellapsed since last sent message.
    Here is an example, using shift registers. there is a random data generation so that you can see it working (if you set the time between data long enough, then you will see the data sent after 20 sec. Well not exactly 20 sec, but i guess you can figure this out later by yourself...)
    I hope this will be of any help
    Attachments:
    dynamic_array.vi ‏36 KB

  • Methods to build an array inside a For Loop.

    Let me introduce to you my nested For Loops:  
    They output a 2D boolean array depending on two 1D boolean arrays of different lengths.  This is all well and good however, in another part of my program, I want this to be a 1D array instead.
    Idea #1:
    "I'll just reshape the array at the end. Simples!"
    Idea #2:
    "Hang on, why am I using three primitives outside the loop when I can use just one inside it along with a shift register?"
    Idea #2.5:
    "Oh, wait... I remember reading somewhere about continuously building an array (with concatenate inputs) inside a loop being a bad thing and quite slow. Let me test this."
    Spoiler (Highlight to read)
    Idea #3:
    "Umm... okay, so actually the second way is faster.  I think if I initialize the shift register first then replace subsets of the array, that might also be better."
    Spoiler (Highlight to read)
    Idea #4:
    "Yep - seems much better. (Something to do with LabVIEW not having to constantly allocate more memory on every iteration of the loop)  Looking at this closer, I don't actually need the inner For Loop because of the way I'm handling the arrays.  Try again...!"
    Spoiler (Highlight to read)
    Conclusion(?) #1:
    "Well I seem to have arrived at something that looks messier, but executes about 6x faster than my initial idea. That said, the difference rapidly increases as the input arrays get much bigger (becoming orders of magnitude different)."
    Is this the most efficient way of doing what I want?  Or is there something even better (and works in LV 8.5)?
    Never say "Oops." Always say "Ah, interesting!"

    Thank you both for the feedback.  It never occurred for me to recheck the logic after I'd initially extracted the nested For Loops, but the AND gate output is obviously the same now that it's been pointed out!
    Continuing on with Idea #4, I replaced the Select with an AND then compared the times.  (also meant I didn't have to initialize one of the arrays anymore)
    Spoiler (Highlight to read)
    It appears that the AND gate was slower but then I tried with different sizes of initial arrays and in one case, the timings were 'reversed'.
    This only happened when the top array (the one that is fed into the AND gate whole) was reduced to a length in the region of 5 elements long.
    Spoiler (Highlight to read)
    Why does this happen?  Is it something to do with the AND gate possibly being optimised for single element operations so smaller arrays are handled better...?
    Never say "Oops." Always say "Ah, interesting!"

  • Help me for build a array as follows

    Hi. I need build a array, with the number 10 in all positions of array. For example, if array is of size 10x10, the number 10 must appear in the 100 positions of array. But I need that the number  go storing in array  as follows: That store the number 10 in all row 1 of left to right, in row 2 of right to left and so on. I attached my VI, but i have a problem, the program make well the sequence but the number 10 no storing  in some positions, this positions is inthe extrems of some row,i think that i need to maintain the number of column for two cicles, buy i don't know very....Help me.!!...Thanks!! 
    Solved!
    Go to Solution.
    Attachments:
    Fotos_ejeX.vi ‏10 KB

    You said you want your array to be 10x 10, but you initialized it to only 9 x 9.
    Pay attention to where you increment your index.  You are incrementing your index before you replace array subset.  So on iteration 0, you wind up replacing at index 1 and completely missed index 0.  Increment at the end of the loop after replacing the element, not before replacing the element.
    I don't understand the comparisons to 15 and 8.  That seems like odd comparisons when you would be looking at a range of 0 to 9.  Something seems very awkward about comparing to those two numbers, and the use of 3 shift registers to track values when you are only incrementing two indices.
    Yes you don't want to increment or decrement your index on the column in the iteration where you are also incrementing a row.  So work that into your logic.
    You probably want to stop your while loop when you hit stop OR you've reached the end of your replacements.
    I would consider making two For Loops, one that iterates for rows, the inside one iterates for columns.  Shift registers on both to maintain the array.  Then use the i value of the inner loop to replace your element when you are in even rows, or the 9-i element when you are in odd rows.
    Since your indices are integer values, you should be using the blue integer datatype rather than orange floating point wires.

  • Passing arrays with Call Library Function does not work after application builder

    Calling a DLL with Call Library Function which requires an array of data works correctly in Labview, but after building an exe with application builder, the call no longer works.  Dereferecing the pointer in the DLL retuns all 0s and not the actual values.
    Solved!
    Go to Solution.
    Attachments:
    TEST.zip ‏28 KB

    I did not run your code because it is a little unclear to me what it does.
    Two things:
    First, is the DLL you are calling the DLL-ified version of PopUpNames.vi? Then the problem is likely that the panel is not being built into the DLL.
    When LabView builds an application / dll, it strips the front panel and block diagram from all VIs that it doesn't think need to show a panel at run time. This reduces file size and increases code security. The App Builder's panel inclusion logic can be overridden by Build Specifications -> Source File Settings -> Remove front panel. A better method is to put a property node on a control in a window you want to show marking it "visible"; this is sufficient to tell the App Builder it should keep the panel.
    Currently Source File Settings shows "no dependencies" (clearly incorrect---another evil side effect of Express VIs I guess) but if you change the settings as shown below to keep ALL panels, one might hope the App Builder can figure it to keep the panel when it deconstructs the Express VI. (Alternatively convert the Express VI into a regular one.)
    A second comment: I am a bit flummoxed at the larger goal here. You are calling LabView DLL from LabView, which doesn't make a lot of sense, so I assume your larger goal is to call LabView from C or vice-versa. In that case be aware that your DLL is x86 (32-bit) but you are passing 64-bit ints as your pointers. In this case it is 32-bit LabView with 32-bit pointers in embedeed in 64-bit containers calling 32-bit LabView with 32-bit pointers in embedeed in 64-bit containers, so it all works, but if your going to call this from C or whatnot you're going to have to follow that same design.
    When calling C code the LabView Call Library Function does have a "unsigned pointer-sized integer" data type that always appears to be 64 bits in the dev env but which actually passes a 64 or 32-bit int to the DLL depending on the environment. The "pointer sized int" has to be 64 bits in the "LabView" part of the code because LabView's strong typing requires the data type to be determined at compile time. Casting all pointers to the largest data type in LabView makes it possible to write platform-independent code, but down at the Call Library level you still have to put the right number of bytes on the stack.

  • Issue with building an array from a cfhttp request result.

    Here is what I am trying to do. Retrieve a bunch of results from a  REST request. Run a query to see if I should be excluding any of the xmltext entries coming back from the rest request. Build an array of the REST xmltext entries except the entries in the cfquery.
    I have it all workign except building the array minus the entries that came back in the cfquery. Here is my code so far.
    <cfquery name="getqueue" datasource="#application.settings.dsn#">
    select * from friends
    where Deactivatedate < #DATEADD('d', 1, CreateODBCDateTime(now()))#
    </cfquery>
    <cfoutput query = "getqueue">
    <cfhttp  blah blah>
    <cfset nodes_parse = XmlParse(CFHTTP.FileContent)>
    <cfset Nodes = xmlSearch(nodes_parse,'friends/friend/date/activedate/')>
    <cfset roleArray = ArrayNew(1)>
    <cfloop from="1" to="#arraylen(Nodes)#" index="i">
       <cfset NodeXML = xmlparse(Nodes[i])>
    <cfset ArrayAppend(roleArray, '[sel_members][]=#NodeXML.activedate.xmlText#&')>
    </cfloop>
    </cfoutput>
    My issue is down in the loop where I do the arrayappend. How would I build an array of values coming back from the cfhttp request but not include any of them if they match up with anything coming back from the getqueue query?

    What about the obvious? Namely,
    <cfif value_from_getqueue IS NOT value_from_cfhttp_request>
    <cfset arrayAppend()>
    </cfif>

  • Is it possible to create a 1 D array with the "build array VI"? when receiving random number

    Hello all,
    Is it possible to create a 1 D array with the "build array VI" when receiving random number?
    I am receiving random data and the build array VI always create a 2D array which might cause some problem if you want to compute certain type of operation after.
    Any example will be welcomed.
    Thank you,
    Israel 

    Hello Lynn and Yamaeda
    First I want to Thank you Lynn for your linguistic contribution indeed "Build Array" is a primitive and not VI, thank you for the education. In reality what I am doing is simple.
    I have two arrays of complex elements Array1 and Array2.
    Array1 conains the complex elements ""(a0+ib0) ; (a1+ib1) ;...(an+ibn) ;
    Array2 conains the complex elements ""(c0+id0) ; (c1+id1) ;...(cn+idn) 
    What I want to do is the multiplication of the first array by the  conjugate of the second array element.
    Array1*(Conjugate Array 2)" for the first element the results is "(a0.C0-b0.d0) + i(b0c0-a0d0)" and the etc...
    and then taking the square root ([(a0.C0-b0.d0) power of 2]) +  [(b0c0-a0d0) power of 2])
    I was wondering if there were some dedicate primitive that could solve the computation above which is the cross correlation in Frequency domain.
    Thank you very much.
    Israel

  • Can't build tp_smapi package under custom kernel, built ok with stock

    Hi,
    I followed this guide and built a custom kernel http://wiki.archlinux.org/index.php/Cus … n_with_ABS   (with the PKGBUILD file found in this page).
    Basically I changed the LOCALVERSION while config kernel module, and changed processor type to Pentium M, exclude some drivers.
    Now I can't build tp_smapi package with yaourt -S, gives me error:
    -> Extracting tp_smapi-0.40.tgz with bsdtar
    ==> Entering fakeroot environment...
    ==> Starting build()...
    patching file Makefile
    /usr/bin/make -C /lib/modules/2.6.32.8-custom/build M=/tmp/yaourt-tmp-user/aur-tp_smapi/tp_smapi/src/tp_smapi-0.40 O=/lib/modules/2.6.32.8-custom/build modules
    make[1]: Entering directory `/usr/src/linux-2.6.32.8-custom'
    /usr/src/linux-2.6.32.8-custom/Makefile:529: /usr/src/linux-2.6.32.8-custom/arch/x86/Makefile: No such file or directory
    make[2]: *** No rule to make target `/usr/src/linux-2.6.32.8-custom/arch/x86/Makefile'.  Stop.
    make[1]: *** [sub-make] Error 2
    make[1]: Leaving directory `/usr/src/linux-2.6.32.8-custom'
    make: *** [modules] Error 2
    make: Entering directory `/usr/src/linux-2.6.32.8-custom'
    Makefile:529: /usr/src/linux-2.6.32.8-custom/arch/x86/Makefile: No such file or directory
    make: *** No rule to make target `/usr/src/linux-2.6.32.8-custom/arch/x86/Makefile'.  Stop.
    make: Leaving directory `/usr/src/linux-2.6.32.8-custom'
    ==> Tidying install...
      -> Purging other files...
    However it builds fine if run the stock Arch kernel.
    This package depends on kernel26-headers, it pulls this down and installed, but itself is failed.
    I believe the error is due to it requires the kernel26-headers as the other AUR packages don't.
    tp_smapi's PKGBUILD is here
    http://dpaste.com/162443/
    Any suggestions/help?
    Last edited by skygunner (2010-02-21 08:16:04)

    Hi,
    I wanted to build a kernel26-ice with tp_smapi included as I would love to have more than one kernel on my system. However, I do not find any information on patching the kernel with such patch. Can anyone guide me to the right direction?
    EDIT:
    Excuse me for any inconvenience, I found, that kernel26-zen may be what I am looking for as it uses tp_smapi as a patch.
    Last edited by Liuuutas (2010-03-28 14:58:54)

  • Using NetBeans Matisse to build a form with an array of JButtons

    With Matisse I can build a form with a lot of buttons on it, but i want to use a 2-dim array of JButtons so that I can easily access the buttons. How should I do this?

    Code it by hand. It's not that hard.
    JButton [][]buttons = new JButton[NUM_ROWS][NUM_COLUMNS];
    for (int row = 0; row < NUM_ROWS; row++) {
       for (int row = 0; row < NUM_ROWS; row++) {
          buttons[row][col] = new JButton();
          // set other properties of buttons[row][col]
    }If there is a lot of stuff, you could even make a separate method for creating a single button:
    private JButton createButton()
       JButton button = new JButton();
       // whatever else
       return button;
    }Then, in the "for" loops:
    buttons[row][col] = createButton();

  • Enable data paging with parameters count() on new php function issue (BUG?)

    I've got my app prototyped quickly with the default settings in Flex Builder 4.  Now I'm going back and adding/modifying features to polish the app off.
    For this application I'm using PHP5 as the server side.
    The data paging is really cool and simple to call using the default settings.  However, I'm running into issues with customizing the data paging feature.
    This is the default header of the php function that was created for me:
    public function getTblbrowserrecord_paged($startIndex, $numItems){...}
    Instead of dumping all data back to the function I want to be able to search on certain fields so I created a new function called:
    getTblbrowserrecord_search_paged ($szName, $szIP, $szRule, $szURL, $szDateLow, $szDateHigh, $szCode, $startIndex, $numItems  ) {...}
    The new function is tested and operates as designed.
    I set the input types of the variables and return type (Tblbrowserrecord[]) of the new function then went to enable data paging.  The first screen came up and asked me for the key to use which I selected.  The next screen came up and asked me for the number of records which I set to 100 then went to select the count operation.
    I initially selected the automatically created count() function but it came up with the error " Count operation parameters should match the paged operation parameters list."
    So I created another function to match the search function's parameter's list:
    public function count_searched($szName, $szIP, $szRule, $szURL, $szDateLow, $szDateHigh, $szCode, $startIndex, $numItems)  {...}
    But I still ge the error "Count operation parameters should match the paged operation parameters list."
    But they DO match.  I looked at the default functions that were created by FB4 and noticed that the automatically generated function count() has no parameters and the paged function has the two functions $startIndex and $numItems which are not identical yet they work.  I tried removing those two fields from the count function but got the same results.
    What am I doing wrong?
    Thanks!

    Nevermind... For some reason my FB4 is not updating correctly.  After removing the two control fields at the end of the list AND exiting the app/re-entering everything worked ok.  I've been having this issue a lot lately and am thinking that is is a bug of some sort?

Maybe you are looking for