在Simulink运行时加载MATLAB功能块的代码

问题描述:

我想在我的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

我在想,model callbacks可能是一种做你想做的事的方法,虽然我自己并没有使用这种技术。

如果目标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

首先,您需要将包含m文件的文件夹添加到默认路径。要做到这一点:

(在命令窗口) 转到文件 - >设置路径 - >添加文件夹(选择包含M文件的文件夹)

现在,你应该在使用InitFcn回调模型属性来调用你的函数。要做到这一点,打开模型:

(在模型窗口) 转到文件 - >模型属性 - >回调 - > InitFcn 在规定的InitFcn编辑框中,输入命令来调用你的函数,即MYFUNC(); 您必须根据您的功能和要求修改此命令。

完成后,将更改应用到“模型属性”窗口并模拟模型。