Write Metadata to TDMS File
This example shows how to write file properties, channel group properties, and channel properties 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. You can write these measurement to a new TDMS file, update the default properties, and add custom properties to the file, channel group, and channels.
Set Up Workspace
Read the data into the workspace and define the TDMS file channel group names.
load("sawstopper.mat") fileName = "sawstopper.tdms"; channelGroup = "SawData"; channelRev = "Revolutions (1/min)"; channelCurrent = "Current (A)";
Create the TDMS file, and then read and view its data.
tdmswrite(fileName, circular_saw_data, ChannelGroupName=channelGroup, TimeChannel="none");
stackedplot(tdmsread(fileName, TimeStep=milliseconds(0.0028)))
Write File Properties
Observe the default file properties.
tdmsreadprop(fileName)
ans=1×5 table
name description title author timestamp
_________________ ___________ __________________ ______ _____________________________
"sawstopper.tdms" "" "Saw Stopper Data" "" 2022-04-26 13:14:31.675516000
Update the title
property using tdmswriteprop
, and add a new custom timestamp
property set with the current datetime.
tdmswriteprop(fileName, "title", "Saw Stopper Data"); tdmswriteprop(fileName, "timestamp", datetime("now")); tdmsreadprop(fileName)
ans=1×5 table
name description title author timestamp
_________________ ___________ __________________ ______ _____________________________
"sawstopper.tdms" "" "Saw Stopper Data" "" 2022-04-26 13:15:23.350898000
Write Channel Group Properties
Observe the default channel group properties.
tdmsreadprop(fileName, ChannelGroupName=channelGroup)
ans=1×3 table
name description scenario
_________ ___________________________ _____________________________________
"SawData" "Circular Saw Measurements" "Stop on detecting contact with skin"
Update the channel group property description
. Then add a custom property scenario
to the channel group.
tdmswriteprop(fileName, "description", "Circular Saw Measurements", ChannelGroupName=channelGroup); tdmswriteprop(fileName, "scenario", "Stop on detecting contact with skin",ChannelGroupName=channelGroup); tdmsreadprop(fileName, ChannelGroupName=channelGroup)
ans=1×3 table
name description scenario
_________ ___________________________ _____________________________________
"SawData" "Circular Saw Measurements" "Stop on detecting contact with skin"
Write Channel Properties
Similarly, you can update the channel properties such unit_string
by specifying the channel group name and channel name.
tdmsreadprop(fileName, ChannelGroupName=channelGroup, ChannelName=channelRev)
ans=1×8 table
name description unit_string wf_start_time wf_start_offset wf_increment wf_samples formula
_____________________ ______________________________________ ___________ _____________________________ _______________ ____________ __________ ________________________
"Revolutions (1/min)" "Rotational speed of the circular saw" "rpm" 2022-04-19 14:18:32.304446999 0 2.8e-06 23572 "rpm = frequency(Hz)/60"
tdmswriteprop(fileName, "unit_string", "rpm", ChannelGroupName=channelGroup, ChannelName=channelRev); tdmswriteprop(fileName, "formula", "rpm = frequency(Hz)/60", ChannelGroupName=channelGroup, ChannelName=channelRev); tdmswriteprop(fileName, "description", "Rotational speed of the circular saw", ChannelGroupName=channelGroup, ChannelName=channelRev); tdmsreadprop(fileName, ChannelGroupName=channelGroup, ChannelName=channelRev)
ans=1×8 table
name description unit_string wf_start_time wf_start_offset wf_increment wf_samples formula
_____________________ ______________________________________ ___________ _____________________________ _______________ ____________ __________ ________________________
"Revolutions (1/min)" "Rotational speed of the circular saw" "rpm" 2022-04-19 14:18:32.304446999 0 2.8e-06 23572 "rpm = frequency(Hz)/60"
You can also specify arrays of property names and values. If the property values have different data types, use a cell array.
tdmsreadprop(fileName, ChannelGroupName=channelGroup, ChannelName=channelCurrent)
ans=1×7 table
name description unit_string wf_start_time wf_start_offset wf_increment wf_samples
_____________ _____________________________ ___________ _____________________________ _______________ ____________ __________
"Current (A)" "Current in the circular saw" "A" 2022-04-19 14:18:32.304446999 0 2.8e-06 23572
tdmswriteprop(fileName, ["description" "unit_string"], ["Current in the circular saw" "A"], ... ChannelGroupName=channelGroup, ChannelName=channelCurrent); tdmsreadprop(fileName, ChannelGroupName=channelGroup, ChannelName=channelCurrent)
ans=1×7 table
name description unit_string wf_start_time wf_start_offset wf_increment wf_samples
_____________ _____________________________ ___________ _____________________________ _______________ ____________ __________
"Current (A)" "Current in the circular saw" "A" 2022-04-19 14:18:32.304446999 0 2.8e-06 23572
Examine the property settings in the ChannelList
display.
info = tdmsinfo(fileName); info.ChannelList
ans=2×8 table
ChannelGroupNumber ChannelGroupName ChannelGroupDescription ChannelName ChannelDescription Unit DataType NumSamples
__________________ ________________ ___________________________ _____________________ ______________________________________ _____ ________ __________
1 "SawData" "Circular Saw Measurements" "Revolutions (1/min)" "Rotational speed of the circular saw" "rpm" "Double" 47144
1 "SawData" "Circular Saw Measurements" "Current (A)" "Current in the circular saw" "A" "Double" 47144