如何在 simulink 中为模块创建自己的参数或属性?
Posted
技术标签:
【中文标题】如何在 simulink 中为模块创建自己的参数或属性?【英文标题】:How can I create my own parameters or attributes for a block in simulink? 【发布时间】:2018-07-13 08:26:08 【问题描述】:在这种情况下,我试图创建一个新的块参数作为新属性,以保存我不想保存在已为其他不同相关数据保留的默认参数中的特定新数据
对于这个参数我想使用命令 get_param 和 set_para 需要已经存在
我的意思是默认参数,那些 . https://edoras.sdsu.edu/doc/matlab/toolbox/simulink/slref/parameters2.html#7515
【问题讨论】:
我不明白你的问题,但我认为你正在寻找面具:it.mathworks.com/help/simulink/gui/mask-editor-overview.html 我的意思是我想在这里扩展参数edoras.sdsu.edu/doc/matlab/toolbox/simulink/slref/… 一个新的供我使用,你明白了吗? 我认为,它通过掩码工作,你知道我如何创建这个掩码以及所有这些步骤通过命令窗口或编辑器中的命令吗??? 【参考方案1】:以编程方式创建掩码
我不确定这是否正是您要搜索的内容,但我举了一个示例,说明如何通过 MATLAB/Simulink 中的脚本以编程方式创建掩码。我不会使用get_param
/set_param
,即使使用这些命令可以获得相同的结果。我们将使用更简单、更清晰的Simulink
对象(至少恕我直言)。
对于我们的 Playground,让我们创建这个简单的子系统 (block
),其中包含一个简单的常量,该常量在输出中提供一个名为 a
的变量的名称,我们想从掩码中获取该变量的名称:
查看这个块的地址。我的 simulink 模型是 mask.slx
,因此我可以使用地址 mask/block
(视口的左上角)来寻址这个子组,如您在此处看到的:
此时我们可以使用下面的代码为子组添加一个编辑参数框,固定a
的值:
clc
clear all
% The subgroup for which we want to programmatically create a mask
block_name = 'mask/block';
% Now we can create the mask parameter programmatically as you requested
% There are two way: the old one using get_param and set_param and a more
% clear one using the Simulink interface.
% I will go with thw second one, since it is really more straightforward
% with respect to the first one.
% The first think to do is to create the mask itself
% If the mask already exist, we would get an error, thus we can avoid it by
% checking if it already exist. This is something that you should check out.
mask_hdl = Simulink.Mask.create(block_name);
% mask_hdl = Simulink.Mask.get(block_name); % For use an existing mask
% Now we are ready to create the mask parameters:
edit_a_hdl = mask_hdl.addParameter( ...
'Type', 'edit', ...
'Prompt', 'Sets constant variable', ...
'Name', 'a');
edit_a_hdl.Value = '10';
运行脚本,代码将被屏蔽并设置变量,如您在此处看到的:
还有更多信息on this topic here。
以编程方式为屏蔽块设置参数
现在假设您像以前一样完成了操场,并且像上一张图像一样遮盖了子组。您可以通过get_param
和set_param
以编程方式(或获取)在掩码中设置其值,如下所示:
value = get_param(block_name, 'a');
value = str2double(value); % Values should always be string!
% Thus we must convert it
set_param(block_name, 'a', sprintf('%d', value * 100));
如您所见,该值现已更新:
同样,您可以使用Simulink
对象获得相同的结果。
mask_hdl = Simulink.Mask.get(block_name);
edit_a_hdl = mask_hdl.Parameters(1); % We know its position in the struct array
value = str2double(edit_a_hdl.Value);
value = value * pi;
edit_a_hdl.Value = sprintf('%f', value);
如您所见,我们有了新的价值:
【讨论】:
【参考方案2】:许多工具箱中的 Simulink 模块都是使用 MATLAB System 对象创建的。如果您想为现有 Simulink 模块创建一个新参数,您可能需要在随附的 System object 代码中创建一个公共属性。如果您正在创建自己的 Simulink 模块,那么在 MATLAB 系统对象中编写代码将非常友好地根据需要更改/创建参数。
Simulink 扩展系统对象的创建方式如下:
要从 System object 创建 Simulink 模块,请从现有 Simulink 模块创建“MATLAB system”模块并从 MATLAB 系统调用您的系统对象。
系统对象代码中的所有公共属性都在 Simulink 封装对话框中可见,如下图所示。
希望这是您正在寻找的。p>
【讨论】:
以上是关于如何在 simulink 中为模块创建自己的参数或属性?的主要内容,如果未能解决你的问题,请参考以下文章