Main Content

Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Ejecute Simulation desdeSimulinkJava

Comando para ejecutar la simulaciónMATLAB

Puede ejecutar simulaciones utilizando la API del motor para.Simulink®MATLAB®Java® Estos son los pasos básicos para ejecutar una simulación mediante programación.

  • Cree un objeto de motor e inicie una sesión.MATLABMATLAB

  • Cargue el modelo en ().SimulinkMATLABload_system (Simulink)

  • Ejecute la simulación con parámetros de simulación específicos ().sim (Simulink)

  • Acceda a los resultados de la simulación utilizando los métodos del objeto devuelto.Simulink.SimulationOuput (Simulink)

Para obtener información sobre cómo ejecutar simulaciones mediante programación, consulte.MATLABRun Individual Simulations (Simulink)

Ejecute VDP Model desdeJava

El diagrama de bloques simula la ecuación de van der Pol, que es una ecuación diferencial de segundo orden.Simulinkvdp El modelo resuelve las ecuaciones utilizando las condiciones iniciales y los parámetros de configuración definidos por el modelo.

Código para ejecutar SimulationMATLAB

Este código muestra los comandos para ejecutar la simulación mediante programación.MATLAB El método Object devuelve los resultados y el vector de tiempo.Simulink.SimulationOuputget

mdl = 'vdp'; load_system(mdl); simOut = sim(mdl,'SaveOutput','on',...    'OutputSaveName','yOut',...    'SaveTime','on',...    'TimeSaveName','tOut'); y = simOut.get('yOut'); t = simOut.get('tOut');

Graficar los datos

Este código crea un gráfico de la salida de simulación y exporta el gráfico a un archivo de imagen JPEG.MATLAB

plot(t,y) print('vdpPlot','-djpeg')

Código para ejecutar SimulationJava

Este código ejecuta la simulación del modelo y devuelve los resultados a.JavaSimulinkvdpJava La implementación realiza estas operaciones:

  • Crea un objeto de motor e inicia una sesión.MATLABMATLAB

  • Llama al comando para iniciar y cargar el modelo de forma asincrónica.MATLABload_systemSimulinkvdp Sondee la tarea hasta que se devuelva.Future

  • Llama al comando para establecer parámetros de simulación y ejecutar la simulación.MATLABsim Sondee la tarea hasta que se devuelva.Future

  • Captura el resultado de la simulación. La salida de la función es un objeto, que se crea en el espacio de trabajo base.simMATLABSimulink.SimulationOuput (Simulink)MATLAB

    La API del motor no admite este tipo de objeto. Por lo tanto, en este ejemplo se utiliza el método Object para obtener acceso a los datos de simulación del espacio de trabajo.getMATLAB

  • Crea un gráfico de los datos de simulación y exporta este gráfico a un archivo JPEG.

  • Devuelve los resultados de la simulación y el vector de tiempo como matrices.Javadouble

import com.mathworks.engine.*; import java.util.concurrent.Future; import java.util.Arrays;  public class RunSimulation {     public static void main(String[] args) throws Exception {         MatlabEngine eng = MatlabEngine.startMatlab();         Future<Void>  fLoad = eng.evalAsync("load_system('vdp')");         while (!fLoad.isDone()){             System.out.println("Loading Simulink model...");             Thread.sleep(10000);         }         Future<Void> fSim = eng.evalAsync("simOut = sim('vdp','SaveOutput'," +                 "'on','OutputSaveName','yOut'," +                 "'SaveTime','on','TimeSaveName','tOut');");         while (!fSim.isDone()) {             System.out.println("Running Simulation...");             Thread.sleep(10000);         }         // Get simulation data         eng.eval("y = simOut.get('yOut');");         eng.eval("t = simOut.get('tOut');");         // Graph results and create image file         eng.eval("plot(t,y)");         eng.eval("print('vdpPlot','-djpeg')");         // Return results to Java         double[][] y = eng.getVariable("y");         double[] t = eng.getVariable("t");         // Display results         System.out.println("Simulation result " + Arrays.deepToString(y));         System.out.println("Time vector " + Arrays.toString(t));         eng.close();     } }

Temas relacionados