You are on page 1of 20

Modelica Language Concepts

and Textual Modeling


Classes and Inheritance

Typed
Declarative Hybrid
Equation-based Modeling
Textual Language

1 Peter Fritzson Copyright © Open Source Modelica Consortium pelab

Acausal Modeling

The order of computations is not decided at modeling time


Acausal Causal

Visual
Component
Level

Equation A resistor equation: Causall possibilities:


C ibiliti
Level R*i = v; i := v/R;
v := R*i;
R := v/i;

2 Peter Fritzson Copyright © Open Source Modelica Consortium pelab

1
Typical Simulation Process

3 Peter Fritzson Copyright © Open Source Modelica Consortium pelab

What is Special about Modelica?

• Multi-Domain Modeling
• Visual acausal hierarchical component modeling
• Typed declarative equation-based textual
language
• Hybrid modeling and simulation

4 Peter Fritzson Copyright © Open Source Modelica Consortium pelab

2
What is Special about Modelica?
Multi-Domain
Modeling

5 Peter Fritzson Copyright © Open Source Modelica Consortium pelab

What is Special about Modelica?


Multi-Domain Visual Acausal
Keeps the physical Hierarchical
Modeling
structure Component
Modeling

Acausal model
(Modelica)

Causal
block-based
model
(Simulink)

6 Peter Fritzson Copyright © Open Source Modelica Consortium pelab

3
What is Special about Modelica?
Multi-Domain Hierarchical system Visual Acausal
Modeling modeling Hierarchical
k2

i
Component
qddRef
qdRef qRef k1 r3Control
r3Motor r3Drive1
cut joint
tn
axis6
Modeling
1 1
i 1
S S
qd axis5

qdRef Kd
S
0.03 rel

Jmotor=J joint=0
spring=c axis4
S
qRef pSum Kv sum w Sum rate2 rate3 iRef gear=i

fric=Rv0
+1 b(s) 340.8
0.3
- +1 - a(s) S

axis3

rate1 tacho2 tacho1


b(s) b(s) g5
PT1
a(s) a(s)
axis2
2=50
Rp2

Ra=250 La=(250/(2*D*w m))


qd
C=0.004*D/w m Rp1=200
Rd1=100

Srel = n*transpose(n)+(identity(3)-
Rd2=100 n*transpose(n))*cos(q)- axis1
Ri=10
skew(n)*sin(q); - -
-
wrela = n*qd; +
diff +
+
pow er
zrela = n*qdd; OpI

Sb = Sa*transpose(Srel);
Vs

Rd4=100
r0b = r0a; emf
Rd3=100

vb = Srel*va; g3
wb = Srel*(wa + wrela); y
ab = Srel*aa;
g1 x
inertial
zb = Srel*(za + zrela + cross(wa, wrela));
hall2

Courtesy of Martin Otter hall1 w r

g2 qd
g4
q

7CourtesyPeter Fritzson
of Martin Otter Copyright © Open Source Modelica Consortium pelab

What is Special about Modelica?


Multi-Domain Visual Acausal
Modeling Hierarchical
A textual class-based language
Component
OO primary used for as a structuring concept
Modeling
Behaviour described declaratively using
• Differential algebraic equations (DAE) (continuous-time)
• Event triggers (discrete-time)

Variable class VanDerPol "Van der Pol oscillator model"


declarations Real x(start = 1) "Descriptive string for x”;
Real y(start = 1) "y coordinate”;
parameter Real lambda = 0.3;
p
equation
Typed der(x) = y;
der(y) = -x + lambda*(1 - x*x)*y;
Declarative end VanDerPol;
Equation-based
Differential equations
Textual Language

8 Peter Fritzson Copyright © Open Source Modelica Consortium pelab

4
What is Special about Modelica?
Multi-Domain Visual Acausal
Modeling Component
Modeling
Hybrid modeling =
continuous-time + discrete-time modeling

Continuous-time

Discrete-time

Typed
Declarative time
Hybrid
Equation-based Modeling
Textual Language

9 Peter Fritzson Copyright © Open Source Modelica Consortium pelab

Modelica Classes and


Inheritance

10 Peter Fritzson Copyright © Open Source Modelica Consortium pelab

5
Simplest Model – Hello World!

A Modelica “Hello World” model


Equation: x’ = - x class HelloWorld "A simple equation"
Initial condition: x(0) = 1 Real x(start=1);
equation
der(x)= -x;
end HelloWorld;

