在我的matlab脚本中,我正在解析具有特定标记结构的文本文件,并为每个发现的特殊标记创建Simulink Block。一个简单的例子我有这个:
[Link]
Link_Name : On/Off
Link_ID : _sZfSkku9Eemg_bhrv2HEbw
[Link]
Link_Name : On/Off
Link_ID : _qsYbsVeeEemna8dVWPKMTw
您可以看到这不是相同的对象,但它们具有相同的名称,所以在matlab中我为每个链接创建一个simulink块我发现我有一个错误"can't create a new On/Off Block"
之类的东西。
所以我将ID放在块的描述中,如果它是相同的,我只是更新名称,如果用户更改了文本文件中的名称:set_param(gcb,'Name', link_NameValue);
如果它不同我创建一个新的块:
add_block('simulink/Ports & Subsystems/In1',[component_NameValue '/' link_NameValue], 'MakeNameUnique', 'on');
问题是'MakeNameUnique', 'on'
它会创建一个无限的块如果我多次运行我的脚本和set_param
我有一个错误The name 'On_Off' already exists
所以我想做一个像这样的while循环:
while error "can't create a new block"
add a "x" at the end of the name of the new block
end
or
while error "The name 'On_Off' already exists"
add a "x" at the end of the name of the existing block
end
所以,即使我有4个[Link]名称为On / Off,它也会创建On / Off,On / Offx,On / Offxx,On / Offxxx或最后带数字。
谢谢你的帮助!我试着尽可能地解释。
你应该用try, catch
方法做一些测试。因为你没有给我们MCVE所以我只能给你未经测试的代码:
i=0
While i==0
i=1 %An assumption that code will pass
try
sim('ModelName', ParamStruct);
catch SimErr
i=0
%change some parameters in your model below
%add a "x" at the end of the name of the new block or whatever you need
end
end
低音 - 如果没有错误,i
将保持更改为1并制动循环。如果错误发生 - 它也会将i
更改回0,以保持循环继续。在catch语句中,您可以将一些更改传递给模型,只要它不通过,就可以迭代地尝试新参数。