Simulink提供了很强大的控制器仿真功能,但无奈自己学艺不精,对Matlab的知识掌握属实少得可怜,因此需要借助其他的语言对仿真数据进行进一步的处理及可视化,这里谈谈Simulink模型的C++项目生成及使用方法。
生成
首先需要在Matlab中安装Simulate Coder。
安装完成后可以在Simulink-APPS中找到Simulink Coder入口,打开后,在Settings-Model Settings中对生成项目进行一定的配置。
首先为了更容易的得到时间,在solver中选用了定步长的龙格-库塔法进行仿真,并设置合适的步长。
为了方便,这里选择直接生成完整的通用C++解决方案,同时勾选仅生成代码而不进行编译,这样可以省去配置编译器带来的麻烦。
如果在编译中遇到了rt_StartDataLoggingWithStartTime
等其他宏缺失的问题,需要在Code Generation-Interface-Advanced parameters中禁用MAT格式日志。
设置完成后点击Generate Code即可生成项目,生成成功后会弹出报告,项目路径为Matlab当前的工作路径。
使用
这里使用一简单伺服电机模型作为示例:
可以看到该模型有两输入信号In1, In2
与一输出信号Out1
。
在Clion中使用New CMake Project from Source打开生成的project_grt_rtw目录,使其自动生成一CMake文件,编辑CMakeLists.txt,在include_directories
中添加以下几条路径,以编译Matlab中的源文件。(需将C:\\Program Files\\MATLAB\\R2019b
替换成本机的Matlab安装目录)
|
|
新建主函数入口main.cpp
,并将main.cpp
加入CMakeLists.txt中的add_executable
列表中。内容如下:
|
|
对主要接口进行说明:
model.initialize()
:初始化模型model.step()
:步进一步,相当于经过一个采样周期model.terminate()
:终止模型model.test1_U
:模型输入model.test1_Y
:模型输出
完整项目可在git仓库中查看。