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