OpenModelica中带阻块、摩擦块和硬挡块的Mass的使用

OpenModelica中带阻块、摩擦块和硬挡块的Mass的使用,modelica,openmodelica,Modelica,Openmodelica,我有一个关于Modelica.Mechanics.Translational.Components.Mass with Stop and Friction中硬停止的问题。 正如我所理解的,质量不应在间隔外移动(smin,smax) 但实际上,在我的示例中,我在这里包括: model ActuatorMechanics Modelica.Mechanics.Translational.Sources.Force force; Modelica.Mechanics.Translation

我有一个关于Modelica.Mechanics.Translational.Components.Mass with Stop and Friction中硬停止的问题。 正如我所理解的,质量不应在间隔外移动(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)

我做错什么了吗?

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

为了让您了解一下模型中发生的情况,当质量达到停止点时,它会切换到不同的状态,将质量约束为零加速度(而不是速度),并计算保持该约束所需的反作用力

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

这一切都取决于速度是一种状态。可以使用此组件来制定系统,其中速度将在系统上指定(因此不是状态)。在这种情况下,reinit没有效果。但我怀疑在这一点上你会得到一个奇异的方程组(因为一旦达到机械极限,质量加速度基本上有两个方程)。所以我很惊讶你们看到了超越这些限制的运动

另一种可能是,质量在机械极限之外开始运动,但不知何故,没有切换到替代(约束)方程

同样,这确实是OpenModelica开发人员的一个问题。我只是想就这样一个模型可能出现的问题提供一些见解。虽然我承认这些见解在回答你的问题时并不特别有用

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


祝你好运。

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

非常感谢您的详细回复!不幸的是,无论是在电子邮件列表中还是在论坛中,我都并没有收到任何回复。也许你可以建议一些方法来进行硬停或以某种方式限制质量的移动?嗯,我是OpenModelica的开发者。但我一直忙于OpenModelica和ModProd研讨会(现在仍然是)。所以我没有时间调查这件事。看起来只是reinit语句没有生成,这应该在跟踪程序中作为一个bug报告,以便不阅读论坛的人可以查看它。正如我所理解的,为了使用这个版本,我应该自己编译OpenModelica?因为即使在windows的夜间部分,最新版本也是11033。是的,windows“夜间”是手动编译的,有时开发人员需要一段时间才能得到一个新版本。Linux版本是真正的夜间版本,并且已经可用。