使用 exist 检查 Simulink-Block 是否有参数 'SampleTime'

Use exist to check if Simulink-Block has parameter 'SampleTime'

我想编写一个函数,自动将模型中所有块的参数 SampleTime 更改为特定值。我可以使用 find_system 找到所有块,然后我可以遍历所有块并使用 set_param('Blockpath','SampleTime','0.001')。但是如果我这样做并且该块没有名为 SampleTime 的参数,它会使我的程序崩溃。
所以我的问题是如何在设置参数之前找出参数是否存在?我尝试了类似 exist(['blockpath','/SampleTime']) 的方法,但它没有达到我的预期。有什么想法吗?

您可以使用 get_param('blockpath','ObjectParameters') 获取包含所有参数的结构,然后使用 isfield 检查是否可以找到 SampleTime.

我认为你的做法不是一个好主意。在典型的 simulink 模型中,您只能在极少数地方设置采样时间,运行 所有其他模型都具有继承的采样时间。大多数情况下,改这几个地方是没有问题的。

如果你有很多块或者你经常改变采样时间,最好使用工作space变量或掩码参数。将所有块设置为具有采样时间 x 并将 x=0.01 放入您的基础工作中 space 以将其设置为所有块。

在@Daniel 的回答的基础上,如果你真的必须这样做,出于对@Daniel 的回答的评论中给出的原因,这是一个坏主意,那么最简单的方法是

% Define the new value as a string
>> newSampleTime = '10';
% Find all blocks in the model
>> allBlocks = find_system(gcs);
% Identify the blocks that have a SampleTime property
>> blockIdx = cellfun(@(c)isfield(get_param(c,'ObjectParameters'),'SampleTime'),allBlocks);
% Change the sample time
>> cellfun(@(c)set_param(c,'SampleTime',newSampleTime),allBlocks(blockIdx));