为了使用户在数据初始化,模块拖曳和仿真结果绘图操作等过程中能够更加便利,表现力更加丰富,Simulink为用户提供了一系列的回调函数,使得模型和模块的动作,甚至跟模块端口相连接的信号的动作都能够由用户自定义,用户可以建立使用便利,具有个性化的模型执行过程。

1.回调函数的定义

Callback functions(回调函数)是因某种操作而触发对其调用的函数,如按下按钮或双击操作等。对于模型来说,回调函数在Simulink中起着举足轻重的作用。当执行一系列动作,如选中某个模块或仿真开始时,回调函数便被触发执行。使用回调功能可用来执行一个MATLAB脚本或调用MATLAB函数。Simulink 中回调函数的触发可通过模块、端口或模块的参数设置来实现。

常用的Simulink回调函数可应用在以下场合:

打开Simulink模型时自动加载变量到工作空间;
双击模块时执行MATLAB脚本;
仿真开始前进行模型参数的初始化;
仿真结束后将仿真出来的数据绘制图像;
关闭模型时清除相关变量或关闭图像。

2.回调跟踪

当打开模型或对某个模型进行仿真时,回调跟踪功能可以清楚显示 Simulink如何调用回调函数以及以何种顺序调用它们。在Preferences对话框中选择Callback tracing选项或者在Command Window中执行set_param(0,'CallbackTracing', 'on') ,即可打开回调跟踪功能。回调函数被调用时,在MATLAB命令窗口中将显示回调列表。这个选项对所有Simulink 软件都适用,而不仅仅对于当前打开的模型。如单击 MATLAB工具栏Simulink Library按钮打开Simulink Library Browser时会显示回调函数过程。

>> set_param(0,'CallbackTracing','on')
Evaluating callback 'PostLoadFcn' for simulink
Callback: setsysloc_simulink(bdroot)
Evaluating callback 'LoadFcn' for simulink/Sources/Waveform Generator
Callback: set_param(gcb,'LoadFlag','1');
Evaluating MaskInitialization for 'simulink/Sources/Waveform Generator': 'if (isequal(LoadFlag,'1'))     derivedSignals.DSMaskLoad(gcbh); end  if (isequal(ApplyFlag,'1'))    ...'.
Evaluating callback 'LoadFcn' for simulink/Sources/Signal Builder
Callback: sigbuilder_block('load');
Evaluating MaskInitialization for 'simulink/Sources/Signal Builder': 'if ~strcmp(get_param(bdroot(gcbh),'SimulationStatus'),'stopped') tuvar = sigbuilder_block('maskInit'...'.
Evaluating callback 'LoadFcn' for simulink/Sinks/XY Graph
Callback: sfunxy([],[],[],'LoadBlock')
Evaluating callback 'LoadFcn' for simulink/Model-Wide Utilities/Model Info
Callback: slcm LoadBlock;
Evaluating callback 'LoadFcn' for simulink/Math Operations/Slider Gain
Callback: sliderGain_cb(gcbh, 'load');

开启了回调函数追踪功能之后,可以显示任何类型的回调函数执行过程。Simulink中回调函数分为模型回调函数、模块回调函数、端口回调函数和参数回调函数。

3.模型回调函数

可以通过手动或程序⒉种方式创建模型回调函数。在模型菜单中选择MODELING→Model Properties可以打开模型属性对话框,如图所示。

matlab怎么调用function函数_调用函数的格式_调用函数怎么调用

调用函数的格式_调用函数怎么调用_matlab怎么调用function函数

回调函数说明

调用函数的格式_matlab怎么调用function函数_调用函数怎么调用

在对话框中选择Callbacks选项卡可手动创建模型的回调功能。上图左侧的Modelcallbacks区域显示各个回调函数的名字,表征了被调用的时刻,从上到下按照时间先后排序。选中其中任意一个,右侧则变为所选回调函数的内容编辑框。如在左侧选中PreLoadFcn 时右侧编辑框上面变为Model preload function,这时可在编辑框中编写函数内容。

调用函数怎么调用_调用函数的格式_matlab怎么调用function函数

调用函数怎么调用_matlab怎么调用function函数_调用函数的格式

