Simulink S函数 - 从另一个S函数中检索初始值

时间:2015-11-02 10:23:58

标签: matlab simulink

我试图模拟内燃机的各个过程。我目前的建模方法是使用不同的子函数来模拟不同的过程。

在每个子函数中都有一个2级S函数,它解决了ODE给出的气缸状态(压力,温度等)。

我遇到的问题是每个子功能都启用,具体取决于当前曲柄角度,该曲柄角度是根据Simulink中的当前时间步长计算出来的。第一个过程在我手动设置初始值时工作正常,但是我无法将最新的缸内状态(第一个子函数的输出)传递给第二个子函数以用作初始条件(它坚持使用我在模拟开始时设置的初始值。

这有什么办法吗?目前我正走在全球数据商店的道路上,但到目前为止还没有任何乐趣。

1 个答案:

答案 0 :(得分:1)

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

  1. 您可以使用Unit dalay块创建添加剂输出,如下所示: screen shot 因此,您可以从之前的时间步长获得曲柄角度的值,并在公式中使用它来求解方程式。
  2. 你也可以使用这样的代码:

    if (t == 0)
        % equations with your initial values
        sred = 0;
    else
        % equations with other values
        y = uOld + myCoeef;
    end
    
    1. 另一个想法:有时我会在persistent中使用Matlab function变量来保存上一步中某些变量的值。但我认为它会使计算速度变慢。

    2. 还有一个想法 - 如果你有Stateflow,你可以创建两个状态的图表:首先是你的系数的初始时刻,第二个是解决新方程。

    3. 如果我以错误的方式理解你,你可以展示你的代码,我们会提供一些新的想法!

      P.S。我使用S-Function的例子: enter image description here

      我的S-Function需要2个值:Q是在每个步骤的simulink中计算的,ro是从我从表格中的工作区加载的大矩阵中获取的初始值,并根据时间取得必要的值。 因此,S-Function中没有任何初始值 - 我从simulink传输到所有需要的值!