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