poe*_*orn 3 debugging matlab simulink
我在Simulink上有另一个问题:
是否可以在运行期间暂停模拟?通过"单位延迟"构建了几个步骤后,我想在下一步完成之前暂停我的模拟(用于显示用户要查看的值).之后 - 让我们说 - 单击模拟将继续一步并重复该过程.最后,这应该具有某种调试功能.
我不是很坚定如何实现这一目标.我想在模拟参数的某处,但在哪里以及如何?
我知道有三种方法可以解决这个问题.
方法1: 根本不要暂停模拟.而是在适当的行上使用范围来提供足够的信息来了解模拟中发生的事情.
优点:您不会受到执行顺序和模拟暂停的影响而导致混乱的结果.
缺点:"时间同步"头部的不同范围线可能很棘手,特别是如果不是所有的线都执行每个模拟步骤.(这部分是由于示波器块图表显示为阶梯函数,而实际上它们是散点图.
方法2: 使用内置的Simulink调试器.(不要抱有希望).从您正在使用的模型中的工具> Simulink调试器菜单选项中打开它.此工具允许您在某些块上设置断点,一次一个步骤,或两者的某种组合.
优点:可以精确控制模拟.
缺点:在实践中,我发现这个工具使用起来很混乱,并且容易使Matlab崩溃.另外,要谨慎执行.
方法3: 在模拟执行顺序的开头创建一个嵌入式Matlab函数.这是一个例子:
函数y = func(x); Y = X;
在模拟开始时将此功能放在其中一条信号线上(强制执行顺序).然后在y = x上放一个调试点; 线.现在,无论何时模拟到达此行,模拟都会暂停,等待您单击Matlab编辑器中的"继续"按钮.
优点:可靠,简单.
缺点:请谨慎执行.
执行顺序:
如果您不熟悉Simulink中的执行顺序,我建议您从型号菜单中打开"格式化>块显示>排序顺序".这将在每个块上放置神秘的数字/字母代码,以某种方式指示模块中块执行的顺序.根据您的型号和布局,这些数字/字母代码可能很有意义,或者它们可能没有.我不建议在常规实践中使用此排序顺序显示.相反,我建议学习并了解Simulink如何确定排序订单/执行订单.
需要记住的重要一点是,调试点(使用Simulink调试器或嵌入式Matlab的天气)是执行顺序的一部分.这意味着当您点击调试点时,该点之后的块将不会更新其状态.这很有道理,但可能让您大吃一惊的是,显示和范围通常是更新状态的最后一些块,即使它们连接到执行早期由块提供的信号线.即使这些显示和范围在(非原子)子系统内部,并且您的调试点位于该子系统之外,也是如此.您最终可能会出现显示或范围上显示的值可能来自模拟中的最后一个步骤的情况.
你是如何解决这个问题的?将所有模拟放在原子系统中,包括显示和范围.然后将调试点放在此子系统之外.这将保证无论何时命中调试点,所有块(包括显示和范围)的状态都是一致的.
如果其中任何一个没有意义,请告诉我.