编程建模基础知识
您可以在 MATLAB® 命令行窗口以编程方式执行大多数 Simulink® 建模基础操作,例如创建模型、向模型添加模块和设置参数。以下示例说明其中的一些命令及其用法。
加载模型
加载模型会将模型导入到内存中,但不在 Simulink 编辑器中打开模型进行编辑。加载模型之后,您可以通过编程方式来处理模型。只有在您打开模型之后,才能使用 Simulink 编辑器来编辑模型。
要加载系统,请使用 load_system 命令。
例如,假设您在 MATLAB 路径中有名为 myModel 的模型。要加载该模型,请在 MATLAB 命令行窗口中输入以下命令:
load_system('myModel')创建模型并指定参数设置
您可以编写一个函数,以创建模型并使用您偏好的设置。例如,下面的函数将创建带有绿色背景并使用 ode3 求解器的模型:
function new_model(modelname) % NEW_MODEL Create a new, empty Simulink model % NEW_MODEL('MODELNAME') creates a new model with % the name 'MODELNAME'. Without the 'MODELNAME' % argument, the new model is named 'my_untitled'. if nargin == 0 modelname = 'my_untitled'; end % create and open the model open_system(new_system(modelname)); % set default screen color set_param(modelname,'ScreenColor','green'); % set default solver set_param(modelname,'Solver','ode3'); % save the model save_system(modelname);
打开模型时通过编程方式加载变量
如果您指定变量作为模块参数值,则必须在模型中定义该变量的值。您可以将 PreloadFcn 回调与 set_param 函数结合使用,通过编程方式定义变量。此函数的格式如下所示:
set_param('mymodel','PreloadFcn','expression')
expression 是 MATLAB 搜索路径中的 MATLAB 命令或 MATLAB 脚本。此命令将模型的 PreloadFcn 回调设置为您指定的值。保存模型,以保存该设置。
例如,当您在 MATLAB 脚本 loadvar.m 中为模型 modelname.slx 定义变量时,请使用以下命令:
set_param('modelname','PreloadFcn','loadvar')
K 指定值 15,请使用以下命令:
set_param('modelname','PreloadFcn','K=15')
保存模型后,当您下一次打开模型时,将执行 PreloadFcn 回调。
以编程方式添加和连接模块
此示例说明如何使用函数以编程方式添加和连接模块。
创建并打开名为 "mymodel" 的空模型。
new_system('mymodel'); open_system('mymodel');
使用 add_block 函数添加模块。
sine1 = 'mymodel/Sine1'; pulse1 = 'mymodel/Pulse1'; subsystem1 = 'mymodel/Subsystem1'; scope1 = 'mymodel/Scope1'; add_block('simulink/Sources/Sine Wave',sine1); add_block('simulink/Sources/Pulse Generator',pulse1); add_block('simulink/Ports & Subsystems/Subsystem',subsystem1); add_block('simulink/Sinks/Scope',scope1);
使模块名称始终可见。
set_param('mymodel',HideAutomaticNames="off");
删除 Subsystem1 的内容。
Simulink.SubSystem.deleteContents('mymodel/Subsystem1');在 Subsystem1 内部插入 Add 模块。
add1 = 'mymodel/Subsystem1/Add1'; add_block('simulink/Math Operations/Add',add1);
然后添加信号线,将模型中的所有模块连接起来。首先使用 Simulink.connectBlocks 函数将 Add1 连接到 Scope1。由于连接这两个模块只存在一种可能的方式,您无需在函数输入参量中指定要连接哪些端口。此时,您可以只指定模块路径。
Simulink.connectBlocks(add1,scope1)
将 Sine1 连接到 Add1 的顶部输入端口。要连接特定端口,您必须在函数输入参量中指定要连接哪些端口。获取您要连接的端口的句柄。对于每个模块,使用 get_param 函数获取该模块上所有端口的句柄。然后,使用圆点表示法和端口名称来提取要连接的端口的句柄。
allPortsSine = get_param(sine1,'PortHandles') srcPort = allPortsSine.Outport allPortsAdd = get_param(add1,'PortHandles') dstPort = allPortsAdd.Inport(1) Simulink.connectBlocks(srcPort,dstPort);
使用相同的方法将 Pulse1 连接到 Add1 的底部输入端口。
allPortsPulse = get_param(pulse1,'PortHandles');
srcPort = allPortsPulse.Outport;
dstPort = allPortsAdd.Inport(2);
Simulink.connectBlocks(srcPort,dstPort);自动排列模型。
Simulink.BlockDiagram.arrangeSystem('mymodel')自动排列子系统。
Simulink.BlockDiagram.arrangeSystem('mymodel/Subsystem1')以编程方式注释掉或注释直通模块
要以编程方式查看或更改模块的注释状态,请使用 get_param 和 set_param 命令。
要查看模块的注释状态,请执行以下命令:
get_param(gcb,'commented');要注释掉模块,请执行以下命令:
set_param(gcb,'commented','on');要注释直通模块,请执行以下命令:
set_param(gcb,'commented','through');要取消对模块的注释,请执行以下命令:
set_param(gcb,'commented','off');
通过编程方式命名信号
选择其输出端口连接到信号线的模块。
使用
get_param将当前所选模块的端口句柄指定给变量 p。使用get_param将连接到该端口的信号线的句柄赋给变量 l。然后,将信号线的名称设置为's9'。
p = get_param(gcb,'PortHandles') l = get_param(p.Outport,'Line') set_param(l,'Name','s9')
自动排列模型布局
您可以使用 Simulink.BlockDiagram.arrangeSystem 命令对模型布局。该命令将分别对齐左侧的输入模块、右侧的输出模块和输入与输出之间各列的模型元素。该命令一次只影响一个层。
您可以使用 Simulink.BlockDiagram.routeLine 命令对模型的现有信号线进行布线。对现有信号线进行布线可改善信号线的分布,并避免信号线与模型中的其他信号线和障碍物发生重叠。
虽然您可以对任何打开的模型使用这些命令,但它们对您以编程方式构建的模型特别有用。有关示例,请参阅以编程方式排列填充的模型。
在多个窗口中打开同一个模型
当您打开模型时,模型将显示在 Simulink 编辑器窗口中。例如,如果您打开了一个模型,然后又打开一个模型,第二个模型将显示在第二个窗口中。
要在两个 Simulink 编辑器窗口中打开同一个模型,请在 MATLAB 命令提示符下输入 open_system 命令并使用 window 参量。例如,如果您打开了名为 modelName 的模型,要打开 modelName 的另一个实例,请输入:
open_system('modelName','window')
使用模型查找器来索引和搜索模型,并提高其可发现性
您可以使用 modelfinder 函数在多个数据库中搜索示例、模型和工程。默认情况下,modelfinder 搜索 MathWorks® Examples 数据库。您还可以使用模型查找器配置您的数据库。有关模型查找器的详细信息,请参阅Configure, Share, and Search Databases。
使用突出显示定位图元素
要突出显示一个打开模型中的模块、信号线、端口或注解,请使用 hilite_system。
以编程方式指定颜色
在 MATLAB 命令行或 MATLAB 程序中,您可以使用 set_param 命令设置决定模块图背景颜色以及模块图元素的背景颜色和前景颜色的参数。下表汇总了控制模型颜色参数。
| 参数 | 决定 |
|---|---|
| 模型背景 |
| 模块和注解背景 |
| 模块和注解前景 |
可将颜色参数设置为命名颜色或 RGB 值。
命名颜色:
'automatic'、'black'、'white'、'red'、'green'、'blue'、'cyan'、'magenta'、'yellow'、'gray'、'lightBlue'、'orange'、'darkGreen'RGB 值:
'[r,g,b]'其中
r、g和b分别指颜色的红、绿、蓝分量值,这些值都归一化为介于0.0到1.0之间。
例如,以下命令将当前选择的系统或子系统的背景颜色设置为浅绿色:
set_param(gcs,'ScreenColor','[0.3, 0.9, 0.5]')
另请参阅
load_system | open_system | new_system | save_system | Simulink.connectBlocks | delete_line | add_block | delete_block | set_param | get_param | gcb | Simulink.BlockDiagram.routeLine | hilite_system