Simulink 是否在仿真前将 models/block 图转换为代码?
Does Simulink convert models/block diagram to code before simulation?
我了解到我可以从 Simulink models/block 图生成代码。我很好奇 Simulink 是否总是在 运行 Simulink 软件中的模拟之前将模型转换为 (c/c++/java) 代码,然后执行该代码?我的意思是,每当我 运行 时,一个模拟就是 Matlab 将框图转换为 (c/c++/java) 代码和 运行 幕后代码。在这种情况下,Simulink 中的仿真直接依赖于 运行 一些代码;这些信息在某种程度上对我很重要。
为完整模型生成和 运行 代码似乎是合理的,因为我们可以使用 C/Matlab 代码编写 s-functions
并将它们用作自定义块。因此,模拟模型在某种程度上涉及 运行 代码。同样,由于我们也可以编写 Matlab 代码,因此仿真可能涉及在某些环境中解释 Matlab 代码。这让我很好奇这些信息是否可用 - 运行 Simulink 中的仿真如何紧密地依赖于在用户机器上执行本机代码。
我在发布之前做了一些搜索,发现了这个 SO 问题:How does simulation engine work? 这个问题中的讨论没有直接回答我的问题。
答案取决于您选择的模式。
在正常模式下 Simulink 将运行 模型,因为它主要使用 MATLAB 执行引擎。没有代码生成。本机实现的部分(例如 S-Functions)用作 MATLAB 解释器调用的单独二进制文件。
在加速器模式下 Simulink 生成模型代码。这意味着您的完整模型(除了无法生成代码的部分)已生成并编译成一个二进制文件。
在快速加速器模式下不仅会生成您的模型,还会生成求解器并将其编译成一个二进制文件,现在运行正在一个单独的进程中。
有关详细信息,请参阅 official documentation
我了解到我可以从 Simulink models/block 图生成代码。我很好奇 Simulink 是否总是在 运行 Simulink 软件中的模拟之前将模型转换为 (c/c++/java) 代码,然后执行该代码?我的意思是,每当我 运行 时,一个模拟就是 Matlab 将框图转换为 (c/c++/java) 代码和 运行 幕后代码。在这种情况下,Simulink 中的仿真直接依赖于 运行 一些代码;这些信息在某种程度上对我很重要。
为完整模型生成和 运行 代码似乎是合理的,因为我们可以使用 C/Matlab 代码编写 s-functions
并将它们用作自定义块。因此,模拟模型在某种程度上涉及 运行 代码。同样,由于我们也可以编写 Matlab 代码,因此仿真可能涉及在某些环境中解释 Matlab 代码。这让我很好奇这些信息是否可用 - 运行 Simulink 中的仿真如何紧密地依赖于在用户机器上执行本机代码。
我在发布之前做了一些搜索,发现了这个 SO 问题:How does simulation engine work? 这个问题中的讨论没有直接回答我的问题。
答案取决于您选择的模式。
在正常模式下 Simulink 将运行 模型,因为它主要使用 MATLAB 执行引擎。没有代码生成。本机实现的部分(例如 S-Functions)用作 MATLAB 解释器调用的单独二进制文件。
在加速器模式下 Simulink 生成模型代码。这意味着您的完整模型(除了无法生成代码的部分)已生成并编译成一个二进制文件。
在快速加速器模式下不仅会生成您的模型,还会生成求解器并将其编译成一个二进制文件,现在运行正在一个单独的进程中。
有关详细信息,请参阅 official documentation