Matlab编程技巧:自定义Simulink菜单(理解补充)

Matlab编程技巧:自定义Simulink菜单

本文对原文补充。和自我理解说明,原文见上面链接:

本文研究如何在Simulink菜单中嵌入自定义的脚本。博客内容参考了帮助文档:Add Items to Model Editor Menus。

文章目录

1 问题引入

2 自定义Simulink菜单过程

2.1 新建注册文件

2.2 项目组的函数

2.3 项目的函数

2.4 功能实现的函数

3 模型验证

4 其他注意点

5 总结

1 问题引入

博主以前的博客分享过很多关于Matlab脚本自动化处理模型的方法。但是运行脚本经常需要切出Simulink模型,然后找到脚本来运行,还是会有一点不方便。

基于这个痛点,博主研究了一下将脚本命令直接在模型的菜单中运行的方法。实际工作中使用下来非常方便。

2 自定义Simulink菜单过程

本章中博主从零开始记录自定义Simulink菜单的过程。

2.1 新建注册文件

sl_customization.m文件是Matlab中专门提供给用户注册自定义功能的,因此,自定义Simulink菜单也需要创建这个文件。这里的Simulink:ContextMenu 可以修改成Simulink:ToolsMenu如下所示:

Matlab 复制代码
function sl_customization(cm)

cm = sl_customization_manager;
cm.addCustomMenuFcn('Simulink:ToolsMenu',@MyCustomMenu);
end

function schemaFcns = MyCustomMenu(~)
    schemaFcns = {@MainMenuItem};
end

function schema = MainMenuItem(~)
    schema = sl_container_schema;
    schema.label = 'MyTools';% subfunction name
    schema.childrenFcns = {@SubItem1,@SubItem2};% call back Hand
end
function schema =SubItem1(~)
    schema = sl_action_schema;
    schema.callback = @ResoloveSignals;%call back Hand
end

这一步中要新建一个名为sl_customization.m的空白文件,在文件中写入如下函数。

在这里插入图片描述

上图中cm.addCustomMenuFcn()函数是将自定义Simulink菜单的功能注册到整个sl_customization自定义文件中。该函数包含两个参数:

Simulink:ContextMenu指的是自定义菜单的位置添加到ContextMenu中,也就是鼠标右键的菜单;

@getMyMenuItems是一个回调函数,会返回具体有哪些菜单的项目。

2.2 项目组的函数

在sl_customization.m的后面继续添加项目组的函数,也就是2.1节中的回调函数@getMyMenuItems。

在这里插入图片描述

该函数返回值也是回调函数,是项目函数组成的的单元数组。单元数组中的回调函数可以有多个,对应了定义多个菜单,后面的项目回调函数也要能够一一对应。

2.3 项目的函数

紧接着之后是项目的函数,也就是上一节的回调函数@getItem1。

在这里插入图片描述

这个函数返回的shema中有两个关键信息。label指的是菜单的名称,会显示在右键菜单中。callback是运行自定义菜单后所执行的脚本名,也是一个回调函数。

如果在2.2节中的单元数组返回了多个回调函数,这里也要建立对应的回调函数。

2.4 功能实现的函数

最后建立真正实现功能的函数ModifyBlockColorToRed,其效果是将选中的模块的颜色置为红色。

在这里插入图片描述

首先用set_param函数将当前选中的模块的BackgroundColor属性改为Red。然后用msgbox弹窗显示完成。如果2.2章节的单元数组中有多个项目。功能实现的函数要和2.3章节中的多个回调函数一一对应。

至此,这个简单的脚本就写完了,将其保存。全部代码如下。

Matlab 复制代码
function sl_customization(cm)
cm.addCustomMenuFcn('Simulink:ContextMenu', @getMyMenuItems);
end

%% Define the custom menu function.
function schemaFcns = getMyMenuItems(~)
schemaFcns = {@getItem1};
end

%% Define the schema function for first menu item.
function schema = getItem1(~)
schema = sl_action_schema;
schema.label = 'ModifyBlockColorToRed';
schema.callback = @ModifyBlockColorToRed;
end

%% Define the change color function
function ModifyBlockColorToRed(~)
set_param(gcb,'BackgroundColor','Blue');
msgbox('Complete!');
end

3 模型验证

1)将sl_customization.m保存到当前路径,或者Matlab的搜索路径中。然后在模型中运行:

>> sl_refresh_customizations

就可以将第2章的脚本内容注册到Simulink中了。

2)新建一个模型,做一些简单的模块来验证一下效果。

在这里插入图片描述

3)在Gain模块上右键,可以看到菜单的最下面多了一个ModifyBlockColorToRed。

在这里插入图片描述

点击ModifyBlockColorToRed后,Gain模块就变成了红色,然后弹出了窗口。

在这里插入图片描述

自定义菜单的功能也就验证完成了。

4 其他注意点

前两章通过简单的例子研究了自定义菜单的方法,但是在实际应用中可以更加灵活多变。

第2章节中的函数可以分成多个文件管理,只要这些文件都在Matlab的搜索路径中就行了;

自定义菜单所处的位置也可以是顶部工具栏,只要修改一下addCustomMenuFcn函数中的参数;

如果是修改模块参数,最好还是弹窗反馈或者在Matlab中打印出改的地方,以免脚本的bug改错了模型;

5 总结

本文研究了自定义Simulink菜单的方法,提高了建模的效率。


版权声明:本文为CSDN博主「chhttty」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/u013288925/article/details/110717931

相关推荐
Momo__4 小时前
VueUse createReusableTemplate —— 单文件组件内的模板复用神器
前端·vue.js
用户556918817534 小时前
#从脚本到独立程序:Python + Playwright 批量抓取的完整踩坑记录
python·自动化运维
只一4 小时前
😭从回调地狱到 async/await:一文打通 Ajax 与 JS 异步编程
javascript
程序员小富4 小时前
我开源了一个开发者专属的智能 JSON 工具,得到了媳妇高度认可
前端·vue.js·后端
小小小小宇4 小时前
程序员如何给 LLM 装工具以及看懂推理过程
前端
写代码的皮筏艇4 小时前
React中的forwardRef
前端·react.js·面试
槑有老呆4 小时前
花三个月工资请了个 AI 程序员,结果它连青岛啤酒股价都查不了
前端
风骏时光牛马4 小时前
Verilog开发常见问题汇总解析
前端
子兮曰4 小时前
AI Coding Method Map:一张图看懂 AI 编程的完整链路
前端·人工智能·后端