Main Content

add_line

Simulink 模型中添加信号线

说明

示例

h = add_line(sys,out,in) 在模型或子系统 sys 中添加一条信号线,将一个模块的输出端口 out 连接到另一个模块的输入端口 in。此语法创建从端口到端口的最直接传送路径,例如斜线或穿过其他模块的信号线。

在下列情况下,您可以连接端口:

  • 输入端口还没有连接。

  • 端口彼此兼容可以连接。

示例

h = add_line(sys,out,in,'autorouting',autoOption) 连接模块,指定是否绕过其他模块布线。

示例

h = add_line(sys,points) 添加一条按照 (x,y) 坐标 points 绘制的信号线,坐标的原点是尚未调整画布大小时 Simulink® 编辑器画布的左上角位置。如果信号线的任一端距离某相应端口不超过五个像素,则该函数将该信号线连接到该端口。信号线可以包含多个线段。

示例

全部折叠

创建并打开一个新模型。

open_system(new_system('myModel'));

添加并定位一个 Constant 模块。

add_block('simulink/Commonly Used Blocks/Constant','myModel/Constant');
set_param('myModel/Constant','position',[140,80,180,120]);

添加并定位一个 Gain 模块。

add_block('simulink/Commonly Used Blocks/Gain','myModel/Gain');
set_param('myModel/Gain','position',[220,80,260,120]);

将 Constant 模块的输出端口连接到 Gain 模块的输入端口。由于 Constant 模块只有一个输出端口,因此您可以为 Constant 模块指定的唯一端口号是 1。由于 Gain 模块只有一个输入端口,因此您可以为 Gain 模块指定的唯一端口号是 1

add_line('myModel','Constant/1','Gain/1');

添加并定位 Scope 模块。

add_block('simulink/Commonly Used Blocks/Scope','myModel/Scope');
set_param('myModel/Scope','position',[300,80,340,120]);

将 Scope 模块的输入端口数量更改为 2

set_param('myModel/Scope','NumInputPorts','2')

将 Gain 模块的输出端口连接到 Scope 模块的第二个输入端口。由于 Gain 模块只有一个输出端口,因此您可以为 Gain 模块指定的唯一端口号是 1。由于您要连接到 Scope 模块的第二个端口,因此请为 Scope 模块指定端口号 2

add_line('myModel','Gain/1','Scope/2');

打开示例。然后,打开 vdp 模型。

open_system('vdp')

删除将名为 Mu 的封装子系统模块连接到 Sum 模块的信号线。

delete_line('vdp','Mu/1','Sum/2');

从名为 Mu 的封装子系统模块和 Sum 模块中获取端口句柄。

h1 = get_param('vdp/Mu','PortHandles');
h2 = get_param('vdp/Sum','PortHandles')
h2 = struct with fields:
      Inport: [324.0006 325.0006]
     Outport: 326.0006
      Enable: []
     Trigger: []
       State: []
       LConn: []
       RConn: []
    Ifaction: []
       Reset: []
       Event: []

h2 结构体中,请注意 Inport 属性的两个句柄。

将名为 Mu 的子系统模块连接到 Gain 模块。通过对端口句柄的 InportOutport 属性进行索引来指定要连接的端口。

add_line('vdp',h1.Outport(1),h2.Inport(2));

您可以通过编程方式建立对现有信号线进行分支的连接。您可以使用 points 语法绘制线段,也可以通过指定要连接的端口绘制信号线。使用端口时,请使用自动布线来改善分支信号线的布局。

此示例说明如何使用端口连接分支信号线。

打开示例。然后,打开 vdp 模型。

open_system('vdp')

将 Scope 模块添加到 vdp 模型中。

add_block('simulink/Commonly Used Blocks/Scope','vdp/Scope1');

将 Scope 模块放置在 Outport 模块上方。

set_param('vdp/Scope1','position',[470,70,500,110]);

将名为 x1 的 Integrator 模块连接到名为 Scope1 的 Scope 模块。

add_line('vdp','x1/1','Scope1/1','autorouting','on')

该命令从名为 x1 的 Integrator 模块中对现有信号线进行分支,并将其连接到名为 Scope1 的 Scope 模块。启用自动布线时,生成的信号线会分段。

打开示例。然后,打开 vdp 模型。

open_system('vdp')

删除将名为 Mu 的封装子系统模块连接到 Sum 模块的信号线。

delete_line('vdp','Mu/1','Sum/2')

获取名为 Mu 的封装子系统模块的端口位置。Mu 有两个端口:一个输入端口和一个输出端口。

mu = get_param('vdp/Mu','PortConnectivity');
mu.Position
ans = 1×2

   210   150

ans = 1×2

   250   150

第一组坐标对应于输入模块。第二组对应于输出模块。

