主要内容

本页采用了机器翻译。点击此处可查看英文原文。

setparam

在实时应用中更改可调参数的值

说明

setparam(target_object, block_path, parameter_name, parameter_value,'Force',true) 将可调模块参数的值设置为新值。通过模块名称和参数名称指定模块参数。

示例

setparam(target_object, '', parameter_name, parameter_value,'Force',true) 将可调全局参数的值设置为新值。通过变量名 MATLAB® 指定全局参数。

示例

示例

全部折叠

'Signal Generator' 模块的模块参数 'Amplitude' 的值设置为 5

tg = slrealtime;
mdlSTF = getSTFName(tg);
mdlName = 'slrt_ex_osc';
openExample(mdlName);
set_param(mdlName,"SystemTargetFile",mdlSTF);
xfername = [mdlName,'/Signal Generator'];
slbuild(mdlName);
load(tg,mdlName);
setparam(tg,xfername,'Amplitude',5)

'Signal Generator' 模块的模块参数 'Amplitude' 的值以 2 为步长进行扫描。

tg = slrealtime;
mdlSTF = getSTFName(tg);
mdlName = 'slrt_ex_osc';
openExample(mdlName);
set_param(mdlName,"SystemTargetFile",mdlSTF);
xfername = [mdlName,'/Signal Generator'];
slbuild(mdlName);
load(tg,mdlName);
for i = 1 : 3
    setparam(tg,xfername,'Amplitude',(i*2))
end

将 MATLAB 变量 'Freq' 的值设置为 30

tg = slrealtime;
mdlSTF = getSTFName(tg);
mdlName = 'slrt_ex_osc';
openExample(mdlName);
set_param(mdlName,"SystemTargetFile",mdlSTF);
Freq = Simulink.Parameter;
Freq.StorageClass = 'ExportedGlobal';
Freq.Value = 10;
xfername = [mdlName,'/Signal Generator'];
set_param(xfername,'Frequency','Freq');
slbuild(mdlName);
load(tg,mdlName);
setparam(tg,'','Freq',30)

将 MATLAB 变量 'oscp.G2' 的值设置为 10000000

tg = slrealtime;
mdlSTF = getSTFName(tg);
mdlName = 'slrt_ex_osc_struct';
openExample(mdlName);
set_param(mdlName,"SystemTargetFile",mdlSTF);
load('slrt_ex_osc_struct.mat');
slbuild(mdlName);
load(tg,mdlName);
setparam(tg,'','spkp.g2_gain',10000000)

getparamsetparam 函数支持点表示法语法,用于在实时应用程序中访问参数值。这些是更高级语法的示例。

% If a parameter is a struct, a single element of any 
% array can be specified at any arbitrary depth in the struct.
tg.setparam('', 'p.a.b(2).c', val) 
val = tg.getparam('', 'p.a.b(2).c') 

% If a parameter is an array of structs, one element of 
% the struct array can be specified as follows:
tg.setparam('', 'p(2,2).x.y.z', val) 
val = tg.getparam('', 'p(2,2).x.y.z') 

% If a parameter is N dimensions, a single element of 
% the parameter can be accessed by specifying each dimension.
tg.setparam('top/constant', 'Value(3,4)', val) 
val = tg.getparam('top/constant', 'Value(3,4)') 

% If a parameter is Mx1 or 1xN (row or column vector), 
% the following syntax specifying a single index 
% is allowed: 
tg.setparam('top/constant1', 'Value(4)', val)

Simulink® Real-Time™ 允许您在单实例引用模型中调整块参数。此示例演示了如何对引用模型进行参数化。

  1. 打开示例 SlrtConcurrentExecutionExample。在 MATLAB 命令行窗口中,输入:

    openExample('slrealtime/SlrtConcurrentExecutionExample');
  2. 打开子模型 slrt_ex_mds_subsystem2

    open_system('slrt_ex_mds_subsystem2')
  3. 打开模型资源管理器,并选择 slrt_ex_mds_subsystem2 模型的模型工作区。

  4. 选择 Add > MATLAB Variable,然后将变量名从 Var 改为 VarGain1。将变量值设置为 0.05,并将 Argument 复选框设置为 On

  5. 应用变量更改,然后关闭模型资源管理器。

  6. slrt_ex_mds_subsystem2 模型中,打开 Gain1 模块的模块参数对话框。将 Gain 值替换为 VarGain1 变量名。应用更改。保存并关闭模型。

  7. 打开顶部模型 slrt_ex_mds_and_tasks,构建并加载实时应用程序。在构建之前,若尚未进行过相关设置,请使用 Speedgoat 目标平台选择器工具为目标计算机配置模型。

  8. 通过使用 setparam 来访问 VarGain1 变量。

    setparam(tg,{'slrt_ex_mds_and_tasks/Model2'}, 'VarGain1',0.03)
  9. 使用 getparam 查看 VarGain1 的新值。

    getparam(tg,{'slrt_ex_mds_and_tasks/Model2'}, 'VarGain1')
    
    ans =
    
        0.0300
  10. 您也可以将此方法用于 Simulink 实例参数。该流程的唯一变更在于添加 Simulink Parameter 而不是添加 MATLAB variable。通过使用元胞数组语法,您可以在任何层级的引用模型中访问工作区参数、模型参数和模型实例参数。例如,要在深度分层的引用模型中访问 Simulink 实例的参数 Kinst

    mModelRefParams_top/T (mModelRefParams_T)/M1 (mModelRefParams_M)/S1 (mModelRefParams_S)

    您可以使用以下语法:

    setparam(tg,{'mModelRefParams_top/T', 'mModelRefParams_T/M1', 'mModelRefParams_M/S1'}, 'Kinst', 0.5)

输入参数

全部折叠

提供访问方法以操作目标计算机属性。

示例: tg

block_path 的取值可以是:

  • 空字符向量 ('') 或空字符串标量 ("") 用于基准或模型工作区变量

  • 字符向量或字符串标量,用于表示顶层模型中参数的块路径

  • 用于模型块参数和模型实例参数的字符向量或字符串标量元胞数组

示例: '', 'Gain1', {'top/model','sub/model'}

该参数可指定为模块参数,或指定为提供模块参数值的全局参数。模块参数或 MATLAB 变量必须可观察,才能通过参数名称访问。

注意

Simulink Real-Time 不支持多词数据类型的参数。

示例: 'Gain', 'oscp.G1', 'oscp', 'G2'

根据参数要求,具有新数据类型的值。

示例: 1

可选的 'Force', true 名值对参数强制执行参数值设置操作,即使该值超出参数的 [min max] 范围。

示例: 'Force', true

数据类型: logical

版本历史记录

在 R2020b 中推出

全部展开