主要内容

从C +金宝app+运行Simulink仿真

马铃薯草命令运行模拟

你可以运行Simulin金宝appk®MATLAB仿真®用于C ++的Engine API。以下是以编程方式运行模拟的基本步骤:

  • 启动matlab会话。

  • 使用MATLAB加金宝app载MATLAB中的SIMULINK模型load_system(金宝appSimulink)功能。

  • 使用MATLAB进行具体仿真参数的仿真SIM(金宝appSimulink)功能。

  • 使用返回的方法访问模拟结果金宝appsimulink.simulationourouput.(金宝appSimulink)对象。

有关从Matlab以编程方式运行模拟的信息,请参阅运行单个模拟(金宝appSimulink)

金宝appc++中的vdp模型

的仿真软金宝app件vdp框图模拟van der Pol等式,这是一个二阶微分方程。金宝appSimulink使用模型定义的初始条件和配置参数来解决方程。

马铃薯草运行模拟的代码

此MATLAB代码显示以编程方式运行模拟的命令。这金宝appsimulink.simulationourouput.目的得到方法返回结果和时间向量。

load_system(“vdp”);presitionstruct.saveOutput =.'在';presitionstruct.outputsavename =.“你”;parameterStruct。SaveTime ='在';parameterStruct。TimeSaveName ='兜兜';simout = sim(“vdp”,参数图书馆);y = simout.get(“你”);t = simout.get('兜兜');

这个MATLAB代码创建模拟输出的图形,并将该图形导出到JPEG图像文件。

情节(t、y)打印('vdpsimulation'“-djpeg”的)

C ++代码运行模拟

此示例代码运行Simulink仿真金宝appvdp模型。该代码执行这些操作:

  • 连接到已安装Simulink的命名MATLAB会话。金宝app

  • 创建一个matlab:: data:: ArrayFactory和建立一个StructArray其中包含仿真参数。

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

  • 加载vdp金宝app使用异步调用的Simulink模型MATLABEngine: evalAsync。执行等待MATLAB加载模型。

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

  • 中提取仿真数据金宝appsimulink.simulationOutput.Matlab工作区中的对象。

  • 图表数据并将JPEG映像导出到MATLAB当前文件夹使用matlabengine :: eval.来执行MATLAB命令。

#include“matlabdataArray.hpp”#include“matlabengine.hpp”#include  #include  void运行催化(){使用命名空间matlab ::引擎;//连接到名为Shared MATLAB会话开始为:// matlab -r“matlab.egine.shareengine('mymatlabengine')”字符串会话(U“mymatlabengine”);std :: unique_ptr  matlabptr = connectmatlab(会话);//创建Matlab数据阵列Factory Matlab :: Data :: ArrayFactory Factory;//创建模拟参数struct参数matlab :: data :: structarray parametertruct = factory.createStructarray({1,4},{saveOutput“,”outputsavename“,”saveTime“,”timeAvename“});PresitionStruct [0] [“saveoutput”] = factory.createcharArray(“开”);presitionStruct [0] [“OutputSavename”] = factory.createcharArray(“yout”);presitionStruct [0] [saveTime“] = factory.createcharArray(”开“);参数[0] [“timeavename”] = factory.createcharArray(“Tout”);//将Matlab Matlabptr-> SetVariable(U“ParamicationStruct”,ParedionStruct)中的仿真参数结构; // 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 ++引擎程序

也可以看看

||

相关的话题