我想myfunc.m
在我的 MATLAB 路径中有一些文件,并在模拟开始之前以某种方式将其内容自动加载到MATLAB 功能块中。这样,我可以使用外部编辑器编写这些嵌入式函数,将它们分别作为独立文件进行版本控制等。
有没有办法以编程方式实现这一目标?
我最初的尝试是尝试使用类似的东西访问功能块的内容get_param
,但我似乎无法获得对代码本身的读/写访问权限。
我想myfunc.m
在我的 MATLAB 路径中有一些文件,并在模拟开始之前以某种方式将其内容自动加载到MATLAB 功能块中。这样,我可以使用外部编辑器编写这些嵌入式函数,将它们分别作为独立文件进行版本控制等。
有没有办法以编程方式实现这一目标?
我最初的尝试是尝试使用类似的东西访问功能块的内容get_param
,但我似乎无法获得对代码本身的读/写访问权限。
如果目标MATLAB Function
块尚不存在,则可以按如下方式添加它(请参阅此 SO 帖子):
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';
首先,您需要将包含 m 文件的文件夹添加到默认路径。去做这个:
(在命令窗口中)转到文件 -> 设置路径 -> 添加文件夹(选择包含 m 文件的文件夹)
现在,您应该使用模型属性中的 InitFcn 回调来调用您的函数。为此,请打开模型:
(在模型窗口中)转到文件 -> 模型属性 -> 回调 -> InitFcn 在为 InitFcn 提供的编辑框中,编写调用函数的命令,即 myfunc(); 您必须根据您的功能和要求修改此命令。
完成后,将更改应用到“模型属性”窗口并模拟模型。
我认为模型回调可能是一种做你想做的事的方法,尽管我自己没有使用过这种技术。