Можно запустить симуляции Simulink® с помощью MATLAB® Engine API для Java®. Вот основные шаги, чтобы запустить симуляцию программно.
Создайте движок MATLAB, возражают и запускают сеанс работы с MATLAB.
Загрузите модель Simulink в MATLAB (load_system
).
Запустите симуляцию с определенными параметрами симуляции (sim
).
Доступ к результатам методов использования симуляции возвращенного объекта Simulink.SimulationOuput
.
Для получения информации о рабочих симуляциях программно из MATLAB, смотрите Симуляции Человека Выполнения (Simulink).
Блок-схема vdp
Simulink моделирует уравнение Ван дер Поля, которое является дифференциальным уравнением второго порядка. Модель решает уравнения с помощью начальных условий и параметров конфигурации, заданных моделью.
Этот код 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 запускает симуляцию модели vdp
Simulink и возвращает результаты в Java. Реализация выполняет эти операции:
Создает движок MATLAB, возражают и запускают сеанс работы с MATLAB.
Вызывает команду load_system
MATLAB, чтобы запустить Simulink и загрузить модель vdp
асинхронно. Опросите задачу, пока Future
не возвратится.
Вызывает команду sim
MATLAB, чтобы установить параметры симуляции и запустить симуляцию. Опросите задачу, пока Future
не возвратится.
Получает результат симуляции. Вывод функции sim
является объектом MATLAB Simulink.SimulationOuput
, который создается в базовом рабочем пространстве 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(); } }