Simulation in OpenModelica environment


1

0.8 simulate(HelloWorld, stopTime = 2)


0.6
plot(x)

0.4

0.2

0.5 1 1.5 2

11 Peter Fritzson Copyright © Open Source Modelica Consortium pelab

Model Including Algebraic Equations

Include algebraic equation class DAEexample


Real x(start=0.9);
Algebraic equations contain Real y;
no derivatives equation
der(y)+(1+0.5*sin(y))*der(x)
= sin(time);
x - y = exp(-0.9*x)*cos(y);
end DAEexample;

Simulation in OpenModelica environment


1.20

1.15 simulate(DAEexample, stopTime = 1)


1.10
plot(x)
1.05

1.0 time
0.2 0.4 0.6 0.8 1
0.95

0.90

12 Peter Fritzson Copyright © Open Source Modelica Consortium pelab

6
Example class: Van der Pol Oscillator
class VanDerPol "Van der Pol oscillator model"
Real x(start = 1) "Descriptive string for x"; // x starts at 1
Real y(start = 1) "y coordinate"; // y starts at 1
parameter Real lambda = 0.3;
equation
d ( ) = y;
der(x) // This
hi iis the
h 1st diff equation
i //
der(y) = -x + lambda*(1 - x*x)*y; /* This is the 2nd diff equation */
end VanDerPol;

simulate(VanDerPol,stopTime = 25)
1
plotParametric(x,y)

-2 -1 1 2

-1

-2

13 Peter Fritzson Copyright © Open Source Modelica Consortium pelab

Exercises – Simple Textual Modeling

• Start
S OMNotebook
O
• Start->Programs->OpenModelica->OMNotebook
• Open File: Exercise01-classes-simple-textual.onb

• Open Exercise01-classes-simple-textual.pdf

14 Peter Fritzson Copyright © Open Source Modelica Consortium pelab

7
Exercises 2.1 and 2.2
• Open the Exercise01-classes-simple-textual.onb
found in the Tutorial directory.
• Locate the VanDerPol model in DrModelica (link from
S ti 2
Section 2.1),
1) using
i OMN
OMNotebook!
t b k!
• Exercise 2.1: Simulate and plot VanDerPol. Do a slight
change in the model, re-simulate and re-plot.
• Exercise 2.2. Simulate and plot the HelloWorld example.
Do a slight change in the model, re-simulate and re-plot.
Try command-completion, val( ), etc.
class HelloWorld "A simple equation"
Real x(start=1);
equation simulate(HelloWorld, stopTime = 2)
der(x)= -x; plot(x)
end HelloWorld;

15 Peter Fritzson Copyright © Open Source Modelica Consortium pelab

Variables and Constants

Built-in primitive data types


Boolean true or false
Integer Integer value
value, e
e.g.
g 42 or –33
Real Floating point value, e.g. 2.4e-6
String String, e.g. “Hello world”
Enumeration Enumeration literal e.g. ShirtSize.Medium

16 Peter Fritzson Copyright © Open Source Modelica Consortium pelab

8
Variables and Constants cont’

• Names indicate meaning of constant


• Easier to maintain code
• Parameters are constant during simulation
• Two types of constants in Modelica
• constant
• parameter
constant Real PI=3.141592653589793;
constant String redcolor = "red"
"red";
constant Integer one = 1;
parameter Real mass = 22.5;

17 Peter Fritzson Copyright © Open Source Modelica Consortium pelab

Comments in Modelica

1) Declaration comments, e.g. Real x "state variable";


class VanDerPol "Van der Pol oscillator model"
Real x(start = 1) "Descriptive x ; //
Descriptive string for x”; x starts at 1
Real y(start = 1) "y coordinate”; // y starts at 1
parameter Real lambda = 0.3;
equation
der(x) = y; // This is the 1st diff equation //
der(y) = -x + lambda*(1 - x*x)*y; /* This is the 2nd diff equation */
end VanDerPol;

2) Source code comments, disregarded by compiler


2a) C style, e.g. /* This is a C style comment */
2b) C++ style, e.g. // Comment to the end of the line…

18 Peter Fritzson Copyright © Open Source Modelica Consortium pelab

9
A Simple Rocket Model
thrust − mass ⋅ gravity
Rocket acceleration =
mass
apollo13 thrust
mass ′ = − massLossRate ⋅ abs ( thrust )
mg altitude′ = velocity
velocity ′ = acceleration

