本文介绍了如何通过matlab脚本自动化的设置simulink模型中模块的大小和位置,并对通过 get_param 和 set_param 这两个函数来读取和设置模块大小位置时的用法和参数数值的含义进行了解释。
如果觉得本文有用,帮忙点个赞哦~
首先我们通过 get_param 读取模型中一个Constant模块的位置和大小,脚本如下:
pos = get_param('myModel/Constant', 'Position');
模型如下:
运行上面的脚本后,我们可以看到 workspace 中 pos 的数值如下:
get_param 函数的返回值 pos 是一个 1x4 的数组,那么该如何来理解这个数组呢?笔者通过分析发现, simulink 在建模空间中建立了一个坐标系,而 pos 的数值含义如下图:
我们可以发现有如下特点:
- Y轴正数方向向下
- pos 数组的前两个值是模块左上角点的坐标
- pos 数组的后两个值是模块右下角点的坐标
总结出了这些规律,我们就可以知道:
模块的宽度 = pos(3) – pos(1)
模块的高度 = pos(4) – pos(2)。
下面分析如何通过 set_param 函数设置模块的位置和大小,通过如下脚本,我们可以将Constant模块移动到一个新的位置,新的位置处,Constant模块的左上角点的坐标为(10, 20),右下角点的坐标为(30, 40)。
set_param('myModel/Constant', 'Position', [10, 20, 30, 40]);
我们也可以通过如下脚本,更方便的设置模块的位置和大小:
x = 10;
y = 20;
width = 20;
height = 15;
set_param('myModel/Constant', 'Position', [x, y, x + width, y + height]);
经过以上分析,我们了解了 get_param 和 set_param 两个函数在对模块大小和位置进行读取和设置时的规律,那么我们就可以开发一些脚本来对更复杂的 simulink 模型中的模块进行整理的工作。比如我们的模型中有很多的 inport,这些 inport 的名字有一定的规律,但是当前排布比较乱,那么我们可以开发一个脚本,将这些 inport 排布整齐,方便我们建模。
整理前,模型如下,inport 排布杂乱。
通过脚本自动将模块整理成如下整齐排布的样子,方便我们后续建模:
脚本如下:
allinport = find_system('myModel', 'BlockType', 'Inport');
for i = 1:1:length(allinport)
pos = get_param(allinport{i}, 'Position');
width = pos(3) - pos(1);
height = pos(4) - pos(2);
x = 0;
y = i * 40;
set_param(allinport{i}, 'Position', [x, y, x + width, y + height]);
end
大家如果觉得有用,帮忙点个赞哦~
有问题也可以直接留言交流。