2012-04-26 78 views
3

我想在我的MATLAB路徑中有一些文件,myfunc.m,並在模擬開始之前自動將它的內容加載到MATLAB function block中。這樣,我可以使用外部編輯器來編寫這些嵌入式功能,版本控制它們分開作爲獨立的文件等。在Simulink運行時加載MATLAB功能塊的代碼

有沒有一種方法來實現這個編程?

我最初的嘗試是嘗試使用類似get_param的功能塊的內容,但我似乎無法獲得對代碼本身的讀/寫訪問權限。

+0

您真的需要修改功能塊還是可以使用功能塊,除了調用'myfunc'? – mars 2012-04-26 14:46:41

+0

在模擬開始之前和模擬開始之前如何調用它有什麼不同? – Rasman 2012-04-26 14:55:20

+0

@mars:我寧願直接修改它,因爲我_think_用'eml.extrinsic'調用'myfunc',或者只是使用調用MATLAB工作空間中的函數的塊來降低總體性能。 – safwanc 2012-04-26 16:38:57

回答

0

我在想,model callbacks可能是一種做你想做的事的方法,雖然我自己並沒有使用這種技術。

2

如果目標MATLAB Function塊已經不存在,那麼你可以添加如下(參見this SO post):

sf = sfroot(); 
block = sf.find('Path','myModel/myBlockName','-isa','Stateflow.EMChart'); 
block.Script = 'Your code goes here'; 

load_system('eml_lib'); 
libname = sprintf('eml_lib/MATLAB Function'); 
add_block(libname,'myModel/myBlockName'); 

您可以用Stateflow的API,然後修改塊的代碼

另請參閱this post on MATLAB Answers

1

首先,您需要將包含m文件的文件夾添加到默認路徑。要做到這一點:

(在命令窗口) 轉到文件 - >設置路徑 - >添加文件夾(選擇包含M文件的文件夾)

現在,你應該在使用InitFcn回調模型屬性來調用你的函數。要做到這一點,打開模型:

(在模型窗口) 轉到文件 - >模型屬性 - >回調 - > InitFcn 在規定的InitFcn編輯框中,輸入命令來調用你的函數,即MYFUNC(); 您必須根據您的功能和要求修改此命令。

完成後,將更改應用到「模型屬性」窗口並模擬模型。