2017-01-13 9 views
1

Я пытаюсь изучить modelica и начал с кодирования некоторых простых примеров из учебника: «Введение в объектно-ориентированное моделирование и моделирование с помощью OpenModelica» Питера Фритцсона Link. Я работаю с димолой. Существует один пример, называемый Moon Landing, который я не могу запустить. После запуска моделирования я не могу построить ни одну из переменных. Вот мой код:Modelica Example MoonLanding

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; 

ли кто-то знает, где ошибка может быть?

+1

Это работает для меня (я скопировал ваш код и смоделировал класс MoonLanding за 230 секунд). У меня есть доступ ко всем переменным. Вы можете увидеть классы (apollo, moon) на вкладке моделирования? –

+0

Эй, благодарю вас за ответ. Я всегда пытался имитировать всю модель, содержащую все классы. Но мне нужно моделировать только класс MoonLanding. Любая идея, почему она не работает при моделировании всей модели? –

+2

Вся «модель» на самом деле представляет собой «пакет», содержащий три «модели». Модели, пакеты, блоки и т. Д. - это специальные классы Modelica. –

ответ

2

Как @ Рене-Жюст-Nielsen показали, вы должны имитировать Example.MoonLanding и вы должны сделать Пример пакет (не модель), и MoonLanding (Rocket, CelestialBody) модель (не класс):

package Example 
    model Rocket "rocket class" 
    ... 
    end Rocket; 
    model CelestialBody 
    ... 
    end CelestialBody 
    model MoonLanding 
    ... 
    end MoonLanding; 
end Example; 

(в основном ответ не мой, но Рене, и я согласен с ним.)

Некоторые дополнительные преимущества, пометив их как «пакет» и «модель» является то, что:

  • Попытка имитировать пакет (например, package Example) даст ошибку в Dymola, поэтому эта конкретная ошибка будет обнаружена.
  • Браузер пакетов предназначен для отображения содержимого пакетов, а не моделей.
  • MoonLanding использует time, но только модели и блоки могут использовать time (это просто указано как предупреждение).