Simulink显示本地错误

时间:2014-06-05 11:28:27

标签: debugging simulink

是否可以在simulink中显示可变时间步长求解器的积分器步的局部误差。我想找出为什么simulink采取小积分器步骤。由于步长大小取决于集成的本地错误,因此记录本地错误会很有帮助。这可能吗?

2 个答案:

答案 0 :(得分:1)

您是否尝试过使用Simulink Debugger?如果您在感兴趣的块的输入和输出上设置断点,并将模拟运行到步骤开始变小的时间,那么您可以确定发生了什么。

你也可以玩过零检测。可以找到关于其基础知识的相当好的讨论here

答案 1 :(得分:1)

这可以从调试器中获得(正如Phil Goddard暗示的那样)。使用调试器启动模型(来自matlab控制台):

>> sldebug mdl

启用"解算器跟踪级别1"

>> strace 1

启用"中断失败的集成步骤"

>> xbreak

开始模拟:

>> continue

当局部误差太大时,模拟将中断。例如:

[TM = 0.035250948751817182   ] Start of Major Time Step
[Tm = 0.035250948751817182   ] [Hm = 0.0009443691112440444  ] Start of Solver Phase
[Tm = 0.03525094875181718    ] [Hm = 0.0009443691112440444  ] Begin Integration Step
[Tn = 0.03525094875181718    ] [Hn = 0.0009443691112440444  ] Begin Newton Iteration
[Tf = 0.03619531786306122    ] [Hf = 0.0009443691112440444  ] Fail [Er = 6.8210e+00 ] [Ix = 1]
Detected integation step failure. Interrupting model execution

Er 值是本地错误, Ix 是状态索引。要查找相应的块类型:

>> states

带输出

Continuous States:
Idx  Value                    (system:block:element  Name   'BlockName')
0  -7.96155746500428e-06    (0:0:0  CSTATE  'mdl/x')
1  1.630758262432841e-12    (0:1:0  CSTATE  'mdl/y')