回调的运用

什么是回调(callback)

    回调是一种matlab命令,它在某种事件(比如加载,删除和执行等)开始发生时执行。例如打开模型时,弹出一个对话框,表明模型的作者信息。

 

 

回调函数的类型

   Simulink中回调可以应用于模型或者模型中的某一个模块

    打开模型,在Model或者Library,在菜单File->Mode Properties中的Callbacks标签可以查看和编辑应用于模型的Callbacks类型。

 

表1 模型回调函数

回调函数 功能及执行时间
PreLoadFcn
设置模型加载前的响应事件,为此参数定义一个例程有助于加载模型用到的变量
PostLoadFcn
设置模型加载后的响应事件
InitFcn
Called at start of model simulation
StartFcn
Before the simulation starts.
PauseFcn
仿真暂停之后执行
ContinueFcn
仿真继续之前执行
StopFcn
仿真结束后执行。在StopFcn执行之前,输出已经写到workspace里的变量里或者文件里(如果有的话)
PreSaveFcn
模型保存之前执行
PostSaveFcn
模型保存之后执行
CloseFcn
模块图关闭前执行。模型中模块的ModelCloseFcn和DeleteFcn回调先于模型的CloseFcn执行。模块的DestroyFcn回调在模型的CloseFcn之后执行

 

 

选中模块右键菜单中选择Block Properties...中的Callbacks标签可以查看并辩解模块的回调。

 

 

 

表2 模块回调函数

回调函数 功能及执行时间
ClipboardFcn
当模块复制或剪切到系统的剪切板时执行
CloseFcn
当用close_system命令关闭模块时执行。以下情况下CloseFcn不会执行:①交互地关闭该模块;②交互地关闭包含该模块的subsystem或者model;③使用命令close_system关闭包含该模块的subsystem或者model。
ContinueFcn
仿真继续之前执行
CopyFcn
模块被复制之后执行。对于subsystem,该回调是递归的。如果用add_block命令复制模块,该回调也执行
DeletChildFcn
subsy中的模块或信号线被删除之后执行。如果模块有DeletFcn或者DestroyFcn,这些回调先于DeleteChildFcn执行。只有Subsystem模块才有DeleteChildFcn回调
DeleteFcn
从图示的程度上(相对于内存而讲的)删除模块(例如图示程度的删除模块、对模块调用delete_block命令或者关闭(是否是关闭,表示怀疑,当help文档上确实用的close,感觉不用怀疑,应该是这样))之后。包含此模块的model。调用DeleteFcn后,模块句柄仍然有效并且可以通过get_param命令访问。DeleteFcn对于Subsystem模块是递归的。如果模块通过delete_block或者关闭model图示地删除,模块删除后,模块在存储器中被破坏,然后会执行模块的DestroyFcn。
DestroyFcn
当模块从内存中删除(例如对模块或包含该模块的subsystem使用delete_block、关闭model)时执行。如此模块先前没有从图示的程度上删除,那么DeleteFcn先于DestroyFcn执行。DestroyFcn一执行,模块句柄就不再有效。
InitFcn
在模块被编译和模块参数被赋值之前执行
ErrorFcn
当一个subsystem发生错误时执行。只有subsystem模块有ErrorFcn回调。回调函数必须是此种形式:errorMsg = errorHandler(subsys, errorType),其中errorHandler是回调函数名,subsys是发生错误的subsystem的句柄,errorType是表明发生何种错误的simulink字符串,errorMsg是要展示给用户的错误信息字符串。下面的命令设置subsystem subsys的ErrorFcn调用errorHandler回调函数:set_param(subsys,'ErrorFcn','errorHandler')。 在调用set_param时不要写回调函数的输入参数。Simulink会显示由回调函数返回的错误信息errorMsg。
LoadFcn
在block diagram加载之后执行。该回调对于subsystem模块是递归的。
ModelCloseFcn
在block diagram关闭前执行。当model被关闭时,模块的ModelCloseFcn先于DeleteFcn执行。该回调对于subsystem模块是递归的。
MoveFcn
当模块被移动或重设大小的时候执行
NameChangeFcn
模块的名字或路径改变之后执行。当一个subsystem模块的路径改变之后,它先调用自己的NameChangeFcn的例程,然后递归调用它所包含的所有模块的该函数
OpenFcn
当模块被打开时执行。该参数通常用于subsystem模块。当你双击模块或者用open_system命令打开模块时,例程被执行。该参数覆盖了打开模块的正常行为(显示模块的对话框或者打开subsystem)。关于这一点,《simulink中模块库的建立和维护》一文中有所应用。
ParentCloseFcn
Before closing a subsystem containing the block or when the block is made part of a new subsystem using the new_system command (see new_system in the online Simulink software reference) or the Create Subsystem item in model editor's Edit menu. The ParentCloseFcn of blocks at the root model level is not called when the model is closed.
PauseFcn
仿真暂停之后执行
PostSaveFcn
当block diagram保存之后执行。该回调对于subsystem模块是递归的。
PreCopyFcn
模块复制之前执行。该回调对于subsystem模块是递归的。模块的CopyFcn在PreCopyFcn之后调用,除非PreCopyFcn明确的调用了error命令。如果使用add_system命令复制模块,PreCopyFcn仍被调用.
PreDeleteFcn
在模块graphically删除(例如用户graphically删除模块或对模块调用delete_system命令)之前执行。当包含模块的model关闭时,PreDeleteFcn不被调用。模块的DeleteFcn调用在PreDeleteFcn之后,除非PreDeleteFcn明确的调用了error命令。
PreSaveFcn
在block diagram保存之前执行。该回调对于subsystem模块是递归的。
StartFcn
在block diagram编译之后、仿真开始之前执行。在S-函数模块中,在模块的mdlProcessParameters函数第一次执行之后,StartFcn立即执行。
StopFcn
在以任何方式停止仿真后执行。在S-函数模块中,StopFcn在模块的mdlTerminate函数执行完后再执行。
UndoDeleteFcn
当撤销模块的删除操作时执行。

 

 

注意:在任何类型的回调中不要使用run命令。如何model从一个m文件中加载、编译和仿真,这样做将造成不可预料的后果(error或者不正确的结果)

 

 

加载回调函数的方法

    在此处介绍两种为模型或者模块加载回调函数的方法:①使用set_param命令;②使用如上所示的对话框。

 

     1.命令加载

     使用set_param的语法为:set_param(object,parameter,value)。

     参数的描述如下:

  • object:包含模型名或模块路径的matlab字符串。如果回调是关于模型的,则object为模型名。例如,模型dfd1r.mdl的模型     名为'dfd1r'。如果回调是关于模块的,则object为模块的simulink路径名。例如,模型dfd1r.mdl下的Gain模块的路径名      为'dfd1r/Gain'。
  • paramet:是上面两个表中的回调函数名(第一列)的matlab字符串。
  • value:是matlab命令或者包含matlab命令的M文件的文件名甚至mdl文件的文件名(例子:《simulink中模块库的建立和维护》)

      举一个例子:set_param('dfd1r/Gain','InitFcn','input("Gain=")').

 

 

 

        2.使用Callback对话框

              关于模型或模块Callbacks对话框的寻找如前所述,这里不再详细讲。这种方法比较简单,只是将方法1中的value参数的内容(命令或者文件名)写在相应的编辑区域。

 

 

参考资料

   matlab R2010的help文档:

  • Simulink/User's Guide/Modeling Dynamic Systems/Creating a Model/Using Callback Functions/Creating Model Callback Functions 

你可能感兴趣的:(object,properties,matlab,delete,System,callback)