Modelica 在两个法兰之间切换

Modelica 在两个法兰之间切换,modelica,openmodelica,systemmodeler,Modelica,Openmodelica,Systemmodeler,我目前正在使用标准Modelica发行版中包含的多体库处理多体机械系统 我需要在法兰之间实现一个开关,以便为给定的接头选择位置或力控制 model FlangeSwitch "Switch between flanges" Modelica.Mechanics.Translational.Interfaces.Flange_a flange_a_1; Modelica.Mechanics.Translational.Interfaces.Flange_b flange_b_1; Mo

我目前正在使用标准Modelica发行版中包含的多体库处理多体机械系统

我需要在法兰之间实现一个开关,以便为给定的接头选择位置或力控制

model FlangeSwitch "Switch between flanges"
  Modelica.Mechanics.Translational.Interfaces.Flange_a flange_a_1;
  Modelica.Mechanics.Translational.Interfaces.Flange_b flange_b_1;
  Modelica.Mechanics.Translational.Interfaces.Flange_a flange_a_2;
  Modelica.Mechanics.Translational.Interfaces.Flange_b flange_b_2;
  Modelica.Mechanics.Translational.Interfaces.Flange_a flange_a_exit;
  Modelica.Mechanics.Translational.Interfaces.Flange_b flange_b_exit;
  Modelica.Blocks.Interfaces.BooleanInput u;
equation
  if u then
    flange_a_exit = flange_a_2;
    flange_b_exit = flange_b_2;
  else
    flange_a_exit = flange_a_1;
    flange_b_exit = flange_b_1;
  end if;
end FlangeSwitch;
但这种方法不起作用,系统不平衡:10个方程和12个变量


有什么方法可以做到这一点吗?

我认为Modelica工具不允许这种操作(即使您有一个平衡的模型),因为它可能会导致变结构系统。这是Modelica目前不支持的。这里有一个很好的介绍:

在不完全了解应用程序的情况下,您可以尝试两种方法:

  • 使用模拟旋转离合器的模型,如带有激活参数的
    Modelica.mechanical.Translational.Components.Brake
    。通过这种方式,您可以生成“可控机械连接”,用于将任一法兰连接到
    支架
    接头。如果我正确阅读了您的代码,您应该将
    法兰a_2
    连接到支架,并将
    法兰a_出口
    连接到
    法兰a
    法兰b
    。当通过
    RealInput
    激活制动器时,将有一个机械连接

  • 你可以尝试的第二件事是测量位置或力(您希望通过传感器
    Modelica.Mechanics.Translational.Sensors.PositionSensor
    应用这两种方法中的哪一种,然后使用相应的源应用它,在本例中,该源是
    Modelica.Mechanics.Translational.Sources.Position
    。然后可以通过切换真实信号而不是ph来实现源之间的切换。)注意,当直接应用位置时,可能会在位置上产生跳跃


您发布的链接与非物理连接器相关,与物理连接器相比,非物理连接器的限制性更小。因此,应非常小心地比较这两种解决方案

从作为输入的位置切换到作为输入的力,需要在执行此切换时重建方程组。这在当前生成的Modelica中是不可能的。您需要找到一个基于整个模拟的相同输入的解决方案


以这样的方式初始化位置是否足够,即系统在您希望将其移动到的第一个点开始模拟(使用位置源)?您失去的是系统移动到此位置。

感谢您的回答。您是对的,在模拟过程中需要对定义模型的微分方程进行动态更改,这在Modelica中可能还不可能。我将尝试另一种方法。