MATLAB中set_param的用法

目录

语法

说明

示例

设置模型的配置参数

设置当前模型的配置参数

设置 Gain 模块参数值

设置模块的位置

使用句柄设置模块的位置

将模块名称放在模块的顶部

限制

提示


        set_param的功能是设置 Simulink 参数值。

语法

set_param(object,parameter1,value1,...,parameterN,valueN)

说明

        set_param(object,parameter1,value1,...,parameterN,valueN) 将指定的 Simulink® 参数 parameter 设置为由 object 指定的目标对象的指定值 value。目标对象可以是模型、子系统、库、模块、信号线、端口或总线元素端口元素。

        要为目标对象设置多个参数值,请使用多个名称-值参量调用 set_param 函数一次,而不是为每个参数单独调用该函数。用一次函数调用设置多个参数的方法很高效,因为一次调用只计算一次参数。如果任何参数名称或值无效,则函数不会设置任何参数。

示例

设置模型的配置参数

        打开 vdp 模型,并设置求解器和 StopTime 参数值。

set_param('vdp','Solver','ode15s','StopTime','3000')

设置当前模型的配置参数

        打开一个模型并设置求解器和 StopTime 参数。使用 bdroot 函数获取当前顶层模型。

set_param(bdroot,'Solver','ode15s','StopTime','3000')

设置 Gain 模块参数值

        打开 vdp 并设置名为 Mu 的 Gain 模块的增益参数值。 

set_param('vdp/Mu','Gain','10')

设置模块的位置

        打开 vdp 并设置名为 Mu 的 Gain 的模块的位置。

set_param('vdp/Mu','Position',[50 100 110 120])

使用句柄设置模块的位置

        使用模块句柄设置名为 Mu 的 Gain 模块在 vdp 模型中的位置。

        要获取名为 Mu 的 Gain 模块的句柄,请使用 getSimulinkBlockHandle 函数。要加载 vdp 模型,请指定 true。

mublockhandle = getSimulinkBlockHandle('vdp/Mu',true);

        如果对同一模块多次调用 set_param,请使用模块句柄,这比完整模块路径更高效。

        可以在对 get_param 或 set_param 的后续调用中使用该模块句柄。句柄包含双精度值。不要尝试手动输入句柄的数字(例如 5.007),因为通常需要指定的位数会多于 MATLAB® 显示的位数。而要将该句柄赋给变量,并使用该变量名称指定模块。

        将模块句柄与 set_param 一起使用来设置位置。

set_param(mublockhandle,'Position',[50 100 110 120])

将模块名称放在模块的顶部

        打开 vdp,对于名为 Mu 的 Gain 模块,在模块的顶部设置模块名称。

set_param('vdp/Mu','NameLocation','top')

参数说明

object — 对象的名称、路径或句柄

对象的名称、路径或句柄,指定为字符向量、字符串标量或数值标量。

如何指定目标对象取决于其类型。

  • 模型 - 模型名称或句柄。

  • 子系统 - 系统名称或句柄。

  • 库 - 库名称或句柄。

  • 模块 - 模块路径或句柄。

  • 信号线 - 信号线句柄。

  • 端口 - 端口句柄。

  • 总线元素端口元素 - 具有元素标签的模型组件的模块路径。元素可以是端口的任何元素,例如顶层总线、嵌套总线、信号或消息。

示例:'vdp/Mu'

示例: 'mymodel/Subsystem1/Out1.nonsinusoidal.saw'

提示

  • ​如果对同一模块多次调用 set_param,请用数值句柄指定该模块。这种方法比对 set_param 使用完整模块路径更高效。使用 getSimulinkBlockHandle 获取模块句柄。

  • 不要尝试手动指定句柄的数字,例如 5.007,因为通常需要指定的位数多于 MATLAB 显示的位数。要将句柄赋给变量并使用该变量名称。

parameter — 参数、属性或特性名称

参数、属性或特性名称,指定为字符向量或字符串标量。有些名称区分大小写。

有关参数、属性或特性的信息,请参阅对应参考页上的编程使用信息。例如:

  • 模型

  • 模块 

  • 端口

  • 总线元素端口元素 

