在Simulink运行时加载MATLAB功能块的代码
问题描述:
我想在我的MATLAB路径中有一些文件,myfunc.m
,并在模拟开始之前自动将它的内容加载到MATLAB function block中。这样,我可以使用外部编辑器来编写这些嵌入式功能,版本控制它们分开作为独立的文件等。在Simulink运行时加载MATLAB功能块的代码
有没有一种方法来实现这个编程?
我最初的尝试是尝试使用类似get_param
的功能块的内容,但我似乎无法获得对代码本身的读/写访问权限。
答
如果目标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,然后修改块的代码
答
首先,您需要将包含m文件的文件夹添加到默认路径。要做到这一点:
(在命令窗口) 转到文件 - >设置路径 - >添加文件夹(选择包含M文件的文件夹)
现在,你应该在使用InitFcn回调模型属性来调用你的函数。要做到这一点,打开模型:
(在模型窗口) 转到文件 - >模型属性 - >回调 - > InitFcn 在规定的InitFcn编辑框中,输入命令来调用你的函数,即MYFUNC(); 您必须根据您的功能和要求修改此命令。
完成后,将更改应用到“模型属性”窗口并模拟模型。
您真的需要修改功能块还是可以使用功能块,除了调用'myfunc'? – mars 2012-04-26 14:46:41
在模拟开始之前和模拟开始之前如何调用它有什么不同? – Rasman 2012-04-26 14:55:20
@mars:我宁愿直接修改它,因为我_think_用'eml.extrinsic'调用'myfunc',或者只是使用调用MATLAB工作空间中的函数的块来降低总体性能。 – safwanc 2012-04-26 16:38:57