Best Method for Saving Data to File?

Hi, 
We're using labVIEW 2009 to acquire data from our instrument.  In the past we have used the "write to labview measurement file" express configuration tool to save data to a file. However we had some issues with our VI - occasionally we would lose data or column headers somewhat erratically and were never able to sort out the problem. We would like to rewrite our VI with the best possible solution. 
 Here's a summary of what we would like to do:
Save 30 variables at a rate of roughly 1 Hz. We would like one set of column headers per file so that the data can be easily imported into labVIEW with the variable names intact. We will be collecting data continuously, so we would like to divide the data into 3-4 files per day. Ideally, the program to start new files at the same times from day to day and the filename could be configured to include the date and time/file number.
I am hoping that users can provide a little feedback about methods that were most successful and reliable. From what I have read there are a few different ways to do this (express VI, tdms, "write to text file"). Any thoughts or relevant examples would be quite useful for us!
Thanks for your help!

Meg T wrote:
Is it correct to say that in your method, the indexing results in building up the data into one large array of data before saving it to the file with the column headers and filenames appended?  If we are writing data at 1Hz for 6 hours of time, will we run into an issue being able to store all the data?
Yes the indexing will build up one large array.  If this is a problem due to array size and memory, you will have to write more often.  You can write every second, that should not be a problem.  You should still write the column names to the file first, and have the append input set to False (or nothing wired in since the default is false).  This will create a new file with the headers only.  Then the data write has a True wired in so that the append takes place.  If running for 6 hours and gathering data once per second, your array will contain 36,006 rows of data.  I'm not sure if that would cause a memory problem or not.
Meg T wrote:
 it also seems difficult to incorporate headers into express VI if you are writing the data continuously as a part of a loop with the "append" option.
If you write the headers before the loop as I have shown, and use append inside the loop, you will not have problems.
- tbob
Inventor of the WORM Global