declaration
new model class Rocket "rocket class" comment
parameters (changeable parameter String name;
before the simulation) Real mass(start=1038.358);
Real altitude(start= 59404);
floating point Real velocity(start= -2003); start value
type Real acceleration;
Real thrust; // Thrust force on rocket
Real gravity;
i // Gravity
i forcefield
i
parameter Real massLossRate=0.000277; name + default value
equation
(thrust-mass*gravity)/mass = acceleration; mathematical
der(mass) = -massLossRate * abs(thrust); equation (acausal)
der(altitude) = velocity;
differentiation with der(velocity) = acceleration;
regards to time end Rocket;

19 Peter Fritzson Copyright © Open Source Modelica Consortium pelab

Celestial Body Class

A class declaration creates a type name in Modelica


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

An instance of the class can be


...
declared by prefixing the type CelestialBody moon;
name to a variable name ...

The declaration states that moon is a variable


containing an object of type CelestialBody

20 Peter Fritzson Copyright © Open Source Modelica Consortium pelab

10
Moon Landing
Rocket apollo13
thrust moon. g ⋅ moon.mass
apollo. gravity =
mg
(apollo.altitude + moon.radius )2

altitude
CelestialBody

class MoonLanding
parameter Real force1 = 36350;
parameter Real force2 = 1308;
only access protected
inside the class parameter Real thrustEndTime = 210;
parameter Real thrustDecreaseTime = 43.2;
access by dot public
t ti
notation outside
t id Rocket apollo(name "apollo13")
apollo(name="apollo13");
the class CelestialBody 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;

21 Peter Fritzson Copyright © Open Source Modelica Consortium pelab

Simulation of Moon Landing


simulate(MoonLanding, stopTime=230)
plot(apollo.altitude, xrange={0,208})
plot(apollo.velocity, xrange={0,208})

30000
50 100 150 200
25000
-100
20000
-200
15000

10000 -300

5000 -400

50 100 150 200

It starts at an altitude of 59404 The rocket initially has a high


(not shown in the diagram) at negative velocity when approaching
time zero, gradually reducing it the lunar surface. This is reduced to
until touchdown at the lunar zero at touchdown, giving a smooth
surface when the altitude is zero landing

22 Peter Fritzson Copyright © Open Source Modelica Consortium pelab

11
Restricted Class Keywords

• The class keyword can be replaced by other keywords, e.g.: model,


record, block, connector, function, ...
• Classes declared with such keywords have restrictions
• Restrictions apply to the contents of restricted classes

• Example: A model is a class that cannot be used as a connector class


• Example: A record is a class that only contains data, with no equations
• Example: A block is a class with fixed input-output causality
model CelestialBody
constant Real g = 6.672e-11;
parameter Real radius;
parameter String name;
parameter Real mass;
end CelestialBody;

23 Peter Fritzson Copyright © Open Source Modelica Consortium pelab

Modelica Functions

• Modelica Functions can be viewed as a special


kind of restricted class with some extensions
• A function can be called with arguments
arguments, and is
instantiated dynamically when called
• More on functions and algorithms later in
Lecture 4
function sum
input Real arg1;
input Real arg2;
output Real result;
algorithm
result := arg1+arg2;
end sum;

24 Peter Fritzson Copyright © Open Source Modelica Consortium pelab

12
Inheritance
parent class to Color

restricted kind record ColorData


of class without parameter Real red = 0.2;
equations parameter Real blue = 0.6;
Real green; class
l E
ExpandedColor
d dC l
end ColorData; parameter Real red=0.2;
child class or parameter Real blue=0.6;
subclass
Real green;
class Color equation
keyword extends ColorData; red + blue + green = 1;
denoting equation
inheritance end ExpandedColor;
red + blue + green = 1;
end Color;

Data and behavior: field declarations, equations, and


certain other contents are copied into the subclass

25 Peter Fritzson Copyright © Open Source Modelica Consortium pelab

Inheriting definitions

Legal!
Identical to the
Inheriting multiple
record ColorData
inherited field blue identical
parameter Real red = 0.2;
0 2; definitions results
parameter Real blue = 0.6; in only one
Real green; definition
end ColorData;