获取 Sum 模块的端口位置,该模块有三个端口:两个输入端口和一个输出端口。

s = get_param('vdp/Sum','PortConnectivity');
s.Position
ans = 1×2

   310   135

ans = 1×2

   310   150

ans = 1×2

   345   145

第一组坐标对应于上部输入端口,第二组坐标对应于下部输入端口,第三组坐标对应于输出端口。

要将名为 Mu 的封装子系统模块连接到 Sum 模块,请指定 Subsystem 模块输出端口的坐标,然后指定 Sum 模块下部输入端口的坐标。

add_line('vdp',[250 150; 310 150])

您可以添加使用和不使用自动布线选项的信号线。

将模块添加到模型

新建一个名为 myModel 的模型。

open_system(new_system('myModel'))

关闭 HideAutomaticNames 参数。

set_param('myModel','HideAutomaticNames','off')

添加两个 Subsystem 模块和一个 Gain 模块。

add_block('simulink/Commonly Used Blocks/Subsystem','myModel/Subsystem1');
add_block('simulink/Commonly Used Blocks/Subsystem','myModel/Subsystem2');
add_block('simulink/Commonly Used Blocks/Gain','myModel/Gain');

定位模块,使 Gain 模块位于两个 Subsystem 模块之间。

set_param('myModel/Subsystem1','position',[100 100 130 130]);
set_param('myModel/Gain','position',[230,100,260,130]);
set_param('myModel/Subsystem2','position',[360,100,390,130]);

为每个 Subsystem 模块添加一个额外的输入端口和输出端口。

add_block('simulink/Sources/In1','myModel/Subsystem1/In2');
add_block('simulink/Commonly Used Blocks/Out1','myModel/Subsystem1/Out2');

add_block('simulink/Sources/In1','myModel/Subsystem2/In2');
add_block('simulink/Commonly Used Blocks/Out1','myModel/Subsystem2/Out2');

连接模块而不自动布线

添加信号线,将名为 Subsystem1 的 Subsystem 模块的输出端口连接到名为 Subsystem2 的 Subsystem 模块的输入端口。

add_line('myModel',{'Subsystem1/1','Subsystem1/2'},{'Subsystem2/1','Subsystem2/2'})

使用自动布线连接模块

删除这些信号线。

delete_line('myModel','Subsystem1/1','Subsystem2/1')
delete_line('myModel','Subsystem1/2','Subsystem2/2')

使用 smart 自动布线选项再次添加信号线。当您使用数组连接两组输入端口和输出端口时,智能自动布线会在更加充分利用空间的前提下对它们进行并排布线。

add_line('myModel',{'Subsystem1/1','Subsystem1/2'},{'Subsystem2/1','Subsystem2/2'},'autorouting','smart')

输入参数

全部折叠

要向其添加信号线的模型或子系统,指定为字符向量。

示例: 'vdp'

示例: 'f14/Controller'

要从其连接信号线的模块输出端口,指定为下列值之一:

  • 模块名称、斜杠和端口号。对于状态端口,请使用端口名称 State 而不是端口号。

  • 要从其连接的端口句柄。

  • 这些端口标志符中任一个的数组。

'PortHandles'get_param 结合使用可获取句柄。

示例: 'Mu/1'

示例: 'Subsystem/2'

示例: h.Outport(1)

示例: {'Subsystem/1','Subsystem/2'}

提示

要向其连接信号线的模块输入端口,指定为下列值之一:

  • 模块名称、斜杠和端口号。对以下端口使用端口名称而不是端口号:

    • 使能端口 - 使用 Enable。例如,将此端口名称用于使能子系统上的使能端口。

    • 触发端口 - 使用 Trigger。例如,将此端口名称用于触发子系统上的触发端口。

    • 动作端口 - 使用 Ifaction。例如,将此端口名称用于 If Action Subsystem 和 Switch Case Action Subsystem 模块上的动作端口。

  • 要向其添加信号线的端口句柄。

  • 这些端口标志符中任一个的数组。

使用 'PortHandles' 选项与 get_param 获取句柄。

示例: 'Mu/1'

示例: 'Subsystem/2'

示例: h.Inport(1)

示例: {'Subsystem/1','Subsystem/2'}

提示

绕过其他模块的自动布线的类型,指定为:

  • 'off',即无自动布线

  • 'on',即自动布线

  • 'smart',即一种自动布线,可最大限度地利用画布上的闲置空间,避免与其他信号线和标签重叠

要绘制信号线的端点,指定为至少 2×2 的矩阵。每绘制一个线段,就新增一行。以 (x,y) 坐标形式指定各点,原点是尚未调整画布大小时编辑器的左上角位置。

示例: [100 300; 200 300; 200 300; 200 500]

输出参量

全部折叠

add_line 创建的信号线,返回为句柄。

版本历史记录

在 R2006a 之前推出