Simulink Merge 在Matlab R2010a版本中留下的坑

 Merge的主要用法是把多个信号组合成一个信号。使用方法在help文档有详细描述。我这里主要说明一下matlab不同版本的默认设置对该block的影响。

R2010a版本中

Underspecified initialization detection的默认设置是:classic;

Detect multiple driving blocks executing at the same time step 的默认设置是:none。

这就允许了merge模块的输入可以是非条件互斥的输入,换句话来说就是merge的任一输入可以在同一个调度周期内同步修改其输出,最终的输出结果就是最后一个更新的输入(模块更新的顺序可以通过菜单栏的Display/Blocks/Sorted见附1观察)。当然,这种方式是不推荐的,因为这样做的结果就会造成数据流不是单向的,增加了模块之间耦合的复杂度,很难直观的看到该输出到底是被谁动了。

也许是matlab自身也意识到了这个问题,在后来的R2014a中(中间有没有修改,没有使用过那些版本,我也不清楚):

Underspecified initialization detection的默认设置是:Simplified;

Detect multiple driving blocks executing at the same time step 的设置则出现了提示:Multiple driving blocks executing at the same time step will result in an error when "Underspecified initialization detection:" is set to "Simplified".

也就是说R2014a已经开始默认不推荐:merge模块的输入为非条件互斥的输入。而2010版本的模型切换为新版本的R2014a时,我们分析 Update Advisor,也会推荐更改该设置。当然前提是,你的merge使用满足输入为条件互斥的。

R2016a中,Underspecified initialization detection在常用参数面板中已经不可见了只能从搜索中查找了。

最后补充两点:

扫描二维码关注公众号,回复: 177271 查看本文章
  1. 在进行MAAB检查时,是需要保持Underspecified initialization detection的默认设置为Simplified的。
  2. 其他版本的matlab没有关注过,具体情况不详





见附1







猜你喜欢

转载自blog.csdn.net/modolllee/article/details/79131239