2

我对 Modelica.Mechanics.Translational.Components.MassWithStopAndFriction 中的硬停有疑问。据我所知,质量不应超出区间 (smin, smax) 但实际上在我的示例中包含以下内容:

model ActuatorMechanics 
  Modelica.Mechanics.Translational.Sources.Force force; 
  Modelica.Mechanics.Translational.Components.MassWithStopAndFriction mass(m=1,F_prop=0,F_Coulomb=10, smax=0.1, smin=0, L=0.01); 
  Modelica.Mechanics.Translational.Components.Spring spring(c=1000); 
  Modelica.Mechanics.Translational.Components.Fixed fixed; 
  Modelica.Mechanics.Translational.Sensors.PositionSensor sens_pos; 
equation 
  connect(force.flange, mass.flange_a); 
  connect(mass.flange_b, spring.flange_a); 
  connect(spring.flange_b, fixed.flange); 
  connect(sens_pos.flange, mass.flange_a); 
  force.f = 100; 
end ActuatorMechanics; 

simulate(ActuatorMechanics)
plot(mass.flange_a.s)

难道我做错了什么?

4

2 回答 2

3

这是 OpenModelica 中的一个错误。它从 r11060 开始工作,并添加了回归测试。

于 2012-02-09T16:54:18.373 回答
2

嗯,这确实是 OpenModelica 开发人员的一个问题,所以希望他们中的一个人会出现在这里并回答。

只是为了给你一点关于模型中发生的事情的背景知识,当质量停止时,它会切换到一个不同的状态,它将质量限制为零加速度(而不是速度)并计算必要的反作用力保持那个约束。

这种复杂性主要是因为 OpenModelica(以及大多数(如果不是全部)其他 Modelica 工具)难以处理可变索引 DAE。这里的技巧是检测质量达到其机械极限的点,使用 reinit 将速度设置为零,然后强制执行我上面提到的无加速度约束。

这一切都取决于速度是一种状态。可以使用该组件制定系统,其中速度将在系统上规定(因此不是状态)。在这种情况下,重新初始化不起作用。但我怀疑你会在那个时候得到一个奇异的方程组(因为一旦达到机械极限,你基本上会有两个质量加速度方程)。所以我很惊讶你看到运动超出了这些限制。

另一种可能性可能是质量在机械限制之外开始运动,并且以某种方式没有切换到替代(约束)方程。

同样,这确实是 OpenModelica 开发人员的问题。我只是想就这种模型可能出错的事情提供一些见解。尽管我承认这些见解对于回答您的问题并不是特别有用。

我建议您也联系 OpenModelica 开发人员(除了在 StackOverflow 上发帖),因为他们可能看不到这个问题。

祝你好运。

于 2012-02-03T16:48:57.567 回答