在Linux中从Simulink创建C ++共享库

时间:2015-10-09 21:58:04

标签: c++ matlab shared-libraries simulink

我需要从Simulink模型生成一个带有输入和输出的共享库(.so)文件,并在另一个C ++项目中逐步运行该模型。

我知道MATLAB代码生成器能够生成可执行文件和DLL。但是,我找不到如何生成Linux C ++共享库。如果有人可以解释如何生成这些库,我将不胜感激,并提供了有关如何在C ++中导入和使用它们的最小工作示例。

修改

我设法在Qt Creator中创建了一个共享库和一个示例C ++项目。不知怎的,我错过了目标文件 ert_shrlib.tlc 。这就是我所做的:

配置Simulink模型

  • 创建一个简单的连续Simulink模型,其中包含两个输入和两个输出,名为: simul_main.slx
  • 在"配置参数" - >"代码生成"中,为嵌入式编码器选择目标 ert_shrlib.tlc
  • 在"配置参数" - >"代码生成" - >"接口",设置:
    • 代码替换库:C99(ISO)
    • 支持:浮点数和连续时间。
  • 在"配置参数" - >"代码生成" - >"接口" - >"配置模型功能",组:
    • 初始化函数名称: init_simul
    • 步骤功能名称: step_simul

构建共享库

  • 构建模型以生成代码。

配置MWE Qt项目

  • test.pro

    TEMPLATE = app
    CONFIG += console
    CONFIG -= qt
    
    LIBS += -L<path_to_lib> -lsimul_main  
    INCLUDEPATH += <path_to_sources>
    INCLUDEPATH += <path_to_matlab>/simulink/include/  
    
    SOURCES += main.cpp
    
  • 的main.cpp

    #include <cstdio>
    
    extern "C"
    {
    #include "simul_main.h"
    #include "simul_main_private.h"
    }
    
    int_T main()
    {
        /* Initialize the model */
        init_simul();
    
        real_T input1 = 1, input2 = 1;
        real_T time;
        real_T output1, output2;
        real_T tfinal = 10;
    
        while ((rtmGetErrorStatus(simul_main_M) == (NULL)) && !rtmGetStopRequested(simul_main_M))
        {
            /* Step the model for base rate */
            step_simul(input1, input2, &output1, &output2);
    
            /* Get simulation time */
            time = rtmGetT(simul_main_M);
    
            /* Display simulation output */
            std::printf("%5.2f : [%5.2f, %5.2f]\n", time, output1, output2);
    
            /* Request simulation to stop */
            if (time >= tfinal)
                rtmSetStopRequested(simul_main_M, true);
        }
    
        /* Terminate the model */
        simul_main_terminate();
        return 0;
    }
    

请注意,可以在&#34;配置模型功能&#34;中配置step_simul功能签名。对话。

0 个答案:

没有答案