如何在Simulink中为块创建自己的参数或属性?

时间:2018-07-13 08:26:08

标签: matlab simulink matlab-compiler

在这种情况下,我尝试创建一个新的块参数作为新属性,以保存特定的新数据,我不想将其保存在已经保留给其他不同相关数据的默认参数中

对于此参数,我想使用命令 get_param set_para ,它们必须每天都存在

我的意思是带有默认参数的那些。 https://edoras.sdsu.edu/doc/matlab/toolbox/simulink/slref/parameters2.html#7515

2 个答案:

答案 0 :(得分:2)

以编程方式创建蒙版

我不确定这正是您要搜索的内容,但是我举了一个示例,说明了如何通过MATLAB / Simulink中的脚本以编程方式创建蒙版。即使可以使用这些命令获得相同的结果,我也不会使用get_param / set_param。我们将使用更简单,更清晰的Simulink对象(至少是IMHO)。

对于我们的游乐场,让我们用一个简单的常量创建这个简单的子系统(block),该常量在输出中给出一个我们想从掩码中获取的名为a的变量的名称:

enter image description here

查看此块的地址。我的simulink模型是mask.slx,因此我可以使用地址mask/block(视口的左上角)寻址该子组,如您在此处看到的:

enter image description here

这时,我们可以使用以下代码为子组添加一个编辑参数框,该框固定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';

运行脚本,将屏蔽代码并设置变量,如下所示:

enter image description here

还有更多信息on this topic here

以编程方式为被屏蔽的块设置参数

现在,可以说您像以前一样拥有游乐场,并且已像上一张图​​像一样遮盖了该子组。您可以通过get_paramset_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));

并且您可以看到该值现已更新:

enter image description here

同样,您可以使用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);

,正如您所看到的,我们拥有新的价值:

enter image description here

答案 1 :(得分:1)

许多工具箱中的 Simulink块都是使用MATLAB System对象创建的。如果要为现有Simulink块创建新参数,则可能需要在附带的System对象代码中创建公共属性。如果您要创建自己的Simulink块,那么在MATLAB系统对象中编写代码将非常易于更改/创建参数。

Simulink扩展系统对象可以如下创建:

Image to show how to create Simulink extension system object

要从System对象创建Simulink块,请从现有Simulink块创建“ MATLAB系统”块,然后从MATLAB系统中调用系统对象。

Image to show how to use the MATLAB system object in Simulink

系统目标代码中的所有公共属性在Simulink遮罩对话框中可见,如下图所示。

Image to show how a public property in system object is reflected as a block dialog parameter in Simulink. 希望这就是您想要的。