我有一个包含以下子系统的Simulink模型。
bm_train_adapter
块将调用同名的MATLAB函数,将所有输入参数传递到单个向量中。
子系统的采样时间为900(秒),这就是为什么所有信号都用红色显示(对于离散信号)。
然而,在调试器中,我观察到bm_train_adapter
函数在每个模拟时间步长被调用两次。这会产生可怕的错误结果,因为该功能包括副作用。
为什么Simulink每个时间步执行多次调用我的解释MATLAB函数?我该如何防止这种情况?
答案 0 :(得分:1)
我认为这是因为你的求解器设置。在Configuration Parameters
窗口中,查看Solver Options
窗格。
我相信discrete
和ode1
解算器每个时间步都会调用一次。 ode2
每次调用两次,ode4
每次调用4次,等等。
此行为对于模拟连续动力学非常有用,但在与离散元素交互时可能会造成混淆。
答案 1 :(得分:1)
原因是我的模型具有由子系统中的单位延迟块引起的代数循环。为了解决这些循环,求解器别无选择,只能不止一次地评估一些块。
解决方案是从子系统中移除所有单位延迟。