Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
|
![]() |
#1 |
高级会员
注册日期: 2019-11-21
帖子: 3,006
声望力: 66 ![]() |
![]()
我在Simulink上还有另一个问题:
可以在运行时暂停模拟吗?通过“单位延迟”建立好几个步骤后,我想在下一步完成之前暂停仿真(用于显示供用户查看的值)。之后-假设-单击模拟将继续执行一个步骤,然后重复该过程。最后,它应该具有某种调试功能。 我不太确定如何实现这一点。我猜模拟参数中的某处,但是在哪里以及如何? 回答: 据我所知,有三种方法可以解决这个问题。 方法1:完全不要暂停模拟。而是在适当的行上使用示波器,以提供足够的信息来了解模拟中发生的情况。 优点:您不会被执行的顺序和模拟的停顿所困扰,不会造成令人困惑的结果。 缺点:“同步”您脑中不同范围的行可能很棘手,尤其是如果并非所有行都执行每个模拟步骤时,尤其如此。 (这部分是由于示波器框图实际上是散点图,而实际上它们是步函数。 方法2:使用内置的Simulink调试器。 (别指望)。从所使用模型的“工具”>“ Simulink调试器”菜单选项中打开它。使用此工具,您可以在某些块上设置断点,一次执行一个块或两者的某种组合。 优点:可以精确控制仿真。 缺点:在实践中,我发现此工具使用起来很混乱,并且容易使Matlab崩溃。另外,请注意执行顺序。 方法3:在模拟执行顺序的开始处创建一个嵌入式Matlab函数。这是一个例子: 函数y = func(x); y = x; 在仿真开始时将此功能放在信号线之一上(强制执行顺序)。然后在y = x上放置一个调试点;线。现在,只要您的模拟达到这一行,模拟就会暂停,等待您单击Matlab编辑器中的“继续”按钮。 优点:可靠,容易。 缺点:请注意执行顺序。 执行顺序: 如果您不熟悉Simulink中的执行顺序,建议您从模型菜单中打开“格式>块显示>排序顺序”。这将在每个块上放置密码/字母代码,以某种方式指示模拟中块执行的顺序。根据您的型号和布局,这些数字/字母代码可能有意义,也可能没有意义。我不建议在常规操作中使用此“排序顺序”显示。相反,我建议学习和理解Simulink如何确定排序顺序/执行顺序。 要记住的重要一点是,调试点(使用Simulink调试器或嵌入式Matlab的天气)是执行顺序的一部分。这意味着当您到达调试点时,该点之后的块将不会更新其状态。这很有道理,但是可能令您感到惊讶的是,显示和作用域通常是更新状态的最后一部分,即使它们已连接到执行早期由块发出的信号线。即使这些显示和作用域位于(非原子的)子系统内部,并且您的调试点位于该子系统之外,也是如此。您可能会遇到以下情况:显示器或示波器上显示的值可能来自模拟的最后时间步。 您如何解决这个问题?将您所有的模拟都放在原子子系统内,包括显示和范围。然后将调试点放在此子系统之外。这将确保无论何时击中调试点,所有块(包括显示和范围)的状态都是一致的。 如果其中任何一个都没有道理,请告诉我。 更多&回答... |
![]() |
![]() |