2017-02-16 99 views
2

我想通过编程方式创建一个简单的包含"MATLAB Function"块的Simulink模型 - 即使用Matlab代码。以编程方式在Simulink中编辑“MATLAB函数”块的代码

感谢this guide,我已经成功地创建一个包含块的新模式:

open_system(new_system('my_system')) 
add_block('simulink/User-Defined Functions/MATLAB Function', 'my_system/my_func') 

通常,为了编辑“MATLAB功能”模块的代码,一个具有“开放”块通过双击它然后输入新的代码。

但是,我想使用编程方式设置该代码。 set_param()或任何相关功能。

例如,设置以下的块代码:

function y = fcn(v) 
%#codegen 

y = 2 * u; 

我想用这样的:

set_param('my_system/my_func', 'Script',... 
    'function y = fcn(u)\n%#codegen\n\ny = 2 * u;'... 
); 

我看的get_param('my_system/my_func', 'ObjectParameters')输出,并试图猜测可能使用哪个参数来设置块的功能代码:到目前为止,我找不到任何参数。因此,我的问题是:

问:是否可以使用Matlab命令在Simulink中设置“MATLAB函数”块的代码?

+1

这是一个有趣的问题。不要编辑问题,而要用任何帮助你的方式发布答案。 –

+0

@Ander Biguri:完成;) – 865719

回答

1

(根据要求由@Ander Biguri,我搬到一个的解决方案,为我工作到separete答案后,如果任何人有一个替代/更好的方法,请随意张贴它)

那么,这个问题似乎以前被问到here(也许制定不同的关系吗?)我已经成功使用下面的代码来解决我的问题:

sf = sfroot() 
block = sf.find('Path','my_system/my_func','-isa','Stateflow.EMChart'); 
block.Script = sprintf('function y = fcn(u)\n%%#codegen\n\ny = 2 * u;') 
+0

要注意的主要问题是'MATLAB Function'块是伪装的Stateflow块(或至少是其中一部分)。因此需要使用'Stateflow' API功能来操作块。 –