自定义模块的处理.docx

上传人:b****5 文档编号:7644961 上传时间:2023-01-25 格式:DOCX 页数:28 大小:412.88KB
下载 相关 举报
自定义模块的处理.docx_第1页
第1页 / 共28页
自定义模块的处理.docx_第2页
第2页 / 共28页
自定义模块的处理.docx_第3页
第3页 / 共28页
自定义模块的处理.docx_第4页
第4页 / 共28页
自定义模块的处理.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

自定义模块的处理.docx

《自定义模块的处理.docx》由会员分享,可在线阅读,更多相关《自定义模块的处理.docx(28页珍藏版)》请在冰豆网上搜索。

自定义模块的处理.docx

自定义模块的处理

1.自定义模块库简介

下述方法通过回调函数建立模块库

1.创建模块库:

Library1

2.创建模块库:

Library2

3.在Library1中创建子系统,删除里面的输入和输出,将改子系统通过回调函数指向Library2,则Library2成为了Library1的字库。

若要创建多个字库,在Library1中创建多个子系统即可,每个子系统连接其引用库。

上述即是自定义模块库的常用方法。

Simulink本身自有模块组织模块库的方法和其类似,但又不同,有待于进一步研究。

2.自定义模块并添加入库列表

两种创建库模块的方法:

1.创建子系统并封装为一个模块的形式。

2.创建S函数,封装为模块形式。

仅叙述方法一:

利用子系统创建

通过子系统创建模块的形式比较简单。

详解如下

也可以利用下述方法将常用模块集中在一起,将创建的库文件添加入Matlab的Simulink库列表。

1、创建库文件:

打开SimulinkLibraryBrowser窗口。

要建立Simulink库文件,首先启动Simulink

工作窗口,单击菜单栏【File】下的【New】选项,选择【library】选项,打开一个新的Library

窗口界面,此时,用户可以将自己需要添加的一些模块加入到新的窗口中。

然后保存为

Own_efinition.mdl(所需要定义的库文件名称)。

这样,就建立了一个自定义的库文件。

2、在Matlab路径下创建存放库文件的路径,也即自定义的模块库在LibraryBrowser下的显示位置。

注意在Matlab中,每一个模块库文件所在的路径必须不同。

创建的Maltab路径是:

D:

\MATLAB\R2011a\toolbox\Simulink\MyLibrary(根据自己的Matlab安装路径来确定),其中

MyLibrary为自定义的文件夹。

3.将第一步中建立的库文件拷贝到新建的Matlab路径下。

在Matlab主窗口的【File】菜单栏下选择【SetPath】选项,然后单击【AddFolder】按钮,将新建的路径添加进来,然后保存(Save),退出(Close)。

4、要显示自定义的模块库,还需要拷贝slblocks.m函数到新建的路径下。

在Matlab的命令窗口中输入:

>>which('slblocks.m','-all')