class ErrorColor
extends ColorData;
parameter Real blue = 0.6;
parameter Real red = 0.3;
equation
q
red + blue + green = 1; Inheriting
Illegal!
end ErrorColor; Same name, but multiple different
different value definitions of the
same item is an
error

26 Peter Fritzson Copyright © Open Source Modelica Consortium pelab

13
Inheritance of Equations
class Color
parameter Real red=0.2;
parameter Real blue=0.6;
Real green;
equation
red + blue + green = 1;
end Color;

Color is identical to Color2


class Color2 // OK!
extends Color; Same equation twice leaves
equation one copy when inheriting
red + blue + green = 1;
end Color2;

class Color3 // Error! Color3 is overdetermined


extends Color;
equation Different equations means
red + blue + green = 1.0; two equations!
// also inherited: red + blue + green = 1;
end Color3;

27 Peter Fritzson Copyright © Open Source Modelica Consortium pelab

Multiple Inheritance

Multiple Inheritance is fine – inheriting both geometry and color


class Point
class
l Color
l Real x;
parameter Real red=0.2; Real y,z;
parameter Real blue=0.6; end Point;
Real green; class ColoredPoint
equation extends Point;
red + blue + green = 1; extends Color;
multiple inheritance
end Color; end ColoredPoint;

class ColoredPointWithoutInheritance
Real x;
Real y, z;
parameter Real red = 0.2; Equivalent to
parameter Real blue = 0.6;
Real green;
equation
red + blue + green = 1;
end ColoredPointWithoutInheritance;

28 Peter Fritzson Copyright © Open Source Modelica Consortium pelab

14
Multiple Inheritance cont’

Only one copy of multiply inherited class Point is kept


class Point
Real x;
Real
l y;
end Point;

class VerticalLine class HorizontalLine


extends Point; extends Point;
Real vlength; Diamond Inheritance Real hlength;
end VerticalLine; end HorizontalLine;

class Rectangle
extends VerticalLine;
extends HorizontalLine;
end Rectangle;

29 Peter Fritzson Copyright © Open Source Modelica Consortium pelab

Simple Class Definition –


Shorthand Case of Inheritance

• Example: • Often used for


class SameColor = Color; introducing new
names off types:
Equivalent to: type Resistor = Real;

class SameColor
inheritance extends Color; connector MyPin = Pin;
end SameColor;

30 Peter Fritzson Copyright © Open Source Modelica Consortium pelab

15
Inheritance Through Modification

• Modification is a concise way of combining


inheritance with declaration of classes or
instances
• A modifier modifies a declaration equation in the
inherited class
• Example: The class Real is inherited, modified
with a different start value equation, and
instantiated as an altitude variable:
...
Real altitude(start= 59404);
...

31 Peter Fritzson Copyright © Open Source Modelica Consortium pelab

The Moon Landing


Example Using Inheritance
Rocket
apollo13 thrust

mg model Rocket "generic rocket class"


extends Body;
altitude parameter Real massLossRate=0.000277;
CelestialBody Real altitude(start= 59404);
Real velocity(start= -2003);
Real acceleration;
Real thrust;
model Body "generic body" Real gravity;
Real mass; equation
String name; thrust-mass*gravity= mass*acceleration;
end Body; der(mass)= -massLossRate*abs(thrust);
der(altitude)= velocity;
d ( l it ) acceleration;
der(velocity)= l ti
model CelestialBody
end Rocket;
extends Body;
constant Real g = 6.672e-11;
parameter Real radius;
end CelestialBody;

32 Peter Fritzson Copyright © Open Source Modelica Consortium pelab

16
The Moon Landing
Example using Inheritance cont’

inherited
parameters

model MoonLanding
parameter Real force1 = 36350;
parameter Real force2 = 1308;
parameter Real thrustEndTime = 210;
parameter Real thrustDecreaseTime = 43.2;
Rocket apollo(name="apollo13", mass(start=1038.358) );
CelestialBody moon(mass=7.382e22,radius=1.738e6,name="moon");
equation
apollo.thrust = if (time<thrustDecreaseTime) then force1
else if (time<thrustEndTime) then force2
else 0;
apollo.gravity
apo o.g a ty =moon.g*moon.mass/(apollo.altitude+moon.radius)^2;
oo .g oo . ass/(apo o.a t tude oo . ad us) ;
end Landing;

33 Peter Fritzson Copyright © Open Source Modelica Consortium pelab

Inheritance of Protected Elements


