添加或删除变量的选择变体装配子系统模块使用外部文件
一个变体装配子系统块可以使用模型块,子系统的参考块,或作为其变体的选择。变体的选择是保持在一个单独的模型和子系统在MATLAB的文件®路径。您可以添加或删除的变体的选择变体装配子系统块无需修改模型。你使用外部源如枚举类或MATLAB函数来管理的变体的选择变体装配子系统块。不像当你使用不同的子系统块,您不需要在进行导航变体装配子系统阻止添加或删除变量的选择。有关更多信息,请参见变体装配子系统。
这个例子解释了如何:
操作变体选择的变体装配子系统块标签模式
本节将展示如何添加或删除的变体的选择变体装配子系统块在标签
模式。
保持变体选择的变体装配子系统块模型和子系统文件
装配子系统块可以包含一个变体模型块,子系统的参考块,或作为其变体的选择。变体的选择是保存在单独的模型和子系统上的MATLAB®文件路径。
1。打开slexVariantAssemblySubsystemInLabel
模型。模型包含一个变种装配子系统控制器
。
2。添加的变体的选择控制器
块,打开块参数对话框中,指定该MATLAB的表达式变体的选择说明符参数。
{‘linear_generic1’,‘linear_generic2’,‘nonlinear_generic1’,‘nonlinear_generic2}
在这个例子中,linear_generic1
和linear_generic2
选择模型。的nonlinear_generic1
和nonlinear_generic2
阻塞子系统参考。这些变体的选择保持在各自的内部文件ControllersList
文件夹中。
确保ControllersList
文件夹及其所有子文件夹添加到搜索路径的当前会话使用MATLAB目录
函数。
3所示。在你指定的表达式变体的选择说明符参数,单击验证按钮。表达式求值,以确保它是一个有效的MATLAB表达式返回一个一维单元阵列模型或子系统的文件名或文件名称模式在MATLAB的道路。在成功验证,添加到变体的选择控制器
块。验证期间遇到任何错误信息显示在块对话框。
4所示。双击控制器
块观察四个变量的选择linear_generic1
,linear_generic2
,nonlinear_generic1
,nonlinear_generic2
添加到控制器
块。的文件名和路径选择是显示在新添加的变体变量的选择表中参考选项卡。
5。从标签模式积极的选择中,选择linear_generic1
和模拟模型。观察到的linear_generic1
选择变得活跃。
6。您可以修改的表达式变体的选择说明符参数描述指定变量选择装配子系统块变异的变异选择说明符参数,然后再次模拟模型。
指定变量选择装配子系统块变异的变异选择说明符参数
添加模型或子系统的参考选择一个块作为变体变体装配子系统块,指定文件引用的名称。文件名必须指定为MATLAB表达式返回一个一维单元阵列特征向量的评估。然后您可以使用刷新按钮验证表达式。在成功验证,添加变体选择的块变体装配子系统块。对于每一个选择,控制标签生成的一个变体。控制变量的名称标签的名称一样的选择。新添加的变量选择和相应的标签显示在控制变量的选择表。
MATLAB表达式指定必须包含这两种:
模型或子系统搜索路径的文件名,你当前的MATLAB会话。例如,如果您指定
{model1。基金”、“subsystemRef1.slx '}
说明符,引用的街区model1.slx
和subsystemRef1.slx
文件被添加的变体的选择变体装配子系统块。文件名称模式匹配模型在MATLAB或子系统文件名的路径。模式中的路径可以绝对或相对于模型的父文件夹包含变体装配子系统块。例如,如果您指定
{folder_1 / *。基金”、“folder_2 / * .slx”}
说明符,仿真软件金宝app®通过特征向量folder_1 / *
和folder2 / *
到dir
函数。然后返回的函数模型和子系统文件位于folder1
和folder2
文件夹。块引用返回的文件被添加的变体的选择变体装配子系统块。
信息如何将文件或文件夹添加到搜索路径,明白了目录
。
下面的表显示了不同的方法,您可以指定变体的选择说明符参数控制器
块。指定这些表达式变体的选择说明符参数和验证通过单击刷新按钮。在成功验证,添加到变体的选择控制器
块。
变体的选择说明符 | 添加变量的选择 |
---|---|
描述指定一个文件夹的相对路径,包含或子系统模型文件。 价值- - - - - - |
模型文件位于或子系统
|
描述——指定文件夹及其子文件夹的相对路径文件包含模型或子系统。 价值- - - - - - |
模型文件位于或子系统
|
描述——指定相对路径文件夹及其子文件夹包含下一层模型或子系统的文件。 价值- - - - - - |
模型文件位于或子系统
|
描述——指定一个文件夹,包含模型相对路径或子系统文件和子文件夹名称和一定的结局。 价值- - - - - - |
模型文件位于或子系统
|
描述——指定一个文件夹,其中包含一个绝对路径或子系统模型文件 价值——在窗户®系统中, 在UNIX中®系统中, |
模型文件位于或子系统
|
描述——指定模型或子系统单元阵列的文件名 价值- - - - - - |
指定的文件添加变体的选择模型和子系统。增加的选择是:
|
描述——创建一个MATLAB工作空间变量,返回一个单元阵列模型或子系统的文件名。您可以指定变量名称的变体选择说明符。 例如, 控制器= {“linear_groupA_type1”,“linear_groupB_type2”,…“nonlinear_generic1”,“controller_generic2”}; 价值- - - - - - |
模型或子系统中指定的文件
|
描述——创建一个MATLAB函数,它返回一个单元阵列模型或子系统的文件名。然后您可以指定函数名作为变种选择说明符。 例如, 函数选择= = {getMyListOfControllerChoices选择“linear_groupA_type1”,“linear_groupB_type2”,…“nonlinear_generic1”,“controller_generic2”};结束 价值- - - - - - |
返回的模型或子系统的文件
|
描述——创建一个MATLAB函数,它返回一个单元阵列模型或子系统的文件名,文件名称模式。然后您可以指定函数名作为变种选择说明符。 例如, 函数选择= = {getMyListOfControllers选择“controller_generic1”,“ControllersList /非线性/ * *”};结束 价值- - - - - - |
模型和子系统返回的文件
|
描述——创建一个MATLAB函数排除某些文件或文件夹的选择。然后您可以指定函数名作为变种选择说明符。 例如, 函数选择= getMyFilteredListOfControllerChoices%模式“ControllersList /”内包含的所有文件patternToInclude =“ControllersList / * *”;%模式exlude里面的所有文件”ControllersList /线性/ linear_groupA /”patternToExclude =“ControllersList /线性/ linear_groupA / *”;%设置不同的文件包括和排除选择= setdiff (getSLXFileNames (patternToInclude) getSLXFileNames (patternToExclude)) ';函数文件名= getSLXFileNames(模式)[~,文件名,fileExts] = fileparts ({dir(模式). name});文件名=文件名(strcmp (fileExts,“.slx”));结束结束 价值- - - - - - |
模型或子系统的文件
|
操作变体选择装配子系统块表达模式的变体
这个例子展示了如何从一个变种添加或删除变量选择装配子系统的块表达式
模式。
保持变体选择的变体装配子系统块模型和子系统文件
打开slexVariantAssemblySubsystemInExpression
模型。模型包含一个变种装配子系统控制器
。的块表达式
模式,有两个不同的选择linearConroller
和nonlinearController
。的linearController
和nonlinearController
阻塞子系统参考文件保存为子系统在你当前的工作目录。
mdl =“slexVariantAssemblySubsystemInExpression”;(mdl open_system (mdl) vasBlkPath =,“/控制器”];
的linearController
和nonlinearController
添加选择的块控制器
块使用枚举创建使用这些方法之一。如果你设置变体激活时间参数的控制器
块代码编译
或启动
,仿金宝app真软件设置治疗作为原子单元参数的linearController
和nonlinearController
块在
。的治疗作为原子单元参数使模型能够治疗模块作为一个单元。金宝app例如,如果linearController
块设置为原子,仿真软件模拟中的所有块金宝applinearController
块在模拟下一个块相同的水平linearController
。
使用一个
classdef
在MATLAB™文件块。使用的函数
金宝appSimulink.defineIntEnumType
。你不需要一个脚本文件来定义类型。使用仿真软件金宝app®数据字典永久存储枚举定义。
定义枚举类使用classdef
在MATLAB文件块
在这个例子中,controllerTypesMfile
是一个基于整数枚举类,它来源于内置类金宝appSimulink.IntEnumType
。controllerTypesMfile
基于整数是因为IntEnumType
来自int32
。使用定义的枚举类的更多信息classdef
块,看创建模型枚举类金宝app。
类型controllerTypesMfile
classdef controllerTypesMfile <仿金宝app真软件。IntEnumType% % Copyright 2023 The MathWorks, Inc. enumeration linearController(0) nonlinearController(1) end end
列举部分指定枚举值linearController (0)
和nonlinearController (1)
。每个枚举值包含一个枚举成员和一个潜在的整数。在这里,枚举成员变量选择的文件名linearController
和nonlinearController
和底层的整数0
和1
。
1。配置控制器
块,设置不同的控制变量参数variantCtrlVar
和变体选择的枚举参数controllerTypesMFile
块的参数对话框。
set_param (vasBlkPath“VariantChoicesEnumeration”,“controllerTypesMfile”)set_param (vasBlkPath“VariantControlVariable”,“variantCtrlVar”)
2。激活linearController
选择,设置variantCtrlVar
来controllerTypesMFile.linearController
然后模拟模型。在模拟过程中,variantCtrlVar = = controllerTypesMFile.linearController
表达式的求值结果为真正的
。随后,linearController
选择变得活跃。
variantCtrlVar = controllerTypesMfile.linearController;sim (mdl);
同样,激活nonlinearController
选择,设置variantCtrlVar
来controllerTypesMfile.nonlinearController
和模拟模型。
variantCtrlVar = controllerTypesMfile.nonlinearController;sim (mdl);
此外,您可以模拟变量和使用这个脚本策划他们的价值观。
在(1:2)= Si金宝appmulink.SimulationInput (mdl);在(1)= (1).setVariable (“variantCtrlVar”,controllerTypesMfile.linearController);在(2)= (2).setVariable (“variantCtrlVar”,controllerTypesMfile.nonlinearController);= sim(中);图;((1)。来ut, out(1).yout) hold在((2)。来ut, out(2).yout) xlabel(的时间(秒))ylabel (“数据”)
(03 - mar - 2023 08:08:08)运行模拟……(03 - mar - 2023 08:08:09)完成1的2模拟运行(03 - mar - 2023 08:08:09)完成2 2的模拟运行
3所示。然后您可以添加更多的变体选择的控制器
块通过添加枚举类的变体选择文件名。类似地,您可以删除选择的控制器
阻止通过删除对应的枚举值的枚举类。
定义动态枚举类在内存中使用金宝appSimulink.defineIntEnumType
创建一个枚举类controllerTypesInMem
使用MATLAB的工作区中
。金宝appSimulink.defineIntEnumType
金宝appSimulink.defineIntEnumType (“controllerTypesInMem”,…{“linearController”,“nonlinearController”},0:1);
列举部分指定枚举值linearController (0)
和nonlinearController (1)
。每个枚举值包含一个枚举成员和一个潜在的整数。在这里,枚举成员变量选择的文件名linearController
和nonlinearController
和底层的整数0
和1
。
1。配置控制器
块,设置不同的控制变量参数variantCtrlVar
和变体选择的枚举参数controllerTypesInMem
块的参数对话框。
set_param (vasBlkPath“VariantChoicesEnumeration”,“controllerTypesInMem”)set_param (vasBlkPath“VariantControlVariable”,“variantCtrlVar”)
2。激活linearController
选择,设置variantCtrlVar
来controllerTypesInMem.linearController
然后模拟模型。在模拟过程中,variantCtrlVar = = controllerTypesInMem.linearController
表达式的求值结果为真正的
。随后,linearController
选择变得活跃。
variantCtrlVar = controllerTypesInMem.linearController;sim (mdl);
同样,激活nonlinearController
选择,设置variantCtrlVar
来controllerTypesInMem.nonlinearController
和模拟模型。
variantCtrlVar = controllerTypesInMem.nonlinearController;sim (mdl);
此外,您可以模拟变量和使用这个脚本策划他们的价值观。
在(1:2)= Si金宝appmulink.SimulationInput (mdl);在(1)= (1).setVariable (“variantCtrlVar”,controllerTypesInMem.linearController);在(2)= (2).setVariable (“variantCtrlVar”,controllerTypesInMem.nonlinearController);= sim(中);((1)。来ut, out(1).yout) hold在((2)。来ut, out(2).yout) xlabel(的时间(秒))ylabel (“数据”)
(03 - mar - 2023 08:08:15)运行模拟……(03 - mar - 2023 08:08:15)完成1的2模拟运行(03 - mar - 2023 08:08:15)完成2 2的模拟运行
3所示。添加更多的变体的选择控制器
块,重新定义controllerTypesInMem
类与新变种选择文件名作为枚举值。同样,取消选择,重新定义的类对应的枚举值删除。
永久存储枚举定义在模型数据字典金宝app
创建一个枚举类controllerTypesInDD
控制变量和变体variantCtrlVarInDD
在数据字典的持久存储库vas_controllersData.sldd
。列举部分指定枚举值linearController (0)
和nonlinearController (1)
。每个枚举值包含一个枚举成员和一个潜在的整数。这里,枚举名字变体选择的文件名linearController
和nonlinearController
和底层的整数0
和1
。数据字典的更多信息,见永久存储枚举类型定义。
1。配置控制器
块,设置不同的控制变量参数variantCtrlVarInDD
和变体选择的枚举参数controllerTypesInDD
块的参数对话框。
set_param (vasBlkPath“VariantChoicesEnumeration”,“controllerTypesInDD”)set_param (vasBlkPath“VariantControlVariable”,“variantCtrlVarInDD”)
2。激活linearController
选择,设置variantCtrlVarInDD
来controllerTypesInDD.linearController
然后模拟模型。在模拟过程中,variantCtrlVarInDD = = controllerTypesInDD.linearController
表达式的求值结果为真正的
。随后,linearController
选择变得活跃。
vasDDObj = 金宝appSimulink.data.dictionary.open (“vas_controllersData.sldd”);dDataSectObj = getSection (vasDDObj,设计数据的);evalin (dDataSectObj“variantCtrlVarInDD = controllerTypesInDD.linearController;”);着干活= sim (mdl)
着干活=仿真软金宝app件。SimulationOutput:吹捧:x1双[1001]你:x1双[1001]SimulationMetadata: [1 x1仿真软件。金宝appSimulationMetadata] ErrorMessage (0 x0 char):
同样,激活nonlinearController
选择,设置variantCtrlVar
来controllerTypesInDD.nonlinearController
和模拟模型。
evalin (dDataSectObj“variantCtrlVarInDD = controllerTypesInDD.nonlinearController;”);out2 = sim (mdl)
out2 =仿金宝app真软件。SimulationOutput:吹捧:x1双[1001]你:x1双[1001]SimulationMetadata: [1 x1仿真软件。金宝appSimulationMetadata] ErrorMessage (0 x0 char):
此外,您可以模拟变量和使用这个脚本策划他们的价值观。
图;情节(着干活。来ut, out1.yout) hold在情节(out2。来ut, out2.yout) xlabel(的时间(秒))ylabel (“数据”)
3所示。然后您可以添加更多的变体选择的控制器
块通过添加枚举类的变体选择文件名。类似地,您可以删除选择的控制器
阻止通过删除对应的枚举值的枚举类。