Incompatibility of DataCount double/DateTime PDM

When writing data signal to a TDMS file I always find myself with a different values double number of (Y) compared to the timestamp of DateTime number (x).

What is strange, is that DataCount for channel gives a correct result. However, when opening the file for reading, there is always a gap between the number of X and the values of Y, by channel.

I already reported a bug about the AutoSave property and damage the data when you use TdmsWaveformLayout.PairedTimeAndSampleChannels and WaveformTiming.CreateWithIrregularInterval (). Workaround was to explicitly call Save() when editing the PDM file, for example creating groups/channels or write the sample data. It seemed to work pretty well, and I have not seen since corrupted data. However, I now feel a loss of data instead.

Just to be safe, I connect the value reported by DataCount before and after each write operation. In this example 80 samples are written each time. It looks OK:

2010-08-09 11:07:02.254 [9] DEBUG SE. Epiq.Acqis.Storage.TdmsStorage - P0 [mmHg] # before (double/date-time): 23920/23920
2010-08-09 11:07:02.262 [9] DEBUG SE. Epiq.Acqis.Storage.TdmsStorage - P0 [mmHg] # after (double/date-time): 24000/24000
2010-08-09 11:07:02.269 [9] DEBUG SE. Epiq.Acqis.Storage.TdmsStorage - P5 [mmHg] # before (double/date-time): 4400/4400
2010-08-09 11:07:02.269 [9] DEBUG SE. Epiq.Acqis.Storage.TdmsStorage - P5 [mmHg] # after (double/date-time): 4480/4480

But when I open the file and try to read the data I get an error saying "the number of stamps of time on synchronization channel... is not equal to the number of data samples.". DataCount confirms this, and there is always a multiple of the number of samples prepared at the same time lacking, for example 80/160/240 /... samples.

If I use the TDMS Reader demo app and click a synchronization channel I sometimes (!) get a different error: "specified argument was out of range of valid values. Parameter name: wholeSeconds. ». I don't know if this error is related. The timestamps, I am writing to you are what returns DateTime.UtcNow. Not surprising at all.

I have create/open the TDMS file like this:

... = new TdmsFile (filename, new TdmsFileOptions (TdmsFileFormat.Version20, TdmsFileAccess.ReadWrite, true, TdmsByteOrder.Native));

When I finished to write data, I call Dispose() Save(), Close(), (in that order).
  
Examples of data are written to the file using AppenAnalogWaveform().

channel. Parent.AppendAnalogWaveform (channel, TdmsUtilities.CreateAnalogWaveform (e.Data, e.Signal));

The CreateAnalogWaveform method returns aAnalogWaveform:

Result AnalogWaveform = AnalogWaveform. FromArray1D(data.) Samples);
result. Timing = WaveformTiming.CreateWithIrregularInterval (data. Timing);
result. ChannelName = signal. Alias;
result. UnitDescription = signal. UnitOfMeasurement;

The PDM is saved after every call to AppenAnalogWaveform.

What's really funny is that the docs for TdmsFile.Dispose () says:

Call Dispose when you are finished using the TdmsFile. The Dispose method closes the PDM file and makes it unusable . This method does not save the file. Call Open to reopen the PDM file.

So has really let the unusable file (sic!), it's great that you have documented it. ;-)

Thanks for the code MiF-

With your code, I was able to reproduce the bug you saw.  It seems to be closely internally with the previous bug you reported on autosave corrupt your data in special circumstances.  The fix for both problems is in the next version of Measurement Studio, but can also be obtained now by installing the runtime LabVIEW 2010.

Again, please excuse me for the inconvenience that these bugs have caused you-

NickB

National Instruments

Tags: NI Software

