Java调用simulink
matlab官方指导:
http://cn.mathworks.com/help/matlab/matlab_external/run-simulink-simulation-from-java.html
1.安装matlab2016b 或 matlab2017a
3.安装Java1.7或以上版本(注意java 32/64bit 与 matlab 相对应)
4. 把matlab安装路径下的\extern\engines\java\jar\engine.jar导入java工程
5.把simulink文件(.mdl或.slx)复制到java工程,这里以txt.slx为例,位置如下:
6. Java调用代码:
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('txt')"); while (!fLoad.isDone()){ System.out.println("Loading Simulink model..."); Thread.sleep(10000); } Future<Void> fSim = eng.evalAsync("simOut = sim('txt','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(); } }
注:具体的输入、输出参数由simulink模型而定。