Simulink上的家伙

Simulink和基于模型的设计

统一MATLAB和Simulink:用户故事第3部分

在今天的文章中,我将在上一篇文章中介绍的框架中添加一些特性,以帮助控制变量。
如果你错过了本系列之前的文章,这里是所有文章的链接:

变体slPart块

为了处理变量,我向库中添加了第二个模板块 slPart 模板块。第二个模板是 不同的子系统 使用相同的掩码和相同的掩码初始化回调 以前的文章
在块对话框中,我设置了 可变控制方式 标签
使用 标签模式 将允许我们在下一步基于?的类更改活动变体 slPart 在掩码参数中指定的。
当我将这个块复制到模型时,我将能够添加尽可能多的算法变量。

向slPart添加变体规范

这里的目标是基于对象的类选择活动变量,对象的类是作为掩码参数指定的。为此,我将以下代码添加到 maskInit 的方法 slPart
classdefslPart <句柄
属性(隐藏=真)
BlockPath字符
结束
方法
函数obj = maskInit(obj,blk)
obj。BlockPath = block;
如果块有变量,根据对象类设置活动变量
如果比较字符串(get_param(黑色,“变异”),“上”
varantchoices = get_param(blk,“VariantChoices”);获取所有的变量选择
variantChoices = {variantChoices. name}';%提取标签
classList = [class(obj);超类(obj)];获取类和超类的列表。
matchingChoices = intersect(classList,variantChoices);查找与类或最近的超类匹配的标签
set_param(黑色,“LabelModeActiveChoice”, matchingChoices {1});应用第一个匹配
结束
结束
结束
结束
这段代码将比较每个变量的变量控制标签,并找到与对象的类或其最接近的超类匹配的那个。最后,它使用 set_param 根据它的标签来激活所选的变体(更多信息在下面)。

实现一个变体slPart

让我们继续构建上一篇文章中的spring示例。我将我的模板块添加到一个模型中,并创建了两个变体,一个是与前一个示例相同的线性弹簧,另一个是非线性版本:
我创建了一个新的 slPart 类,并将其保存在 + springLib 在上一篇文章中创建的包。从现在起,我将把这门课称为 springLib.springNonLinear:
classdefspring非线性< slPart
属性
displacementBreakPoints;
stiffnessTable;
velocityBreakPoints;
dampingTable;
结束
方法
函数obj = spring非线性()
obj。米= 1;
obj。位移breakpoints = -5:5;
obj。hardnesstable = tanh(-5:5);
obj。velocityBreakPoints = -5:5;
obj。dampingTable = 2*tanh(-5:5);
结束
结束
结束
现在,掩码初始化方法能够设置适当的变量的关键是 将每个变量的标签设置为对应类的名称
我想在这里指出的一件事是,它有可能获得一个类似的变量激活逻辑使用 表达模式 而不是 标签模式 .主要的区别在我看来是,通过使用标签模式控制的掩码初始化方法定义 slPart 超类中,复杂性被管理在一个单独的地方:在 slPart 超类。而表达模式提供了更多的可能性,例如不同 激活时间 ,它把写下条件表达式的复杂性放在每个添加新变量的用户身上。

更多不同的参数化

一旦配置了变体子系统,如中所述 本系列的第2篇文章 ,我可以为新创建的非线性弹簧创建变量参数化:
和那些保存在 + springLib 现在,我的spring库的大小增加了一倍,我仍然可以通过制表符补全访问:

选择零件并模拟相应的变型

一旦正确配置了模型,创建了MATLAB类,我就可以将所需类型的对象分配给块掩码对话框中指定的变量,Simulink将在模拟过程中自动使用适当的变量子系统。
slPart_Post3.gif
我喜欢这样一个事实,如果我把这个模型给某人,那个人需要做的就是从 springLib 包中。不需要知道或关心它可能正在激活一个不同的子系统。
通过这种方式,您继承了一个内部机制已经被抽象的组件,这样您就可以专注于使用它,而不会被实现细节分散注意力。

现在轮到你了

显然,我在这里展示的是使该技术工作的最低限度。对于一个现实的项目,我会添加验证代码和错误检查,以便在出现错误时更好地指导用户。
如果您想更详细地分析这个项目,您可以下载当前版本 在这里
你对这种处理变量的方法有什么看法?你或你的公司有没有想出其他系统控制变异的方法?我很想知道与我在这篇文章中描述的可用性相比如何。
请在下面的评论中告诉我们。
|

评论

如欲留言,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。

Baidu
map