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

时间:2015-06-26 17:23:01

标签: matlab simulink solver

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

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

1 个答案:

答案 0 :(得分:2)

短版

这绝对是可能的!您可以在模型属性(或块本身)中使用回调函数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时,这会在诊断查看器中引发以下错误:

error

代码的详细说明

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

将其添加到块

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

step1_block

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

step2_block

将其添加到模型

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

step1_model

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

step2_model

那就是它。我希望它有所帮助...