Запустите симуляцию Simulink из Java

Команда MATLAB для выполнения симуляции

Можно запустить Simulink® симуляции с использованием MATLAB® Engine API для Java®. Вот основные шаги для выполнения симуляции программно.

  • Создайте объект движка MATLAB и запустите сеанс работы с MATLAB.

  • Загрузите модель Simulink в MATLAB (load_system (Simulink)).

  • Запустите симуляцию с определенными параметрами симуляции (sim (Simulink)).

  • Доступ к результатам симуляции с помощью методов возвращенной Simulink.SimulationOuput (Simulink) объект.

Для получения информации о программном выполнении симуляций из MATLAB, смотрите Запуск отдельных симуляций (Simulink).

Запуск модели vdp из Java

The Simulink vdp блок моделирует уравнение Ван дер Поля, которое является дифференциальным уравнением второго порядка. Модель решает уравнения, используя начальные условия и параметры конфигурации, заданные моделью.

Код MATLAB для выполнения симуляции

Этот код MATLAB показывает команды для выполнения симуляции программно. The Simulink.SimulationOuput get объекта метод возвращает результаты и временной вектор.

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

Графическое изображение данных

Этот код MATLAB создает график выхода симуляции и экспортирует график в файл изображения JPEG.

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

Код Java для выполнения симуляции

Этот код Java запускает vdp Simulink симуляции модели и возвращает результаты в Java. Реализация выполняет следующие операции:

  • Создает объект движка MATLAB и запускает Сеанс работы с MATLAB.

  • Вызывает MATLAB load_system команда, чтобы запустить Simulink и загрузить vdp моделировать асинхронно. Опрашивайте задачу до Future возвращает.

  • Вызывает MATLAB sim команда, чтобы задать параметры симуляции и запустить симуляцию. Опрашивайте задачу до Future возвращает.

  • Захватывает результат симуляции. Выходные выходы sim функция является MATLAB Simulink.SimulationOuput (Simulink), который создается в базовом рабочем пространстве MATLAB.

    Этот Engine API не поддерживает этот тип объекта. Поэтому в этом примере используется объект get метод для доступа к данным моделирования в рабочем пространстве MATLAB.

  • Создает графику данных моделирования и экспортирует этот график в файл JPEG.

  • Возвращает результаты симуляции и временной вектор на Java как double массивы.

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();
    }
}

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте