matlab 获取当前路径_Simulink模型路径的自动加载与复原

2023-05-16

c08a4933bc71b44360ba321b3dde9cbc.png

这个话题估计很少有朋友会想到,我也是在一天深夜着急验证模型时候,被气到了。相信不少朋友都遇到过下面这种情形,按照一般打开文件的操作习惯,跳出来的模型全是问号???

b52c434fefa97ddd3d115441618513c6.png

首先需要说明的是,使用如init.m等文件来管理simulink的启动或者直接使用project来打包模型是常规操作。但是,平时只是自己偶尔做个仿真验证,也无暇专门做启动路径管理,上述方法显然过于正式繁琐了。于是便摸索出了这篇文章中的操作。

0c288e2af42bf96a067b7e7ec47d1ff3.png

举一个我自己的日常操作。打开MATLAB后,编辑器里自动加载了之前写的脚本,然后运行查bug前,很自然地右键标题、更改当前文件夹路径,非常人性化。

409e1eb5e16fb28da92df4447031495d.png

算完了一遍,想和simulink里一个仿真结果对比下,于是敲下simulink启动,马上跳出来最近使用过的模型列表,非常人性化。

8f3b6883b2ae5eeb4e1ac1c3a742f60b.png

直接点击打开想要的模型,顺利进入,点击仿真,马上报错... 这是因为在这个例子中,使用了信号编辑器模块,它只会搜索当前所在路径下是否有所需的“data.mat”文件,完全不管当前simulink模型路径...

ae99a1a5d154a94a02d362b3ff44a62e.png

找了一圈,也没有找到能够自动更改当前路径的选项,这就显得非常不人性化了...当然,如果从资源管理器里找到模型所在位置,再双击打开,MATLAB是会自动切换当前工作路径的,可这太麻烦了;哪怕借助一些效率工具,比如这里我用到的utools,虽然是秒出可还是得手动敲一下名字,非常不人性化!

82b36e7edf277db61a553d318ddc0ea9.png

9da7b6c4d15dd4cc64ffdd90bc559fb7.png

整理一下思路,非常简单:获取模型文件名——获取模型路径——切换当前路径;以上信息代码非常简单:

model_name = bdroot;file_path_all = which(model_name);file_path = strrep(file_path_all,[name,'.slx'],'');cd(file_path)

上述啰里啰嗦还用到字符替换的原因是一开始我只会“which”这个命令,后来在朋友提示下,换了更简洁的函数,于是可以:

cd(fileparts(which(bdroot))) 

这里有2个函数需要对比一下:

which

获取全部文件信息字符串,包含文件名,即路径+文件名+后缀;

fileparts

获取文件组成部分,与which联用 [filepath,name,ext] = fileparts(filename)

另外一组函数是gcs和bdroot:

gcs

返回当前系统选定的模型名;

bdroot

返回当前系统的顶层模型;

举个例子,一般模型中都会调用simulink自带封装好的模块,如果使用了gcs,那么再去查询路径,则会导向MATLAB-toolbox文件路径。

1fe88c11b62aaa1d5bc9841313c2f501.png

可是这还是很蠢很麻烦,我只是开个模型,居然还要整这么多完全不常用的代码,于是自然想到了我的课题关键词——自适应!

先说效果:任意位置打开simulink模型,自动将工作路径切换到模型所在路径;关闭模型时,自动切换回原.m文件所在路径。代码和刚才类似,只需要每次建模时记得做一行callbacks命令:

aaa83743fc83dd9ef635bbec678bb936.png

27b84f444512dc30d8b705f490574cd9.png

4bb55e3a01026bae4b590e4ebf9fb70d.png

代码非常简单,不多赘述了。比较麻烦的是为什么要分3个地方安排这些代码!关于Preload、Postload、InitFcn、StartFcn真的非常难以区分,因为callbacks功能做交互设计、GUI等非常重要,这里留个坑,以后详细说说。

22160c7d949bc336e7331731a657edfb.png

今天参加了一整天Cruise M的培训,讲的内容涉及很多专业知识盲区,听得晕晕乎乎的,于是想着把这篇文章补一下。问了很多朋友也查了很多一些资料,似乎没有人尝试对这个问题给出solution。

算是抖了个小机灵,至少我自己用起来很爽很开心。正如今天听培训所萌生的感想:好的模型设计,都是在细节上体现的!每个人节省半分钟,就能给整个项目团队节省出可观的时间资源~

8e33d6ea6d681354ddcc446e25d047d2.gif

我是Eevee

欢迎关注!

迈特实验室

d19b25d83b75e96fe1842d5208eff6a1.png 38e3b49dc3544280c27bb1b3fb6a4c32.png
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

matlab 获取当前路径_Simulink模型路径的自动加载与复原 的相关文章

随机推荐