>>pen('D:

\MATLAB\R2006a\toolbox\Simulink\blocks\slblocks.m')这样就可以打开slbocks.m文件模板,为了将自定义的模块库显示在LibraryBrowser窗口下,需要对该程序进行修改。

先把slbocks.m文件拷贝到自定义库文件(打开该模板文件)

同一目录下(即刚才创建的路径),然后打开该文件进行如下修改(红色为所作修改),并保存:

略。

5、再打开SimulinkLibraryBrowser,按F5刷新,即可看到自定义的模块库,展开后可以看内部的自定义模块。

那么用户可以方便地进行拖放模块,就可以使用自定义的封装模块了。

如果还要在新建的模块库下面创建子模块库,需要把Subsystem模块加入到模块库中,打开Subsystem模块,删除所有内容(ports等元件),添加自己创建的模块保存即可,然后重新打开SimulinkLibraryBrowser,按F5刷新,即可看到自定义的模块库和字模块库。

3.自定义模块库(同2,详述)

在MATLAB开发环境中,Simulink仿真平台可以建立用户自定义的库文件,并将它们显示在LibraryBrowser窗口下,方便用户进行模块的操作。

用户可以将一些平时使用比较频繁,或者自己建立的一些封装子模块集中在一块,方便使用。

要建立Simulink库文件,首先启动Simulink工作窗口,单击菜单栏【File】下的【New】选项,选择【library】选项,打开一个新的Library窗口界面,此时,用户可以将自己需要添加的一些模块加入到新的窗口中。

然后保存为所需要定义的库文件名称。

这样,就建立了一个自定义的库文件。

虽然按照上述的方法,将一些用户常用的模块集中在一块,可以方便使用,但是,每次使用都需要打开自定义模块的窗口,而无法象Simulink仿真模块一样显示在LibraryBrowser窗口下。

按照以下步骤可以实现该功能:

•首先建立一个库文件,将自定义的封装模块加入库文件中,保存文件,在这里,命名为:

Converters.mdl。

•在Matlab路径下创建存放库文件的路径,也即自定义的模块库在LibraryBrowser下的显示位置。

注意在Matlab中,每一个模块库文件所在的路径必须不同。

创建的Maltab路径是E:

\MATLAB2010\toolbox\simulink\simulink\myLibrary(根据自己的Matlab安装路径来确定),其中myLibrary为自定义的文件夹。

•将第一步中建立的库文件拷贝到新建的Matlab路径下。

在Matlab主窗口的【File】菜单栏下选择【SetPath】选项,然后单击【AddFolder】按钮,将新建的路径添加进来,然后保存(Save),退出(Close)。

•要显示自定义的模块库,还需要拷贝slblocks.m函数到新建的路径下。

在本演示中,模块库的名称为Converters.mdl,因此对应的slbocks.m文件为:

functionblkStruct=slblocks

  %SLBLOCKSDefinesablocklibrary.

  %Library'sname.ThenameappearsintheLibraryBrowser's

%contentspane.

blkStruct.Name=['OwnDefinition'sprintf('\n')'Library'];  %模块库的显示名称  

%Thefunctionthatwillbecalledwhentheuserdouble-clickson

%thelibrary'sname.;

blkStruct.OpenFcn='Converters';  %自定义的模块库名称  

%TheargumenttobesetastheMaskDisplayforthesubsystem.You

%maycommentthislineoutifnospecificmaskisdesired.

%Example:

blkStruct.MaskDisplay=

'plot([0:

2*pi],sin([0:

2*pi]));';

%Nodisplayfornow.

%blkStruct.MaskDisplay='';

%Endofblocks  

上述方法理论可以成功,采用blk.Struct.Name和blkStruct.OpenFcn的方式创建。

按照以上的代码修改文件后,将其拷贝到自定义的路径下,这样在原来自定义的路径下就包含有两个文件,一个是自定义模块库文件,另一个则是slbocks.m文件。

•重新启动Matlab环境,启动Simulink仿真平台,可以发现在SimulinkLibraryBrowser窗口下增加了一个新的模块库,名称是OwnDefinitionLibrary,展开后,可以看到内部的自定义模块。

4.自定义模块库(同2,详述)

1.在Maltab安装路径某个地方创建一个文件夹。

比如说在E:

\MATLABR2009a\toolbox\路径下面创建了一个文件夹MyLib,也就是E:

\MATLABR2009a\toolbox\MyLib

2.把你的库文件(.mdl)文件放到这个文件夹下面

3.在这个文件夹下面创建一个slblocks.m文件,基本内容如下

functionblkStruct=slblocks

%Specifythattheproductshouldappearinthelibrarybrowser

%andbecachedinitsrepository

Browser.Library='MyLibTest';%你的库文件的名字MyLibTest.mdl

Browser.Name='MyLibrary';%在Simulink库中显示的名字

blkStruct.Browser=Browser;

4.把这个文件夹及它的子文件夹添加的Matlab路径当中去

理论可以成功,通过Browser.Name和Browser.Library创建。

5.这个时候,当你打开Simulink的时候,就会发现自己的库文件已经添加进去了

5.自定义模块库(同2,详述)

常常需要将自定义的模块算法加入自定义的Library里,然后在SimulinkLibraryBrowser里显示,这需求很多人提过,网上也有一些资料,但是我都试过,不灵,然后本人通过help和探索,总结出了解决方案:

1、首先新建一个Library,注意后缀名一定要是mdl,很多资料里都讹传将后缀名改成lib,这是错的,不知道大家伙为什么还要将错的东西传来传去。

姑且将这个Library命名为jet.mdl。

  2、然后在jet.mdl里加入一个自定义的模块算法(以subsystem封装,两边露出input和output),自定义这个subsystem为jet_func。

  3、从您的Matlab目录下找到slblocks.m这个文件,将其修改,修改内容如下(首先将它模板上原有的内容全删了):

functionblkStruct=slblocks

  blkStruct.Name=[‘jetchang'sprintf('\n')'Library'];//这是命名这个Library在Browser上显示的名字,叫jetchangLibrary

  blkStruct.OpenFcn='jet';//这里将jet.mdl加入到jetchang的目录下

4、之后新建一个文件夹叫jetchang,将jet.mdl和slblocks.m这俩文件放在这个文件夹里,最后将该文件夹的路径放到matlab的setpath里。

  5、关闭matlab,重新打开,之后打开simulinklibrarybrowser,您的jetchangLibrary就赫然在目了。

  完毕。

至于想添加其他功能或选项,参见help

上述方法理论可以成功,通过blkStruct.Name和BlkStruct.OpenFfcn创建。

6.自定义模块库(同1,详述)

6.1.模块库的建立与修改

   模块库的建立与模型model的建立类似,都是在File菜单栏中,只不过要选择Library而非Model,如下图:

   然后再该Library中添加了两个模块,并存为名为Interpolation.mdl文件。

如下图:

注意:

当模块库被保存后,模块库就自动被锁定,模块库中的模块都无法修改,所以修改时需要Edit->UnlockLibrary来解锁方能修改。

6.2.模块库中建子模块库

   此处的目的是在HiNOC模块库中建立Interpolation子模块库(上一步已经建好了主体)。

∙首先建立一个模块库保存为HiNOC.mdl;

∙从simulink->Port&Subsystems中复制subsystem模块进HiNOC.mdl中,并改名为Interpolation,将模块内的内容(ports等元件)全部删除;

∙鼠标右键Interpolation模块,从弹出菜单中选中Blockproperties...选择弹出的对话框中callbacks分页,选择左边栏中的OpenFcn项,在右边编辑已经建立的要包含的子库的文件名(本例中即Interpolation),此时再点击Interpolation的subsystem模块,就会发现此模块里面不再是“空”的了,这涉及到回调(callback)函数,以后再详细讨论。

 

 

此时Interpolation的subsystem模块中“不空”了

 

6.3.添加模库至库列表

   此步骤中欲将刚才建立的HiNOC.mdl模块库加入到simulink模块库列表中,就像系统的模块一样使用。

∙建立一文件夹(本例中命名为HiNOC),并将刚才建立的HiNOC.mdl,Interpolation.mdl等移动到此文件夹中,并将该文件夹加入到matlab的path(matlab搜索路径,在File->SetPath中操作,有时还要在File->Preferrences中点击UpdatetoolboxPathCache)中;

∙在文件夹HiNOC中加入名为slblocks.m的文件(可从matlabroot/toolbox/simulink/blocks/slblocks.m中获得模板或者参考已安装的模块库中的slblocks.m文件的写法),此处的写法如下:

[c-sharp]viewplaincopyprint?

1.function blkStruct = slblocks  

2.%SLBLOCKS Defines the block library for a specific Toolbox or Blockset.  

3.%   SLBLOCKS returns information about a Blockset to Simulink.  The  

4.%   information returned is in the form of a BlocksetStruct with the  

5.%   following fields:

  

6.%  

7.%     Name         Name of the Blockset in the Simulink block library  

8.%                  Blocksets & Toolboxes subsystem.  

9.%     OpenFcn      MATLAB expression (function) to call when you  

10.%                  double-click on the block in the Blocksets & Toolboxes  

11.%                  subsystem.  

12.%     MaskDisplay  Optional field that specifies the Mask Display commands  

13.%                  to use for the block in the Blocksets & Toolboxes  

14.%                  subsystem.  

15.%     Browser      Array of Simulink Library Browser structures, described  

16.%                  below.  

17.%  

18.%   The Simulink Library Browser needs to know which libraries in your  

19.%   Blockset it should show, and what names to give them.  To provide  

20.%   this information, define an array of Browser data structures with one  

21.%   array element for each library to display in the Simulink Library  

22.%   Browser.  Each array element has two fields:

  

23.%  

24.%     Library      File name of the library (mdl-file) to include in the  

25.%                  Library Browser.  

26.%     Name         Name displayed for the library in the Library Browser  

27.%                  window.  Note that the Name is not required to be the  

28.%                  same as the mdl-file name.  

29.%  

30.%   Example:

  

31.%  

32.%      %  

33.%      % Define the BlocksetStruct for the Simulink block libraries  

34.%      % Only simulink_extras shows up in Blocksets & Toolboxes  

35.%      %  

36.%      blkStruct.Name        = ['Simulink' sprintf('/n') 'Extras'];  

37.%      blkStruct.OpenFcn     = 'simulink_extras';  

38.%      blkStruct.MaskDisplay = sprintf('Simulink/nExtras');  

39.%  

40.%      %  

41.%      % Both simulink and simulink_extras show up in the Library Browser.  

42.%      %  

43.%      blkStruct.Browser

(1).Library = 'simulink';  

44.%      blkStruct.Browser

(1).Name    = 'Simulink';  

45.%      blkStruct.Browser

(2).Library = 'simulink_extras';  

46.%      blkStruct.Browser

(2).Name    = 'Simulink Extras';  

47.%  

48.%   Copyright 1990-2006 The MathWorks, Inc.  

49.%   $Revision:

 1.20.2.10 $  

50.%  

51.% Name of the subsystem which will show up in the Simulink Blocksets  

52.% and Toolboxes subsystem.  

53.%  

54.blkStruct.Name = ['Simulink' sprintf('/n') 'HiNOC'];  

55.%  

56.% The function that will be called when the user double-clicks on  

57.% this icon.  

58.%  

59.blkStruct.OpenFcn = 'HiNOC';  

60.%  

61.% The argument to be set as the Mask Display for the subsystem.  You  

62.% may comment this line out if no specific mask is desired.  

63.% Example:

  blkStruct.MaskDisplay = 'plot([0:

2*pi],sin([0:

2*pi]));';  

