File formats¶
The app reads and writes three kinds of file in your
data folder: sample profiles (.sp), motion
profiles (.mp), and recorded test data (CSV).
Sample profile — .sp¶
JSON describing a material's dimensions and test limits.
{
"maxForce": 10,
"maxVelocity": 50,
"maxDisplacement": 120,
"sampleWidth": 10,
"sampleThickness": 2,
"serial": "PDMS-10A"
}
| Field | Unit | Meaning |
|---|---|---|
maxForce |
N | Test stops above this force |
maxVelocity |
mm/s | Velocity ceiling |
maxDisplacement |
mm | Test stops above this extension |
sampleWidth |
mm | Cross-section width (for stress) |
sampleThickness |
mm | Cross-section thickness (for stress) |
serial |
— | Sample / material identifier (also the profile's saved name) |
serial stays on your computer
serial names and identifies the profile in the app and in your data folder.
Only the five numeric limits are sent to the machine, so renaming a profile
never changes how a test runs.
Motion profile — .mp¶
JSON describing the test motion: a list of sets, each repeated executions
times, each containing ordered moves.
{
"name": "Cyclic Tension",
"description": "Preload then 3 load/unload cycles",
"sets": [
{
"name": "Preload",
"executions": 1,
"moves": [
{ "moveType": "linear",
"moveParameters": { "position": 5, "velocity": 5, "time": 0 } }
]
},
{
"name": "Cycle",
"executions": 3,
"moves": [
{ "moveType": "math",
"moveParameters": { "position": 0, "velocity": 0, "time": 0,
"waveform": "sine", "amplitude": 10, "frequency": 0.25 } },
{ "moveType": "dwell",
"moveParameters": { "position": 0, "velocity": 0, "time": 500 } }
]
}
]
}
Move parameters¶
moveType is linear, dwell, or math (waveform). Every move carries
position, velocity and time (0 where unused); a math move adds the
fields for its waveform:
| Field | Used by | Meaning |
|---|---|---|
position |
linear, sigmoid | Where the move ends (mm, absolute: sample extension from zero length) |
velocity |
linear, sigmoid | Speed (mm/s) |
time |
dwell | Hold time (ms) |
waveform |
math | sine (the default when absent), sigmoid or chirp |
amplitude |
sine, chirp | Peak deviation (mm); its sign is the direction it sets off in |
frequency |
sine, chirp | Sine: cycles per second (Hz). Chirp: the frequency it starts at |
endFrequency |
chirp | The frequency it sweeps to (Hz) |
duration |
chirp | How long the sweep takes (s), rounded to whole cycles |
acceleration |
sigmoid | Peak acceleration (mm/s²) |
Every position is absolute. A file with the old fields (absoluteOrRelative,
distance, cycles, phase, centre, dwellHigh, dwellLow, skew, or a triangle
waveform) is refused on load, import and run, with a message naming the
move; rebuild it in Motion profiles.
Recorded data — CSV¶
Downloaded test data is CSV. Note the units: the machine records in finer units than the app displays, so the numbers here are larger than what you see on screen.
| Column | Unit | Meaning |
|---|---|---|
time_us |
µs | Timestamp |
force_mN |
mN | Measured force |
position_nm |
nm | Measured position |
setpoint_nm |
nm | Where the motion trajectory put the carriage at that moment (the Machine Setpoint readout) |
The run viewer converts these to N and mm and derives stress/strain. Export CSV adds a metadata header (sample/motion details) to the CSV.
Saved vs. shared files
Inside your data folder, the app wraps each profile in a small record that
tracks when it was created. The .sp / .mp files you import and export
are just the plain profile shown above — which is what makes them easy to
write by hand, email to a colleague, or keep in version control.