Выполнение моделирования Simulink из Java

Команда MATLAB, чтобы запустить моделирование

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

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

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

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

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

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

Выполнение vdp Модели из Java

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

КОД MATLAB, чтобы запустить моделирование

Этот код MATLAB показывает команды, чтобы запустить симуляцию программно. 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.

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

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

  • Получает результат симуляции. Выход sim функцией является Simulink.SimulationOuput MATLAB Объект (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();
    }
}

Похожие темы