可调模块参数与可调全局参数
要改变实时应用程序的行为,您可以调整 Simulink® Real-Time™ 可调参数。在 Simulink 外部模式下,您可直接在模块中修改参数,或通过 MATLAB® 变量间接创建可调的全局参数。Simulink Real-Time 资源管理器和 MATLAB 语言使您能够在实时应用程序执行过程中修改参数值和 MATLAB 变量。
注意
Simulink Real-Time 不支持多词数据类型的参数。
可调参数
Simulink Coder™ 定义了两种可在执行期间修改的参数:可调模块参数和可调全局参数。Simulink Real-Time 对可调参数的支持包括:
存在于顶层模型工作区或 MATLAB 基础工作区中的块参数变量。这些变量是可调的全局参数。
在顶层模型工作区或数据字典中存在的块参数的字面表达式。这些表达式是可调的模块参数。
在引用模型中存在的实例特定块参数。这些参数是可调的全局参数。
可调模块参数
可调块参数是指在顶层模型工作区或数据字典中定义的字面表达式,您可在 Simulink 块对话框中引用该表达式。
假设您将值 5/2 赋给 Signal Generator 模块的 Amplitude 参数。Amplitude 是一个可调参数。
可调全局参数
可调全局参数是指在顶层模型工作区或 MATLAB 基准工作区中定义的变量,您可在 Simulink 模块对话框中引用该变量。假设您在 Signal Generator 模块的 Amplitude 参数中输入了 A。变量 A 是一个可调参数。您可以调整参数结构中分组的 MATLAB 变量的值。例如:
将包含字段
Ampl的参数结构赋值给变量A。在 Signal Generator 模块的 Amplitude 参数中输入
A.Ampl。在仿真过程中,通过调整 MATLAB 工作区中
A.Ampl的数值来改变信号发生器的振幅。
可调的全球参数来自参考模型
在参考模型中,调参存在某些限制。有关使用实例特定块参数以及使用模型参数配置这些参数的更多信息,请参阅:
内联参数
为优化执行效率,您可在Code Generation > Optimization面板上将 Default parameter behavior 选项从 Tunable 更改为 Inlined。
您无法调整内联模块参数。您可以定义一个可调的全局参数或 Simulink.Parameter 对象,将其输入到模块对话框的参数字段中,然后调整 MATLAB 变量或对象。
有关内联参数的更多信息,请参阅 默认参数行为。
通过外部模式调整全局参数
在外部模式下,Simulink Real-Time 将您的 Simulink 模型连接至实时应用程序。该模块图成为实时应用程序的用户界面。
您可以在模块对话框中于执行期间更改模块参数值。当您点击 OK 时,Simulink 将新值传输至实时应用程序。有关详细信息,请参阅Tune Parameters by Using Simulink® External Mode。
您可以在执行期间通过将新值赋给 MATLAB 工作区来更改可调的全局参数。您必须明确命令 Simulink 传输数据。执行以下操作之一:
按下 Ctrl+D。
在 Real-Time 选项卡上,点击Prepare > Signal Table。在 Parameters 选项卡中,编辑参数并点击 Update Diagram。
使用 Simulink Real-Time 资源管理器调整全局参数
在实时执行过程中,Simulink Real-Time Explorer 成为实时应用程序的用户界面。
要访问块参数值,请在资源管理器模型层次结构中导航至该块。您可以在参数窗口的文本输入框中更改该值。当您应用新值时,Simulink Real-Time 将新值传输至实时应用程序。有关详细信息,请参阅Tune Parameters by Using Simulink® Real-Time™ Explorer。
您可以在模型层次结构的顶层访问可调的全局参数。修改方式与可调模块参数相同。
您可以使用 Simulink Real-Time Explorer 仪表板来调整模块参数和全局参数。
使用 MATLAB 语言调整全局参数
要在运行期间更改可调模块参数和可调全局参数的值,请使用 Simulink Real-Time 命令 setparam。有关详细信息,请参阅Tune Parameters by Using MATLAB Language。
这些代码示例使用模型 slrt_ex_osc。要更改模块参数值,请使用非空模块路径和参数名称。例如,要更改信号发生器的振幅:
openExample('slrt_ex_osc'); slbuild('slrt_ex_osc'); tg = slrealtime('TargetPC1'); load(tg,'slrt_ex_osc') start(tg); setparam(tg, 'Signal Generator', 'Amplitude', 4.57)
要修改可调的全局参数,请使用变量名称。例如,要通过参数结构字段 A.Ampl 改变信号发生器的振幅:
openExample('slrt_ex_osc'); slbuild('slrt_ex_osc'); tg = slrealtime('TargetPC1'); load(tg,'slrt_ex_osc') start(tg); setparam(tg, '', 'A.Ampl', 4.57)