前两天需要 Simulink与 C++ 通信,试了试 mex 命令,将cpp文件编译为exe。
这个方法主要的实现的就是两个程序之间的通信,感觉有一些繁琐,下面是主要的实现方法。
1. 配置VS中的环境
MATLAB版本:2022b
Visual Studio 版本:2022
添加路径
项目属性->调试->环境中添加路径
{matlabroot}\extern\bin\win64
配置头文件
项目属性->VC++目录->外部包含目录 中添加路径 {matlabroot}\extern\include\
配置库文件
- 设置库目录
项目属性->VC++目录->库目录 中添加路径{matlabroot}\extern\lib\win64\mingw64\
- 添加依赖项设置
项目属性->链接器->输入-> 附加依赖项 中添加libMatlabDataArray.lib、libMatlabEngine.lib
2. CPP实现
这里的代码主要是参考 simulink和c++间通信 ,做得一个小实现,提供一种实现思路。
CPP代码的主要功能是使用MATLAB提供的C++ API 控制仿真,在自己的C++程序中调用生成的exe。
#include "MatlabDataArray.hpp"
#include "MatlabEngine.hpp"
#include <iostream>
void callSQRT() {
using namespace matlab::engine;
// Start MATLAB engine synchronously
std::unique_ptr<MATLABEngine> matlabPtr = startMATLAB();
// Load Simulink model
FutureResult<void> loadFuture = matlabPtr->evalAsync(u"load_system('testcpp')");
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 << "Simulink model loaded\n";
}
int main() {
callSQRT();
return 0;
}
testcpp 是一个简单的Simulink文件
CPP文件编译
将CPP文件复制粘贴在testcpp.sxl 所在文件夹下,打开MATLAB,在MATLAB命令行中输入以下指令进行编译:
mex -v -client engine testFeval.cpp
编译成功后生成文件 .exe 文件
运行生成文件
在 生成exe 目录下,打开终端,输入 (文件名).exe
,即可正常加载仿真。
看到这里了,各位朋友留个赞再走吧!