如何根据引脚连接获得Simulink模块的顺序?

时间:2017-02-18 10:57:41

标签: matlab simulink

例如:来自附加的Simulink模型图(此模型没有意义。仅为了解我的问题而创建),我想根据引脚连接而不是字母顺序获取块的顺序。

订单应该像(预期输出):

  1. Integrator,Second-Order Limited Block

  2. 积分器或速率限制器动态阻止

  3. 速率限制器动态或积分器块

  4. 查找表动态阻止

  5. 数据类型转换块

  6. n-DLookup表格块

  7. 但目前我正在接收基于Aplhabatic名称块的订单(请参阅下图以获取结果uisng'find_system'命令。)

    Simulink model sample

    Current order

1 个答案:

答案 0 :(得分:2)

没有一个功能会自动为您执行此操作 - 您需要自己编写。

看起来您正在根据块位置(从左到右)进行定位。在这种情况下,您需要类似以下内容(使用演示f14模型):

>> open_system('f14')
>> blocks = find_system(gcs,'SearchDepth',1,'Type','Block');
>> positions = get_param(blocks,'Position');
>> leftPos = cellfun(@(c)c(1),positions);
>> [~,newOrderIdx] = sort(leftPos);
>> blocks(newOrderIdx)
ans =
  18×1 cell array
    'f14/Pilot'
    'f14/u'
    'f14/Controller'
    'f14/Sum1'
    'f14/Dryden Wind…'
    'f14/Stick Input'
    'f14/Gain'
    'f14/Gain1'
    'f14/Gain2'
    'f14/Actuator…'
    'f14/Sum'
    'f14/Aircraft…'
    'f14/Nz pilot…'
    'f14/Gain5'
    'f14/Angle of …'
    'f14/Pilot G force…'
    'f14/Nz Pilot (g)'
    'f14/alpha (rad)'