我有一个包含以下子系统的 Simulink 模型。

该bm_train_adapter模块将调用同名的 MATLAB 函数,将所有输入参数传递到单个向量中。
该子系统的采样时间为 900(秒),这就是为什么所有信号都以红色着色(对于离散信号)。
但是,在调试器中,我观察到该bm_train_adapter函数在每个仿真时间步被调用两次。这会产生非常错误的结果,因为该函数包含副作用。
为什么 Simulink 每个时间步不止一次调用我解释的 MATLAB 函数?我怎样才能防止这种情况?
我有一个包含以下子系统的 Simulink 模型。

该bm_train_adapter模块将调用同名的 MATLAB 函数,将所有输入参数传递到单个向量中。
该子系统的采样时间为 900(秒),这就是为什么所有信号都以红色着色(对于离散信号)。
但是,在调试器中,我观察到该bm_train_adapter函数在每个仿真时间步被调用两次。这会产生非常错误的结果,因为该函数包含副作用。
为什么 Simulink 每个时间步不止一次调用我解释的 MATLAB 函数?我怎样才能防止这种情况?
我认为这是因为您的求解器设置。在您的Configuration Parameters窗口中,查看Solver Options窗格。
我相信discrete和ode1求解器会在每个时间步调用一次。 ode2每个时间步将调用两次,每个时间步ode4将调用 4 次,等等。
这种行为对于模拟连续动力学非常有帮助,但在与离散元素交互时可能会令人困惑。
原因是我的模型存在由子系统中的单位延迟块引起的代数环。为了解决这些循环,求解器别无选择,只能多次评估某些块。
解决方案是从其子系统中消除所有单元延迟。