我在IND4汽车人App可以帮助大家解答汽车电子的相关技术问题,欢迎通过IND4汽车人App向我咨询。

在MBD开发过程中,往往存在这一些开发环境定制化需求,它不仅可以在公司范围内规范模型库地使用,也可以将公司开发流程中的某些需要手动操作的工作通过脚本实现以后进而通过自定义菜单调用实现One-Click的效果等等。

定制化功能通过Matlab 搜索路径下的sl_customization.m文件作为接口来实现。Matlab安装以后,在默认搜索路径下是没有这个m文件的,因此需要用户自己手动创建。一般来说,大家为了方便,约定俗成都会把这个文件放到

C:\Users\%UserName%\Documents\MATLAB这个文件夹下。

对sl_customization.m编辑完成以后,可以在Matlab的Command Window中输入

sl_refresh_customizations指令让其立即生效。

开发环境定制化的有很多方面的内容,下面挑常见的两种和大家分享一下:

(一):自定义Simulink Library库

比如在开发过程中,有些自带的库原件在某些公司是禁止使用的。比如LookupTable函数所自动生成的代码运行时会占用比较多的软件开销,往往用PreLookup来Interpolation Using PreeLookup来实现查表的功能。但是LookupTable在浮点仿真阶段还是有必要的,Mathworks不可能也不会把这些模块从库中移除,那么在公司应用层面,就可以使用自定义Libarary的方法,把这些本公司开发过程中不允许使用的Blocks隐藏或禁止使用。

其方法比较简单,就是用到了Simulink提供的applyFilter功能,具体用法可参考Matlab帮助文件。

function sl_customization(cm)

cm.LibraryBrowserCustomizer.applyFilter

'Simulink/Lookup Tables/1-D Lookup Table','Disabled',...

'Simulink/Lookup Tables/2-D Lookup Table','Disabled',...

从截图可见脚本中所针对的两个Table的文字颜色已变成灰色,不能被拖到simulink模型中。还有一种更彻底的做法是把他们彻底隐藏起来,不过笔者并不推荐这样做。

(二):自定义菜单

自定义菜单的好处是可以通过菜单操作调用脚本,完成一些常用操作或自动化完成某些任务。自定义菜单的创建过程包含添加自定义菜单函数(addCustomMenuFcn)、定义菜单及子菜单对象、创建菜单Action事件等等。

以下面自定义菜单为例:

function sl_customization(cm)

%% Register custom menu function.

cm.addCustomMenuFcn('Simulink:MenuBar', @JACK_Play_Custom_Menu);

%%注册菜单

function schemaFcns = JACK_Play_Custom_Menu(callbackInfo) %#ok<INUSD>

schemaFcns = {@JACK_Play_Container};

%%菜单函数

function schema = JACK_Play_Container(callbackInfo) %#ok<INUSD>

schema = sl_container_schema;

schema.label = 'JACK_Play';

schema.childrenFcns = {

@JACK_Play_Operation };

%%菜单的Label为“JACK_Play”,存在下一级子菜单

function schema = JACK_Play_Operation(callbackInfo) %#ok<INUSD>

schema = sl_action_schema;

schema.label = 'HideName';

schema.callback = @HideName;

%%子菜单的Label为“HideName”,点击后调用HideName函数

function HideName(callbackInfo)

blocks = find_system( sys , 'Type' , 'Block' );

blockTypes=get_param(blocks,'BlockType')

for k = 1 : length( blockTypes )

if ((~strcmp(blockTypes{k},'Inport'))&&(~strcmp(blockTypes{k},'Outport')))

set_param( blocks{k} , 'ShowName' , 'off' );

%%HideName实现的功能是把当前模型所有除了输入输出之外所有的Blocks的名字隐藏

你以为就这样结束了吗?当然还没有!

阅读全文

您已阅读完

读完还需