将存储类应用于单个信号、状态和参数数据元素
一个存储类是应用于模型中的数据项(信号、块参数或状态)的代码生成设置。当你直接将它应用到一个数据项时,存储类:
使数据项作为全局符号(通常是全局变量)出现在生成的代码中。
阻止诸如默认参数行为而且信号存储重用从生成的代码中消除数据项。
使用嵌入式编码器®,您可以配置生成的代码存储数据项或以其他方式定义数据项的格式。例如,您可以应用存储类型限定符
常量
或挥发性
或将参数数据项配置为宏(#定义
).
直接将存储类应用到各个数据项:
在执行期间调优参数并监视信号和状态。
通过内存段配置数据在内存中的位置。
生成与外部代码交换数据(例如,全局变量)的代码。
有关使用代码映射编辑器在默认情况下将存储类应用于数据类别的信息,请参见配置数据的默认代码生成(嵌入式编码)。
向数据项应用存储类
这个例子展示了如何将存储类应用到模型中的信号、块状态和块参数。
探索范例模型
打开示例模型rtwdemo_roll
.
open_system (“rtwdemo_roll”)
导航到BasicRollMode
子系统。
open_system (“rtwdemo_roll / BasicRollMode”)
子系统包含一个Integrator块,它维护一块状态数据。
从模型的根级别导航到RollAngleReference
子系统。
open_system (“rtwdemo_roll / RollAngleReference”)
子系统包含一个名为UpThr的Constant块。
在本例中,配置Integrator块的状态和输出信号恒定值参数在生成的代码中作为单独的全局变量出现。
应用存储类
导航到模型的根级别。
选择查看>模型数据编辑器.
要查看子系统中的数据项,请激活变化范围按钮。
选择信号选项卡。
设置改变观点下拉列表代码
.
在内容过滤框中,输入积分器
.
可选地,使用的名字列来为Integrator块的输出信号指定名称,例如mySignal
.
使用存储类列应用存储类ExportedGlobal
.
选择州选项卡。
可选地,使用的名字列来为状态指定名称,例如myState
.
使用存储类列应用存储类ExportedGlobal
.
选择参数选项卡。不能将存储类直接应用于块参数。相反,您必须创建一个参数对象,例如万博1manbetx仿真软件。参数
,使用该对象设置block参数的值,并将存储类应用于该对象。
设置改变观点下拉列表设计
.
在内容过滤框中,输入UpThr
.
使用价值要从中更改参数值的列6
来UpThr
.
在编辑参数值时,旁边UpThr
,点击操作按钮(有三个垂直点)并选择创建.
在创建新数据对话框,设置价值来万博1manbetx仿真软件。参数
并点击好吧.一个万博1manbetx仿真软件。参数
对象命名UpThr
出现在基本工作区中。
在UpThr
属性对话框,设置价值来6
而且存储类来ExportedGlobal
.点击好吧.
或者,您可以在命令提示符处使用这些命令来配置信号、状态和参数数据。
%配置信号portandles = get_param(“rtwdemo_roll / BasicRollMode /集成商”,...“PortHandles”);outportthandle = portthandles . 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 = 万博1manbetxSimulink.Parameter(6);UpThr。StorageClass =“ExportedGlobal”;
生成和检查代码
从模型生成代码。
set_param (“rtwdemo_roll”,“SystemTargetFile”,“grt.tlc”) rtwbuild (“rtwdemo_roll”)
开始模型的构建过程:rtwdemo_roll成功完成模型的构建过程:rtwdemo_roll
检查文件rtwdemo_roll.c
.该文件定义全局变量。
文件= fullfile(“rtwdemo_roll_grt_rtw”,“rtwdemo_roll.c”);rtwdemodbtype(文件,'/*输出块信号*/',“real32_T myState;”, 1, 1)
/*输出块信号*/ real32_T我的信号;/* '/Integrator' */ /*导出块参数*/ real32_T UpThr = 6.0F;/*变量:UpThr *引用by: ' /UpThr' */ /*导出块状态*/ real32_T myState;/* ' /Integrator' */
该文件rtwdemo_roll.h
声明变量。要访问这些变量,您的外部代码可以包括(# include
)这个头文件。
在rtwdemo_roll.c
,在文件中搜索变量的名称,例如UpThr
.模型中的算法rtwdemo_roll_step
函数对变量进行读写。
您可以选择的内置存储类
数据项的默认存储类设置为汽车
,这意味着代码生成器决定项目在代码中的显示方式。有关可选择的内置存储类的列表,请参见选择一个存储类来控制生成代码中的数据表示.
决定存储类规格的存储位置
对于每个单独的信号或状态数据项(包括数据存储内存block),直接应用存储类Simulink万博1manbetx®将您的存储类规范存储在模型文件或信号数据对象的属性中(万博1manbetx仿真软件。信号
),您可以在基本工作空间、模型工作空间或数据字典中创建它。要将存储类应用于块参数,必须创建参数数据对象(例如万博1manbetx仿真软件。参数
)并在对象中指定存储类。
当您将存储类应用于模型中的信号或状态时,例如,通过使用model Data Editor或Property Inspector,您将存储类规范存储在模型文件中。
如果使用此技术,则无法通过使用外部信号数据对象控制数据项的其他特征,例如数据类型。
类创建信号或参数数据对象时,应用存储类
CoderInfo
对象的属性。属性的值是a万博1manbetx仿真软件。CoderInfo
的对象,StorageClass
用于指定存储类的属性。在将模型中的数据项与对象关联之后,数据项将从对象获取存储类。
对于信号、状态和数据存储内存块,以决定是将存储类规范存储在模型中还是存储在数据对象中,请参见存储信号和状态的设计属性(万博1manbetx模型)。
使用模型数据编辑器将存储类应用到输出端口块
您可以使用Model Data Editor将存储类直接应用到根级外港块或驱动块的输入信号。
方法中存储存储类规范外港块,使用港口/外港标签中的模型数据编辑器。当您使用这种技术时,在删除驱动块的输入信号后,规范仍然存在。在开发内部算法之前,使用此技术配置模型接口。
若要将规格存储在驱动块的输入信号中,请使用信号标签中的模型数据编辑器。
交互应用存储类的技术
若要将存储类应用于可以搜索、排序和筛选的列表中的多个数据项,请使用模型数据编辑器(视图>模型数据编辑器),详见向数据项应用存储类.
若要在关注单个信号、块状态或参数时应用存储类,请使用属性检查器(视图>属性检查器)、信号属性对话框(用于信号)或块对话框(用于状态或参数)。下代码生成,应用存储类。
对于参数,首先将参数的值设置为您希望用于所需参数对象的名称。然后,创建并配置参数对象,如在生成的代码中创建可调校准参数.
为信号、状态或数据存储内存块,首先给信号或状态一个名称,代码生成器使用该名称作为相应的全局符号的名称。然后,使用指定存储类存储类(在这种情况下,模型文件存储规范)或创建一个信号数据对象,如在Simulink模型中使用数据对象万博1manbetx(万博1manbetxSimulink),并将存储类应用到对象。
以编程方式应用存储类的技术
对于块参数,使用
set_param
设置该参数的值。使用其他命令创建和配置所需参数对象的属性。有关示例,请参见在生成的代码中创建可调校准参数.对于信号,使用
get_param
或find_system
将句柄返回到生成信号的块端口。使用句柄的参数来命名信号,然后直接应用存储类(参见直接应用存储类信号线)或配置信号以从信号对象获取设置,包括存储类(参见在Simulink模型中使用数据对象万博1manbetx(万博1manbetx模型))。对于一个轮廓尺寸块,配置出块的信号线。对于一个外港块,配置块或进入块的信号线。有关示例,请参见通过配置输入和输出块设计数据接口.
对于块状态,使用
set_param
与块交互。命名状态,然后直接应用存储类(参见直接将存储类应用到块状态)或配置状态以从信号对象获取存储类(参见在Simulink模型中使用数据对象万博1manbetx(万博1manbetx模型))。对于一个数据存储内存块,用
set_param
与块交互。因为数据存储已经有名称,所以不需要指定名称。类直接应用存储类StateStorageClass
参数化或配置数据存储以从信号对象获取存储类。
要与存储在模型工作空间或数据字典中的信号或参数数据对象交互,请使用工作空间或字典的编程接口。看到以编程方式与变量交互(万博1manbetx模型)。
直接应用存储类信号线
此示例演示如何以编程方式将存储类直接应用到信号线。
打开示例模型
rtwdemo_secondOrderSystem
.rtwdemo_secondOrderSystem
获取名为Force: f(t)的块输出的句柄。
portHandles =...get_param (“rtwdemo_secondOrderSystem /力:f (t)”,“PortHandles”);outportthandle = portthandles . outport;
设置对应信号的名称为
ForceSignal
.set_param (outportHandle“名字”,“ForceSignal”)
将信号的存储类设置为
ExportedGlobal
.set_param (outportHandle“StorageClass”,“ExportedGlobal”)
从模型生成代码。代码声明并定义了一个全局变量
ForceSignal
来表示信号。
直接将存储类应用到块状态
这个例子展示了如何以编程方式将存储类应用到块状态。
打开示例模型
rtwdemo_basicsc
.rtwdemo_basicsc
的状态延迟块,
myState
.set_param (rtwdemo_basicsc /延迟的,“StateName”,“myState”)
将状态的存储类设置为
ExportedGlobal
.set_param (rtwdemo_basicsc /延迟的,...“StateStorageClass”,“ExportedGlobal”)
从模型生成代码。代码声明并定义了一个全局变量
myState
代表国家。
参数对象配置快速参考图
该图显示了代码生成和存储类选项,这些选项控制生成的代码中参数对象的表示。