主要内容

生成响应初始化、重置和终止事件的代码

要从建模组件生成代码,以便在执行期间响应初始化、重置和终止事件,请使用块初始化函数而且终止函数.有关如何使用这些块的信息,请参见使用初始化、重置和终止函数.您可以在模型层次结构中的任何地方使用这些块。

何时生成响应初始化、重置或终止事件的代码的示例包括:

  • 启动和停止组件。

  • 计算初始条件。

  • 从非易失性内存中保存和恢复状态。

  • 生成响应外部事件的复位入口点函数。

每个非虚拟子系统和引用模型都可以有自己的初始化、重置和终止函数集。

代码生成器产生的初始化和终止代码与重置代码不同。对于初始化和终止代码,代码生成器在默认的入口点函数中包含组件初始化和终止代码,模型_initialize而且模型_terminate.只有当您对重置行为建模时,代码生成器才会生成重置代码。

为初始化和终止事件生成代码

当为包含的组件生成代码时初始化函数而且终止函数block,代码生成器:

  • 在入口点函数中包含初始化事件代码和默认初始化代码模型_initialize

  • 在入口点函数中包含带有默认终止代码的终止事件代码模型_terminate

考虑模型rtwdemo_irt_base

对于这个模型,代码生成器生成其他代码可以与之交互的初始化和终止入口点函数。

Void rtwdemo_irt_base_initialize(Void)

此代码出现在生成的文件中rtwdemo_irt_base.c.初始化函数,rtwdemo_irt_base_initialize

  • 初始化错误状态。

  • 为块I/O和状态参数分配内存。

  • 设置输出值

  • 设置离散积分器的初始条件。

终止函数,,rtwdemo_irt_base_terminate,不需要代码。

这段代码假设禁用了对非有限数字和mat文件日志万博1manbetx记录的支持。

void rtwdemo_irt_base_initialize(void) {rtmSetErrorStatus(rtwdemo_irt_base_M, (NULL));(void) memset((void *)&rtwdemo_irt_base_DW, 0, sizeof(DW_rtwdemo_irt_base_T));rtwdemo_irt_base_Y。Out1 = 0.0;rtwdemo_irt_base_DW。discrete teintegrator_dstate = 0.0;} void rtwdemo_irt_base_terminate(void){/*(不需要终止代码)*/}

添加初始化函数而且终止函数块到模型(参见rtwdemo_irt_initterm).初始化函数块使用国家的作家块设置Discrete Integrator块的初始条件。终止函数块包含一个国家的读者块,它读取Discrete Integrator块的状态。

参数事件类型事件监听器用于初始化和终止函数的块设置为初始化而且终止,分别。initialize函数使用State Writer块将Discrete Integrator块的输入值初始化为10。terminate函数使用State Reader块读取Discrete Integrator块的状态。

代码生成器包含它为初始化函数和终止函数块生成的事件代码,在入口点函数中使用标准的初始化和终止代码rtwdemo_irt_initterm_initialize而且rtwdemo_irt_initterm_terminate.这段代码假设禁用了对非有限数字和mat文件日志万博1manbetx记录的支持。

void rtwdemo_irt_initterm_initialize(void) {rtmSetErrorStatus(rtwdemo_irt_initterm_M, (NULL));(void) memset((void *)&rtwdemo_irt__initterm_DW, 0, sizeof(DW_rtwdemo_irt__initterm_T));rtwdemo_irt_initterm_Y。Out1 = 0.0;rtwdemo_irt_initterm_DW。discrete teintegrator_dstate = 10.0;} void rtwdemo_irt__initterm_terminate(void){/*(不需要终止代码)*/}

生成重置事件的代码

生成响应重置事件的代码初始化函数终止函数块。配置块的复位事件类型其参数事件监听器重置.同时设置事件名称参数。默认名称为重置

代码生成器产生一个复位入口点函数只有如果你建模重置行为。如果一个组件包含多个重置规范,则代码生成器生成的代码取决于重置函数是否共享事件名。对于给定的组件层次结构:

  • 对于具有惟一事件名的重置函数,代码生成器为每个命名事件生成单独的入口点函数。每个函数的名称都是对应事件的名称。

  • 对于共享事件名的重置函数,代码生成器将重置代码聚合到一个入口点函数中。重置函数的代码按顺序出现,从组件层次结构的最低层(最里面)开始,以根(最外面)结束。函数的名称是模型_reset.有关更多信息,请参见事件名称和代码聚合

考虑模型rtwdemo_irt_reset,它包括从初始化函数块派生的重置函数块。

事件类型而且事件名称参数说明事件监听器块设置为重置而且重置,分别。该函数使用State Writer块将Discrete Integrator块的输入值重置为5。

代码生成器产生复位功能rtwdemo_irt_reset_reset

void rtwdemo_irt_reset_reset(void) {rtwdemo_irt_reset_DW。离散integrator_dstate = 5.0;}

事件名称和代码聚合

使用初始化函数而且终止函数块来为组件层次结构定义多个初始化、重置和终止函数。每个层次结构级别只定义一个初始化函数和一个终止函数。可以为一个层次结构级别定义多个重置函数。为给定级别的函数配置的事件名称必须是唯一的。

在生成代码时,代码生成器将整个组件层次结构中具有给定事件名的函数的代码聚合到一个入口点函数中。重置函数的代码按顺序出现,从组件层次结构的最低层(最里面)开始,以根(最外面)结束。代码生成器使用事件名来命名函数。

例如,模型rtwdemo_irt_shared包括一个子系统,它复制父模型中的初始化、重置和终止函数。

尽管模型包含初始化、重置和终止函数的多个副本,但代码生成器为重置生成一个入口点函数(rtwdemo_irt_shared_reset),一个用于初始化(rtwdemo_irt_shared_initialize),一个为terminate (rtwdemo_irt_shared_terminate).在每个入口点函数中,在列出配置了初始条件的块的代码之后(模型_P。_IC),代码生成器为组件排序代码,从层次结构的最低级别开始,以根级结束。

……void rtwdemo_irt_shared_reset(void) {rtwdemo_irt_shared_DW。SubIntegrator2_DSTATE = 5.0;rtwdemo_irt_shared_DW。Integrator2_DSTATE = 5.0;}……void rtwdemo_irt_shared_initialize(void) {rtmSetErrorStatus(rtwdemo_irt_shared_M, (NULL));(void) memset(((void *)&rtwdemo_irt_shared_DW), 0, sizeof(DW_rtwdemo_irt_shared_T));rtwdemo_irt_shared_Y。Out1 = 0.0;rtwdemo_irt_shared_DW。Integrator1_DSTATE = 0.0; rtwdemo_irt_shared_DW.SubIntegrator2_DSTATE = 2.0; rtwdemo_irt_shared_DW.Integrator2_DSTATE = 10.0; . . . void rtwdemo_irt_shared_terminate(void) { /* (no terminate code required) */ }

如果将为子系统重置功能配置的事件重命名为reset_02,代码生成器产生两个复位入口点函数,rtwdemo_irt_shared_reset而且rtwdemo_irt_shared_reset_02

void rtwdemo_irt_shared_reset(void) {rtwdemo_irt_shared_DW。SubIntegrator2_DSTATE = 5.0;} void rtwdemo_irt_shared_reset_02(void) {rtwdemo_irt_shared_DW.}Integrator2_DSTATE = 5.0;}

限制

您不能从一个管理模型(一个包含模型块的根模型)生成代码,该模型公开初始化、重置或终止函数端口。

相关的话题