Importing data into a "Matlab function" simulink block and interpolating values
5 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Jan Soller
el 26 de Oct. de 2023
Comentada: Jon
el 30 de Oct. de 2023
Hello everyone,
My problem is quite simple, but for several hours now I've been stuck with error messages that I can't correct.
I'm trying to create a simulink block which takes as input a continuous "speed" signal, a continuous "load" signal and an Excel table which references a temperature as a function of "speed" (1st line of my Excel, 61 values from 0 to 15m/s) and "load" (1st column, 61 values from 0 to 1000kg in constant steps). So I'm trying to write a script/command in a "Matlab function" simulink block that takes the input signals into account, and then interpolates the data to obtain a resulting temperature. Example: at a given time, speed = 2.12m/s and load = 628kg, which gives me for output an interpolated temperature in my table.
A first basic code worked on Matlab (without using simulink or else) taking into account fixed input values. Here it is below:
filename = 'Hysteresis Coefficient_Matlab.xlsx'; % Name of Excel file
sheet = 1;
data = xlsread(filename, sheet);
% Split the data into load, speed and temperature
load = data(2:62, 1); % First column
speed = data(1, 2:62); % First raw
temperature = data(2:62, 2:62);
% Define the input values
load_input = 522; % [500 kg]
speed_input = 5.1; % [m/s]
% Use of the interp2 fonction
temperature_researched = interp2(speed, load, temperature, speed_input, load_input);
% Display the researched temperature
fprintf('For a charge of %.1f kg and a speed of %.1f m/s, the interpolated temperature is %.2f\n', load_input, speed_input, temperature_researched);
Unfortunately, as soon as I want to do the same thing in a "Matlab function" simulink block so that all the simulation is done only on simulink, nothing works and I always get an error message like this:
An error occurred while running the simulation and the simulation was terminated
Caused by:
- Index exceeds array dimensions. Index value 62 exceeds valid range [1-61] for array 'data'. Error in 'Tire_Heat_Generation_V7_2/Hysteresis/MATLAB Function' (line 3)
load = data(2:62, 1); % First column
I'm open to all your suggestions and I hope you'll be able to resolve the situation.
Thank you in advance
Thibault
2 comentarios
Jon
el 26 de Oct. de 2023
Please attach your .xlsx files, your Simulink files and any .m files that you make use of so that we can reproduce your problem
Respuesta aceptada
Jon
el 26 de Oct. de 2023
The problem is that the block that provides "data" is a from workspace block rather than a constant. You should replace it with a constant and assign the constant's value to the workspace variable you call data
4 comentarios
Más respuestas (0)
Ver también
Categorías
Más información sobre Event Functions en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!