应用存储类单独的信号,州和参数数据元素

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

  • 使所述数据项中生成的代码显示为全局符号,通常是全局变量。

  • 阻止优化,如默认参数行为信号存储重用从生成码消除的数据项。

  • 随着嵌入式编码器®时,可以配置在其中生成的代码存储或以其他方式定义数据项的格式。例如,您可以将存储类型修饰符常量要么挥发物或配置参数的数据项显示为宏(#限定)。

直接应用存储类个人数据项目:

  • 执行期间调谐参数和监视信号和状态。

  • 通过内存部分内存配置数据放置。

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

有关通过默认施加存储的类数据的类别,通过使用代码映射编辑信息,请参见配置默认代码生成数据(嵌入式编码)。

应用存储类数据项

此示例示出了如何应用存储类的信号,块状态,在一个模型中的块参数。

探索范例模型

打开示例模型rtwdemo_roll

open_system('rtwdemo_roll'

导航到BasicRollMode子系统。

open_system('rtwdemo_roll / BasicRollMode'

该子系统包含一个积分器块,其保持片状态的数据。

从模型的根目录下,进入到相应的RollAngleReference子系统。

open_system('rtwdemo_roll / RollAngleReference'

该子系统包含一个标记为UpThr恒块。

在本例中,配置的集成器块和所述的状态,并输出信号恒值常数块的参数出现在所生成的代码作为单独的全局变量。

应用存储类型

  1. 导航到该模型的根水平。

  2. 打开万博1manbetxSimulink的编码器应用程序。当提示,更改系统目标文件grt.tlc

  3. 点击Model数据编辑器选项卡。

  4. 模型中的数据编辑器,单击更改范围按钮。该扩展数据元素的列表中的子系统包括。

  5. 选择信号标签。

  6. 设置更改视图下拉列表

  7. 在里面内容过滤框中,输入积分

  8. (可选)使用名称列于Integrator块的输出信号指定的名称,如mySignal

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

  10. 选择状态标签。

  11. (可选)使用名称柱为国家指定一个名称,如myState

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

  13. 选择参数标签。您不能直接应用的存储类块参数。您必须创建一个参数对象,如万博1manbetxSimulink.Parameter中,使用对象来设置块参数的值,和存储类应用到对象。

  14. 设置更改视图下拉列表设计

  15. 在里面内容过滤框中,输入UpThr

  16. 使用列,以改变从参数值6UpThr

  17. 当编辑参数值,旁边UpThr单击动作按钮(三个垂直圆点),然后选择创建

  18. 在里面创建新数据对话框中,设置万博1manbetxSimulink.Parameter位置基地工作区。请点击创建。一个万博1manbetxSimulink.Parameter对象命名UpThr出现在基工作区。

  19. 在里面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 = S万博1manbetximulink.Parameter(6);UpThr.StorageClass ='ExportedGlobal';

生成和检查代码

从模型中生成代码。

set_param('rtwdemo_roll''SystemTargetFile''grt.tlc')rtwbuild('rtwdemo_roll'
###开始构建过程为:rtwdemo_roll ###为“rtwdemo_roll”生成的代码是最新的,因为没有发现结构,参数或代码替换库的变化。###构建过程的顺利完成为:rtwdemo_roll

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

文件=完整文件('rtwdemo_roll_grt_rtw''rtwdemo_roll.c');rtwdemodbtype(文件,'/ *导出块信号* /''real32_T myState;',1,1)
/ *导出块信号* / real32_T mySignal;/ * ' /集成' * / / *导出块参数* / real32_T UpThr = 6.0F;/ *变量:UpThr *引用的由: ' / UpThr' * / / *导出块状态* / real32_T myState;/ * ' /集成' * /

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

rtwdemo_roll.c,在文件中搜索变量的名称,如UpThr。在该模型算法rtwdemo_roll_step功能读取和写入的变量。

内置存储类,您可以选择

对数据项的默认存储类设置汽车,这意味着码生成器确定的项目如何出现在代码。对于内置存储类,您可以选择,看到一个列表选择存储类用于控制数据表示在生成的代码

决定存储存储类规范

对于每个单独的信号或状态数据项(包括数据存储内存块),你直接将存储类,Simulink的万博1manbetx®存储在任一模型文件中或在信号数据对象的属性的存储类规范(万博1manbetxSimulink.Signal),您在基部的工作区,一个模型工作区,或一个数据字典创建。要应用存储类块参数,你必须创建一个参数的数据对象(如万博1manbetxSimulink.Parameter),并指定该对象中的存储类。

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

    如果使用该技术,则无法控制数据项的其它特性,诸如数据类型,通过使用外部信号数据对象。

  • 当你创建一个信号或参数的数据对象,通过使用应用存储类CoderInfo对象的属性。该属性的值是一个万博1manbetxSimulink.CoderInfo对象,其StorageClass物业使用指定存储类。当您在与对象模型中的数据项关联,数据项获取从对象的存储类。

对于信号,状态和数据存储内存块,以决定是否存储在模型中或在数据对象中的存储类规范,参见店铺设计属性信号和国(万博1manbetxSIMULINK)。

利用该模型数据编辑器应用存储类出口框

您可以使用模型数据编辑器直接将存储类到根级别外港阻断或与输入信号驱动块。

  • 要存储在存储类规范外港块,使用Inports / Outports标签模型中的数据编辑器。当您使用此技术,规范遗体后删除输入信号驱动块。使用这种技术,你开发的内部算法之前配置模型界面。

  • 为了存储在输入信号中的规范,它的驱动器的块中,使用信号标签模型中的数据编辑器。

技术应用存储类型交互

要应用存储类多个数据项的列表,你可以搜索,排序和过滤,使用模型数据编辑器(在造型选项卡,单击模型数据编辑器),如图应用存储类数据项

要应用而聚焦在一个单一的信号,块状态或参数,使用属性检查存储类(在造型选项卡,在设计,点击属性检查器)中,信号属性对话框(为一个信号),或者块对话框(为一个状态或参数)。下代码生成,应用存储类。

  • 对于一个信号,状态,或数据存储内存块,第一给信号或状态的名称,其中,所述代码生成器使用作为相应的全局符号的名称。然后,使用任一指定存储类存储类(在这种情况下,模型文件存储规范)或创建一个信号数据对象如图在Simulink模型使用数据对象万博1manbetx(万博1manbetxSimulink中),并应用一个存储类的对象。

技术应用存储类编程

  • 对于一个块参数,使用set_param设置参数的值。使用其它命令来创建和配置所需要的参数对象的属性。对于一个示例,请参见在生成的代码创建可调校准参数

  • 对于一个信号,使用get_param要么find_system到手柄返回到产生的信号中的块端口。使用手柄的参数来命名信号,然后直接应用存储类(见直接应用存储类到信号线),或者配置信号以获取设置,包括存储类,从一个信号对象(见在Simulink模型使用数据对象万博1manbetx(万博1manbetxSimulink中))。

  • 运行轨迹块,配置信号线即离开块。为外港块,配置块或进入所述块中的信号线。对于一个示例,请参见设计数据接口的配置运行轨迹和出口框

  • 对于一个块的状态,利用set_param与块进行交互。命名状态,然后直接应用存储类(见直接应用存储类以阻塞状态),或者配置为获取从信号对象存储类的状态(参照在Simulink模型使用数据对象万博1manbetx(万博1manbetxSimulink中))。

  • 为一个数据存储内存块,使用set_param与块进行交互。由于数据存储已经有一个名字,你并不需要指定一个名称。直接通过应用存储类StateStorageClass参数或配置数据存储到从信号对象获取存储类。

与您在模型工作区或数据字典存储的信号或参数数据对象交互,使用工作区或字典的编程接口。看到与之交互变量编程(万博1manbetxSIMULINK)。

直接应用存储类到信号线

此示例示出了如何以编程直接应用的存储类的信号线。

  1. 打开示例模型rtwdemo_secondOrderSystem

    rtwdemo_secondOrderSystem

  2. 得到一个处理一个名为部队块的输出: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表示的状态。

参数对象配置快速参考图

该图示出了控制在生成的代码的参数对象的表示中的代码生成和存储类的选项。

相关话题