Similar Messages

  • What is the best method for saving files off of the hard drive?

    I would like to save music files and photos somewhere other than my hard drive (eg. CDs, DVDs, zip disks). What is the best method for doing this?

    It rather depends on how paranoid you are
    External hard drives protect you from hard disk trouble on your machine.
    Optical media (CD's, DVD's) protect you from trouble with magnetic disks - such as external hard drives and the HD in your machine. Optical disks are thought to be more reliable that magnetic disks for long term storage.
    Off site back-ups will protect you from fire or theft at your home or office.
    How paranoid are you? Personally everything is backed up across three diferent external HD's. And maybe twice a year I burn a copy of my photos onto DVDs and they go to a relative's house across town.
    Regards
    TD

  • Best method for plotting data array?

    I am reading data from a Delta Motion controller and writing that data to an array in my vb.NET program.  The data is not time stamped but I know what the sampling interval is (0.001s).  I want to take that data and plot it on my Waveform Graph.  What is the best method for doing this?  I'm sure this is simple, but I'm new to MS and LV.
    Private Sub btnRampUpA_Click(sender As Object, e As EventArgs) Handles btnRampUpA.Click
    Dim Axis0ActualPrsData() As Single = New Single(4096) {} 'Create array for data from the RMC controller to be read into
    Dim Axis0Actual() As AnalogWaveform(Of Single)
    If RMC.IsConnected(PingType.Ping) = True Then 'Check to make sure comms to RMC is good before trying to read data from it
    Try
    RMC.ReadFFile(FileNumber150.fn150Plot0StaticUA0, 112, Axis0ActualPrsData, 0, 4095) 'read the plot data where sample period = 0.001
    Catch ex As ReadWriteFailedException
    MessageBox.Show("Unable to read plot data from the RMC. " & ex.Message)
    End Try
    End If
    End Sub
    Thank you

    PlotYAppend appears to be the answer according to the white page, although I don't have it working as of yet.  Can someone confirm?

  • What is the best method for saving the client sequence file revision in the database \ report?

    I'm trying to figure out the best way to store the sequence file Revision in the database. That is, if I have the Revision (SequenceFile.AsPropertyObjectFile.Version), where (e.g. what table / field) should I put it if I'm using the SQL Server schema that ships with TestStand?  How do I get it there?
    Certified LabVIEW Architect
    Wait for Flag / Set Flag
    Separate Views from Implementation for Strict Type Defs
    Solved!
    Go to Solution.

    Ok LabBEAN,
    Here is my tutorial.  It is actually easier than I thought:
    Step 1: Configure>>Database Options and uncheck the Disable Database Logging.
    Step 2: Click the Data Link tab
    Step 3: Make sure the Connection String Expression is pointing to the right location.  Should be a public directory with a .mdb file if you are using TestStand defaults.  Click the View Data button to verify.  It should open the Database Viewer so you can look at the tables.  Leave the Database Viewer open.
    Step 4: Click the Schemas tab
    Step 5: With the Generic Recordset (NI) selected click the Duplicate button.
    Step 6: You should now see a copy of that schema.  In the Name box name it MyRecordset and make sure it is checked
    Step 7: Click the Statements tab and highlight STEP_SEQCALL.  NOTE: you must always do this before clicking on the Columns/Parameters tab
    Step 8: Click the Columns/Parameters tab
    Step 9: Highlight the SEQUENCE_FILE_PATH item and click the Copy Button
    Step 10:  Highlight the new entry and change the Name to SEQUENCE_FILE_VERSION
    Step 11: MOST CRITICAL STEP: Change the Expression to RunState.Engine.GetSequenceFileEx(Logging.StepResu​lt.TS.SequenceCall.SequenceFile, 107, ConflictHandler_Error).AsPropertyObjectFile.Versio​n  It is better to do it this way because you never now where a sequence file call will be made and not all sequence calls are made to the model client sequence.
    Step 12: Hopefully you left the Database Viewer open from Step 3. Go to it.
    Step 13: Right click the STEP_SEQCALL and select Add Column..  Name the new column: SEQUENCE_FILE_VERSION.  Basically you need a column that matches the one you created back in the Columns/Parameters tab.  Set it up with the same type and size.  NOTE: there is an alternate way to do this using the Execute SQL View in the Database Options but you need to create it.  You can create it from the Schemas tab back in TS by clicking the Build .sql File.. button.
    Step 14: Back in TestStand click OK to save and close the Database Options.
    Now run your sequence and you will see the new data in your database.
    jigg
    CTA, CLA
    teststandhelp.com
    ~Will work for kudos and/or BBQ~

  • Best method for passing data between nested components

    I have a fairly good sized Flex application (if it was
    stuffed all into one file--which it used to be--it would be about
    3-4k lines of code). I have since started breaking it up into
    components and abstracting logic to make it easier to write,
    manage, and develop.
    The biggest thing that I'm running into is figuring out a way
    to pass data between components. Now, I know how to write and use
    custom events, so that you dispatch events up the chain of
    components, but it seems like that only works one way (bottom-up).
    I also know how to make public variables/functions inside the
    component and then the caller can just assign that variable or call
    that function.
    Let's say that I have the following chain of components:
    Component A
    --Component B
    -- -- Component C
    -- -- -- Component D
    What is the best way to pass data between A and D (in both
    directions)?
    If I use an event to pass from D to A, it seems as though I
    have to write event code in each of the components and do the
    bubbling up manually. What I'm really stuck on though, is how to
    get data from A to D.
    I have a remote object in Component A that goes out and gets
    some data from the server, and most all of the other components all
    rely on whatever was returned -- so what is the best way to be able
    to "share" data between all components? I don't want to have to
    pass a variable through B and C just so that D can get it, but I
    also don't want to make D go and request the information itself. B
    and C might not need the data, so it seems stupid to have to make
    it be aware of it.
    Any ideas? I hope that my explanation is clear enough...
    Thanks.
    -Jake

    Peter (or anyone else)...
    To take this example to the next (albeit parallel) level, how
    would you go about creating a class that will let you just
    capture/dispatch local data changes? Following along my original
    example (Components A-D),let's say that we have this component
    architecture:
    Component A
    --Component B
    -- -- Component C
    -- -- -- Component D
    -- -- Component E
    -- -- Comonnent F
    How would we go about creating a dispatch scheme for getting
    data between Component C and E/F? Maybe in Component C the user
    picks a username from a combo box. That selection will drive some
    changes in Component E (like triggering a new screen to appear
    based on the user). There are no remote methods at play with this
    example, just a simple update of a username that's all contained
    within the Flex app.
    I tried mimicking the technique that we used for the
    RemoteObject methods, but things are a bit different this time
    around because we're not making a trip to the server. I just want
    to be able to register Component E to listen for an event that
    would indicate that some data has changed.
    Now, once again, I know that I can bubble that information up
    to A and then back down to E, but that's sloppy... There has to be
    a similar approach to broadcasting events across the entire
    application, right?
    Here's what I started to come up with so far:
    [Event(name="selectUsername", type="CustomEvent")]
    public class LocalData extends EventDispatcher
    private static var _self:LocalData;
    // Constructor
    public function LocalData() {
    // ?? does anything go here ??
    // Returns the singleton instance of this class.
    public static function getInstance():LocalData {
    if( _self == null ) {
    _self = new LocalData();
    return _self;
    // public method that can be called to dispatch the event.
    public static function selectUsername(userObj:Object):void {
    dispatchEvent(new CustomEvent(userObj, "selectUsername"));
    Then, in the component that wants to dispatch the event, we
    do this:
    LocalData.selectUsername([some object]);
    And in the component that wants to listen for the event:
    LocalData.getInstance().addEventListener("selectUsername",
    selectUsername_Result);
    public function selectUsername_Result(e:CustomEvent):void {
    // handle results here
    The problem with this is that when I go to compile it, it
    doesn't like my use of "dispatchEvent" inside that public static
    method. Tells me, "Call to possibly undefined method
    "dispatchEvent". Huh? Why would it be undefined?
    Does it make sense with where I'm going?
    Any help is greatly appreciated.
    Thanks!
    -Jacob

  • Best method for saving settings

    What is the generally accepted "best" way to store a programs settings? I was thinking of just using a text file as its easy to implement, is there any reason i shouldn't do this?
    Cheers
    J
    EDIT:
    Lets assume im not saving any sensitive data, just fluff.
    Edited by: JamesBarnes on Jun 8, 2010 12:33 PM

    Encephalopathic wrote:
    One possible solution: Properties
    Some more:
    - Object serialisation
    - XMLEncoder/Decoder
    - Preferences (for storing, for e.g., the path to the application Properties file)
    - For JWS and plug-in2 applets, the PersistenceService.
    - ...

  • Best quality for compressing data vide file

    Hi,I have a 5minute clip which I have been asked to burn on a normal cd as a data file.Whats the best exporting option I can use.should I use compressor? or should I go directly to the quicktime conversion option in final cut?
    thanks

    I hope I don't have this worng, but export>quicktime movie will only make a movie based on the currently selected sequence settings. Sure you can make some choices from the drop down menu, but the default is the current sequence setting.
    So if this chap were working on a 320x240 video sequence with a horribly lossy compressor, then he'd end up with a pretty rough finished quicktime.
    Choosing quicktime conversion does not necessarily compress the footage if you don't select a compression method that will destroy it. You can just as easily not compress it via this method. I would say that using Quicktime Conversion means you really have to know what you are doing so you get all the settings right to match your destination format.

  • Best practice for saving data in SQL server

    Hi all
    Hoping for a little help on this question. 
    If i have a list of fields ex. (name,address,postal,phone etc.). Then i create a webform/task
    to gather some of theese fields (name, postal), then i make another webform/task to gather some other fields (address, phone). 
    What is best practice in the SQL server for storing returning values.
    Is it: 
    1. to make a table with all the fields in the list + taskid. Theese fields could be in
    correct format (number, date etc.). And all answers to all tasks is inserted into this table. 
    2. Make a value table for each field with the correct type + task id. So all name values
    are stored in the "name value table" with the task id.
    How would i select values from a certain task from this kind of setup?
    3. ??
    Best regards
    Bo

    Hi Atul
    Thanks for your reply, can you elaborate a bit further on this, since i am still a little confused. 
    Let me try to explain my scenario at bit more:
    Say instead that it is 50 fields in a table with their own unique ID, maybe an answer table
    would look like this:
    taskid | field_1 | field_2 | field_3 | field 4 | field_n
    So no matter which fields the user fillsout it will can be stored in one table. 
    QUestion is, is this a good way to do it? and how do i select from this table using a join
    As far as i know you cant name columns in a table with just numbers, which would have been
    great, giving the columnnames the field_id.
    OR
    Would you have 50 tables each with a field_id and a value (of correct type) ?
    And could you give me an example of how to bind and select from this kind of structure ?
    Also inserting into 50 tables on a save.... is that the right way to go? :)
    Best regards
    Bo

  • Best method for transferring data from one database to another?

    There is an 8i database I have to deal with on a regular basis. Besides being completely outdated and unsupported, in my opinion the database has not been well-maintained--for a table with 25 million records, should ‘select count(*) from table;’ take 5 minutes to run? I don’t really know, but that seems long to me. Many complex queries (most including only tables with less than a million records) take a ridiculously long time to run, to the point that I can’t even run some of them.
    I am not the DBA; I don't have the authority to fiddle with the database (nor would I feel comfortable doing that), and the powers that be will not put effort into improving functionality of this database due to an alleged plan to update/replace it within the next year. However, in the mean time, I still have to get data out of this database on a regular basis.
    I have XE 10g installed on my local machine, and I have set up a database link in it to the 8i database. I have found that I can pull in basic data (simple queries) from the 8i database into tables in my XE database (e.g. create table tbl1 as select data from tbl1@8idb) and then query those tables to get the information I need much, much faster (including creation of the tables). While this option does not allow me to create queries/reports that other people can run, it makes work I’m doing only for myself much faster.
    What I’m wondering is, what is the best way to bring the information I need over to my database? I usually don’t need entire tables, and I can probably identify a number of key tables (or parts of tables) I need. What I’ve been doing up until now is writing CREATE TABLE statements on the fly, but then I end up forgetting what all I’ve done, and each time I want up-to-date data, I have to drop the tables and re-create them. It seems to me that there should be an easier way to do this than to copy and paste from a text document into SQL*Plus.
    Does anyone have any suggestions for me on how best to do this?

    Sorry, I guess I posted this in the wrong forum. I re-posted in the database-general forum.

  • Best method for exporting data???

    Howdy!I am exporting data from my production Essbase databases every day. I have chosen to export "ALL" data, but have not been exporting it in column format. Would someone please comment on the pro's & con's of archiving data this way?TIAJR

    Pros of exporting all data in column format:1. You can reaload a database quickly without calculation2. Using column format, you can use a load rule to load parts of the data3. If some of your data is created by unique calcs, you can recover it easier in case of a crashCons:1.You can end up with very large files(actually a lot of 2 gig files)2. It can take a long time depending on the size of your databases3. Exports prevent you from doing other things to the cube while exporting. Glenn [email protected]

  • Best Method for Destroying Data on the Drive Before it Goes Back to Apple

    As the subject suggests....any ideas....i'd like to 'shred' the whole drive and clean install without any personal info on it.

    Run Disk Utility from the installation DVD and erase the drive with the option to write zeros. Once is fine although if you're paranoid you can choose a multiple pass option.
    Also, I would subsequently install Mac OS X on to so you can start it up if required.

  • When bouncing- what's best method for smallest file size/highest quality?

    I am in the process of embedding 3 mp3's into a PDF to submit as a portfolio. The PDF also has text, and two scores included, and with the 3 embedded mp3's it can't be more than 10mb.
    So my question is: When bouncing a project out of Logic, what is the best method for getting the smallest file size, but retaining the best audio quality? And once it's out of Logic and it is an mp3 or other type of audio file, is there a best format for compressing it further, and still maintaining the relative quality?
    I bounced out the three projects into wav's. Now I am using Switch for Mac to compress them down to smaller Mp3's. I basically need them to be about 3 mb each. Two of the recordings sound OK at that size, but they are just MIDI(one project is piano and string quartet, the other is just piano- all software instruments. The recording that combines MIDI and Audio and has more tracks (three audio tracks and 10 Midi/software instrument tracks)and sounds completely horrible if I get it under 5 mb as an mp3. The problem is that I need all three to equal around 9mb, but still sound good enough to submit as a portfolio for consideration into a Master's program.
    If anyone can help I would really appreciate it. Please be detailed in your response, because I am new to logic and I really need the step by step.
    Thank you...

    MUYconfundido wrote:
    I am in the process of embedding 3 mp3's into a PDF to submit as a portfolio. The PDF also has text, and two scores included, and with the 3 embedded mp3's it can't be more than 10mb.
    So my question is: When bouncing a project out of Logic, what is the best method for getting the smallest file size, but retaining the best audio quality?
    The highest bitrate that falls within your limits. You'll have to calculate how big your MP3's can be, then choose the bitrate that keeps the size within your limit. The formula is simple: bitrate is the number of kilobits per second, so a 46 second stereo file at 96 kbps would be 96 x 46 = 4416 kbits / 8* = 552 kBytes or 0.552 MB. (*8 bits = 1 Byte)
    So if you know the length of your tracks you can calculate what bitrate you need to keep it within 10 MB total.
    I consider 128 kbps the lowest bearable bitrate for popsongs and other modern drumkit based music. Deterioration of sound quality is often directly related to the quality of the initial mix and the type of instruments used in it. Piano(-like) tones tend to sound watery pretty quickly at lower bitrates, as do crash and ride cymbals. But don't take my word for it, try it out.
    And once it's out of Logic and it is an mp3 or other type of audio file, is there a best format for compressing it further, and still maintaining the relative quality?
    You can only ZIP the whole thing after that, but that is just for transport. You'll have to unzip it again to use it. And no, you cannot compress an MP3 any further and still play it.
    I bounced out the three projects into wav's. Now I am using Switch for Mac to compress them down to smaller Mp3's.
    That is silly, you could have done that in Logic, which has one of the best MP3 encoders built in. And how good encoders are will especially come out at bitrates around or below 128, which you might be looking at.
    I basically need them to be about 3 mb each.
    So, one more scrap of info we need here: how long are those three pieces, exactly? I'll calculate the bitrate for you - but please bounce 'm directly out of Logic as MP3's. They will very probably sound better than your WAV-conversions made with Switch.
    !http://farm5.static.flickr.com/4084/4996323899_071398b89a.jpg!
    Two of the recordings sound OK at that size, but they are just MIDI(one project is piano and string quartet, the other is just piano- all software instruments. The recording that combines MIDI and Audio and has more tracks (three audio tracks and 10 Midi/software instrument tracks)and sounds completely horrible if I get it under 5 mb as an mp3. The problem is that I need all three to equal around 9mb, but still sound good enough to submit as a portfolio for consideration into a Master's program.
    Length of the piece? And does the .Wav bounce you have sound OK?

  • What is the best method for writing Multicolum​n List data to a text file?

    I am trying to find the best method for writing the data from a multicolumn list to a text file. Say the list has 7 rows and 6 columns of data. I would like the final file to have the data resemble the Multicolumn List as closely as possible with or without column headers. A sample VI showing how to accomplish this would be greatly appreciated. I realize this is pretty basic stuff, but I can get the output to the file, but it comes out with duplicate data and I am on a time crunch hense my request for help.
    Thank You,
    Charlie
    Everything is Free! Until you have to pay for it.

    Hello,
    I think that the answer to your question it's on the example that I've made right now.
    See the attached files....
    Software developer
    www.mcm-electronics.com
    PS: Don't forget to rate a good anwser ; )
    Currently using Labview 2011
    PORTUGAL
    Attachments:
    Multi.vi ‏12 KB
    Multi.PNG ‏6 KB

  • Best method for refreshing a component's data?

    What's better when you want to refresh the content of an object? Should you just replace your JComponent with an entirely new one, or should you try to get access to the data and then remove the items and then re-add them.
    In my example, I have a JTree and am not sure which would be the best method to use. Should I try to remove all the nodes, or sometimes I think it would be easier to just remove the tree component from my panel, create a new tree and re-populate it?
    Thanks for any advice.

    pjbarbour wrote:
    I'm not quite sure what would be the best method for this.  My client is using a 4x3 screen and SD projector at a large meeting, and they want me to just create a DVD that is letterboxed.  I have one Premiere CS5 project that's 1920x1080, and another project that's 720x480 widescreen (1.2).  I created a new sequence in both projects that is 720x480, 4x3 (0.9), and what I do is just scale the timeline down so that it's letterboxed.  Is this the best method for achieving this?  Or would you do something else?  I don't like the idea of scaling my timeline down in Premiere.
    Hello.
    As Jim so rightly points out above, you do not need to do anything.
    Just use your normal 16:9 widescreen footage, and author as normal.
    Your player will letterbox automatically when it is connected to a 4:3 screen in setup (just make sure "Pan & Scan" is not also there)

  • Best method for networking with ubuntu linux

    Hi,
    I'm setting up an ubuntu linux fileserver, and I was wondering what the best method for filesharing with my mac is. I'm currently running osx 10.4.11, though I may be upgrading to 10.5 soon. I'll be running SMB networking for a couple of other computers, but I'd prefer something a bit more robust that can handle file permissions etc.

    Mac OS X supports NSF out of the box. Configuration isn't documented.
    I recall Apple got rid of net info manager in Leopard, so the configuration will be different. Perhaps more unix like.
    Mac OS X support the Unix Network File System (NFS). However, it leaves out
    the GUI.
    This page show you how to use NetInfo Manager:
    http://mactechnotes.blogspot.com/2005/09/mac-os-x-as-nfs-server.html#c1168221713 40271068
    NFS Manager can both setup NFS shares and connect to NFS shares.
    http://www.bresink.com/osx/NFSManager.html
    Once you figure out how NFS Manager configures the NFS shares, you can
    use Applications > Utilities > NetInfo Manager to create more shares.
    You will either have to coordinate Unix Userid number and Unix Group Id number or use the mapall option on the share.
    To find out your Mac OS X userid and group id do:
    applications > utilities > terminal
    ls -ln
    ls -l
    # lists the NFS share on your mac
    showmount -e localhost
    #list NFS shares on a remote host
    showmount -e remote-ip-address
    Once you see what NFS Manager does, you will be able to use NetInfo Manager to manage a connection. In Mac OS 10.4 you can configure the /etc/exports control file. See man exports for the details. Before that you had to have the data in NetInfo manager. When Mac OS X came out, many common Unix control files were not present. Instead the data had to be in NetInfo manager. Over time Apple has added more and more standard Unix control files.
    ======
    You do know about the need to match userids & groupids.
    # display uid and gid
    ls -ln
    sudo find / -user short-user-name -exec ls '-l' {} \;
    # on Mac OS X
    you will need to go into NetInfo Manager and select user and find your short-user-name. Change uid and guid.
    #on Linux look in
    /etc/passwd
    /etc/group
    # with care...
    # change 1000:20 to your values for uid:gid
    sudo find / -user short-user-name -exec chown 1000:20 {} \;
    The manual for Tenon MachTen UNIX (which Apple checked when doing Mac OS
    X) says that one should crate the file /etc/exports, which will cause
    portmap, mountd and nsfd to launch at startup via the /etc/rc file. The
    file must not contain any blank lines or comments, and each line has the
    syntax
    directory -option[, option] hostlist
    where 'directory is the pathname of the directory that can be exported,
    and 'hostlist' is a space separated list of hostnames that can access the
    directory. For example
    /usr -ro foo bar
    /etc
    /Applications
    /User/gladys gladys
    The client the uses a command like
    /sbin/mount -t type [-rw] -o [options] server:directory mount_point
    where 'type' is 'nfs', 'server' the name of the server, 'directory' the
    server directory mounted, and 'mount_point' the client mount point. See
    'man mount' for details.
    I haven't tried the above, but it would be nice to know if it works on Mac OS X.
    Hans Aberg
    This will give you some hints on NFS. Post back your questions.
    Robert

Maybe you are looking for

  • Download past purchases

    I would like to share something that I'm not happy with and to know if there is a way to fix it. First of all, I have changed my Apple ID from US to Brazil. On Apple's page it is written: "If you changed your Apple ID from one country to another, you

  • WBS element business area

    Dear Experts, while making the wbs element with T.code CJ01 by mistaken I fill the business wrong and make the many po is it possible now I change the business area . Pooja sharma

  • How about a simple WYSIWYG print?

    When I view a contact in the Address Book, on the screen I see all the data in a perfectly nice format. Sometimes I just want to print out that contact on one page to hand someone or take with me in the car. But all my print options seem to assume I'

  • Deauthorizing Only One Computer on iTunes

    I have a laptop and would like to have all my music from iTunes on my laptop. I have tried Home Sharing and it says I have 5 computers authorized. How do I deauthorize one of them and not all of them, if that is a possiblity.

  • Regarding the Time dependent master data error

    Hi Masters,         I've loaded the time dependent master data from flat file only two fields. When I checked that corresponding characteristics in maintain master data, that contains by default from date 01.01.2007and to date 31.12.9999 this date al