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

相关推荐
勇气要爆发1 小时前
物种起源—JavaScript原型链详解
开发语言·javascript·原型模式
我命由我123451 小时前
VSCode - VSCode 修改文件树缩进
前端·ide·vscode·前端框架·编辑器·html·js
dagouaofei1 小时前
AI生成个性化年终总结PPT
人工智能·python·powerpoint
SoaringHeart2 小时前
Flutter组件封装:验证码倒计时按钮 TimerButton
前端·flutter
San30.2 小时前
深入理解 JavaScript OOP:从一个「就地编辑组件」看清封装、状态与原型链
开发语言·前端·javascript·ecmascript
AAA阿giao2 小时前
JavaScript 原型与原型链:从零到精通的深度解析
前端·javascript·原型·原型模式·prototype·原型链
0***86332 小时前
SQL Server2019安装步骤+使用+解决部分报错+卸载(超详细 附下载链接)
javascript·数据库·ui
烛阴3 小时前
C#异常概念与try-catch入门
前端·c#
钮钴禄·爱因斯晨3 小时前
# 企业级前端智能化架构:DevUI与MateChat融合实践深度剖析
前端·架构