Modelica登月实例

Modelica登月实例,modelica,dymola,Modelica,Dymola,我试图学习modelica,并从编写教程中的一些简单示例开始:“使用 彼得·弗里茨森的《OpenModelica》。我和迪莫拉一起工作。 有一个例子叫登月,我跑不动。 开始模拟后,我无法绘制任何变量。 这是我的密码: model Example class Rocket "rocket class" parameter String name; Real mass(start = 1038.3); Real altitude(start = 59404); Real veloc

我试图学习modelica,并从编写教程中的一些简单示例开始:“使用 彼得·弗里茨森的《OpenModelica》。我和迪莫拉一起工作。 有一个例子叫登月,我跑不动。 开始模拟后,我无法绘制任何变量。 这是我的密码:

model Example

class Rocket "rocket class"
  parameter String name;
  Real mass(start = 1038.3);
  Real altitude(start = 59404);
  Real velocity(start = -2003);
  Real thrust;
  Real acceleration;
  Real gravity;
  parameter Real massLossRate=0.000277;
equation 
  acceleration = (thrust-mass*gravity)/mass;
  der(mass) = -massLossRate * abs(thrust);
  der(altitude)=velocity;
  der(velocity)=acceleration;
end Rocket;

class CelesticalBody
  constant  Real   g = 6.672e-11;
  parameter Real   radius;
  parameter String name;
  parameter Real   mass;
end CelesticalBody;

class MoonLanding
  parameter Real force1 = 36350;
  parameter Real force2 = 1308;
 protected 
  parameter Real thrustEndTime = 210;
  parameter Real thrustDecreaseTime = 43.2;
 public 
  Rocket          apollo(name="apollo13");
  CelesticalBody  moon(name="moon",mass = 7.382e22, radius=1.738e6);
equation 
    apollo.thrust = if (time < thrustDecreaseTime) then force1
                  else if 
                         (time < thrustEndTime) then force2
                  else 0;
   apollo.gravity = moon.g*moon.mass/(apollo.altitude+moon.radius)^2;
end MoonLanding;


end Example;
模型示例
火箭级“火箭级”
参数字符串名称;
实际质量(起始值=1038.3);
实际高度(起始高度=59404);
实际速度(起点=-2003年);
实际推力;
真实加速度;
真实重力;
参数Real masslosrate=0.000277;
方程式
加速度=(推力质量*重力)/质量;
der(质量)=-质量损失率*abs(推力);
der(高度)=速度;
der(速度)=加速度;
末端火箭;
天青石级
常数实数g=6.672e-11;
参数实半径;
参数字符串名称;
参数真实质量;
末端膨体;
登月舱
参数实力1=36350;
参数实力2=1308;
受保护的
参数Real-struchtendtime=210;
参数实时=43.2;
公开的
火箭阿波罗(name=“阿波罗13”);
天秤座月亮(name=“moon”,质量=7.382e22,半径=1.738e6);
方程式
阿波罗推力=如果(时间<推力减小时间),则力1
否则如果
(时间<推力结束时间)然后强制2
其余0;
阿波罗重力=月球重力*月球质量/(阿波罗高度+月球半径)^2;
结束登月;
结束示例;

有人知道错误可能在哪里吗?

正如@Rene Just Nielsen指出的那样,你必须模拟示例。登月,你应该制作一个包(不是模型)和登月(火箭、天体)模型(不是类):

(基本上答案不是我的,而是雷内的,我同意。)

将其标记为“包装”和“模型”的其他好处包括:

  • 尝试模拟一个包(例如
    包示例
    )将在Dymola中出现错误,因此将检测到此特定错误
  • 软件包浏览器旨在显示软件包的内容,而不是模型
  • 登月使用
    时间
    ,但只有模型和区块可以使用
    时间
    (这只是一个警告)

这对我很有用(我复制了你的代码,模拟了230秒的登月舱)。我可以访问所有变量。你能看到模拟选项卡上的类(阿波罗,月亮)吗?嘿,谢谢你的回答。我一直试图模拟包含所有类的整个模型。但我必须模拟登月舱。你知道为什么在模拟整个模型时它不起作用吗?整个“模型”实际上是一个包含三个“模型”的“包”。模型、包、块等是特殊的Modelica类。
package Example
  model Rocket "rocket class" 
    ...
  end Rocket;
  model CelestialBody 
    ...
  end CelestialBody
  model MoonLanding 
    ...
  end MoonLanding;
end Example;