首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Simulink S-Functions -从另一个S-Function检索初始值

Simulink S-Functions -从另一个S-Function检索初始值
EN

Stack Overflow用户
提问于 2015-11-02 18:23:58
回答 1查看 522关注 0票数 1

我正在尝试模拟内燃机的各个过程。我目前的建模方法是使用不同的子功能来对不同的流程进行建模。

在每个子函数中有一个2级S函数,它求解常微分方程,给出气缸内的状态(压力、温度等)。

我遇到的问题是,每个子函数都是根据当前曲柄角度启用的,当前曲柄角度是从Simulink中的当前时间步长计算得出的。第一个过程工作得很好,因为我手动设置了初始值,但是我无法将最新的柱面内状态(第一个子函数的输出)传递给第二个子函数用作初始条件(它坚持使用我在模拟开始时设置的初始值)。

有什么办法可以解决这个问题吗?目前,我正在沿着全局数据存储的道路前进,但到目前为止还没有任何乐趣。

EN

回答 1

Stack Overflow用户

发布于 2015-11-02 18:59:24

有很多不同的方法来解决这个问题。我将展示其中的一些示例。

  1. 您可以使用Unit dalay块创建附加输出,如下所示:

所以你可以从之前的时间步长中得到曲柄角度的值,并将其用于求解方程的公式中。

你也可以像这样使用一些代码:

代码语言:javascript
复制
if (t == 0)
    % equations with your initial values
    sred = 0;
else
    % equations with other values
    y = uOld + myCoeef;
end

  1. 另一个想法:有时我在Matlab function中使用persistent变量来保存上一步中的一些变量的值。
  2. 还有一个想法--如果你有Stateflow,你可以创建有两种状态的图表:第一种是用你的系数表示初始矩,第二种是用来解新的方程。

如果我理解错了,你可以展示你的代码,我们将提供一些新的想法!

附注:S-Function的使用示例:

我的S函数需要两个值:Q是每一步在simulink中计算的,ro是我从表中的工作空间加载的大矩阵中的初始值,并根据时间取必要的值。因此,在S-Function中没有任何初始值-所有需要的值都是我从simulink传递给它的!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33475387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档