Similar Questions

  • PDM file with automatic backup on corrupts the data.

    When I test data stream into a file to PDM using AutoSave = true, data is corrupted in the 'package' #3 and beyond.

    I write matched double/DateTime data to a TDMS file configured as TdmsWaveformLayout.PairedTimeAndSampleChannels.

    When I try to read the PDM file, for example using the sample application to drive, I get all sorts of errors. Notably, the number of timestamps is not equal the number of samples (values y). More data is corrupted. In other words, the timestamps are invalid and the sample data is essentially random.

    This happens every time I write the third package/lot and beyond. If I write a single sample, followed by another single sample, the third will be corrupted. If I write 1 kilosample, followed by 1 kilosample, sample no. # 2001 will be corrupted.

    I guess that something is very wrong in the automatic backup routine, as data are always written correctly when I explicitly save the PDM file.

    It's using MS 8.9.0.246 in Visual Studio 2008 SP1 using .NET framework 3.5 SP1 on Windows 7.

    The TDMS file is created in the following way. Note that AutoSave is set to false to avoid the bug.

    TdmsFile f = new TdmsFile (tdmsFilename, new TdmsFileOptions (TdmsFileFormat.Version20, TdmsFileAccess.ReadWrite, true, TdmsByteOrder.Native));
    f.AutoSave = false; Must not be set to = TRUE because of a bug in Measurement Studio!

    TdmsChannelGroupCollection channelGroups = f.GetChannelGroups ();
    ChannelGroup TdmsChannelGroup = new TdmsChannelGroup (...) Unique ID...) ;
    channelGroups.Add (channelGroup);

    f.Save (); Needed when AutoRecovery is set to false.

    TdmsChannelCollection tdmsChannels = channelGroup.GetChannels ();
    foreach (IDicomInstance instance in series. Instances)
    {
    tdmsChannels.Add (new TdmsChannel (string. Format ("{0} (time) ', for example.") Signal.Name), TdmsDataType.DateTime));
    tdmsChannels.Add (new TdmsChannel (string. Format ("{0}", for example.) Signal.Name), TdmsDataType.Double));
    }
    channelGroup.WaveformLayout = TdmsWaveformLayout.PairedTimeAndSampleChannels;

    Every 10 ms, a double array [100] happens (with information in a DateTime table clock [100]). The data is stored in the file TDMS in a simple way:

    AnalogWaveform wf = AnalogWaveform. FromArray1D (sample. Data.Samples);
    WF. Timing = WaveformTiming.CreateWithIrregularInterval (sample. Data.Timing);
    WF. ChannelName = sample. Source.Name;
    WF. UnitDescription = sample. Source.UnitOfMeasurement;

    ChannelGroup = _tdmsFile.GetChannelGroup (... TdmsChannelGroup Unique ID...) ;
    TdmsChannel channel = channelGroup.GetChannel (... channel... name);
    channelGroup.AppendAnalogWaveform(channel, wf);
    channelGroup.Parent.Save (); Needed when AutoRecovery is set to false.

    This is what the TDMS file looks like in the sample player application:

    For those who can run in it before we are able to get a fix on, a viable solution is to turn off auto-save and save the TDMS file any time a change to the file is made manually, such as after adding channels or groups, or write data.  This will not negatively affect performance, because that's exactly what the property of automatic backup.

    It should also be noted that this problem arises when you use the layout of the TdmsWaveformLayout.PairedTimeAndSampleChannels waveform.

    I'll post back later when we have a fix for this problem.

    Sorry for the inconvenience that this may cause,

    NickB

    National Instruments

  • DateTime on x-axis of the graph of the intensity

    How can the x-axis of a graph of intensity be configured to the DateTime data type, similar to the graphic waveform XAxis?  You can set the FormatString DateTime MajorDivisions, but has no way of installing the x-axis values.  Waveform curve has a foot (double [], DateTime, TimeSpan) function that will implement the XScale with the correct DateTime values, but the graphic intensity doesn't seem to have a similar capability.  I tried to configure the graphic intensity YAxis MajorDivisions DateTime Format string and pass then the plot function Tick values for the yScaleStart and YScaleIncrement, but it does not work probperly.  MS2012 release notes say that the curve of intensity has now an automatic formatting for displaying DateTime on axes X and Y.  I tried to use this feature to test the DateTime X and the ability to axis Y; However, the function of automatic formatting is not available for the chart of the intensity.  Any help is appreciated.

    Thank you!

    Jon

    Hello

    Try the following code piece.

                // Set the label format correctly            intensityYAxis1.MajorDivisions.LabelFormat = new NationalInstruments.UI.FormatString(NationalInstruments.UI.FormatStringMode.DateTime, "g");
                intensityYAxis1.Mode = NationalInstruments.UI.IntensityAxisMode.AutoScaleExact;
    
                double[,] data = new double[100, 100];
    
                for (int i = 0; i < 100; i++ )
                {
                    for (int j = 0; j < 100; j++ )
                    {
                        data[i, j] = (i + j) / (colorScale1.Range.Interval * 2);
                    }
                }
                // IntensityGraph only understands double values. But graph can interchange the data value from different types using the DataConverter provided by NI.
                intensityPlot1.Plot(data,
                    0,
                    1,
                    (double)DataConverter.Convert(DateTime.Now, typeof(double)),
                    (double)DataConverter.Convert(TimeSpan.FromDays(1), typeof(double)));
    

    It will be useful.

    Habim stone

    National Instruments

  • Graphic problem with time axis in WPF

    I am new to use measurement studio.

    I used the rangeadjusters in the examples, followed messages in this discussion and put some my own codes trying to make the graph having a time axis.

    but now I'm stuck in a problem. Here there.

    There are students that I added;

    In the xmal part:


       


               
         

       
               
       

       
                 
         


     
           
               
                     
                 

           

     

    c# rolled in OnPlotDataClicked codes

    AnalogWaveform[vague];
    Double [,] plotData = new double [3, DataCount];

    for (int j = 0; j)< 3;="">
    {

    for (int i = 0; i)< datacount;="">
    {
    Double value = 1.2 * random. NextDouble() * Math.Sin (I * Math.PI * Math.PI/DataCount);

    plotData [j, I] = value;
    }
    }

    waves = AnalogWaveform. FromArray2D (plotData);

    for (int k = 0; k)< 3;="">
    {

    Calendar of WaveformTiming = WaveformTiming.CreateWithRegularInterval (new TimeSpan (0, 0, 0, 30), DateTime.Now);

    waves [k]. Timing = calendar;

    }

    Graph DataSource = waves;

    the result

    but the result is not that I want to, axis show the wrong date at any time. How to make right. waiting for your help, thank you very much

    By default, the PreferIndexData property true for the Graph control. This means that the chart uses the index values of the wave instead of calendar information and then converts the index values for DateTime to match the axis (so index 0 forced to ' 1 1 January 00 ').

    We have a task to improve this problem, but for now, if you set PreferIndexData to false , the chart will use the time information and update of the axis interval to match that of the wave.

  • PDM: Add DateTime vs PrecisionDateTime property

    I'm back with another question about the API of PDM .NET.

    What do you expect when you add a property to a DateTime value to a PDM file, then add another property with the same value converted to a value of PrecisionDateTime? The two must be kept as i64 + u64 bits according to the Structure of the TDMS File Format.

    var someDate = new DateTime (635757120000000000L, DateTimeKind.Local);

    using (var file = new TdmsFile (@"C:\Temp\ts.tdms ', TdmsFileOptions() ')) new
    {
    file. AddProperty ("_ts0", TdmsPropertyDataType.DateTime, someDate);
    file. AddProperty ("_ts1", TdmsPropertyDataType.DateTime, PrecisionDateTime.FromDateTime (someDate));
    }

    In binary, the seconds total i64 are equal, but the part of fraction u64 to the first property is 0 x 0000800000000000.

    Then when I read the first property, I get a difference in DateTime 76 ticks which is equal to 7.6 µs.

    It's the 'precision' I get at the price of 128-bit?

    Beste regards,

    Jonas

    HI jonas,.

    Sorry it took awhile. We managed to do work and could reproduce the behavior. I forwarded your it.

    Thank you for the information system.

    Best,

    Anna

  • The data type double in CT that is converted to PDM

    Hi all
    In short, to be able to remove channels and groups of a PDM file, I convert the file to a tdm, delete channel or group storage using screws and the convert to PDM. The problem is when tdms is converted to tdm, double data types (64-bit) became simple types (32-bit). Original tdms file has double inside, but CT and resulting tdms files have singles.
    Attachment VI made things I mentioned above. After execution of the it, I open tdms - 1.tdms in Excel with importing tdm (v3.3.0.0) and data type is DT_DOUBLE. But in the files tdm.tdm and PDM - 2.tdms, data types are DT_FLOAT. So the question is, is there a way to prevent duplicate converted to singles?

    Note: I convert the files tdms tdm, screw that removes channels and storage groups do not work with the PDM format.
    p.s. I'm on LV2011.

    Hello

    This is a known bug, CAR 399895. We'll fix it in the future.

    In your LabVIEW, you can try to change the next VI.

    \\vi.lib\Platform\storage\utility\_DP2TDMData.VI, in the case of "DT_DOUBLE", please select instance Float64.

    Hope this helps,

    Mavis

  • Channel import from time to tiara from a PDM file

    I have a generated Labview tdms data file has the timestamp clock computer written in the file as a string. When I add this tdms file to the portal in DIAdem data it is important this time string channel, and I can't trace this as the x-axis data. I would like to import this time string of the tdms as a weather channel file easily. Is this possible?

    The work around I have found is to import the tdms file in excel, and then save as an excel file. I can then import this channel since the Excel using the Excel Import Wizard and specifying the time stamp column is a weather channel. Surely, there must be a better way.

    Thank you.

    Hi PRinOR,

    Here is a VBScript script that converts each text string "Time Stamp" in the data portal to a 'Time Stamp' datetime string.  You can run this VBScript manually whenever you load one of these TDMS files in the data portal, or we could implement to run automatically on your computer as an event of BROWSER loading custom.

    If you can convince the controller LV for a Brown wire entry datetime to the PDM file, then this new channel of data will appear as a column of values datetime correctly recognized in Excel, even if the display in Excel will be different from the datetime string in your TDMS file because Excel does not this default format (I think it's possible with a custom display Excel datetime type) display type.

    Brad Turpin
    Tiara Product Support Engineer
    National Instruments

  • Will I lose data conversion to double precision single-precision float?

    Before you say Yes...

    I use a crio unit in scan mode interface. Which returns the mode of scanning values in floating point double precision. Apparently I'm supposed to be able to choose between double precision fixed-point ("not calibrated") and ("calibrated") floating point data, but this feature seems to be exclusive to the fpga interface and is not available with the scan engine. The two data types are 64 bits per value, when it comes to the size on disk, anyway is still basically the same.

    The system continuously records 13 channels of comma floating double-precision at 200 Hz. using the binary file write, I measured it is about 92 MB/hr on the disk. (more than 120 MB/hr with PDM and much more to write on the worksheet) In short, this 92 mb/hr rate is just too much data on the disk on this system.

    The modules that I record since, 9236 9237 and 9215 c-series modules, have 24-bit a/d converters or less. Does this mean that I have not need 64-bit to represent the number and accuracy even?

    Can I force/cast point values double-precision floating that I receive of the variables of e/s scan engine to the data type of a different, smaller, as a single-precision floating point and retain the same precision?

    Nickerbocker wrote:
    between noise and precision equipment, I doubt that it makes much difference.

    You can test it by looking at the difference between a DBL and converted to SGL DBL. But I support the Nickerbocker trick. I don't think it will make the difference

  • How to add a time stamp to a PDM file

    I need to add a time stamp to my PDM file.  Currently, I take an array of doubles, their conversion to a type of dynamic data, then send to tdms_write.  I have to add a timestamp, but I can't find a way to do it.  I also tried holding the timestamp, converting it into a doube, U64 and I64 and adding that to my table before the dynamic data conversion type, but when I lose precision.  I need to have at least millisecond resolution.  I know that I lose accuracy because the timestamp is two 64-bit values.  top 64-bit are set to seconds since the epoch and lower 64 bit are fractions of a second.  I would even send these two numbers divided in my happy tdms file and conversion at a later date, but can't seem to do it again.  Any help would be appreciated.

    The natural way would be using a waveform.

    You can add your timestamp as two U64 (using cast to array U64) as properties of the channels as data t0.

    Tone

  • DAQmx PDM, add the external value to the log file

    Hello

    I would like to know if it is possible to permanently add an external double value to the TDMS file that is created by the DAQmx Configure logging (PDM) VI?

    Thus, for example, I collect double data of 8 channels, DAQmx, speed of 1 Hz (analog double, 1 d). I'll get these 8 values with corresponding time stamps in the TDMS file created. Is there a way to "tunnel" a double value external to the same TDMS file?

    If there is no such option, I will configure just the TDMS logging explicitly not through the DAQmx driver.

    Thank you!

    with any possibility of foor loop iteration time zero will give you a default value of reference if your reference will not be valid in this case.

  • set items in the cluster of typedef double tables

    Hello

    I have a cluster of type def. This group includes 16 double tables, the size of the arrays are identical, but can change during execution.

    I would like to write data from table to this cluster in a loop, where I get the berries during the iterations of a PDM file. If the loop will iterate 16 times and every time I should put something in the cluster preceding the recent read double table.

    What would be the easiest solution here, since I can't use the 'Cluster to table' here and cluster table saw... ?

    Thank you!

    I don't know if it's necessarily easier, but if you change the typedef cluster so that it instead contains 16 clusters and each cluster contains a single element which is a 1 d array, then you will be able to use the Cluster to table and table to the Cluster, although you'll have to do an additional unbundling/package inside the loop for.

  • Reading of custom in PDM properties

    Hello

    I'm trying to read custom properties in the root of a file of PDM using Matlab with nilibddc.dll. I found two problems.

    (1) I can't read the names of the properties of file only up to 643. They are the ones on the first two lines of the first page when opened in Excel. nilibddc cannot read the rest of the properties posted 4th and 5th rows tdms open Excel file.

    (2) I can read the names of the properties of file with DDC_GETFILEPROPERTYNAMES, but how to read the values of the properties of file?

    Thank you very much!

    Hi Nathalie

    «(1) I can read the names of the properties of file only up to 643.» They are the ones on the first two lines of the first page when opened in Excel. nilibddc cannot read the rest of the properties posted 4th and 5th rows tdms open Excel file. »

    The properties displayed in the 4th and 5th rows are those of 31 groups of your file.

    I guess that those who are no longer available in the group named "user properties.

    You can call DDC_GetChannelGroups to retrieve the file channel groups.

    So DDC_GetNumChannelGroupProperties like DDC_GetNumFileProperties will return the number of properties.

    "(2) I can read the names of the properties of file with DDC_GETFILEPROPERTYNAMES, but how to read the values of the properties of file?

    To retrieve a propertyyou values need to call DDC_GetFilePropertyType (DDC_GetChannelGroupPropertyType) to determine the type of the property, and then call the function of reading according to:

    DDC_GetFilePropertyUInt8
    DDC_GetFilePropertyInt16
    DDC_GetFilePropertyInt32
    DDC_GetFilePropertyFloat
    DDC_GetFilePropertyDouble
    DDC_GetFilePropertyString

    For properties of type string, be sure, you resereved a buffer of size (DDC_GetFileStringPropertyLength).

    For DateTime (DDC_Timestamp), call the DDC_GetFilePropertyTimestampComponents.

    Please refer to the help named 'nilibddc.chm' file in the '. '. \DOC"folder for more details.

    See you soon

    Stefan

  • Continuous recording 6008 to PDM

    I need to record data over long periods of time, using NIDAQmx and WinXP with a USB NIDAQ 6008.  Record to the TDMS format is probably very effective since the data is stored in binary format, 2 bytes per channel. I made some changes to one of the files example in order to obtain continuous to a PDM file. Allow me to include the source code hacked and the display of error message. Note that the size of the buffers have been adjusted in sector size (4096) on the Windows XP computer. Two problems:

    (1) data reading takes place approximately 3.5 times more slowly than anticipated, judging by the screen updates every 1000 measures.

    (2) after approximately 3300 samples, the program crashes with the error attached screen, indicating the saturation of data in the data buffer.

    If I change the data rate for example 500 samples/s instead of 1000 samples/s, there is no difference in behavior, so is probably not because of scheduling problems.

    Change the ConfigureLogging parameter of Val_LogAndRead to Val_Log (naturally!) produced an early error message, which indicates that data reads may occur while recording takes place. I strongly suspect a coding error.

    Any advice will be highly appreciated. Best regards, Willem

    Hello. I'll try to answer some of your questions.

    The value of No.Samples / channel in affected ReadAnalog64F64 work and product of errors when certain values were used. I finally got him to the system default value. What does this parameter actually mean if you samples at a frequency of 1 Hz?

     

    When you're constantly sampling, the number of samples per channel setting indicates overall how many values to withdraw from the buffer each time. By default, you put in (DAQmx_Val_Auto) is - 1, which means that each time, he grabs all available in the buffer. If the table you are dumping is too small for this (according to the parameter ArraySize), based on the values you were here before, you might not have been attracting enough data at the same time to avoid that the buffer overflows.

    Is the parameter ArraySize in ReadAnalogF64 must exactly match the size of the array [] data?

    I think this technically isn't "need." It basically puts forward for how the points table is great. If you put a value smaller than the actual size of the table, then you'll be sure mistakes. If you put a number larger than the actual size of the table, and then the program attempts to write on the Board with more values it can hold, you will probably get an index of table by mistake. Don't forget, as I said in the question above, when the function DAQmx entering values in the buffer zone, it examines the ArraySize parameter to check its limit, not in the table itself (it's how that points to a table usually works, and is a common point of frustration in C code).

    Should it be the same as the last parameter in CfgSampClkTiming?

    N ° the last parameter in this function in continuous mode, actually used to determine the buffer size (Note: this does not set the size of the buffer, it helps to determine what size of buffer).

    In addition, how sampsPerChannelToAquire is bound to the values of the parameters in RegisterEveryNSamples?

    You are right that they do not relate. The settings in RegisterEveryNSamplesEvent set the number of samples waiting to happen in the buffer (or leave the buffer in case of output) before firing an event.

    You can find much more information on this topic in LabWindows help. If you go to LabWindows > help > contents > choose the Index tab and scroll to the bottom in alphabetical order for «DAQmx»... ", then you will find the list of all these functions DAQmx. If you double-click on one, you get a description of the function and each of the parameters. This might help clear things for you. All these names sound very similar settings and can be confusing, so it is a reference tool handy to clarify things.

  • Wrote a number to PDM

    Hi all! I have a task to implement some technical advances I/O in my code, so I decided to do a read/write with TDMS Subvi. The data that I need to write are a number, double type. The problem is that TDMS accepts the type of waveform, and when I convert my number to the PDM data type accepts, he does not write data to the file. He writes only the runtime and other irrelevant data. Is it possible to write data of double type?


  • Create file PDM

    I have the following code.  She ran without error, but not *. TDMS file was created.  Someone could tell me error?  I'm new to functions DIAdem.

    //==============================================================================
    //
    Title: Application of command line
    Purpose: A brief description of the command line tool.
    //
    Created the: 09 12, 2012 at 10:28:28 by xpertsolutions.
    Copyright: xpert Inc.... All rights reserved.
    //
    //==============================================================================

    //==============================================================================
    Include files

    #include
    #include
    #include

    //-----------------------------------------------------------------------------
    Macros
    //-----------------------------------------------------------------------------
    #define if (tdmsError = (f), tdmsError (f) tdmsChk< 0)="" goto="" error;="">

    //==============================================================================
    Constants
    #define TDMS_FILENAME "TestTdms.tdms".
    #define TDMS_FILE_PATH "D:\\temp\\CreateTdmsFile\\TestTdms2.tdms".
    #define TDMS_FILE_DESC 'test data PDM 200 Hz format.
    #define TDMS_FILE_TIT 'test data PDM 200 Hz format.
    #define TDMS_FILE_AUT "no Joen.

    #define TDMS_ORION_200_HZ_CHANS 44

    #define NUM_MAX_POINTS 44
    //==============================================================================
    Types of

    //==============================================================================
    Public static global variable
    public static const char * GroupName = "200 Hz data."
    public static const char * GROUP_DESC = "200 Hz Test mock test data collection;

    //==============================================================================
    Static functions

    //==============================================================================
    Global variables
    Double startTime, elapsedTime;
    TDMSFileHandle hTdmsTestFileHandle;
    TDMSChannelGroupHandle hTdmsTestGroupHandle;
    TDMSChannelHandle * phChannels;

    //==============================================================================
    Global functions

    HIFN main entry point function.
    HIPAR argc / the number of command line arguments.
    HIPAR argc / this number includes the name of the command-line tool.
    Table HIPAR argv/year from command line arguments.
    HIPAR argv/element 0 contains the name of the command-line tool.
    HIRET returns 0 on success.
    int main (int argc, char * argv [])
    {
    int tdmsError = 0;
    int i = 0;
    unsigned int usChan;
    char szChanName [20];
    char szChanDesc [20];
    char * values [] = {'one', 'two', ' three', 'four', 'five'};
    startTime = Timer();

    tdmsChk (TDMS_CreateFile (TDMS_FILE_PATH, TDMS_Streaming, TDMS_FILENAME,
    TDMS_FILE_DESC, TDMS_FILE_TIT, TDMS_FILE_AUT, & hTdmsTestFileHandle));
    tdmsError = TDMS_CreateFile (TDMS_FILE_PATH, TDMS_Streaming, TDMS_FILENAME,
    TDMS_FILE_DESC, TDMS_FILE_TIT, TDMS_FILE_AUT, & hTdmsTestFileHandle);
    tdmsError = TDMS_AddChannelGroup (hTdmsTestFileHandle, GROUP_NAME, GROUP_DESC, & hTdmsTestGroupHandle);
    phChannels = malloc (sizeof (TDMSChannelHandle) * TDMS_ORION_200_HZ_CHANS);

    for (usChan = 0; usChan)< tdms_orion_200_hz_chans;="">
    {
    sprintf ("%d colon_", szChanName, usChan);
    sprintf (szChanDesc, "Data for string %d", usChan);
    tdmsError = TDMS_AddChannel (hTdmsTestGroupHandle, TDMS_Double, szChanName, szChanDesc, 0, & phChannels [usChan]);
    tdmsError = TDMS_AppendDataValues (phChannels [usChan], decvalue, 5, 1);

    }

    free (phChannels);
    tdmsError = TDMS_CloseFile (hTdmsTestFileHandle);
    return 0;
    }

    Hi NiCoder,

    I see that you have created a double post. I just want to go forward and the link in this thread

    See you soon,.

Maybe you are looking for