如果使用固定步长求解器,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 并粘贴代码:
就是这样。希望对您有所帮助...
我开发了一个块,如果用户选择固定步长解算器,它的行为就会不正确。
块是否可以检查正在使用的求解器,并在使用固定步长求解器时通知用户?
简短版
这绝对有可能!您可以在模型属性(或块本身)中使用回调函数 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 并粘贴代码:
就是这样。希望对您有所帮助...