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

时间:2012-04-26 14:31:03

标签: matlab simulink

我想在我的MATLAB路径中有一些文件myfunc.m,并在模拟开始之前以某种方式自动将其内容加载到MATLAB function block。这样,我可以使用外部编辑器编写这些嵌入式函数,版本控制它们作为独立文件等。

有没有办法以编程方式实现此目的?

我最初的尝试是尝试使用get_param之类的东西来访问功能块的内容,但我似乎无法获得对代码本身的读/写访问权限。

3 个答案:

答案 0 :(得分:2)

如果目标MATLAB Function块尚不存在,那么您可以按如下方式添加它(参见this SO post):

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

然后,您可以使用Stateflow API修改块的代码:

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

另见this post on MATLAB Answers

答案 1 :(得分:1)

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

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

现在,您应该在模型属性中使用InitFcn回调来调用您的函数。为此,请打开模型:

(在“模型”窗口中) 转到文件 - >模型属性 - >回调 - > InitFcn 在为InitFcn提供的编辑框中,编写命令来调用你的函数,即myfunc(); 您必须根据您的功能和要求修改此命令。

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

答案 2 :(得分:0)

我认为model callbacks可能是你想做的事情的一种方式,虽然我自己没有使用过这种技术。