u1 = [Data(:,1) Data(:,2)], u2 = [Data(:,1) Data(:,3)] and u3 = [Data(:,1) Data(:,4)]
The way you construct the data for "From Workspace" block to import measured inputs is correct.
You could use just one "From Workspace" block and specify the data as "Data". It will import three signals at once and then you can use a "Demux" block to split it into three and feed them to your S-function.
"I want Simulink to precisely follow the timeline from my measurement data."
If you mean to set the simulation time vector exactly as your first column data, that is possible but not a good idea. It looks like the measurement is sampled at 1 second with offset of 0.4. But there are missing data at 7.4 and 9.4 for example.
If you mean to set the three input data for the simulation "exactly" the same as the measured data, you have done the correct thing and that is sufficient.
Maybe, your simulation output "result is just not plausible" comparing to your real, measured output, that is most likely caused by something else, not the constructing of the input data. A few things to look out is the solver and simulation step size, the sample time setting for the "From Workspace" block and its interpolation methods. Add a scope to observe the output of the "From Workspace" block during the whole simulation to see if the value makes sense.
The first measured data is at t=0.4 while the simulation usually starts at t=0. There might be an initial value problem. Add a row to specify the data for t=0 or you could set the simulation start time to be 0.4