64.% No display for Simulink Extras.  

65.%  

66.blkStruct.MaskInitialization = '';  

67.x = exp(j*[-45:

-8:

-215, -45]/180*pi);  

68.x1 = x * 20 + 20 + j*35;  

69.x2 = -x*10 + 60 +j*75;  

70.p_str = ['plot(',...  

71.          mat2str(real(x1),2), ',', mat2str(imag(x1),2), ',', ...  

72.         '[0 15 ', mat2str(real(x1(10:

13)),2),' 0],[0 0 ', mat2str(imag(x1(10:

13)),2),' 0],', ...  

73.         mat2str(real(x2),2), ',', mat2str(imag(x2),2), ',', ...  

74.         '[19 40 35 52 40 49 60],[34 55 65 50 70 64 75],', ...  

75.         '[74.5 70 65 74],[84.5 80 85 94],',...  

76.         '[66 65 70.5 71], [86 99 97 91],',...  

77.         '[75 74 79 80 75], [81 94 92 79 81],',...  

78.         '[74.5 73], [87 87],',...  

79.         '-10, 0, 100, 100);'];  

80.blkStruct.MaskDisplay = p_str;  

81.%  

82.% Define the Browser structure array, the first element contains the  

83.% information for the Simulink block library and the second for the  

84.% Simulink Extras block library.  

85.%  

86.% Browser

(1).Library = 'simulink';  

87.% Browser

(1).Name    = 'Simulink';  

88.% Browser

(1).IsFlat  = 0;% Is this library "flat" (i.e. no subsystems)?

  

89.Browser

(1).Libr

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 辩护词

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1