调用函数怎么调用_matlab怎么调用function函数_调用函数的格式

在 Command Window或M脚本文件中可以通过M代码设置模型的回调函数。使用set_param命令指定一个MATLAB表达式,这个表达式表示回调函数的内容。举例说明set _ param设置回调函数的方法:当双击test28.slx打开它时,同时会启动一个消息框显示“欢迎来到微信公众号云龙派 !”的字符串,如图所示。

set_param('test28','PreLoadFcn','msgbox("欢迎来到微信公众号云龙派","information")');

注:set_param的参数均以字符串形式输入;最后一个参数为回调函数的MATLAB代码内容;作为字符串形式传递给 set_param的第三个参数要以单引号括起来。由于msgbox函数中也需要单引号括起来的字符串matlab怎么调用function函数matlab怎么调用function函数,因此就出现了字符串中嵌套字符串的情况,这时最外层的字符串使用单引号括起来,内部的单引号全部改用双单引号。

通过MATLAB提供的demo模型clutch系统(sldemo_clutch. mdl)可查看同时使用多个回调功能的情况。这个模型定义的回调函数包括:PreLoadFcn、PostLoadFcn , StartFcn,StopFcn和 CloseFcn。

在Command Window中输入sldemo_clutch并按下回车,可打开下图的离合器锁止模型:

>> sldemo_clutch
Evaluating callback 'PostLoadFcn' for sldemo_clutch
Callback: sldemo_clutchplot
>> 

matlab怎么调用function函数_调用函数的格式_调用函数怎么调用

运行此模型的仿真会出现一个GUI面板,勾选输入/输出则会将相应的变量显示到图形界面,如图所示。绘制出的图形和弹出的GUI控制面板是通过StartFcn和 StopFcn回调函数实现的。

4.模块回调函数

可以通过手动或者M代码创建模块回调函数。手动创建模块的回调函数时通过模块回调函数的对话框实现。右击模块,在右键菜单里选择properties打开模块属性对话框,其第三个页面是Callbacks列表和回调函数内容编辑框,如图所示。

调用函数的格式_调用函数怎么调用_matlab怎么调用function函数

调用函数怎么调用_调用函数的格式_matlab怎么调用function函数

回调函数说明

调用函数怎么调用_matlab怎么调用function函数_调用函数的格式

调用函数怎么调用_调用函数的格式_matlab怎么调用function函数

matlab怎么调用function函数_调用函数的格式_调用函数怎么调用

matlab怎么调用function函数_调用函数怎么调用_调用函数的格式

注意:如果一个 Simulink模型已经通过MATLAB函数或脚本内部加载,并执行编译或仿真,则不要在模型内回调函数或模块回调函数中调用run命令,这样做会带来意想不到的后果(如产生错误或不正确的结果)。

图中左侧罗列了21个回调函数,可选中其中一个,在右侧填人回调函数的代码内容。或者使用set_param指定一个 MATLAB表达式作为某个回调函数的内容。如设定某模块被删除时显示字符串“This block is being deleted.” ,在命令窗口中输入下面的代码并按回车执行:

>> get_param(gcbh,'Name')
ans =
    'Gain'
>> set_param(gcbh,'DeleteFcn','msgbox("This block is being deleted")')
>> 

调用函数怎么调用_matlab怎么调用function函数_调用函数的格式

命令执行之后,在保证选中该模块的情况下按下Delete键,模块会被删除,并弹出如图所示的消息框。

matlab怎么调用function函数_调用函数怎么调用_调用函数的格式

注意:一个封装子系统的回调函数不能直接引用封装子系统的参数。因为Simulink 在Base Workspace计算模块回调函数的值,而封装的参数存在于封装子系统的私有MaskWorkspace 中,必须使用get_param来获取封装的参数值。例如, get_param(gcb, 'g_gain'),在这里参数gain是该子系统封装之后的封装参数名。

5.参考内容

[1] 孙忠潇.Simulink仿真及代码生成技术入门到精通[M].北京:北京航空航天大学出版社,2015.

限 时 特 惠: 本站每日持续更新海量各大内部创业教程,一年会员只需98元,全站资源免费下载 点击查看详情
站 长 微 信: muyang-0410