National Instruments TDM and TDMS files

I have had a couple of requests for Igor support for National Instruments TDM and TDMS files.

I confess that I am largely ignorant about these formats. Quickly reading some of the National Instruments web pages, it seems like this is something Igor should support. However because of time constraints and competing priorities, I can't say when or if we will get to it.

In the mean time, a user-created XOP might be a good idea.

I plan to read up on TDM and TDMS over the next few days to be better able to answer questions about it.

I've created this forum topic in case others want to discuss it.
hrodstein wrote:
I have had a couple of requests for Igor support for National Instruments TDM and TDMS files. ...


My first glance here shows that TDM is an XML format. For a first step, the XML file loader I have written here, in conjunction with a suitable XSL file, might work without needing to do XOP programming.

--
J. J. Weimer
Chemistry / Chemical & Materials Engineering, UAH
From my brief reading, TDM has an XML header but the data is binary. In TDMS which is a newer version, there is no XML.

Note that, from the licensing agreement that one must "sign" to download the DLL, you have to agree to this clause (emphasis mine):


2. Grant of License; Obligations. NI grants you a limited, non-exclusive right to download, use and distribute the TDM DLL pursuant to the terms and conditions of this Agreement. You may use the TDM DLL in your product in order for the product to access (i.e., read and write) TDM and/or TDMS files. If your application reads TDM files using the TDM DLL, you must support writing TDM files as well. If your application reads TDMS files using the TDM DLL, you must support writing TDMS files as well. You may distribute the TDM DLL as part of your product with such limitations as set forth below.
I had trouble finding where to download the TDM DLL from but I found it here.

The TDM license has some obnoxious provisions.

hrodstein wrote:
I had trouble finding where to download the TDM DLL from but I found it here


Does having a .dll mean, writing a TDM/TDMS loader/generator procedure/XOP is out of the question for Mac OS? Or does it mean, we just have to work a bit harder at it?

(not that I am intending to write something, just that I was struck with the question as a preface)

--
J. J. Weimer
Chemistry / Chemical & Materials Engineering, UAH
jjweimer wrote:
Does having a .dll mean, writing a TDM/TDMS loader/generator procedure/XOP is out of the question for Mac OS? Or does it mean, we just have to work a bit harder at it?


It means that you would have to reverse engineer the file format to support Macintosh and that your version would be out-of-date whenever NI adds a new variant.

It seems that they should provide a Macintosh DLL, and Linux too.

I just saw this post in regards to TDMS support in Igor. I am the Product Manager for TDMS and would be more than happy to talk with you integrating the DLL in your product. Please feel free to email me if I can help in any way. caroline.tipton@ni.com

Thanks
Caroline Tipton
Data Management Manager
National Instruments
NICarolineTipton wrote:
I just saw this post in regards to TDMS support in Igor. I am the Product Manager for TDMS and would be more than happy to talk with you integrating the DLL in your product.


Caroline - I did write a TDMS plug-in for Igor on Windows. It will be part of the soon-to-be-released Igor Pro 6.1 installation and is available in the 6.1 beta now.

I had an email exchange with Caroline Bright (you?) about it in February.


Hi,

I recorded some data in SignalExpress 3.0, installed the TDM.xop, Igor 6.1 and tried uploading the file into IGOR but got the following error/output:

Loading "Voltage.tdms" from "F:UCLA Programming:TDMS Conveter:Sample Data:"
Created root:Voltage
Numeric variable datetime renamed to datetime0 because of a name conflict.
Numeric variable DateTime renamed to DateTime0 because of a name conflict.
Numeric variable DateTime renamed to DateTime0 because of a name conflict.
Numeric variable DateTime renamed to DateTime0 because of a name conflict.
Numeric variable DateTime renamed to DateTime0 because of a name conflict.
Numeric variable DateTime renamed to DateTime0 because of a name conflict.
DIAdem library error from routine during TDMLoadData: An invalid argument was passed to the library.

-Max
Hi,

I do really like the ability of loading in TDM-files to Igor. However, loading the TDM into igor discards the wave properties, i.e x-scaling and x-unit, of the TDM-channel. Instead the channel becomes just an array of numbers, with a note containing the scaling factors.

Is there a easy way of adding a property to the labview generated file so that the TDMloadData treat the channel as a wave and not an array?
Or better, could the TDMloadData be updated so that the properties; "wf_xname", "wf_xunit_string", "wf_increment" ..., are mapped onto the igor wave so that the right x-unit and scaling are preserved?

Regards
Gustav
According to the NI documentation, the only built-in channel properties in TDM are the channel name and the channel description. Although the documentation does not mention it, I have a recollection of discovering the "unit_string" was also a standard channel property and TDMLoadData uses it to set the wave data units.

My understanding is that any other channel properties are user-defined. I'm not aware of any established conventions such as "wf_increment". At least none were mentioned in the NI documentation when I wrote TDMLoadData.

The TDM XOP loads user-defined properties into the wave note. The TDM Help file explains how to extract the user-defined properties from the wave note and use them for whatever purpose. To see this, execute:

DisplayHelpTopic "TDMLoadData"

and read the section entitled "Channel Properties".

Using the technique explained there, you should be able to do what you want.

On further review, I found this NI documentation.

By convention, LabVIEW defines the wf_start_time, wf_start_offset, wf_increment and wf_samples properties.

I have made a note to support this in the TDM XOP but I can't say when I will get to it.
I have been using TDMS files very successfully over the last few years.
It is a fantastic file format.
I have many other collaborators using this format as well and I always have them refer to this tread for installation tips.
Unfortunately, the dll link provided earlier has ceased to exist.
The site that hosts the link is available:

http://digital.ni.com/public.nsf/allkb/A3663DE39D6A2C5A86257204005C11CA

but the ability to access the dll is not accessible:
http://research.ni.com/run/2007codelicenseagree

Is there any support from Wavemetrics in this regard, or do I need to keep bugging NI?
Any plans to build this into Igor as a standard feature?

Quote:
but the ability to access the dll is not accessible:
http://research.ni.com/run/2007codelicenseagree


I'm surprised it lasted this long. Note the "research" part of the link.

You can find the required libraries by going to http://www.ni.com/white-paper/3727/en/ and clicking the c_dll_tdm.zip file in the Downloads section in the top/right part of that web page.

For Igor7, I have updated the TDM help file with this new link and also added a 64-bit version of the XOP.

Quote:
Is there any support from Wavemetrics in this regard, or do I need to keep bugging NI?


We will support it as long as NI provides the required support. Third-party access to TDM files seems to be a step-child project at NI, based on the lack of a real installer.

Quote:
Any plans to build this into Igor as a standard feature?


No. You can see from the TDM XOP installation instructions that it requires a grab bag of third-party libraries. We would have to ship all of that junk with every copy of Igor.

Dear All,

Are there some updates regarding loading TDMS-Files?

I copied the 64 bit XOP into the folder Igor-Extension (64-Bit) and also installed NI-Diadem 2021. Is there something else I should do?

But I get this error message:

DIAdem library error from DDC_OpenFileEx routine during TDMLoadData: Error occurred when loading the DIAdem library DLL (nilibddc.dll)

 

I'm using Igor-Pro 9 Beta Version 9.0.0.8 Build 37752

 

Thank you for your help