Jump to content

cookjr

Members
  • Posts

    18
  • Joined

  • Last visited

  • Days Won

    1

Posts posted by cookjr

  1. Hi Jon,

    The error was a bug, and has been fixed in version 0.1-8.

    However, another problem is that you are trying to write an empty cluster array to a mat-file. I don't think this has a MATLAB equivalent. Clusters are like MATLAB structures, and arrays of clusters are like MATLAB cell arrays; so an empty cluster array is like an empty MATLAB cell array of structure. I haven't been able to recreate this in MATLAB.

    Now that the error has been fixed, the library will write an empty cell array to the mat-file when you tell it to write an empty cluster array.

    Thanks for helping to improve the library. Let me know if you have any other questions.

    Jim

  2. Jim,

    The VI is working well, I just had one last question. I am having difficultly figuring out how to name the elements of my clusters. When I sent you the VI I had labeled them, but looking at the difference (names seem to have black borders around them) between my version and yours I noticed that there is a qualitative difference between naming a field and labeling it. If you could tell me how to access that property of a field I would appreciate it. As always thank you very much for your help.

    Regards,

    -Jon

    Hi Jon,

    I think they're the same. I edited your VI using LabVIEW 8.2.1, later versions of LabVIEW seem to have a default label appearance of having a transparent border. Check out the LabVIEW help for details on changing the color of objects.

    Jim

  3. Hi Jim,

    Can you write a simple vi to read a mat file with a 1D array of double? (I am using Labview 8.6 and Matlab 2008). I can write a mat file and read it in matlab, but I can't seem to get read a mat file in labview, I got"Error 74 occured at Unflatten From String in level5.lvlib:Extract MAT-File Tag Field.vi->level5.lvlib:Extract Data Element (2D Array of Double).vi". Thanks very much.

    Jason

    Hi Jason,

    Could you send me a mat file that is similar to one that you're having trouble opening? It doesn't have to have real data in it. Then I'll see what I can do.

    Jim

  4. now I have problems converting large tdms files (about 70MB) to a mat file.

    The matio library fails with an "Out of memory" error.

    Is some part of the library leaking memory or is this simply a misusage of

    the library VIs on my side?

    Hi Dominik,

    Try the attached edited VIs. This won't give you the same structure as the "Anything" VI (cell array of structs), but it has the best chance at completing without throwing "out of memory" errors.

    Note that the only thing I changed in the waveform_array_to_cluster_array VI was that I switched the "insert into array" primitive with the "replace array subset" primitive, since you were preallocating an array.

    Efficiency is something that I would like to see improved in the library. It's not leaking memory, but it's not as efficient as it could be either. It's possible that using byte arrays and queues instead of strings would improve memory efficiency. This would be a major rewrite though.

    Anyway, I hope the workaround VIs work for you.

    Jim

    jrc2_test_tdms_to_mat.vi

    waveform_array_to_cluster_array.vi

  5. I tried to use the 1D to Cell function and it does not work. The data in cell one spills over to the next array element. The output does not load in MATLAB so I tried a data in data out LabView vi. The results are below. Using matio-0.1-7 release 45, LV8.6, MAT7.3.0 on XPSP3.

    I justed tried the 2D to Cell with the same results.

    Hi Steven,

    The Append 1D Cell function requires a 1D array of "data elements". Data elements are the string output of any of the Append Data Element functions. This allows you to have different data types inside your cell array. All of the cell and struct functions work with data elements. Here's an example:

    post-4414-125449772928_thumb.png

    Please note that the data elements inside a cell or struct array must not be compressed, and they must not have a name.

    Jim

    cellArrayOfStrings_example.vi

  6. Hi Dominik,

    Unfortunately there is another issue: when column vectors are created in MATLAB,

    e.g. n x 1 arrays, they are not correctly read by the library.

    The variable returned just contains a single element.

    This does not occur, if row vectors, e.g. 1 x n arrays are created.

    matio-0.1-7 was just uploaded and it should have fixed this bug. For your info, the bug was given ID #2869727.

    Further, when chaining multiple read-mat VIs it would be convenient to have a

    copy of the endianess input as output.

    This feature request was given ID # 2869732.

    And maybe it would be nice if one could specify the name of a variable to

    read from the file instead of having to read them sequentially in alphabetic order.

    This feature request was given ID # 2869734. This is a great idea. I think a separate "Extract Data Element By Name" polymorphic VI could be created. FYI, I think MATLAB stores variables to a MAT-file in the order that they were created, not in alphabetical order. Currently, you have to read the variables using the Extract Data Element VI in the order that they occur in the file. The List Variables VI can be used to determine the order of the variables.

    Nevertheless the library is very useful already :).

    Thanks! And thank you for your bug reports and feature requests. The library is getting better, because of your help. Any new features will be added in version 0.2.

    Jim

  7. Hi Dominik,

    I should have caught this before by looking at your screenshot.

    All variables in MATLAB must have a name. The build array primitive creates an unnamed array. The current version of the matio library does not enforce the naming of data inputs (basically because sub-elements of cell and struct arrays cannot have a name). So the "Append Data Element" VI saved your data appropriately, but MATLAB didn't know what to do with it, since it didn't have a name. Here is one way to fix it using the "Insert Into Array" primitive:

    post-4414-125414214486_thumb.png

    Future versions of the library will have some logic that will at least throw an error if there's a problem with element naming. Obviously some documentation would be beneficial for the current version.

    Thanks again for helping test the library.

    Jim

  8. Hi Dominik,

    • Version 0.1.6. Should be the most recent one.
    • I used the OpenG package and installed it with the VI package manager. My LabView version is 2009 (9.0)
    • I simply modified the example VI given by the screenshot in your fist post (see attached image).
    • Due to forum limitations i could not upload the resulting 'test.mat', but attached the VI used to create the data.

    Looks like you did everything right. The only thing that stands out to me is LabVIEW 2009. I do all my testing with LabVIEW 8.2.1. It won't be a problem for me to run the tests using LabVIEW 2009 when I get back to work.

    Writing and subsequent reading of waveforms from LabView works (see attached test_matio_waveform.vi).

    Very good to know. Thank you for testing this.

    Unfortunately, I'll be away from work until Monday, so I can't even look at your VIs until then. But I will definitely look into this problem and hopefully get it fixed asap. If you need MAT-files right away, you could use the lower-level VIs (Append Data Element (1D Double, N-D Struct, 1D Cell, etc.)). These give you more fine control over the result anyway.

    Thanks

    Jim

  9. Nice work.

    Unfortunately writing an array of clusters does not work.

    There seems to be no variable in the mat file. If i understood correctly

    an array of clusters should be mapped to a cell array of structs or

    a struct array in Matlab.

    Another issue (maybe related to the one above): Writing a waveform

    does not work as well, although this is essentially just a LV cluster.

    Hi kinimod,

    Thank you for taking the time to report this.

    I hope we can isolate exactly why it didn't work for you, so the library can be improved for future users. It would be very helpful if you could provide more details about the steps you took to write the data.

    1. What version of the matio library did you use? Some bugs were found in earlier versions that have since been fixed.
    2. Did you install using the OpenG package format, or the zip package format?
    3. What steps did you take to write the array of clusters? A screenshot or some sample code would be helpful here.
    4. Could you send a sample of your data?

    Regarding the waveform data: I think that the waveform data structure is a little different internally than a cluster, although they do some similar things. I don't normally use waveforms, so my original intent was to store them so that LabVIEW could read them back in properly instead of transforming them into something that MATLAB could use (i.e. a timeseries object). Were you able to read the waveform data back into LabVIEW?

    Thanks again for your help.

    Jim

  10. A whos subVI would not be too hard. I'm assuming you're talking about a subVI that returns a list of variables/attributes from a mat file. I'll add that as a feature request. I'm busy right now making unit tests for the library, so I won't be able to get to it right away though.

    Jim

  11. Hi Anders,

    Thanks! I'm glad you might get use out of the library.

    Regarding structs and cell arrays, I was thinking of changing how the "Append Data Element (Anything)" VI handles arrays of clusters. The current version writes them to file as a cell array of structs. I'm thinking a struct array might make more sense. Of course you would always be able to use the low-level VIs in the case that you want a cell array of structs. Does anyone have an opinion on this?

    Jim

  12. Hello,

    I made a library for reading/writing MATLAB Mat-files in LabVIEW, and posted it on Sourceforge. It's written in pure G, with no external DLLs. Anyone is welcome to use the code if they want. It can be downloaded at http://matio-labview.sourceforge.net/. If you do try it out, I would appreciate any feedback you could provide.

    Here is some sample code. I'm writing a cluster of various items to the file test.mat. This will create a structure in MATLAB with field names derived from the labels of the items in the cluster.

    post-4414-125259520164_thumb.png

    After running "load test.mat" in MATLAB, here is the result (shown in the variable editor):

    post-4414-125259519743_thumb.png

    Thanks,

    Jim

    • Like 1
  13. QUOTE (Neville D @ Oct 29 2008, 11:33 AM)

    With the new overlay functions in Vision 8.6.x (released Aug 2008), you can group overlays and then clear only the group that has changed, leaving other overlays untouched.

    Anybody know of an easy way to shift an overlay group by some offset x or y? I have done this by adding the overlay group to a blank image, then shifting the image using IMAQ Shift, then using IMAQ Copy Overlay to copy the shifted overlay from the blank image to the destination image. It just seems like there should be an easier way...

    I would like to use this to dynamically move an overlay around on an image. The reason I'm attempting to do this with the Vision utilities instead of pictures is that I would like to use the IMAQ WindNonTearing function, which seems to work very well, by the way. Using pictures, I wasn't able to implement any non-tearing functionality.

    Thanks.

×
×
  • Create New...

Important Information

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