2011-02-07 175 views
3

我Simulink的另一个问题:Simulink的:仿真调试样模式

是否有可能暂停在模拟过程中它的运行?建立通过“单位延迟”的几个步骤后,我想先下一步骤(针对用户显示值,看看)做暂停我的模拟。之后 - 假设 - 单击模拟应该继续进行一步,重复该过程。 最后这应该有某种调试功能。

我不是很坚定这是如何实现的。我猜在模拟参数的某处,但是在哪里以及如何?

回答

7

有三种方式,你可以去这个问题,我知道的。

方法1:根本不要暂停模拟。而应在适当的线上使用示波器来提供足够的信息来了解模拟中发生的情况。

优点:您不会受到执行顺序和模拟暂停导致混淆结果的影响。缺点:对你的脑中不同的范围线进行“时间同步”可能会非常棘手,特别是如果不是所有人都执行每个模拟步骤。 (这部分是由于示波器块图显示为阶梯函数,实际上它们是散点图。

方法2:使用内置的Simulink调试器(不要让自己的希望上升)。使用您正在使用的模型中的工具> Simulink Debugger菜单选项打开此工具。此工具允许您在某些模块上设置断点,一次一步或两次组合。允许对模拟进行精细控制

缺点:在实践中,我发现这个工具很容易混淆使用,并且容易导致Matlab崩溃。另外,请小心orde执行。

方法3:在模拟执行顺序开始时创建一个嵌入式Matlab函数。这里是一个例子:

function y = func(x); y = x;

在仿真开始时在信号线之一上放置此功能(强制执行顺序)。然后在y = x上放一个调试点;线。现在,只要你的模拟点击这条线,模拟病人被暂停等着你点击在Matlab主编的“继续”按钮。

优势:可靠,方便。

缺点:谨慎执行。

执行顺序:

如果您不熟悉在Simulink中执行的顺序,我建议你打开“格式>块显示>排序顺序”从模型菜单。这将在每个块上放置神秘的数字/字母代码,以某种方式指示块在您的模拟中执行的顺序。取决于你的模型和布局,这些数字/字母代码可能很有意义,或者它们可能不是。我不建议在通常情况下使用此排序顺序显示。相反,我建议学习和了解Simulink如何确定分拣订单/执行订单。

要记住的重要一点是,调试点(使用Simulink的调试器或嵌入式MATLAB天气)是执行订单的一部分。这意味着当你点击调试点时,该点之后的块将不会更新它们的状态。这多少是有道理的,但可能会令你感到惊讶的事情是,显示器和范围往往是一些过去的块的更新状态,即使他们迷上了信号由块在执行年初采购线。即使这些显示和范围位于(非原子)子系统内部,并且您的调试点位于该子系统之外,情况也是如此。您可能最终出现的情况是显示器或范围中显示的值可能来自仿真中的上一个时间步。

你如何解决此问题?将所有模拟放在原子系统内部,包括显示和范围。然后把你的调试点放在这个子系统之外。这将保证每当命中调试点时,所有块(包括显示和范围)的状态都是一致的。

如果任何这是没有意义的,让我知道。

+0

哇,谢谢您非常详细的前面回答:)我想我必须尝试一些你的建议。我想我会用“启用子系统”建立我的模拟,这样我就可以确定每个子系统何时处理。我认为我必须测试方法2或方法3是否更舒适。唯一让我困惑的是,为什么方法3强制执行任何顺序,当我在每一行中放置这个函数?竖起大拇指给你真棒的答案! – poeschlorn 2011-02-08 07:10:27