文档

对单个信号、状态和参数数据元素应用存储类

一个存储类是应用于模型中的数据项(信号、块参数或状态)的代码生成设置。当你直接将它应用到数据项时,存储类:

  • 使数据项以全局符号(通常为全局变量)的形式出现在生成的代码中。

  • 防止诸如默认参数行为而且信号存储复用从生成的代码中删除数据项。

  • 使用嵌入式编码器®,您可以配置生成的代码以何种格式存储数据项或以其他方式定义数据项。例如,您可以应用存储类型限定符常量挥发性或将参数数据项配置为宏(#定义).

直接将存储类应用到单个数据项:

  • 在执行过程中调优参数并监视信号和状态。

  • 通过内存段配置数据在内存中的放置。

  • 生成与外部代码交换数据(例如,全局变量)的代码。

有关使用代码映射编辑器在默认情况下对数据类别应用存储类的信息,请参见配置数据的默认代码生成

向数据项应用存储类

这个例子展示了如何将存储类应用于模型中的信号、块状态和块参数。

探索范例模型

打开示例模型rtwdemo_roll

open_system (“rtwdemo_roll”

导航到BasicRollMode子系统。

open_system (“rtwdemo_roll / BasicRollMode”

子系统包含一个Integrator块,它维护一块状态数据。

从模型的根级别导航到RollAngleReference子系统。

open_system (“rtwdemo_roll / RollAngleReference”

子系统包含一个标记为UpThr的常量块。

在本例中,您将配置Integrator块的状态和输出信号恒定值参数的常量块作为单独的全局变量出现在生成的代码中。

应用存储类

  1. 导航到模型的根级别。

  2. 打开金宝app仿真软件编码器当出现提示时,将系统目标文件更改为grt.tlc

  3. 单击Model Data Editor选项卡。

  4. 在模型数据编辑器中,单击变化范围按钮。这个扩展

  5. 在子系统中包含数据项的数据列表。

  6. 选择信号选项卡。

  7. 设置改变观点下拉列表代码

  8. 内容过滤框中,输入积分器

  9. 可选地,使用的名字列为Integrator块的输出信号指定名称,例如mySignal

  10. 使用存储类列应用存储类ExportedGlobal

  11. 选择选项卡。

  12. 可选地,使用的名字列为状态指定名称,例如myState

  13. 使用存储类列应用存储类ExportedGlobal

  14. 选择参数选项卡。不能将存储类直接应用于块参数。您必须创建一个参数对象,例如金宝app仿真软件。参数,使用该对象设置块参数的值,并将存储类应用于该对象。

  15. 设置改变观点下拉列表设计

  16. 内容过滤框中,输入UpThr

  17. 使用价值列中要更改参数值的6UpThr

  18. 在编辑参数值时,旁边的UpThr,单击动作按钮(有三个垂直点)并选择创建

  19. 创建新数据对话框,设置价值金宝app仿真软件。参数并点击好吧.一个金宝app仿真软件。参数对象命名UpThr出现在基本工作区中。

  20. UpThr属性对话框,设置价值6而且存储类ExportedGlobal.点击好吧

或者,您可以在命令提示符处使用这些命令来配置信号、状态和参数数据。

%配置信号portHandles = get_param(“rtwdemo_roll / BasicRollMode /集成商”...“PortHandles”);outportHandle = portHandles.Outport;set_param (outportHandle“名字”“mySignal”) set_param (outportHandle“StorageClass”“ExportedGlobal”%配置状态set_param (“rtwdemo_roll / BasicRollMode /集成商”...“StateName”“myState”) set_param (“rtwdemo_roll / BasicRollMode /集成商”...“StateStorageClass”“ExportedGlobal”配置参数set_param (“rtwdemo_roll / RollAngleReference / UpThr”“价值”“UpThr”) UpThr = 金宝appSimulink.Parameter(6);UpThr。StorageClass =“ExportedGlobal”

生成和检查代码

从模型生成代码。

set_param (“rtwdemo_roll”“SystemTargetFile”“grt.tlc”) rtwbuild (“rtwdemo_roll”
已在'H:\Documents\MATLAB\examples\simulinkcode -ex37783258\rtwdemo_roll.slxc'中创建'rtwdemo_roll'的Simulink缓存工件。金宝app

检查文件rtwdemo_roll.c.该文件定义了全局变量。

文件= fullfile(“rtwdemo_roll_grt_rtw”“rtwdemo_roll.c”);rtwdemodbtype(文件,'/*导出的块信号*/'“real32_T myState;”, 1, 1)
/*导出块信号*/ real32_T myssignal;/* '/Integrator' */ /*导出块参数*/ real32_T UpThr = 6.0F;/*变量:UpThr *引用:'/UpThr' */ /*导出块状态*/ real32_T myState;/* '/Integrator' */

该文件rtwdemo_roll.h声明变量。要访问这些变量,您的外部代码可以包括(# include)这个头文件。

rtwdemo_roll.c,在文件中搜索变量的名称,例如UpThr.模型算法在rtwdemo_roll_step函数对变量进行读写操作。

您可以选择的内置存储类

数据项的默认存储类设置为汽车,这意味着代码生成器决定项目在代码中的显示方式。有关可选择的内置存储类列表,请参见为控制生成代码中的数据表示选择存储类(金宝app仿真软件编码器)。

决定存储类规格的位置

对于每个单独的信号或状态数据项(包括数据存储内存block),你可以直接应用一个存储类Simulink金宝app®将您的存储类规范存储在模型文件或信号数据对象的属性中(金宝app仿真软件。信号),您可以在基本工作区、模型工作区或数据字典中创建它。要将存储类应用于块参数,必须创建一个参数数据对象(例如金宝app仿真软件。参数)并在对象中指定存储类。

  • 当您将存储类应用到模型中的信号或状态时,例如,通过使用模型数据编辑器或属性检查器,您将存储类规范存储在模型文件中。

    如果使用这种技术,就不能通过使用外部信号数据对象来控制数据项的其他特征,例如数据类型。

  • 类来应用存储类,以创建信号或参数数据对象CoderInfo属性。属性的值是a金宝app仿真软件。CoderInfo的对象,StorageClass属性用于指定存储类。在将模型中的数据项与对象关联之后,数据项将从对象获取存储类。

对于信号、状态和数据存储内存块,以决定是将存储类规范存储在模型中还是存储在数据对象中,请参见信号和状态的存储设计属性(金宝app模型)。

使用模型数据编辑器将存储类应用到输出块

您可以使用Model Data Editor将存储类直接应用到根级别外港块或驱动块的输入信号。

  • 将存储类规范存储在外港块,使用港口/外港选项卡中的模型数据编辑器。当您使用这种技术时,在删除驱动块的输入信号后,规范仍然保留。在开发内部算法之前,使用这种技术来配置模型接口。

  • 若要将规格存储在驱动块的输入信号中,请使用信号选项卡中的模型数据编辑器。

交互式应用存储类的技术

要将存储类应用于列表中的多个数据项,您可以搜索、排序和筛选这些数据项,请使用模型数据编辑器(在建模选项卡上,单击模型数据编辑器),见向数据项应用存储类

若要在关注单个信号、块状态或参数的同时应用存储类,请使用属性检查器(在建模选项卡,在设计,点击属性检查器)、信号属性对话框(用于信号)或块对话框(用于状态或参数)。下代码生成,应用存储类。

  • 对于信号、状态或数据存储内存块,首先给信号或状态一个名称,代码生成器使用该名称作为相应的全局符号的名称。然后,使用指定存储类存储类(在这种情况下,模型文件存储规范)或创建一个信号数据对象,如在Simulink模型中使用数据对象金宝app(金宝appSimulink),并向对象应用存储类。

以编程方式应用存储类的技术

要与存储在模型工作空间或数据字典中的信号或参数数据对象交互,请使用工作空间或字典的编程接口。看到以编程方式与变量交互(金宝app模型)。

将存储类直接应用于信号线

此示例演示如何以编程方式将存储类直接应用于信号线。

  1. 打开示例模型rtwdemo_secondOrderSystem

    rtwdemo_secondOrderSystem

  2. 获取名为Force: f(t)的块输出的句柄。

    portHandles =...get_param (“rtwdemo_secondOrderSystem /力:f (t)”“PortHandles”);outportHandle = portHandles.Outport;

  3. 设置对应信号的名称为ForceSignal

    set_param (outportHandle“名字”“ForceSignal”

  4. 将信号的存储类设置为ExportedGlobal

    set_param (outportHandle“StorageClass”“ExportedGlobal”

  5. 从模型生成代码。该代码声明并定义了一个全局变量ForceSignal来表示信号。

将存储类直接应用到块状态

此示例演示如何以编程方式将存储类应用于块状态。

  1. 打开示例模型rtwdemo_basicsc

    rtwdemo_basicsc

  2. 命名的状态延迟块,myState

    set_param (rtwdemo_basicsc /延迟的“StateName”“myState”

  3. 将状态的存储类设置为ExportedGlobal

    set_param (rtwdemo_basicsc /延迟的...“StateStorageClass”“ExportedGlobal”

  4. 从模型生成代码。该代码声明并定义了一个全局变量myState代表这个州。

参数对象配置快速参考图

此图显示了代码生成和存储类选项,它们控制所生成代码中参数对象的表示。

相关的话题