如何向 Simulink 添加 C++ S-function

在我们之前的示例中,如 Matlab Level 2 S-Function 示例:正弦波(连续输出),我们展示了如何用 C++ 创建简单的 S-function。

以下是如何向 Simulink 添加 C++ S-function:

步骤 1:创建 S-function 的源代码文件

在 Matlab/Simulink 中打开的目录中,创建一个新文件,例如 sine_wave_generator.cpp。有关 C++ 代码示例,请参见 Matlab Level 2 S-Function 示例:正弦波(连续输出)

我建议使用 Visual Studio Code 而不是 Matlab 作为 C++ 编辑器。

步骤 2:编译 S-function

打开终端并运行

build_sine_wave.sh
mex sine_wave_generator.cpp

不建议在 Matlab 中运行此命令,尽管这是可能的。我建议始终使用系统终端。

编译过程仅在输出的最后一行为 MEX completed successfully. 时才成功。

如果你看到任何其他输出,你需要调试问题。

常见问题有:

为了测试,我建议创建新的 Simulink 模型而不是重用旧的模型。

步骤 4:添加 S-function 模块

首先点击对话框添加新模块

Simulink library browser

现在,点击 User-defined functions 并选择 S-function 模块。即使你使用的是 Level 2 s-function,也不要选择 Matlab Level-2 S-function 模块。Level 2 S-function 在普通的 S-function 模块上也能正常工作。

Simulink add S function block

将此模块拖到主 Simulink 模型区域中,即另一个窗口中通常就在 library browser 对话框后面的大片白色空白区域:

Simulink drag S function

步骤 5:配置 S-function 模块

双击 S-function 模块以打开配置对话框:

Simulink double click S function

在对话框中,编辑 Name 并输入 S-function 的名称。

S-function 的名称始终是 .cpp 文件的名称(不带 .cpp 扩展名)。

在我们的例子中,C++ 文件名为 sine_wave_generator.cpp,因此 S-function 的名称为 sine_wave_generator

Apply 保存更改并关闭对话框。

在我们的示例中,我们可以将 S-function 模块连接到 Scope 模块以可视化输出。

这不是强制性的,但这是验证 S-function 是否按预期工作的好方法。

要添加 Scope 模块,再次点击导航栏中的 Library browser 图标:

Simulink library browser

点击 Sinks 并选择 Scope 模块:

Simulink add Scope block

Scope 模块拖到主 Simulink 模型区域中:

Simulink drag scope

关闭 Library browser 对话框。

现在,将 S-function 模块的输出连接到 Scope 模块的输入:

Simulink connect S function

连接的模块现在应该如下所示:

Simulink connected S function

点击 Simulink 工具栏中的 Run 按钮运行仿真:

Simulink run simulation

步骤 8:检查示波器

如果一切按预期工作,你现在可以双击 Scope 模块查看 S-function 的输出:

Simulink double click scope

这将打开一个新窗口,显示 S-function 的示波器输出:

MATLAB Continous S Function Sine Wave Generator


Check out similar posts by category: Matlab/Simulink