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