Main Content

Write Timetable Data to TDMS-file

This example shows how to write timetable data in various time channel layouts from MATLAB® to a TDMS-file.

For this example, you have measurents of revolution and electrical current of a circular saw in a scenario where it stops on detecting contact with skin.

Load the data to workspace.

load("sawstopper.mat")
whos
  Name                       Size             Bytes  Class        Attributes

  circular_saw_data      23572x2             378432  timetable              
fileNameTCNone = "sawstopper_none.tdms";
fileNameTCSingle = "sawstopper_single.tdms";
channelGroup = "Circular Saw Data";

Write Timetable Without a Time Channel

On specifying TimeChannel as "none", the start time and time step are added as properties of the channel. This time channel layout can be used only with a timetable that is regular in time, that is, with uniform time steps.

tdmswrite(fileNameTCNone, circular_saw_data, ChannelGroupName=channelGroup, TimeChannel="none");
info = tdmsinfo(fileNameTCNone);
info.ChannelList
ans=2×8 table
    ChannelGroupNumber     ChannelGroupName      ChannelGroupDescription         ChannelName         ChannelDescription    Unit    DataType    NumSamples
    __________________    ___________________    _______________________    _____________________    __________________    ____    ________    __________

            1             "Circular Saw Data"              ""               "Revolutions (1/min)"            ""             ""     "Double"      47144   
            1             "Circular Saw Data"              ""               "Current (A)"                    ""             ""     "Double"      47144   

The channel names in the TDMS-file map to the original timetable variable names.

Use the tdmsreadprop function to inspect the start time (wf_start_time) and time step (wf_increment) of the data.

channel = info.ChannelList.ChannelName{1};
prop = tdmsreadprop(fileNameTCNone, ChannelGroupName=channelGroup, ChannelName=channel)
prop=1×7 table
            name             description    unit_string            wf_start_time            wf_start_offset    wf_increment    wf_samples
    _____________________    ___________    ___________    _____________________________    _______________    ____________    __________

    "Revolutions (1/min)"        ""             ""         2022-04-19 14:18:32.304446999           0             2.8e-06         23572   

Read the data from the TDMS-file and visually analyze the data using a stacked plot.

stackedplot(tdmsread(fileNameTCNone, TimeStep=seconds(prop.wf_increment)));

Write Timetable with a Time Channel

By default, the time channel layout is TimeChannel="single", which means a time channel is created that contains a timestamp for every sample. Typically this time channel layout is useful when writing measurments that are irregular in time.

tdmswrite(fileNameTCSingle, circular_saw_data, ChannelGroupName=channelGroup, TimeChannel="single");

Inspect the contents of the file. See that a time channel called "Time" is created, which is derived from the time column of the original timetable.

info = tdmsinfo(fileNameTCSingle);
info.ChannelList
ans=3×8 table
    ChannelGroupNumber     ChannelGroupName      ChannelGroupDescription         ChannelName         ChannelDescription    Unit     DataType      NumSamples
    __________________    ___________________    _______________________    _____________________    __________________    ____    ___________    __________

            1             "Circular Saw Data"              ""               "Time"                           ""             ""     "Timestamp"      47144   
            1             "Circular Saw Data"              ""               "Revolutions (1/min)"            ""             ""     "Double"         47144   
            1             "Circular Saw Data"              ""               "Current (A)"                    ""             ""     "Double"         47144   

Read the data from the TDMS-file, and visually analyze the data using a stacked plot with the time channel as the x-axis.

stackedplot(tdmsread(fileNameTCSingle, ChannelGroupName=channelGroup, RowTimes="Time"));