​        要获取目标对象的所有参数,请使用带 'ObjectParameters' 选项的 get_param 函数。某些返回的参数可能仅供内部使用。

示例: 'Solver'

示例:'SimulationCommand'

示例:'Position'

示例:'NameLocation'

value — 参数值

        参数值,指定为参数类型决定的格式。一些参数值区分大小写。值通常是字符向量或字符串标量,但也可以是数值标量、数组和其他类型。

        许多模块参数值指定为字符向量或字符串标量。但 Position(它指定为向量)和 UserData(它可以是任何数据类型)是两个例外。

限制

        ​如果使用 matlab -nodisplay 启动会话,则不能使用 set_param 运行仿真。-nodisplay 模式不支持使用 set_param 进行仿真。改用 sim 函数。

提示

        在 MATLAB 工作区中设置参数后,要查看模型中的变化,请更新图形。

set_param(model,'SimulationCommand','Update')

classdef Initilization methods(Static) % Following properties of 'maskInitContext' are avalaible to use: % - BlockHandle % - MaskObject % - MaskWorkspace: Use get/set APIs to work with mask workspace. function MaskInitialization(maskInitContext) % 从 Mask 参数获取状态空间矩阵 A = eval(get_param(gcb, 'A_matrix')); B = eval(get_param(gcb, 'B_matrix')); C = eval(get_param(gcb, 'C_matrix')); D = eval(get_param(gcb, 'D_matrix')); % 验证矩阵 if isempty(A) || isempty(B) || isempty(C) || isempty(D) error('状态空间矩阵 A, B, C, D 为空,请检查 InitFcn 是否正确执行'); end % 调试:打印子系统路径 disp(['当前子系统路径: ', gcb]); % 确保模型已加载 model_name = bdroot(gcb); if ~bdIsLoaded(model_name) load_system(model_name); disp(['模型 ', model_name, ' 已加载']); end % 查找子系统内的所有块 block_list = find_system(gcb, 'SearchDepth', 1, 'LookUnderMasks', 'all', 'FollowLinks', 'on'); disp('子系统内的所有块:'); disp(block_list); % 查找 MATLAB Function 块 matlab_function_blocks = find_system(gcb, 'SearchDepth', 1, 'LookUnderMasks', 'all', 'FollowLinks', 'on', 'BlockType', 'MATLABFunction'); if isempty(matlab_function_blocks) % 如果 find_system 失败,尝试直接指定路径 expected_path = [gcb '/Fractional_order_operator']; if bdIsLoaded(model_name) && exist_block(expected_path) if strcmp(get_param(expected_path, 'BlockType'), 'MATLABFunction') matlab_function_blocks = {expected_path}; disp(['通过直接路径找到 MATLAB Function 块: ', expected_path]); else error('预期路径 %s 对应的块不是 MATLAB Function 块,实际类型为 %s', expected_path, get_param(expected_path, 'BlockType')); end else error('在子系统 %s 中未找到 MATLAB Function 块,预期路径 %s 无效,请检查子系统结构', gcb, expected_path); end end % 获取 MATLAB Function 块的路径 matlab_function_block = matlab_function_blocks{1}; disp(['找到 MATLAB Function 块: ', matlab_function_block]); % 验证块类型 if ~strcmp(get_param(matlab_function_block, 'BlockType'), 'MATLABFunction') error('路径 %s 对应的块不是 MATLAB Function 块,实际类型为 %s', matlab_function_block, get_param(matlab_function_block, 'BlockType')); end % 将状态空间矩阵传递给 MATLAB Function 块 set_param(matlab_function_block, 'A', mat2str(A)); set_param(matlab_function_block, 'B', mat2str(B)); set_param(matlab_function_block, 'C', mat2str(C)); set_param(matlab_function_block, 'D', mat2str(D)); % 调试信息 disp('Initialization 完成,状态空间矩阵已传递给 MATLAB Function 块:'); disp('A:'); disp(A); disp('B:'); disp(B); disp('C:'); disp(C); disp('D:'); disp(D); % 辅助函数:检查块是否存在 function exists = exist_block(block_path) try get_param(block_path, 'Name'); exists = true; catch exists = false; end end end % Use the code browser on the left to add the callbacks. end end
最新发布
04-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值