主要内容

从c++万博1manbetx运行Simulink仿真

MATLAB运行仿真命令

你可以运行Simulin万博1manbetxk®MATLAB仿真®引擎API为c++。以下是以编程方式运行模拟的基本步骤:

  • 开始一个MATLAB会话。

  • 使用MATLAB在万博1manbetxMATLAB中加载Simulink模型load_system(万博1manbetx模型)函数。

  • 使用MATLAB对具体的仿真参数进行仿真sim卡(万博1manbetx模型)函数。

  • 使用返回的方法访问模拟的结果万博1manbetx仿真软件。SimulationOuput(万博1manbetx模型)对象。

有关从MATLAB以编程方式运行模拟的信息,请参见运行单个模拟(万博1manbetx模型)

万博1manbetxvdp模型来自c++

的仿真软万博1manbetx件vdp框图模拟了范德波尔方程,范德波尔方程是二阶微分方程。万博1manbetxSimulink利用模型定义的初始条件和配置参数求解方程组。

MATLAB运行模拟的代码

这个MATLAB代码显示了以编程方式运行仿真的命令。的万博1manbetx仿真软件。SimulationOuput对象得到方法返回结果和时间向量。

load_system (“vdp”);parameterStruct。SaveOutput =“上”;parameterStruct。OutputSaveName =“你”;parameterStruct。SaveTime =“上”;parameterStruct。TimeSaveName =“兜售”;simOut = sim卡(“vdp”, parameterStruct);y = simOut.get (“你”);t = simOut.get (“兜售”);

此MATLAB代码创建仿真输出的图形,并将图形导出为JPEG图像文件。

情节(t、y)打印(“vdpSimulation”“-djpeg”

c++代码运行模拟

该示例代码运行Simulink模拟万博1manbetxvdp模型。代码执行以下操作:

  • 连接到已安装Simulink的已命名的MATLAB会话。万博1manbetx

  • 创建一个matlab:: data:: ArrayFactory和建立一个StructArray包含了模拟参数。

  • 将仿真参数结构传递到MATLAB工作空间。

  • 加载vdp万博1manbetx使用异步调用的Simulink模型MATLABEngine: evalAsync.执行等待MATLAB加载模型。

  • 使用另一个异步调用来运行模拟MATLABEngine: evalAsync.执行等待模拟完成。

  • 从中提取仿真数据万博1manbetx仿真软件。SimulationOutput对象的MATLAB工作空间。

  • 图形数据和导出JPEG图像到MATLAB当前文件夹使用MATLABEngine: eval执行MATLAB命令。

#include "MatlabDataArray.hpp" #include "MatlabEngine.hpp" #include  #include  void runSimulation() {using namespace matlab::engine;//连接到命名的共享MATLAB会话启动为:// MATLAB -r " MATLAB .engine. shareengine ('myMatlabEngine')"字符串会话(u“myMatlabEngine”);std::unique_ptr matlabPtr = connectMATLAB(session);//创建MATLAB数据数组工厂MATLAB::data::ArrayFactory工厂;//创建模拟参数的struct matlab::data::StructArray parameterStruct = factory。createStructArray({1,4}, {"SaveOutput", "OutputSaveName", "SaveTime", "TimeSaveName"});parameterStruct[0][“SaveOutput”]= factory.createCharArray(“on”);parameterStruct[0][“OutputSaveName”]= factory.createCharArray(“你”);parameterStruct[0][“SaveTime”]= factory.createCharArray(“on”);parameterStruct[0][“TimeSaveName”]= factory.createCharArray(“兜售”); // Put simulation parameter struct in MATLAB matlabPtr->setVariable(u"parameterStruct", parameterStruct); // Load vdp Simulink model FutureResult loadFuture = matlabPtr->evalAsync(u"load_system('vdp')"); std::cout << "Loading Simulink model... " << std::endl; std::future_status loadStatus; do { loadStatus = loadFuture.wait_for(std::chrono::seconds(1)); } while (loadStatus != std::future_status::ready); std::cout << "vdp model loaded\n"; // Run simulation FutureResult simFuture = matlabPtr->evalAsync(u"simOut = sim('vdp',parameterStruct);"); std::cout << "Running simulation... " << std::endl; std::future_status simStatus; do { simStatus = loadFuture.wait_for(std::chrono::seconds(1)); } while (simStatus != std::future_status::ready); std::cout << "vdp simulation complete\n"; // Get simulation data and create a graph matlabPtr->eval(u"y = simOut.get('yOut');"); matlabPtr->eval(u"t = simOut.get('tOut');"); matlabPtr->eval(u"plot(t,y)"); matlabPtr->eval(u"pause(10)"); matlabPtr->eval(u"print('vdpSimulation','-djpeg')"); }

有关如何设置和构建c++引擎程序的信息,请参见构建c++引擎程序

另请参阅

||

相关的话题