2017-02-16 75 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功能來操作塊。 –