How do I display simulink simulation data as a table

51 visualizaciones (últimos 30 días)
Dieter
Dieter el 12 de Abr. de 2024
Comentada: Dieter el 17 de Abr. de 2024
I would like to generate a simple table with the data from a Simulink simulation. Basically just a table with column labels in the top row, time in the first column and the data from logged values in each column. How do I generate this table?
I just want my model to put out something I can read from in Matlab easily to generate other tables. I have been using the export function in the simulink data inspector to get the data to excel, but I would like to move to dealing with the tables in Matlab as I have to run a bunch of simulations simultaneously and compile the data from multiple simulations into tables.
I am struggling finding ways to reference the data from simulink output in codes to write scripts to generate the tables that I want and at this point can't seem to reference the output data.

Respuesta aceptada

Ayush Modi
Ayush Modi el 12 de Abr. de 2024
Hi Dieter,
I understand you want to get the output of simulink model in the MATLAB workspace, so that you can create a table from that data.
Please refer to the following MathWorks documentation for information on how to save or log the simulation data to the workspace:
Once you have the data in the workspace, here is how you can create a table with the specified requirement:
% Assuming your data is logged to a variable named 'logsout'
% and you want to create a table with time and these signals
% tout is the time output from the simulation data
% Initialize a table with the time column
T = table(tout, 'VariableNames', {'Time'});
% Loop through each element in the dataset to add it to the table
for i = 1:logsout.numElements
% Get the signal name
signalName = logsout.getElement(i).Name;
% Get the signal data
signalData = logsout.getElement(i).Values.Data;
% Add the data as a new column in the table
T.(signalName) = signalData;
end
% Now, T is a table with time and all your logged signals
Hope this helps!
  2 comentarios
Dieter
Dieter el 16 de Abr. de 2024
Thank you so much for your help. I think I am getting closer. I have it somewhat working but it stops for some reason on the 8th column and doesn't continue to the final column (Column 186). I had to make some mods to call up the right locations but I think I have done essentially what you have said.
It seems there is a mismatch in the number of rows and the height of the table but I can do it manually if I just put the number in as 8 instead of having the loop calculate it. Any idea why it would stop here?
Error using . (line 507)
To assign to or create a variable in a table, the number of rows must match the
height of the table.
Error in TableGenerationScript (line 11)
T.(signalName)=signalData;
Here's the code:
%Generate a table with a time column and the variable name set to time.
Time=out.tout
Data = table(Time, 'VariableNames', {'Time'});
%Loop through each dataset element to add it to the table
for i=1:out.logsout.numElements
%Get signal name
signalName=out.logsout.getElement(i).Name;
%Get signal data
signalData=out.logsout.getElement(i).Values.Data;
%Add the data as a new column in the table
Data.(signalName)=signalData;
end
Dieter
Dieter el 17 de Abr. de 2024
I resolved the second issue. Thanks for the help. Turned out I had different vector formats being put out from signal converters and once I set those all to 1-D array this method worked perfectly.

Iniciar sesión para comentar.

Más respuestas (0)

Productos


Versión

R2024a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by