使用exists来检查Simulink-Block是否具有参数'SampleTime'

时间:2016-03-15 09:41:35

标签: matlab parameter-passing simulink

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

2 个答案:

答案 0 :(得分:4)

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

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

如果您需要多个块或经常更改采样时间,请更好地使用工作空间变量或掩码参数。将所有块设置为具有采样时间x并将x=0.01放入基础工作空间以为所有块设置它。

答案 1 :(得分:1)

在@ 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));