组织相关块参数定义的结构
当您使用数字MATLAB®变量设置块参数值在一个模型中,大型模型可以积累许多变量,增加维护和努力导致变量名长度增长。
相反,您可以将这些参数值的结构。每个结构是一个变量,每个字段的结构存储数字参数值。您可以分配结构有意义的名称,子结构,字段指示每个值的目的。
使用结构:
减少工作空间变量的数量,您必须维护。
避免名字冲突之间空间变量。
你不能创建两个变量具有相同的名称在相同的范围,比如在基本工作空间。每个字段创建结构时,您必须提供一个名字,但多个结构可以每个包含一个字段,使用相同的名字。因此,您可以使用每个结构和子结构名称空间能防止字段名称相互冲突和其他变量名相同的范围。
组块的参数值进行逻辑分组。例如,使用嵌套结构清楚地确定每个子系统的参数值或引用的模型使用。
如果你使用掩码参数或模型参数的参数值传递给系统的组件,您可以使用结构来减少个人面具参数或模型参数,您必须维护。而不是传递多个变量,您可以通过一个单一结构变量。
基本信息创建和操纵MATLAB结构,明白了结构。基本信息设置模块的参数值在一个模型中,看到的组块的参数值。
使用结构初始化总线信号,明白了为总线元素指定初始条件。
创建和使用参数结构
这个例子展示了如何创建和使用一个参数在模型结构。
模型的例子f14
从基本工作空间设置块使用多个变量参数值。例如,当您打开模型时,它创建变量Zw
,兆瓦
,Mq
在基本工作空间。组织这些变量为一个结构变量:
在命令提示符处,打开示例模型。
f14
在命令提示符下,创建参数结构
myGains
。设置字段值通过使用目标变量的值。myGains.Zw= Zw; myGains.Mw = Mw; myGains.Mq = Mq;
在模型浏览器中,模型层次结构窗格中,单击基本工作空间。在内容窗格中,右键单击变量
Mq
并选择发现在使用。在选择一个系统对话框中,单击节点f14并点击好吧。点击好吧当被问及更新图。
在内容窗格中,右键单击行对应块Gain1并选择的标签属性。Gain1块对话框打开。
改变的价值获得参数从
Mq
来myGains.Mq
并点击好吧。在内容窗格中,右键单击行转移Fcn.1块并选择对应属性。
改变的价值分母系数参数从
(1,mq)
来[1,-myGains.Mq]
并点击好吧。在模型层次结构窗格中,单击基本工作空间。使用发现在使用定位块,使用变量
兆瓦
和Zw
。块对话框,取代引用变量名称根据表。变量名 更换名字 兆瓦
myGains.Mw
Zw
myGains.Zw
清除旧变量。
清晰的Zw兆瓦Mq
每个修改的块参数现在使用的字段myGains
结构。每个结构域的数值等于清除相应的变量的值。
您可以迁移模型使用一个参数结构代替多个工作空间变量。
在字段值存储数据类型信息
使用一个结构或数组的结构组织使用其他数据类型的参数值双
,您可以显式地指定当您创建的结构类型。当您创建的结构、使用类型表达式等单(15.23)
指定字段值。
myParams。获得= single(15.23);
如果你想改变字段的值后,你一定记得再显式地指定类型。如果你不指定类型,字段值使用的数据类型双
而不是:
myParams。获得= 15.23;%的“获得”现在使用的数据类型“双重”而不是“单身”。
保护规范类型,您可以使用下标赋值字段指定一个新值:
%分配类型的值“单身”。myParams。获得= single(15.23);%分配新值,同时保留类型“单身”。myParams.Gain (,) = 11.79;
匹配一个定点数据类型,设置使用一个字段值fi
(定点设计师)对象。
控制字段的数据类型和特点通过创建参数对象
一个金宝appSimulink.Parameter
对象允许您单独一块参数的值的数据类型。如果你使用一个参数对象来存储结构的结构或数组,您可以创建一个金宝appSimulink.Bus
对象作为整个结构的数据类型。
您可以使用总线对象和参数对象显式地控制:
每个字段的数据类型。当你使用这种技术,你不需要记住使用输入表达式或下标赋值设置字段值。
复杂性、维度和单位每个字段。
每个字段的最小和最大价值如果字段表示一个可调参数的值。
整个结构的形状。的形状结构数量的字段的名称和等级。
结构的可调谐性从模型生成的代码。
创建一个参数结构
myParams
。myParams =结构(…“SubsystemA”结构(…“获得”,15.23,…“抵消”,89,…“Init”0.59),…“SubsystemB”结构(…多项式系数的(5.32 - 7.99),…“抵消”57岁的…“Init1”,1.76,…“Init2”,2.76)…);
使用的函数
金宝appSimulink.Bus.createObject
创建金宝appSimulink.Bus
对象代表了结构和子结构。金宝appSimulink.Bus.createObject (myParams)
因为
myParams
包含两个独特的子结构,创建三个功能金宝appSimulink.Bus
对象:一个名叫slBus1
代表父结构myParams
,一个叫SubsystemA
子结构的SubsystemA
,一个叫SubsystemB
子结构的SubsystemB
。重命名总线对象
slBus1
作为myParamsType
。myParamsType = slBus1;清晰的slBus1
存储结构
myParams
在一个金宝appSimulink.Parameter
对象。myParams = 金宝appSimulink.Parameter (myParams);
的
价值
属性的参数对象包含结构。设置参数的数据类型对象总线对象
myParamsType
。myParams。数据类型=“巴士:myParamsType”;
打开类型编辑器查看总线对象。
typeeditor
表中,扩大公共汽车对象命名
SubsystemA
。然后,根据图设置数据类型。可以随意地改变总线的数据类型对象命名
SubsystemB
。
的参数对象myParams
存储参数结构。参数的数据类型对象总线对象myParamsType
。前仿真和代码生成,投下的参数对象字段值的数据类型中指定总线对象。
使用一个字段设置一块参数值,指定一个表达式等myParams.SubsystemB.Init1
。
在命令提示符访问字段值,使用价值
属性的参数对象。因为公共汽车对象控制字段的数据类型,您不需要使用一个输入表达式设置字段值。
myParams.Value.SubsystemA。获得= 12.79;
严格控制现场总线对象特性和结构的形状。例如,如果您设置双元素的值字段myParams.SubsystemB.Coeffs
三元素数组,模型生成一个错误当你设置一块参数值。改变字段的尺寸,修改元素多项式系数
总线中的对象SubsystemB
。
操纵总线对象创建后,明白了创建并指定仿真软件。金宝app总线对象和保存模型。金宝app总线对象。
字段数据类型与信号数据类型相匹配
假设您使用的字段myParams.SubsystemA.Gain
设置的值获得参数在一个获得块。如果你想要的数据类型字段的数据类型相匹配的输出信号,你不能依赖上下文敏感的数据类型(请参阅上下文敏感的数据类型)。考虑使用金宝appSimulink.AliasType
或者一个金宝appSimulink.NumericType
对象设置字段的数据类型和信号。如果不使用一个数据类型的对象,你必须记住改变字段的数据类型时改变信号的数据类型。
在MATLAB命令窗口,创建一个
金宝appSimulink.AliasType
对象代表了数据类型单
。myType = 金宝appSimulink.AliasType;myType。基类型=“单一”;
在获得块对话框,信号的属性选项卡,设置输出数据类型来
myType
。在MATLAB命令窗口,打开类型编辑器。
typeeditor
选择总线对象命名
SubsystemA
。然后,设置元素的数据类型命名获得
来myType
。
现在的输出信号获得块和结构领域myParams.SubsystemA.Gain
使用你指定的数据类型使用基类型
的属性myType
。
关于数据类型对象的更多信息,请参阅金宝appSimulink.AliasType
和金宝appSimulink.NumericType
。
管理结构变量
创建、修改和检查一个变量的值是一个结构,可以使用变量编辑器。有关更多信息,请参见修改结构和数组变量交互。
定义参数通过创建嵌套层次结构
进一步组织块的参数值,创建一个嵌套的层次结构。
例如,假设您创建子系统SubsystemA
和SubsystemB
在你的模型。如您使用变量Offset_SubsystemA
和Offset_SubsystemB
组块子系统的参数值。
Gain_SubsystemA = 15.23;Offset_SubsystemA = 89;Init_SubsystemA = 0.59;Coeffs_SubsystemB = (5.32 - 7.99);Offset_SubsystemB = 57;Init1_SubsystemB = 1.76;Init2_SubsystemB = 2.76;
创建一个参数为每个子系统结构,包含一个子结构。使用现有的变量的值来设置字段值。
myParams =结构(…“SubsystemA”结构(…“获得”Gain_SubsystemA,…“抵消”Offset_SubsystemA,…“Init”Init_SubsystemA),…“SubsystemB”结构(…多项式系数的Coeffs_SubsystemB,…“抵消”Offset_SubsystemB,…“Init1”Init1_SubsystemB,…“Init2”Init2_SubsystemB)…);
单一结构变量myParams
包含所有的块的参数信息子系统。因为每个子结构充当一个命名空间,您可以定义抵消
不止一次。
使用抵消
子结构的领域SubsystemB
一块参数的值,指定参数值块对话框的表达式myParams.SubsystemB.Offset
。
组织多个参数结构到一个数组中
组织参数结构有相似的特点,您可以创建一个变量的值是一个数组的结构。这种技术帮助你的参数化模型,包含多个实例算法,如图书馆子系统或引用的模型,利用模型参数。
假设您创建两个相同的子系统模型。
假设在每个子系统需要三个数值来设置参数值。两种结构的创建一个数组来存储值。
myParams (1)。获得= 15.23; myParams(1).Offset = 89; myParams(1).Init = 0.59; myParams(2).Gain = 11.93; myParams(2).Offset = 57; myParams(2).Init = 2.76;
每一个结构数组中存储三个参数值的一个子系统。
设置一块参数的值的一个子系统,指定一个表达式引用的一个结构数组中。例如,使用表达式myParams .Init (2)
。
组织可重用组件的参数值和迭代算法
你也可以在一个分区的数组结构为每个子系统块。这种技术可以帮助你组织工作空间变量时反复执行一个算法模型,例如通过迭代算法在矢量信号。例如,看到的重复一个算法使用for - each子系统。
如果你使用模型参数来指定不同的参数值的多个实例引用的模型,您可以使用数组的结构组织模型参数值。参考模型中的工作空间,创建一个结构变量和配置模型使用结构作为模型参数。使用结构的字段设置块模型中的参数值。然后,创建一个数组的结构基工作区或一个父模型或模型的数据字典是有联系的。在父模型或模型,使用的每一个结构数组中的价值模型的参数模型块。每一个结构数组中存储参数值引用模型的一个实例。
该模型sldemo_mdlref_datamngt
包含三个实例(模型块)的蒙面的参考模型sldemo_mdlref_counter_datamngt
。基本工作空间变量IC1
,IC2
,Param1
,Param2
是金宝appSimulink.Parameter
对象的值的结构。父模型使用这些变量设置掩码参数的值模型块。自IC1
在结构上相同IC2
,Param1
来Param2
,你可以把这四个结构的两个数组结构。
打开示例父模型。
openExample (“sldemo_mdlref_datamngt”)
模型创建了四个
金宝appSimulink.Parameter
基本工作空间中的对象。打开示例引用的模型。
sldemo_mdlref_counter_datamngt
模型空间定义了两个模型的参数,
CounterICs
和CounterParams
值的结构。块模型中使用这些结构的字段设置参数值。在模型中
sldemo_mdlref_datamngt
打开模型数据编辑器(上建模选项卡上,单击模型数据编辑器)。在模型数据编辑器,检查参数选项卡。在模型中,点击其中一个模型块。
模型数据编辑器突出行对应于两个面具参数选择模型块。块使用掩码参数设置值的两个模型参数定义的参考模型,
sldemo_mdlref_counter_datamngt
。每一个模型块使用不同的组合四个参数对象的基本工作空间设置参数值。在模型中数据编辑器价值列,单击其中一个细胞开始编辑相应的掩码参数的值(例如,
IC1
)。下一个参数值,点击操作按钮并选择开放。参数对象的属性对话框打开。在属性对话框,旁边价值框,点击操作按钮并选择打开变量编辑器。
变量编辑器显示参数对象存储结构。的结构
Param2
和IC2
有相同的字段结构吗Param1
和IC1
但不同的字段值。在命令提示符处,结合这四个参数对象为两个参数对象的值是数组结构。
%通过复制Param1参数创建一个新的对象。Param = Param1.copy;%使用Param2作为第二个结构中的结构在新的对象。Param.Value (2) = Param2.Value;%现在参数的值是一个数组的两个结构。Param1和Param2 %删除旧的对象。清晰的Param1Param2%通过复制IC1参数创建一个新的对象。%使用IC2作为第二个结构中的结构在新的对象。IC = IC1.copy;IC.Value (2) = IC2.Value;清晰的IC1IC2
在父模型,在模型数据编辑器,使用价值列取代面具参数的值根据表
之前的值 新值 Param1
参数(1)
IC1
集成电路(1)
Param2
参数(2)
IC2
集成电路(2)
每一个模型块设置模型参数的值CounterICs
通过使用一个结构数组中集成电路
。同样的,每一块设置的值CounterParams
通过使用结构之一参数
。
执行统一在一个结构数组
所有的结构数组的结构的字段必须有相同的层次结构。层次结构中的每个字段必须有相同的特征在整个数组。您可以使用一个参数对象和一个总线对象执行这个结构之间的一致性。
使用一个参数对象来表示一个数组参数结构,设置值的数组对象的结构:
%创建的数组结构。myParams (1)。获得= 15.23; myParams(1).Offset = 89; myParams(1).Init = 0.59; myParams(2).Gain = 11.93; myParams(2).Offset = 57; myParams(2).Init = 2.76;%创建总线对象。金宝appSimulink.Bus.createObject (myParams);myParamsType = slBus1;清晰的slBus1%创建参数对象并设置数据类型。myParams = 金宝appSimulink.Parameter (myParams);myParams。数据类型=“巴士:myParamsType”;
使用一个字段设置一块参数值,指定一个表达式等myParams .Offset (2)
。
在命令提示符访问字段值,使用价值
属性的参数对象。
myParams.Value (2)。抵消= 129;
创建一个结构Constant-Valued信号
之前考虑迁移到参数结构
之前迁移模型,使用参数结构,发现所有的块在目标模型和其他模型,你打算使用变量替换。
例如,假设两个街区在模型中使用工作空间变量
myvar#
。如果您创建了一个结构myParams
与一个字段myvar#
,并设置参数值只有一个街区myParams.myVar
,另一块继续使用变量myvar#
。如果你删除myvar#
,该模型生成一个错误,因为剩下的块需要删除变量。发现所有的块,用一个变量:
打开所有的模型,可以使用变量。如果模型层次结构模型中参考,您可以打开只有顶级模特。
在模型数据编辑器或在模型浏览器中内容窗格中,右键单击变量和选择发现在使用。Model Explorer显示所有的块使用的变量。
你会发现只在开放模型变量的使用。之前您迁移到参数结构,打开所有可能使用目标变量的模型。关于确定变量使用的更多信息在一个模型中,看到的发现使用一个特定的变量的块。
或者,您可以避免删除
myvar#
。然而,如果你改变的价值myParams.myVar
结构领域,你必须记住改变的价值myvar#
来匹配。您可以组合多个单独的对象(如变量或参数
金宝appSimulink.Parameter
)到一个结构,它存储在一个变量或参数对象(将参数对象,见结合现有的参数对象结构)。然而,由此产生的变量或对象作为一个单一的实体。因此,你不能应用不同的代码生成设置,如存储类、单个字段的结构。
结合现有的参数对象结构
当你使用参数对象设置块参数值(例如,所以您可以应用存储类),结合成一个单一的对象结构:
创建一个MATLAB结构并将其存储在一个变量中。设置字段值,使用每个现有的参数对象存储的参数值。
将变量转换为一个参数对象。创建和使用一个
金宝appSimulink.Bus
对象作为参数的数据类型对象(见控制字段的数据类型和特点通过创建参数对象)。选择一个存储类申请结果参数对象。你只可以选择一个存储类,它适用于整个结构。
传输参数元数据,比如
最小值
和马克斯
现有的参数对象的属性,对应的属性金宝appSimulink.BusElement
总线对象中的对象。
例如,假设您有三个单独的参数对象。
多项式系数= S金宝appimulink.Parameter (17.5);多项式系数。最小值= 14.33; coeff.DataType =“单一”;多项式系数。StorageClass =“ExportedGlobal”;init = 金宝appSimulink.Parameter (0.00938);init。最小值= -0.005; init.Max = 0.103; init.DataType =“单一”;init。StorageClass =“模型默认”;抵消= Simul金宝appink.Parameter (199);偏移量。数据类型=“uint8”;偏移量。StorageClass =“ExportedGlobal”;
创建一个结构变量。
myParams。多项式系数= coeff.Value;myParams。init = init.Value;myParams。抵消= offset.Value;
将变量转换为一个参数对象。
myParams = 金宝appSimulink.Parameter (myParams);
创建一个总线对象,并使用它作为参数的数据类型对象。
金宝appSimulink.Bus.createObject (myParams.Value);paramsDT = (slBus1)复印件;myParams。数据类型=“巴士:paramsDT”;
元数据从旧的参数对象转移到公共汽车总线中的元素对象。
%多项式系数paramsDT.Elements (1)。Min = coeff.Min;paramsDT.Elements (1)。数据类型=多项式系数。DataType;%初始化paramsDT.Elements (2)。Min = init.Min;paramsDT.Elements (2)。Max = init.Max;paramsDT.Elements (2)。数据类型=init。DataType;%抵消paramsDT.Elements (3)。数据类型=偏移量。DataType;
帮助你编写一个脚本,该脚本执行转移操作,您可以使用
属性
函数来找到公共汽车的属性元素和旧的参数对象的共同点。列出结构字段,这样您就可以遍历它们,使用字段名
函数。应用参数对象的存储类。
myParams。StorageClass =“ExportedGlobal”;
现在,您可以使用的字段myParams
,而不是旧的参数对象,设置参数值。
参数结构生成的代码
您可以配置参数结构出现在生成的代码的结构和数组结构。与参数结构,生成代码的信息组织数据结构生成的代码(金宝app仿真软件编码器)。
参数结构的局限性
一个字段的值用来设置一块参数必须是一个数字或一个枚举类型。一个字段的值可以是一个真正的或复杂的标量,矢量或多维数组。
如果任何字段的结构是一个多维数组,你不能调整模拟期间的任何字段值。
所有的结构数组的结构的字段必须有相同的层次结构。层次结构中的每个字段必须有相同的特征在整个数组:
字段名
数值数据类型,例如
单
或int32
复杂性
维
假设您定义两个数组结构。
paramStructArray =…结构(“sensor1”int16 (7),“sensor2”、单(9.23))…结构(“sensor1”int32 (9),“sensor2”单(11.71)));
你不能使用任何的字段在一块参数,因为字段
sensor1
使用不同的数据类型在每一个结构。参数结构不支持上下文相关的数据输入生成的代码。金宝app如果代码中的参数结构可调,结构使用数值数据类型的字段,通过使用输入表达式或您指定
金宝appSimulink.Bus
对象。如果不使用或输入表达式金宝appSimulink.Bus
对象,结构使用的字段双
数据类型。
包共享断点和表数据查找表
当你查找表之间共享数据块时,考虑使用金宝appSimulink.LookupTable
和金宝appSimulink.Breakpoint
对象,而不是结构存储和组织数据。这种技术可以改进模型可读性通过清晰地识别一个查找表的数据部分和显式地将断点数据与表数据。看到包共享断点和表数据查找表。
创建参数结构的结构类型显示现有的C代码
您可以创建一个参数结构符合结构体
现有的C代码定义了类型定义。使用这种技术:
用仿真软件取代现有的C代码金宝app®模型。
集成现有的C代码的仿真模型(例如,通过使用遗留代码工具)。金宝app例如,看到的集成C函数的参数是指向结构的指针。
生成C代码(金宝app仿真软件编码器™),您可以与现有的C代码编译成一个单一的应用程序。例如,看到的之间交换结构化和枚举数据生成和外部代码(嵌入式编码)。
在MATLAB中,结构的参数存储在一个参数对象,并使用总线对象数据类型(见控制字段的数据类型和特点通过创建参数对象)。创建总线对象根据您的c代码结构体
类型,使用金宝appSimulink.importExternalCTypes
函数。