3

流变模型通常使用三个(或四个)基本元素构建,它们是:

  • 弹簧(例如存在)Modelica.Mechanics.Translational.Components。它的方程是 f = c * (s_rel - s_rel0);

  • 阻尼器(阻尼器)(也存在于 中Modelica.Mechanics.Translational.Components)。它的方程f = d * v_rel;适用于线性阻尼器,可以很容易地修改以模拟非线性阻尼器:f = d * v_rel^(1/n);

  • 滑块,在这个库中不存在(据我所知)......它的方程是 abs(f)<= flim. 不幸的是,我真的不明白如何编写相应的 Modelica 模型......

我认为这个模型应该扩展Modelica.Mechanics.Translational.Interfaces.PartialCompliant,但问题是(在和f之间测量的力)只有在大于...时才应该修改......如果滑块扩展,则意味着它已经遵循方程 并且 添加方程给了我一个错误“模型的一个独立子集的方程和变量数量不平衡”,我无法真正解释,即使我明白如果,方程是无用的......flange_bflange_aflimPartialCompliantflange_b.f = f;flange_a.f = -f;f = if abs(f)>flim then sign(f)*flim else f;abs(f)<=flimf = f

实际上,滑块元件不会产生新的力(就像弹簧一样,取决于它的应变,或者就像阻尼器一样,取决于它的应变率)。力是滑块元素的输入,有时会修改(当该力大于元素允许的限制时)。这就是为什么我真的不明白我应该将这种力定义为输入还是输出......

如果您有任何建议,我将不胜感激!谢谢

在前两条评论之后,我决定添加一张图片,希望能帮助您理解我试图建模的行为。 不同的流变元素 在左侧,您可以看到用于开发流变模型的四个要素:

  • 一:春天
  • b : 线性阻尼器(阻尼器)
  • c : 非线性阻尼器
  • d : 滑块

在右侧,您可以看到我试图重现的行为:a 和 b 是与弹簧的两个关联,c 和 d 分别是预期的应力/应变曲线。我正在尝试对相同的行为进行建模,只是我考虑的是力量而不是压力。正如我在对 Marco 回答的评论中所说,曲线 a 让我想起了二极管的行为:

  • 如果施加在构件上的力小于滑动极限,则两个法兰之间没有相对位移
  • 如果力大于滑动极限,则系统传递的力等于极限,法兰之间存在相对位移
4

2 回答 2

2

我不能确定,但​​我怀疑你真正想要在这里建模的是库仑摩擦(即始终与运动方向相反的恒定力)。如果是这样,Modelica 标准库中已经有一个组件,称为MassWithStopAndFriction,用于模拟(以及其他几种摩擦形式)。皱纹是它与惯性捆绑在一起。

如果您不想要惯性效应,则可以将惯性设置为零。我怀疑这可能会导致奇点。您可能能够避免奇点的一种方法是“评估”参数(至少当您将Evaluate平面设置true为命令行时,它在 Dymola 中是这样调用的)。没有保证这是否会起作用,因为它取决于模型和工具是否可以正确处理这种简化。

如果库仑摩擦是您想要的并且您真的不想要惯性并且上述方法不起作用,请告诉我,我想我可以创建一个可行的简单模型(只要您没有惯性) .

于 2012-11-27T21:15:22.980 回答
1

一些注意事项: - 力不是输入,也不是输出,而只是添加到组件中的关系,以定义力将如何在组件的两个平移法兰之间传播。当您处理非因果连接器时,我认为最好考虑组件的自由度而不是输入和输出。在这种情况下,您有两个连接器,并且您将在两个框架中的哪一个上独立地接收有关力的信息,您实现的方程式将定义该信息将如何传播到另一个框架。- 我测试了这个:

model slider
  extends 
    Modelica.Mechanics.Translational.Interfaces.PartialCompliantWithRelativeStates;
  parameter Real flim = 1;
equation 
  f = if abs(f)>flim then sign(f)*flim else f;
end slider;

在 Dymola 上,它可以工作。它是正确的 modelica 代码,所以它也应该在 OpenModelica 中工作,我想不出为什么它应该被视为不平衡的数学模型。

我希望这有帮助,

马可

于 2012-11-27T08:57:49.997 回答