如果使用固定步长求解器,simulink 块是否可以通知用户?

Is it possible for a simulink block to notify the user if a fixed-step solver is being used?

我开发了一个块,如果用户选择固定步长解算器,它的行为就会不正确。

块是否可以检查正在使用的求解器,并在使用固定步长求解器时通知用户?

简短版

这绝对有可能!您可以在模型属性(或块本身)中使用回调函数 StartFcn。每次模拟模型时都会执行此功能。然后添加对求解器类型的检查,如果它设置为 Fixed-step.

则会抛出错误

这里是要添加的代码:

if(strcmp('Fixed-step',get_param(bdroot,'SolverType')))
error('Do not use a fixed-step solver because the results are not correct!');
end

当您的模型名称为 test 时,这会在诊断查看器中引发以下错误:

代码详细解释

我们通过执行bdroot 得到顶层Simulink系统的名称。然后使用此系统名称进行调用,以使用 get_param(bdroot,'SolverType') 获取求解器类型。然后我们使用 strcmp 将返回的字符串与 'Fixed-step' 进行比较。如果当前求解器是固定步长那么 strcmp returns 1,所以我们输入 if 语句并使用 error 函数抛出错误。

将其添加到区块

要将回调函数添加到块,请右键单击块,然后在 Properties 上,如下面的屏幕截图所示:

然后转到 Callbacks -> StartFcn 并粘贴代码:

将其添加到模型

要将回调函数添加到模型,请单击 模型属性,如下面的屏幕截图所示:

然后转到 Callbacks -> StartFcn 并粘贴代码:

就是这样。希望对您有所帮助...