Jump to content

FrankB

Members
  • Posts

    17
  • Joined

  • Last visited

Posts posted by FrankB

  1. ... a 3d plot with:

    x-axis = dim setpoint

    y-axis = frequency

    z=axis = FFTvalue

    to make this plot I need all the data (right?). ...

    I see.

    Just another thought:

    You mentioned, that you are getting data from 21 different channels. Is it neccessary to have the data off all channels (and measurement) within a single 3d plot? Or is it ok to have only the FFTs of one channel in one 3d plot and then have the ability of scrolling through the different channels. Maybe have an additional 3d plot for a second channel for data comparison?

    In that case you can reduce the needed memory by factor 21 or at least 10.5. And scrolling through the channels should be not too boring. The FFTs are calculated real fast. 20k FFT with each having 1024 data points takes less than 3 sec on my machine. Consider to use 2^n data points to use the FFT algorithm instead of DFT. That should be faster if I am correct. (Edit: ok, you need some extra time for loading the raw data for the selected channels. Maybe you can organize the data files per channel to get faster or easier access to the channel data.)

    Regards,

    Frank

  2. ... I have simplified the "write binary" case a little bit and still I get a memory full error. ...

    This happens on my machine too. Off course you have more memory available than just 160MB and I don't know the correct reason why LV claims so early that the memory is full. Afaik the amount of memory you can use in your VI is depending on your hardware (physical memory and so on) but I'm not sure how it is calculated.

    But I still wonder why you want to collect this huge amount of data in memory. Your single measurement shots are small enough to have no negative effects to the memory usage. Simply stream the data to a file after each light measurement of a single setpoint.

    Or are there any needs that you have to collect all the measurements in raw value in your memory?

    Regards,

    Frank

  3. Hi wallage,

    ... This will result in 21*1k*25k= 525M measurements (I know it is a lot) at max. ...

    If you use a waveform with data type DBL you will end up in more than 4GBytes of raw data. You may use SGL to reduce the needed disk space by at least factor 2.

    ... I have tried saving the measured data to a binary file which results in a "memory full" error. ...

    In your example you collect all data in memory before writing it at once to the binary file. Solution: Open the binary file and write each measurement - 21 waveforms with their 1000 samples - directly to the binary file and close the binary file after finishing all data acquisitions. Similar to your TDMS write example. On my machine, which is not the newest one, less than 70 seconds are neccessary to store the 1,6GB binary file (~23MB/s).

    Haven't tested the performance of the TDMS stuff for a while - my test program for TDMS is broken at the moment and i am to lazy/busy atm to fix it :-)

    I prefer the binary write for this simple things anyway.

    Regards,

    Frank

  4. Hi goran,

    I'm sorry for my mistake. Due to the fact, that you specified the number of pulses which you want to generate, the counter out task uses automatically the second counter to detect when to end the task.

    As your DAQCard-6036E has only 2 counters they are both needed for your CO task. If you change your CO task to continuously generating pulses my solution should work. This is probably not a correct solution for your problem.

    If you only want to end the puls generation after quite a while and it is not too important if there is a 'jitter' of about some 10 or 100s millisecond in stopping the train you could try the following:

    - generate the puls train continuously with one task

    - count the generate edges with another task

    - stop it by button click or

    - stop it, if more than xy pulses where counted

    If you have to stop the puls train after exactly xy pulses, you might need an additional (3rd) counter. Or someone else whose counter knowlege is better ;-)) and who can provide another solution :lightbulb:

    Regards,

    Frank

  5. Hi goran,

    there seems to be no task or timing or channel or or or ... property that gives feedback about the amount of time a task was running or the number of pulses which were generated. And getting a system timestamp right after starting and stopping the task and then calculating that probably xy pulses where generated might be ok only with very low frequencies.

    An accurate solution is to use a separate counter and task to count the digital events of the pulse train task. Use 'Count digital events.vi' - Example for starting.

    Regards,

    Frank

  6. any idea plzzzzzzzzzzzzzzz

    Hello Ammar,

    I am pretty sure that the people here on lavag.org could provide help on allmost any LabVIEW specific question. But first of all they have to understand the (your) problem itself :lightbulb:

    I've tried multiple times to understand what you are actually doing and what exactly the problems are. Maybe its my bad english, but I didn't manage to catch it. As your post was read by various users and no one has answered until now I imagine that they couldn't get it as well.

    Try to formulate what your are doing and into what problem you run in simple and clear words. The answer will surely be out there ;)

    Regards,

    Frank

  7. Hi Val Brown,

    maybe you have not saved your .lvproj after building the executions as LV has to store the build stuff in order to remember it the next time.

    Another reason would be source code controlling of the project and developing with multiple engineers. Sometimes the importance of the .lvproj file is underestimated and old versions of the .lvproj file will overwrite the newer ones.

    Regards,

    Frank

  8. Hi,

    the error occures because of using the wrong ActiveX class constant at type input of the 'Variant To Data' primitive. Select the class 'Excel._Worksheet' and the conversion will work properly.

    Now your example will write values to cell A2 of the worksheet with index 2. If you want to write more than 1 value, you have two possibilities:

    - explicitly set '_Worksheet.Range' to a single cell (Cell1 input) which you want to overwrite with the next scalar value. This for each of your values. Advantage: values can be spread all over the sheet. Disadvantage: slower.

    - set both inputs, Cell1 and Cell2, of '_Worksheet.Range' to a reasonable value, depending on the amount of data within your data array, to write all the data at once to your sheet. Advantage: faster. Disadvantage: values are written on block.

    Regards,

    Frank

    • Like 1
  9. ...

    I was kind-a hoping that there was a way to get the menu ref without resorting to file manipulation so everything could be in-place.

    Ok, I caught your problem now :D.

    We haven't found a straight solution for this problem, too. And if I remember correctly, we reported the need of getting VI menu references via VI Server mechanisms some years ago, cause we had exactly the same problem :( . This should be a good product suggestion for future releases of LV.

    Regards,

    Frank

  10. Hi Shaun,

    I'm not sure if I cought your problem right and I don't know the Passa Mak project.

    But what about some mechanism like this one in the screenshot?

    Implement some little standard components in all the VIs which should be supported by the Passa Mak thing. Produce events with changing a value (which represents a Q name for sending information back) and receive the according menu reference from the VIs.

    Any other solution without any extra code in (Main)VIs would be better. But I have no idea for such an improved way.

    Regards,

    Frank

    post-16630-125733099719_thumb.png

  11. Hi friends,

    I would like to whether we can group some mathematical elements like something shown in the picture.

    The local variables and the number of local variables are project dependent. So I want to create these things programatically in VI scripting.

    first I want to combine elements and place them repeatedly...is it possible or Should I use SubVis to implement this..?

    Thanks in advance..!!!

    Sharon

    post-16569-125715246196_thumb.jpg

    Hi Sharon,

    I think this should be possible with scripting, but if I take a closer look at your example problem, I would prefer a different solution.

    It seems that you need a variable number of timers (including reset and enable functions or so). My preferred first approach would be a functional global VI where you can handle all the settings of each timer within the uninitialized shift registers. You may then use this timer VI at different places on your block diagram for initializing the timers, resetting, en-/disabling, evaluating them. An improved solution could be made with LabVIEW classes.

    Regards,

    Frank

    • Like 1
  12. Hi sydney,

    I'm pretty sure that there is not a solution for directly catching events from subs that where not handled by the subs themself.

    There may be many solutions to get aware in a calling VI of something that you do in sub VIs. But if you like to do it with an event here is a little example VI (screenshot only) for something that should do what you need.

    post-16630-125691014297_thumb.png

    Uh, little bit to slow for that forum. Daklu posted a similar solution in his post :)

    Regards,

    Frank

    • Like 1
  13. Hello Herbert,

    there is no straight way to change the runtime menu of controls with the help of predefined .rtm files, as far as I know.

    You have the possibility to copy some predefined template .rtm file (say one of 'GraphDataSensitive_A.rtm' ... 'GraphDataSensitive_Z.rtm') over that file which is currently bound to Control (say 'MyGraphMenu.rtm'). After a small amount of time your context menu will show the items from the template.

    That works, so far, in the development environement but I've not evaluated it with an EXE.

    Probably the better solution will be the programmatic assembling of the control context menu within its 'Shortcut Menu Activation?' event. There you can react real quick on any status of your data or the program itself. If you have not a Graph, but a Tree Control or a Listbox, you can change the menu items depending on the item the user clicked on. Translation will be easier to, and so on.

    Regards,

    Frank

  14. Silly question (it may just be that my brain is slow today): where is the reference to "FileSystem" found?

    Hello Jolt,

    the 'reference' on the left should be a dotNET constructor node which could be found in 'Connectivity/.NET' palette. After dropping on the BD one can select the appropriate constructor (have a look at its context menu).

    Within the upcoming window choose 'Microsoft.VisualBasic (8.0.0.0)', or whatever version will show up there, from 'Assembly' control. Some objects will be listed. Select 'Microsoft.VisualBasic.FileIO / FileSystem' and there you are wink.gif .

    Interesting stuff, but hard to find sad.gif

    Regards,

    Frank

    btw: there are no silly questions, only silly answers yes.gif

    • Like 1
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.