Matlab - Cargar nuevos inputs en mitad de una función

 
Vista:
sin imagen de perfil
Val: 31
Ha aumentado su posición en 8 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

Cargar nuevos inputs en mitad de una función

Publicado por Juan MG (20 intervenciones) el 28/06/2021 17:40:51
Buenas,

estoy trabajando con un modelo de simulink el cual me devuelve unas variables al workspace con el bloque "to worspace".

Quiero desarrollar una funcion que corra el modelo de simulink y al mismo tiempo tome esos outputs de simulink y los modifique.


pongo un ejemplo de código para que se entienda mejor:




function [n] = prueba

sim Simulinkmodelprueba %este modelo de simulink va a crear en el workspace la variable "n" con el ya %mencionado bloque "to workspace"

%este es el momento en el que quiero tomar la variable "n" y operar con ella
n=n*2;

%el problema es que a la hora de correr "prueba" la variable "n" aun no existe porque Simulinkmodelprueba no se %ha ejecutado.


-----------------
He aquí el problema. En dos funciones separadas esto es, obviamente, muy fácil. El prolema está en que lo quiero hacer todo de una vez en una sola función.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Jon
Val: 354
Ha aumentado 1 puesto en Matlab (en relación al último mes)
Gráfica de Matlab

Cargar nuevos inputs en mitad de una función

Publicado por Jon (161 intervenciones) el 05/07/2021 14:45:21
Buenas tardes Juan,

Como bien dices, la respuesta más obvia es separar las tareas en 2 funciones. En caso que lo quieras en una sola función, puedes meter las 2 funciones en una función principal. Abajo te dejo un ejemplo.

Función principal:
1
2
3
4
5
6
function n = prueba
 
fun_runSimulink();
n = fun_calculateN (n);
 
end

Subfunción #1:
1
2
3
4
5
function fun_runSimulink()
 
sim('Simulinkmodelprueba');
 
end

Subfunción #2:
1
2
3
4
5
function n = fun_calculateN (n)
 
n = n * 2;
 
end

Un saludo,

Jon

PD: Acabo de probar el ejemplo en MATLAB y no funciona porque después de simular no se carga la variable n en el workspace. Quedamos abiertos a la respuesta correcta.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 31
Ha aumentado su posición en 8 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

Cargar nuevos inputs en mitad de una función

Publicado por Juan MG (20 intervenciones) el 08/07/2021 20:17:43
Conseguí encontrar la solución.
La clave es no crear una función como tal sino, simplemente un script y luego correr dicho script. Al crear la funcion y correr dentro de esa funcion el modelo de simulink, simulink intenta buscar sus variables en el workspace y no dentro de la función (que es donde se están haciendo los cálculos).
Por el contrario, si creamos un script, sin utilizar ninguna función, todas las vriables pasan por el workspace y por tanto simulink las utiliza perfectamente.

-------------------esto no funciona----------------------
1
2
3
4
5
6
7
8
9
10
function [n]= pruebasimulink
x=0;         %%%%x es una constante que utiliza simulink
for i=1:100
 
     x=x+2;
     sim modelosimulink
     n(i)=outputSimu(end); %outputSimu es un resultado de lo que sea que hagamos en el modelo de simulink
 
end
end
---------------------------------------------------------------
-------------------esto funciona----------------------
1
2
3
4
5
6
7
8
x=0;         %%%%x es una constante que utiliza simulink y n es un resultado de lo que sea que hagamos en el modelo de simulink
for i=1:100
 
     x=x+2;
     sim modelosimulink
     n(i)=outputSimu(end); %outputSimu es un resultado de lo que sea que hagamos en el modelo de simulink
 
end
--------------------------------------------------------------
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar