概述
本文研究如何在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菜单也需要创建这个文件。
这一步中要新建一个名为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章节中的多个回调函数一一对应。
至此,这个简单的脚本就写完了,将其保存。全部代码如下。
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菜单的方法,提高了建模的效率。
>>返回个人博客总目录
最后
以上就是默默火为你收集整理的Matlab编程技巧:自定义Simulink菜单1 问题引入2 自定义Simulink菜单过程3 模型验证4 其他注意点5 总结的全部内容,希望文章能够帮你解决Matlab编程技巧:自定义Simulink菜单1 问题引入2 自定义Simulink菜单过程3 模型验证4 其他注意点5 总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复