Modelica:在自定义类/模型中使用der()

时间:2012-07-09 22:11:58

标签: modelica

我正在尝试学习Modelica,我使用多体库构建了一个非常简单的模型。该模型由一个世界对象和一个连接到梁的主体(质量)组成,然后连接到2个扩展的PartialOneFrame_a类(见下文),我修改它们以在一个轴上创建一个恒定的力。基本上所有这组物体都会在重力作用下旋转并旋转,因为两个力作用于从身体中心偏移的长腿,从而产生了一对cg。

    model Constant_Force
      extends Modelica.Mechanics.MultiBody.Interfaces.PartialOneFrame_a;
      parameter Real force = 1.0;

    equation 
      frame_a.f = {0.0,0.0,force};
      frame_a.t = {0.0,0.0,0.0};
    end Constant_Force;

我接下来想看看我是否可以创造一个非常简单的空气动力部件,我将连接到一个旋转的“臂”的末端。我的想法是遵循上面的Constant_force模型的例子,并且我的第一个简单切割基于局部框架速度生成力。这就出现了我的问题 - 我尝试使用der(frame_a.r_0)来计算速度,然后我将使用resolve2函数将其转换为本地帧,但添加der(...)行会导致模型无法正常工作 - 它将“成功”模拟(使用OpenModelica),但v11b向量(见下文)将全部为零,因此将出现用于绘图的der(frame_a.r_0) - 不仅如此,所有其他组件行为现在也只是零不断 - (body_a.r_0,身体的w_a等)。

    model Aerosurf
      extends Modelica.Mechanics.MultiBody.Interfaces.PartialOneFrame_a;
      import Modelica.Mechanics.MultiBody.Frames;
      import Modelica.SIunits;
      //Real[3] v11b;
      SIunits.Velocity v11b[3];
    //initial equation
    //  v11b={0.0,0.0,0.0};
    algorithm
      //v11b:=der(frame_a.r_0);
    equation 
      v11b=der(frame_a.r_0);
      frame_a.f = {0.0,0.0,0.0};
      frame_a.t = {0.0,0.0,0.0};
    end Aerosurf;

我尝试了很多方法只是为了简单地计算速度(你会从评论的行中看到)所以我可以绘制检查正确的行为,但无济于事。我使用算法或方程方法 - 我用不同的方法实现了一些不同的(但也是不正确的行为)。

任何提示?我必须在这里遗漏一些基本的东西,似乎帧组件本身并不带有速度向量,所以我必须要计算它?

1 个答案:

答案 0 :(得分:2)

最简单的方法是使用MSL中的Modelica.Mechanics.MultiBody.Sensors.AbsoluteVelocity块并将其连接到MB帧,然后在等式中使用输出连接器的变量。