If an extends-clause is preceded by the protected keyword,
all inherited elements from the superclass become protected
elements of the subclass
class ColoredPoint
class Point protected
Real x; extends Color;
class Color
Real y,z; public
Real red;
end Point; extends Point;
Real blue;
Real green; end ColoredPoint;
equation
red + blue + green = 1; Equivalent to
end Color;
class ColoredPointWithoutInheritance
The inherited fields from Point keep Real x;
Real y,z;
their protection status since that protected Real red;
extends-clause is preceded by protected Real blue;
public protected Real green;
equation
red + blue + green = 1;
A protected element cannot be end ColoredPointWithoutInheritance;
accessed via dot notation!
34 Peter Fritzson Copyright © Open Source Modelica Consortium pelab

17
Advanced Topic

• Class parameterization

35 Peter Fritzson Copyright © Open Source Modelica Consortium pelab

Generic Classes with Type Parameters


class C
Formal class parameters are replaceable class ColoredClass = GreenClass;
replaceable variable or type ColoredClass obj1(p1=5);
declarations within the class (usually)
marked with the prefix replaceable replaceable YellowClass obj2;
ColoredClass obj3;
R dCl
RedClass obj4;
bj4
equation
Actual arguments to classes are end C;
modifiers, which when containing
whole variable declarations or
types are preceded by the prefix class C2 =
redeclare C(redeclare class ColoredClass = BlueClass);

Colored- Colored-
Class Class
Equivalent to
object object
class C2
Green- BlueClass obj1(p1=5);
Class
YellowClass obj2;
BlueClass obj3;
A yellow A red
object object
RedClass obj4;
equation
end C2;

36 Peter Fritzson Copyright © Open Source Modelica Consortium pelab

18
Class Parameterization when Class Parameters
are Components
R1

The class ElectricalCircuit has been


converted into a parameterized generic
class GenericElectricalCircuit with
AC R2 L1 2 R3
three formal class parameters R1, R2, R3,
marked by the keyword replaceable

Class
class ElectricalCircuit class GenericElectricalCircuit
Resistor R1(R=100);
parameterization replaceable Resistor R1(R=100);
Resistor R2(R=200); replaceable Resistor R2(R=200);
Resistor R3(R=300); replaceable Resistor R3(R=300);
Inductor L1; Inductor L1;
SineVoltage AC; SineVoltage AC;
Groung G; Groung G;
equation
ti equation
connect(R1.n,R2.n); connect(R1.n,R2.n);
connect(R1.n,L1.n); connect(R1.n,L1.n);
connect(R1.n,R3.n); connect(R1.n,R3.n);
connect(R1.p,AC.p); connect(R1.p,AC.p);
..... .....
end ElectricalCircuit; end GenericElectricalCircuit;

37 Peter Fritzson Copyright © Open Source Modelica Consortium pelab

Class Parameterization when Class Parameters


are Components - cont’
R1
A more specialized class TemperatureElectricalCircuit is
created by changing the types of R1, R3, to TempResistor

AC R2 L1 2 R3

class TemperatureElectricalCircuit =
G GenericElectricalCircuit (redeclare TempResistor R1
redeclare TempResistor R3);

class TemperatureElectricalCircuit We add a temperature variable Temp for


parameter Real Temp=20; the temperature of the resistor circuit
and modifiers for R1 and R3 which are
extends GenericElectricalCircuit( now TempResistors.
redeclare TempResistor R1(RT=0.1, Temp=Temp),
redeclare TempResistor R3(R=300));
end TemperatureElectricalCircuit class ExpandedTemperatureElectricalCircuit
parameter Real Temp;
TempResistor R1(R=200, RT=0.1, Temp=Temp),
replaceable Resistor R2;
TempResistor R3(R=300);
equivalent to equation
....
end ExpandedTemperatureElectricalCircuit

38 Peter Fritzson Copyright © Open Source Modelica Consortium pelab

19
Exercises 1 Simple Textual Continued

• C
Continue exercises in Exercise01-classes-
simple-textual.onb

• Do Exercises 1.3, 1.4, 1.5 and 2

39 Peter Fritzson Copyright © Open Source Modelica Consortium pelab

Exercise 1.3 – Model the System Below

• Model this Simple System of Equations in


Modelica

40 Peter Fritzson Copyright © Open Source Modelica Consortium pelab

20

You might also like