Search the Community
Showing results for tags 'tdms'.
-
Hello Network, I am writing array of timestamp in TDMS file. "TDMS Write.vi" generates an error after calling this VI as follows. Group Name = "DUT T1" Channel Names = "DUT T1_Time" Please let me know if anyone has any suggestions. BR Aniket
-
Hi all! I'm new to the forum and I have a strange issue with reading TDMS custom properties with Labview. Creating user properties is working fine using TDMS Set Properties.vi, but I can't read them with TDMS Get Properties.vi. I can read the "standard" properties, and also I do see the properties in DiAdem (dataportal and using script) and also in Excel when I use TDM(s) importer. The property names are not listed when calling TDMS Set Properties.vi without the property name and data type terminals connected. There is no simultaneous file reading or writing. I solved the problem with loading DiAdem and running a script, but that's very slow and also not all target machines have DiAdem installed (and no licence either, obviously). I also tried with property names such as User Properties\Device_ID, User_Properties/Device_ID in whatever combinations (I look for the property "Device_ID") without success. Thank you for any hints in advance!
-
Hello I am trying to save TDMS files that ideally contain the following: - 3 xy graphs (each containing two 1d arrays) - 1 waveform The problem i'm running into is that when I convert the xy graphs to waveforms, the x-axis is converted to time, which isn't real or useful to me. I've attached screenshots of what the XY graph should look like VS what it ends up looking like with the waveform. How to I make sure the x-axis is preserved so that I can save to TDMS? Edit: VI is included & pictures have been updated to better represent my code. TDMS Waveform Example.vi
-
Hi all, I am supporting a legacy application in LV2010, running on a realtime PXI controller. The application is throwing occasional TDMS errors, typically -2505, when I do TDMS Flush or TDMS Close operations. The description of this error is simply "LabVIEW failed to write data to the TDMS file," which doesn't really tell me what happened. Every time I write or flush, the same quantity of data is being written, and most of the time, it operates as expected. After iterating for anywhere between 2 and 14 hours, though, it eventually throws the error. Does anyone know in more detail what this error means, and how to deal with it? Thanks!
-
Question: I'm trying to determine the 'best' way to structure my data when storing to disk. My data comes from a variety of different sensor types and with quite different rates - e.g. temperature data (currently) as a 1D array of temperatures and a timestamp [time, t1, t2, ..., tn] at maybe 1 Hz and analog waveform data from load cells at data rates ~O(kHz). I also want to be able to read back data from previous experiments and replot on a similar graph. Reading threads on this forum and at NI I'm uncertain if I'll be better pursuing a set of TDMS files, probably one per sensor type stored at the group/channel level, then at the end of an experiment, collating the TDMS files into one master file and defragmenting, or trying instead to write to a SQLite database. (I have nearly no experience using SQL, but no problem learning - drjdpowell's youtube video was already very informative.) An alternative possibility mentioned in a thread somewhere here was to write TDMS files, then store records on which files hold what data in what I understood to be a catalogue-style SQL database. Could anyone with a clearer idea/head than me comment on which avenues are dark tracks down which time will be easily lost in failed attempts, and which seem likely to be worth trying? Background: I'm currently rewriting some code I wrote last year based on the 'Continuous Measurement and Logging' template/project. The logging in that case was writing to a single, binary file. Keeping my data format in line as I changed sensor arrangement became increasingly annoying and an ever expanding series of block diagrams lead me to start on the 'Actor Framework' architecture. I have some initial progress with setting up actors and generating some simulated data, passing it around and getting it from different formats onto a waveform or XY-graph (can be chosen by choice of child class to insert into a subpanel). I'm now looking to write the logging code such that I have basic implementations of several of the components before I try and write out all of the measurement components and so on - I already have a temperature measurement library for an LTC2983 based PCB and so can use that to test (with hardware) inputting 1D arrays, whilst I'm planning to use just the sine wave VIs to test waveform input. I'm not so far into this set of coding that anything is set in stone yet, and so I want to at least try and start off in the right direction. Whilst it seems likely changes to requirements or plans will require modifications to whatever I write, it would be nice if those weren't of the same magnitude as the entire (e.g. logging) codebase. Apologies for the somewhat verbose post.
-
Hello, I'm using the 9229 and borrowed a community example to log 4 voltage inputs to TDMS. I need to output RMS voltage on channels 1&2 and the wavform on channels 3&4. Essentially what I've done is averaged channels 3&4 using the same # of samples that the RMS is averaged, that way I'm able to make sure they are time synchronized (see code attached). Another advantage doing averaging the samples is that I am reducing the amount of data to analyze later. When i compare the TDMS read results to the # of samples in the TDMS file there seems to be a discrepancy in time. I tried to add a time stamp to the logged TDMS file but couldn't get it to work. besides using time stamps, Is there an easy way to confirm that I am saving all of the data I am capturing? Eventually i will be logging data at 30min-40min intervals so I want to make sure that i'm not losing data. TDMS_Logging_Simple_4chan.vi
-
I'm currently investigating using TDMS as a data storage for a new measurement method. In our routine, we sweep up to 3 outputs (with X, Y and Z points each) and record up to 24 channels so we have XxYxZx24 datapoints. We create the following: Up to X data points for 24 channels of data interleaved in the first dimension (multichannel 1D) Up to Y times this first dimension (making the data multichannel 2D) Up to Z times this second dimension (making the data multichannel 3D) So in a sense, we create 4D data. Trying to use our old method of storing the data in memory fails quickly when the number of steps in each dimension increases. So we want to store them in TDMS files. But looking at the files and trying to imagine what read speed will be like, I'm unsure how to best store this data. DO I need multiple TDMS files? A single file? How to map the channels / dimensions to theinternal TDMS structure? In a further step to my efforts, I would be investigating having the routine for retrieving any sub-set of this data (1D or 2D slices from any combination of dimensions but almost always one channel at a time. Can anyone with more experience with TDMS files give some input and help a TDMS noob out?
-
Hi, I am investigating the possibility of using TDMS files as a kind of giant circular buffer that would be too big to fit in a live 2D array of some sort. Of course the other reason is to have those data saved for when the application restarts. A single location in the application will be responsible for writing in the file. This would consist of a loop that writes either one or a few samples for all the channels at each iteration. I successfully achieved this with good performance by setting the data layout input of the Write function to Interleaved. On the read side, few locations might need to access the files, but only on event, so this won't be a frequent operation. However it should still be fast enough since I don't want the user to wait several seconds before being able to visualize the data. My tests have revealed that this operation is slow when data are interleaved. Here are the details: # Channels: 500 (all in one group and the file contains only this group) # Samples for each channel contained in the file: 100 000 Data type: SGL floats (I'm not using Waveforms) Read operation: # Channel to read: 1 # Samples to read: all (count=-1 and offset=0) The time to retrieve the data is 1700 ms. (3500 if using DBL, it's quite linear...) If I generate the file with just one Write (feeding a 2D array) in Interleave mode, I also get 1700ms, so this doesn't depend on how the file is written at the first place. If I generate the file with just one Write (feeding a 2D array) in Decimated mode, this time I get 7ms!! It makes sense that the operation is faster since all the data to retrieve occupy a contiguous area on the hard drive. My 2 questions are: - Is there a way to keep Interleaved layout while optimizing - significantly - the Read performance? - If not, i.e. if I need to switch to Decimated, how can I write one or a few samples for all channels at each operation (I haven't managed to achieve this so far). I should mention that I did manage to optimize things a little bit by using the advanced API, setting the channels information, and reserving the file size, but this only reduced the read time by 12%. Thank you for your help!
-
I am accessing a TDMS file from two VIs running in parallel. One VI is responsible for opening the TDMS file and writing a property. The second VI is responsible for reading said property. Here's where things get interesting...The second VI cannot find the property while the first VI has the TDMS file open unless the first VI also writes data to the TDMS file. I've created a few VIs (attached) to help illustrate the problem. Any ideas as to what is going on? I would have expected properties to be available as soon as they are written. Read TDMS Property Names.vi Write TDMS Property (with data).vi Write TDMS Property.vi
-
Hi Guys, Simple question. I assume that some responses may be a simple "Yes" or "No". Can TDMS files have different file extensions than.tdms, if the file is created by LabVIEW?? Second question, what is the difference to TDMS v1 and v2?? Thanks for your help. Brenton
-
Hello, I recently used TDMS files in a customer application and for that purpose I made VIs to write/read clusters containing parameters to/from TDMS file. These VIs are basically *copies* of the Read Variant Key.vi and Write Variant Key.vi from the OpenG Variant Configuration File palette so I thought it would be a good idea to add it to OpenG. Hopefully it could help someone. PS: haven't tested these VIs extensively (with all possible data types in LabVIEW) but they do work fine with big clusters containing 1D and 2D arrays. Read Property Key from TDMS File.vi Write Property Key to TDMS File.vi
- 3 replies
-
- 1
-
- openg
- suggestion
-
(and 1 more)
Tagged with:
-
I am having an issue with memory when reading a TDMS files and converting to an array to write to a spreadsheet file. If I look in task manager when I run the VI the first time it allocates a bunch of memory and only a small fraction of that memory is freed after the VI is run. Even closing the VI and project doesn't free the memory, I have to exit out of LabVIEW before the memory is freed. Basically what happens is I open the VI and in task manager I see the memory increase (duh). Then I run the VI and it increases greatly (up to around 400,000 K), but when it finishes running only about 10 k is freed. Then every subsequent time I run, there is only about 10 k allocated then freed. So, the memory stops increasing, but it still holds on to a big chunk. The reason I worry this could be an issue is that I have many of these subVIs running one after the other, and if each one is hanging onto 300,000 K even after it's done running, I will begin to have memory issues. I am wondering if part of it could be that I'm in the dev environment, so I may build an exe to check. All my SubVIs do not have the panels opened, so I don't believe I should have a big array indicator showing data and taking up all that memory. Any thoughts or suggestions are appreciated. Edit: Is my attachment there? My internet is going super slow so I'm not sure...
-
I have a TDMS file where I would like to log waveform data. But, I am only logging when certain conditions are met. This could result in some condition being met, then the condition going away, then coming back etc. For example, if I want to log when the RPM exceeds a value, I will start on this exceedance. But, maybe RPM drops back below a threshold so I stop logging. Now the RPM comes above the exceedance again, but if I log my waveform to the same channel, it doesn't account for this new t0. Does anyone have any thoughts on work arounds for this? I could make a "timestamp" channel and extrapolate out the timestamps from t0 and dt, but then I need a timestamp channel associated with each DAQ channel. I could have a channel of t0's where a property is the channel it's associated with and the start index of that data from within that channel, but all this is quite in depth. I have also thought about just making a new group or channel for each exceedance, but this could be confusing to the user if using the TDMS viewer. Is there a simpler way?