对单个信号、状态和参数数据元素应用存储类
一个存储类是应用于模型中的数据项(信号、块参数或状态)的代码生成设置。当你直接将它应用到数据项时,存储类:
使数据项以全局符号(通常为全局变量)的形式出现在生成的代码中。
防止诸如默认参数行为而且信号存储复用从生成的代码中删除数据项。
使用嵌入式编码器®,您可以配置生成的代码以何种格式存储数据项或以其他方式定义数据项。例如,您可以应用存储类型限定符
常量
或挥发性
或将参数数据项配置为宏(#定义
).
直接将存储类应用到单个数据项:
在执行过程中调优参数并监视信号和状态。
通过内存段配置数据在内存中的放置。
生成与外部代码交换数据(例如,全局变量)的代码。
有关使用代码映射编辑器在默认情况下对数据类别应用存储类的信息,请参见配置数据的默认代码生成.
向数据项应用存储类
这个例子展示了如何将存储类应用于模型中的信号、块状态和块参数。
探索范例模型
打开示例模型rtwdemo_roll
.
open_system (“rtwdemo_roll”)
导航到BasicRollMode
子系统。
open_system (“rtwdemo_roll / BasicRollMode”)
子系统包含一个Integrator块,它维护一块状态数据。
从模型的根级别导航到RollAngleReference
子系统。
open_system (“rtwdemo_roll / RollAngleReference”)
子系统包含一个标记为UpThr的常量块。
在本例中,您将配置Integrator块的状态和输出信号恒定值参数的常量块作为单独的全局变量出现在生成的代码中。
应用存储类
导航到模型的根级别。
打开金宝app仿真软件编码器当出现提示时,将系统目标文件更改为
grt.tlc
.单击Model Data Editor选项卡。
在模型数据编辑器中,单击变化范围按钮。这个扩展
在子系统中包含数据项的数据列表。
选择信号选项卡。
设置改变观点下拉列表
代码
.在内容过滤框中,输入
积分器
.可选地,使用的名字列为Integrator块的输出信号指定名称,例如
mySignal
.使用存储类列应用存储类
ExportedGlobal
.选择州选项卡。
可选地,使用的名字列为状态指定名称,例如
myState
.使用存储类列应用存储类
ExportedGlobal
.选择参数选项卡。不能将存储类直接应用于块参数。您必须创建一个参数对象,例如
金宝app仿真软件。参数
,使用该对象设置块参数的值,并将存储类应用于该对象。设置改变观点下拉列表
设计
.在内容过滤框中,输入
UpThr
.使用价值列中要更改参数值的
6
来UpThr
.在编辑参数值时,旁边的
UpThr
,单击动作按钮(有三个垂直点)并选择创建.在创建新数据对话框,设置价值来
金宝app仿真软件。参数
并点击好吧.一个金宝app仿真软件。参数
对象命名UpThr
出现在基本工作区中。在
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),并向对象应用存储类。
以编程方式应用存储类的技术
对于块参数,使用
set_param
设置参数的值。使用其他命令创建和配置所需参数对象的属性。示例请参见在生成的代码中创建可调校准参数.对于信号,使用
get_param
或find_system
将句柄返回到生成信号的块端口。使用句柄的参数来命名信号,然后直接应用存储类(参见将存储类直接应用于信号线(金宝appSimulink Coder))或配置信号以从信号对象获取设置,包括存储类(参见在Simulink模型中使用数据对象金宝app(金宝app模型))。对于一个轮廓尺寸块,配置出块的信号线。对于一个外港块,配置块或进入块的信号线。示例请参见通过配置输入和输出端口块设计数据接口.
对于块状态,使用
set_param
与块交互。命名状态,然后直接应用存储类(参见将存储类直接应用到块状态(金宝appSimulink Coder))或配置状态以从信号对象获取存储类(参见在Simulink模型中使用数据对象金宝app(金宝app模型))。对于一个数据存储内存块,用
set_param
与块交互。因为数据存储已经有了名称,所以不需要指定名称。方法直接应用存储类StateStorageClass
参数或配置数据存储以从信号对象获取存储类。
要与存储在模型工作空间或数据字典中的信号或参数数据对象交互,请使用工作空间或字典的编程接口。看到以编程方式与变量交互(金宝app模型)。
将存储类直接应用于信号线
此示例演示如何以编程方式将存储类直接应用于信号线。
打开示例模型
rtwdemo_secondOrderSystem
.rtwdemo_secondOrderSystem
获取名为Force: f(t)的块输出的句柄。
portHandles =...get_param (“rtwdemo_secondOrderSystem /力:f (t)”,“PortHandles”);outportHandle = portHandles.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
代表这个州。
参数对象配置快速参考图
此图显示了代码生成和存储类选项,它们控制所生成代码中参数对象的表示。
相关的话题
- 为控制生成代码中的数据表示选择存储类(金宝app仿真软件编码器)
- 生成的代码如何与环境交换数据(金宝app仿真软件编码器)
- 生成的代码如何存储内部信号,状态和参数数据(金宝app仿真软件编码器)