【问题标题】:Does Simulink convert models/block diagram to code before simulation?Simulink 是否在仿真前将模型/框图转换为代码?
【发布时间】:2016-02-29 23:55:48
【问题描述】:

我了解到我可以从 Simulink 模型/框图生成代码。我很好奇 Simulink 是否总是在运行 Simulink 软件中的仿真之前将模型转换为 (c/c++/java) 代码,然后执行该代码?我的意思是,每当我运行仿真时,Matlab 都会将框图转换为(c/c++/java)代码并在后台运行该代码。在这种情况下,Simulink 中的仿真直接依赖于运行一些代码;在某种程度上,这些信息对我很重要。

为完整模型生成和运行代码似乎是合理的,因为我们可以使用 C/Matlab 代码编写 s-functions 并将它们用作自定义块。因此,模拟模型在某种程度上涉及运行代码。同样,由于我们也可以编写 Matlab 代码,因此模拟可能涉及在某些环境中解释 Matlab 代码。这让我很好奇这些信息是否可用——在 Simulink 中运行模拟的紧密程度取决于在用户机器中执行本机代码。

我在发帖前做了一些搜索,发现了这个 SO 问题:How does simulation engine work? 这个问题中的讨论并没有直接回答我的问题。

【问题讨论】:

  • 您关心模拟速度吗?
  • 模拟基本上是一个巨大的数值积分问题。 S-Function 等仅在每个时间步计算等式左侧和右侧的一些条目。当您构建模型并使用 XPC Target 等内容时,它会转换为压缩代码。
  • @PagMax 不,我不关心速度。只是好奇在模拟过程中是否会生成原生代码并在后台运行。
  • 问题完全回答了吗?

标签: matlab simulink


【解决方案1】:

答案取决于您选择的模式。

正常模式中,Simulink 将运行模型,因为它主要使用 MATLAB 执行引擎。不生成代码。本地实现的部分(例如 S-Function)用作 MATLAB 解释器调用的单独二进制文件。

加速器模式 Simulink 生成模型代码。这意味着您的完整模型(除了无法生成代码的部分)被生成并编译成一个二进制文件。

快速加速器模式下,不仅您的模型而且求解器都被生成并编译成一个二进制文件,现在在一个单独的进程中运行。

更多详情请参考official documentation

【讨论】:

  • 谢谢丹尼尔。我有几个附带的问题: (1) 非 S 功能块是如何实现的?如果它们是使用本机 C 代码实现的,那么 Matlab 是否将它们作为二进制文件执行? (2) 使用 Matlab 代码编写的块呢? Matlab 代码是否被解释或编译然后运行?还是将 Matlab 代码翻译成 C 代码然后运行? (3) 对于具有 C 代码的 s-function 块,我们如何在运行仿真时更改编译器参数(例如 -O、-std 标志等)?
  • @Shafiul: (1) 有一些内置块绝对不是 s-functions。这些是例如子系统、mux、demux,可能是大多数信号属性块和一些其他块。阅读生成的代码时,它们看起来完全不同。 Simulink 是封闭源代码,您可能不会得到详细的答案。 (2) 这就是 MATLAB 函数和解释型 MATLAB 函数之间的区别。 (3) 不知道。
猜你喜欢
  • 2022-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-08
  • 1970-01-01
  • 2014-09-11
相关资源
最近更新 更多