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