迁移到结构参数
这个例子展示了如何将一个模型®模型由非结构化的工作空间变量参数化模型,通金宝app过MATLAB®参数化结构。示例使用的仿真软件工具来组织模型从基本工作空间变量为一个层金宝app次结构,然后应用结构模型。
模型描述
这个模型使用一个数值参数数量从基本工作空间。
例子要求
这个例子中改变了原始模型和创建文件在当前工作目录中。如果你计划保存模型的例子中,保存在当前目录的一个副本。
典型的工作流
迁移模型,利用结构参数遵循这些步骤:
1。收集所有数值型变量使用的模型转换为一个MATLAB结构。
2。修改MATLAB结构(如果需要)。
3所示。应用MATLAB对模型结构。
4所示。配置参数的外观结构生成的代码(可选)。
收集到MATLAB数值变量结构
您可以使用金宝appSimulink.findVars找出变量使用的仿真软件模型。金宝app
模型=“sldemo_applyVarStruct”;varList =仿金宝app真软件。findVars(模型、“WorkspaceType”、“基地”)
varList = 20×1 VariableUsage数组属性:名称来源SourceType用户
var = varList (1)
var = VariableUsage属性:名称:Ka的来源:“基础工作”SourceType:“基础工作”用户:{' sldemo_applyVarStruct /控制器/ Gain3 '}
您可以使用金宝appSimulink.BlockDiagram.createVarStruct生成一个MATLAB结构包含所有数值变量使用的模型。
ModelParam = 金宝appSimulink.BlockDiagram.createVarStruct(模型)
ModelParam =结构体字段:Ka: 0.6770 Kf: -1.7460 Ki: -3.8640 Kq: 0.8156 Md: -6.8847 Mq: -0.6571 Mw: -0.0059 Swg: 3助教:0.0500塔尔:[0.3959 - 1]Ts: 0.1000 [1] Uo: 689.4000 Vto: 690.4000 W1: 2.9710 [1] W2: 4.1440 [1] Zd: -63.9979 Zw: -0.6385: 2.5348 b: 64.1300 g: 32.2000
变量ModelParam是一个MATLAB结构包含数值变量字段(按名称排序)。
注意:
模型使用的模型和所有数据必须在调用之前加载金宝appSimulink.BlockDiagram.createVarStruct。
不给MATLAB结构相同的名称作为一个数值变量。
修改MATLAB结构
原结构包含了所有的变量在一个水平层次结构。你可以改变之前,将它应用到模型结构。例如,重新排序参数字段,添加额外的水平组模型参数,或添加额外的字段。
注意:
不改变叶片结构中的字段的名称。
不清楚原变量,直到你已经完成迁移过程。
1。要做到这一点的方法之一是使用金宝appSimulink.saveVars编写MATLAB脚本的结构和文件中的更改。
金宝appSimulink.saveVars (“sldemo_applyVarStruct_data.m”、“ModelParam”)编辑sldemo_applyVarStruct_data.m
2。根据需要编辑MATLAB脚本。例如,将结构分成两个结构。
“ControlParam”包含所有参数控制器子系统。
“ModelParam”包含所有其他数值参数。
ControlParam =结构;ControlParam。Ka = 0.677;ControlParam。Kf = -1.746;ControlParam。Ki = -3.864;ControlParam。Kq = 0.8156;ControlParam。Tal = (0.3959 - 1);ControlParam。Ts = (0.1 - 1);ControlParam。W1 = [1 2.971]; ControlParam.W2 = [1 4.144];
ModelParam =结构;ModelParam。Md = -6.8847;ModelParam。Mq = -0.6571;ModelParam。Mw = -0.00592;ModelParam。Swg = 3;ModelParam。Ta = 0.05;ModelParam。Uo = 689.4; ModelParam.Vto = 690.4; ModelParam.Zd = -63.9979; ModelParam.Zw = -0.6385; ModelParam.a = 2.5348; ModelParam.b = 64.13; ModelParam.g = 32.2;
保存已修改的数据文件。您可以使用它作为一个预加载功能。
3所示。运行修改后的MATLAB脚本创建MATLAB结构。
sldemo_applyVarStruct_data;
应用MATLAB对模型结构
您可以使用金宝appSimulink.BlockDiagram.applyVarStruct自动替换的变量引用等效结构框图的引用。
1。应用MATLAB对模型结构。模型将被改变。然后,您可以将其保存到一个可写目录。
[应用,待摊的]= Simulink.B金宝applockDiagram.applyVarStruct(模型、“ControlParam”)
[应用,待摊的]= Simulink.B金宝applockDiagram.applyVarStruct(模型、“ModelParam”)
注意:
您可以使用“预览”ApplyMode得到信息将改变不改变模型:
金宝appSimulink.BlockDiagram.applyVarStruct(model,'ModelParam', 'ApplyMode', 'preview')
如果模型被编译,您可以使用“缓存”SearchMethod避免模型重新编译:
金宝appSimulink.BlockDiagram.applyVarStruct(model,'ModelParam', 'SearchMethod', 'cached')
如果未实施的输出并不是空的,您可以使用调查原因金宝appSimulink.findVars(模型、“WorkspaceType”、“基地”,“名字”,variableName)。可能的原因是:你改变了结构字段名称或添加额外的字段;使用的变量是一块需要特殊考虑,例如,Stateflow®图表,s函数或模型块。
2。测试修改模型的MATLAB结构。
清除不必要的变量和运行仿真检查结果。
清晰;模型=“sldemo_applyVarStruct”;sldemo_applyVarStruct_data;
sim (“sldemo_applyVarStruct”);
检查任何警告或错误。
查看仿真结果。
配置结构参数出现在生成的代码中
默认情况下,MATLAB结构没有出现在生成的代码,因为数值是内联。代码生成需要仿真软件®编码器™。金宝app
1。结构变量可调,创造金宝appSimulink.Parameter结构的价值和ExportedGlobal存储类。
p 金宝app= Simulink.Parameter;p.Value = ControlParam;p.CoderInfo.StorageClass =“ExportedGlobal”;ControlParam = p;明确p;
rtwbuild (“sldemo_applyVarStruct”);
生成的代码现在包含一个结构类型定义的可调结构model_types.h头文件。默认情况下,仿真软件编码金宝app器生成一个自动命名为参数的类型结构。这个名字是独一无二的,但不容易辨认。
类型定义结构体{real_T卡;real_TKf;real_TKi;real_TKq;real_TTal [2];real_TTs [2];real_TW1 [2];real_TW2 [2];}struct_mn4cJ7zsH8aqc8bBlbIkqC;
2。你可以控制通过使用这种类型的名字金宝appSimulink.Bus指定的数据类型模型。金宝app参数对象。
您可以使用金宝appSimulink.Bus.createObject创建一个总线对象与MATLAB结构相同的形状。
busInfo 金宝app= Simulink.Bus.createObject (ControlParam.Value)
分配总线模型对象名称。金宝app参数数据类型属性。
ParamType = eval (busInfo.busName);ControlParam。数据类型=“总线:ParamType”;明确(busInfo.busName);清楚busInfo;
注意:只有金宝appSimulink.Parameter可以接受总线作为数据类型对象名称。对MATLAB结构,仿真软件编码器生成一个自动金宝app类型的名称。
3所示。把数据文件包含修改后的工作空间变量。
金宝appSimulink.saveVars (“sldemo_applyVarStruct_data。”、“附加”)
4所示。为修改后的模型重新生成代码(需要仿真软件编码器)。金宝app
rtwbuild(模型);
生成的类型定义现在显示为:
typedef struct {real_T Ka;real_T Kf;real_T Ki;real_T Kq;real_T Tal [2];real_T Ts [2];real_T W1 [2];real_T W2 [2];}ParamType;
参数定义:
ParamType ControlParam = {0.677, -1.746, -3.864, 0.8156, {0.3959, 1.0}, {0.1, 1.0}, {1.0, 2.971}, {1.0, 4.144}}