我试图模拟内燃机的各个过程。我目前的建模方法是有不同的子功能,模拟不同的过程。Simulink S函数 - 从另一个S函数检索初始值
在每个子函数中都有一个2级S函数,它解决了ODE给出缸内状态(压力,温度等)的问题。
我遇到的问题是每个子功能都是启用的,这取决于当前曲柄角,它是根据Simulink当前的时间步计算出来的。所述第一过程的工作细如我手动设定的初始值,但然后我可以最新的缸状态(从第一子功能的输出)不传递给所述第二子功能作为初始条件使用(它坚持使用我在模拟开始时设置的初始值)。
有没有什么办法呢?目前我正沿着全球数据存储的道路前进,但迄今尚未有任何喜悦。
嗨@Mikhail_Sam,感谢您的留言,我的问题是,是否有可能将新的初始值传递到初始化函数之外的MATLAB S-Function中(或者如果可能在启动后的某个时间点运行此初始化模拟)。 该模型的概述如下所示与每个子功能要工作区阵列和全局数据存储的输出。
听起来像Stateflow可能是一种方式去解决,如果没有办法实现上述? –
Hi @ChrisLim!我们可以在您的情况下传输初始值,如输入到S-Function吗?我们可以设置S函数= 2(一个用于信号,一个用于首字母)的输入数量,然后在Simulink(或Worspace)中计算初始值,并在恰当的时刻在S函数中传输它。 例如,我使用这种方法:在工作区中创建首字母的矩阵,并在“查找表”块中的Simulink中加载它,并根据时间在每个步骤中选择首字母。 –
我用这种方法遇到的问题是,我不知道初始值传递给我的第二个S函数,直到它第一次启用的时间步。 我发现了一种解决方法,我可以重置整个模型(包括S函数),当模型启用时,虽然我不认为它非常优雅 - 然后我必须从数据存储区读取值模型由于执行顺序。 您是否有任何可以将初始值传递给初始化函数之外的S函数的方法示例?我似乎无法在主体中触摸它们。 –