letem světem jazykem a nástrojicreativeconnections.cz/2015_modelicaseminar/2... · objektový...
Post on 23-Jul-2020
0 Views
Preview:
TRANSCRIPT
Modelica v kostceletem světem jazykem a nástroji
filip.jezek@creativeconnections.cz
Použity části materiálů Petera Fritzsona
Modelica - něco historie● University of Linköping, Švédsko● od 1996, první aplikace 2000● Modelica Association
○ DLR, Modelon, Dassault, Maplesoft, Wolfram …○ www.modelica.org
● Modelica language version 3.3○ https://modelica.org/documents/ModelicaSpec33.pdf
● Modelica standard library (v3.2.1)○ Přes 2000 modelů a funkcí
Modelica - co to je za jazyk
Jaký jazyk je Modelica?
● Deklarativní
● Multidoménový
● Objektový
● Vizuální
● Efektivní
● Neproprietární
Deklarativní
● co se má udělat ( např SQL)● Vs. Imperativní – jak se to má
udělat (C, java, Matlab) -> Equation based -> Akauzální
class VanDerPol "Van der Pol oscillator model" Real x(start = 1) "Descriptive string for x”; Real y(start = 1) "y coordinate”; parameter Real lambda = 0.3;equation der(x) = y; der(y) = -x + lambda*(1 - x*x)*y; end VanDerPol;
SELECT email FROM studenti WHERE známka < 50 ORDER BY prijmeni ASC
for(int i = 0; i < studenti.length;i++)
if (studenti[i].známka < 50)lamy.add(studenti[i]);
lamy.Sort(prijmeni);
Deklarativní
● Proprietární kód klasických programovacích jazyků (např. Ada, Fortran, C,...)
● Blokové modelovací jazyky (např. Simulink, ...)
● vs Modelica - automatické odvození kauzality - AKAUZÁLNÍ
Multidoménový
● Domény ○ Elektrické○ Mechanické○ Termodynamické○ Hydraulické○ Biologické○ .. definovatelné
● mezi doménami jsou stejné principy○ elektrické analogie
Multidoménový
● mezi doménami jsou stejné principy
Objektový
● vše je třída● jeden objekt a jeho instance● Strong-typed (nemíchají se typy
dohromady)● Dědičnost
partial class extends
● Objektový jazyk co do hierarchického návrhu
connector PositivePressureFlow "Pressure[mmHg] and Inflow[ml/min]" extends Library.PressureFlow.PressureFlow;annotation ( defaultComponentName="q_in", Icon(coordinateSystem(preserveAspectRatio=true{ 100,100}}), graphics={Rectangle( extent={{-20,10},{20,-10}}, lineColor={0,0,0}, lineThickness=1), Polygon( points={{0,100},{100,0},{0,-100},{-100,0},{0,100}}, lineColor={0,0,0}, smooth=Smooth.None, fillPattern=FillPattern.Solid, fillColor={0,0,0})}),[...]);end PositivePressureFlow; connector PressureFlow "Pressure[mmHg] and Flow[ml/min]" Real pressure( final quantity="Pressure", final unit="mmHg"); flow Real q( final quantity="Flow", final unit="ml/min") "flow"; annotation (Documentation(revisions="<html>[...]);end PressureFlow;
Vizuální návrh systému
● Hierarchická struktura● „dole“ rovnice● vizuální editor● nakonec se stejně sesype
na rovnice
equation der(volume) = q1.q + q2.q; q1.pressure = pressure1; q2.pressure = pressure2;
Efektivní
● Efektivita simulace srovnatelná s C● // při kompilaci překlad do C● kompilace trvá déle● Matlab je interpretovaný
Neproprietární
● „ne-soukromý“ ~ veřejný● Modelica Association● Společný vývoj dalších verzí
Příklad - kulička na pružině
● F = -k*y● F = m*a
Příklad - kulička na pružině
● rovnicové vyjádření
Příklad - kulička na pružině
● vyjádření v kódu (Matlab)
function dydt = springode(t,W)k = 1;m = 1;dydt=zeros(2,1);% whats in dydt% dydt(1) = der(y1) = der(y)% dydt(2) = der(y2) = der(der(v))dydt(1) = W(2);dydt(2) = -k*W(1)/m;
% RUN IT[t,y]=ode23s(@springode,[0 10],[1;0]); plot(t, y(:,1));
Příklad - kulička na pružině
● vyjádření v Simulinku
Příklad - kulička na pružině
● Modelica: low-level
model SpringMass Real f “Síla tě provází”; Real x “pozice”; Real derf “Derivace pozice”; parameter Real k = 1 “tuhosť”; parameter Real m = 1 “Hmotnost”; initial equation x = -1;
equation x = - f / k; f + m*der(derf)/k = 0;
derf = der(f);end SpringMass;
Příklad - kulička na pružině
● Modelica: objektový přístup○ definujeme si jednotlivé prvky...
Příklad - kulička na pružině
● … a sestavíme jakýkoli systém!
Nástroje Modelica
Dymola
● Dassault Systémes● Integrace do 3D CAD/CAM/CAE prostředí Catia● “industry standard”
OpenModelica
● Open-source platforma● Openmodelica.org● verze 1.9.2● OMEdit, OMNotebook, OMOptim● Rychle se vyvíjí, máme kontakty na developery● Striktní interpretace jazyka● Konflikty v anotacích● Stále něco chyb
○ české znaky○ ...
SystemModeler (Wolfram)
● Dříve MathModelica (MathCore)● Základ z OM, pokročilé UI● Integrace s Wolfram Mathematica
Další nástroje
● MapleSim● Optimalizace rovnic pomocí Maple● Rozsáhlý simulační framework ● Podporuje také komponenty z Modelicy
● SimulationX● ITI (DE)● Pohony, hydraulika, termodynamika● Podporuje také jazyk Modelica
● Jmodelica (Modelon AB)● Open-source překladač bez vlastního editoru
■ Eclipse● Optimica
■ Více k optimalizaci modelů
A další...https://www.modelica.org/tools
Modelica a prostředí
● Grafické zobrazení - modelování - prostředí – proprietary
● textové zobrazení - modelica - // non-proprietary //
● simulace - prostředí – proprietary
Závěrem
Co si odnést..● Modelica nám umožňoje tvořit
○ složité systémy
○ přehledné a modifikovatelné modely
○ univerzální knihovny
● má dostupné profesionální i free open-
source řešení
Děkuji za pozornostFilip Ježek
Co dokážeme simulovat
Co to znamená Equation based modelling
● Vyjádření systému jen pomocí rovnic● Triviální
○ a=3● Jednoduché
○ a = 2b + 3● jsou to ale skutečné rovnice
○ 0 = - a + 2b + 3● ODE – obyčejné diferenciální rovnice
○ der(a) = b + 2;○ a = integrál( b + 2);
● Jen 1. řádu!○ soustava 1. řádů
Co to znamená Equation based modelling
● Stejný počet neznámých a rovnic (na všech úrovních!)● Systém musí mít řešení (singularity!)
● V současné době žádné PDE○ Čili žádné FEM (finite element method)
■ ani CFD (computational fluid dynamics), ○ Je ale možné využít výsledků a propojit je
Pohled komponentového návrhu
● Schéma zapojení● pohled - co ikona to fyzická komponenta - vlastně stavíme přímo blokový
schéma● Spojovací linky vyjadřují propojení mezi komponentami● Uvnitř komponentů jsou rovnice popisující jejich chování● Hierarchická víceúrovňová kompozice● textová reprezentace – jen spojujeme rovnice
Drag n drop vs. Equation based
● Equation based○ Zapisujeme rovnice v komponentě
● Drag’n’drop○ Spojujeme komponenty○ Parametrizace prvků
model system fix fix1 annotation (Placement(transformation(extent={{-20,60},{0,80}}))); spring spring1 annotation (Placement(transformation(extent={{-20,20},{0,40}}))); mass mass1(m=1, x(start=-1)) annotation (Placement(transformation(extent={{-20,-12},{0,8}}))); spring spring2(k=2) annotation (Placement(transformation(extent={{-40,-18},{-20,2}}))); mass mass2(m=1, initPos=-1) annotation (Placement(transformation(extent={{-40,-50},{-20,-30}})));equation connect(fix1.position_y1, spring1.y1) annotation (Line( points={{-11,61},{-11,39}}, color={0,0,0}, smooth=Smooth.None)); connect(mass1.y, spring1.y2) annotation (Line( points={{-10,7},{-10,14},{-11,14},{-11,21}}, color={0,0,255}, smooth=Smooth.None)); connect(spring2.y1, spring1.y2) annotation (Line( points={{-31,1},{-20.5,1},{-20.5,21},{-11,21}}, color={0,0,255}, smooth=Smooth.None)); connect(mass2.y, spring2.y2) annotation (Line( points={{-30,-31},{-30,-17},{-31,-17}}, color={0,0,255}, smooth=Smooth.None));en system;
Kauzalita vs akauzalita● Postup výpočtu je dán zápisem
○ X = x +1● Postup výpočtu je dán strukturou
○ Vyřeší kompilátor● (postup výpočtu se mění)
Syntax
● Struktura
● Klíčová slova○ Equation○ Initial equation○ End○ if, when
● classes:○ Package○ Model○ Connector○ Další datové typy
Hodnotové datové typy● Real
○ spojitá veličina● Integer
○ celočíselná veličina - diskrétní● Boolean
○ true / false● String
○ řetězec znaků● Enumeration
○ Výčet● Předpony:
○ Constant■ constant Real x;
○ Parameter■ parameter Boolean alive;
○ Discrete■ discrete Real schody;
○ Input, output○ Partial
Jednotky● Automatická kontrola jednotek proti překlepům! * (OM zatím neumí)● Osy na grafu etc.. ** (OM umí)● Není podstatné pro výpočet.
● Základní jednotky SI○ m, kg, s, A, K, mol, cd
● Násobky○ p, n, u, m, k, M, G, T, časové: min, h○ Mocniny: 3, -3
● spojování . nikoli *● Např.:
○ m.s-1○ ml/min (~ ml.min-1)
● Detailní info: https://www.modelica.org/events/modelica2008/Proceedings/sessions/session1a2.pdf
○ specifikace nemusí být exaktně implementována● Příklady:
○ Real c (final unit="A.m-2") "Proudová hustota";○ Real Pao (final unit="mmHg") "Arteriální tlak";
Komentáře
● V kódu:○ // inline komentář○ /* blokový komentář */
Třídy a základ dědičnosti
● Vše je třída○ Package○ Model○ Connector○ Block○ Record○ Function○ Class
● Přístup do objektů třídy: tečková notace○ model.submodel.subsubmodel.parameter = 2○ Klavír.klávesa.y = 2○ Klavír.klávesa.y (start = 1)○ pozice = konektor.pozice + 3;
● předpona partial (abstract) - rodič
● Každá třída podporuje vícenásobné dědění● Keyword extends ● Keyword partial – „virtual“ / „abstract“● Přebírá jak objekty a proměnné, tak grafiku
○ Univerzální ikonky
record ColorData parameter Real red = 0.2; parameter Real blue = 0.6; Real green;end ColorData;
class Color extends ColorData;equation red + blue + green = 1;end Color;
keyword denoting inheritance
restricted kind of class without equations
parent class to Color
child class or subclass
Dědičnost
● Veličiny úsilí■ x1 = x2 = x3 =…
● Veličiny toku – keyword flow■ x1 + x2 + x3 +.. = 0
●
connector Pin "Pin of an electrical component" Modelica.SIunits.Voltage v "Potential at the pin flow Modelica.SIunits.Current i "Current flowing into the pin" end Pin;
Konektory
● vše v jedné komponentě● rozdělené mezi více komponenty
○ propojení konektory● Konektory
○ jednoduché■ Real i;
○ složené■ Real p
flow Real q;○ … a jejich libovolná kombinace.
■ Vyvážený konektor má však obvykle 1+1
Konektory
Konektory: flow proměnné● flow Real q;● Kirchhofovy zákony
○ vytékání je záporné● Počet flow proměnných = minimální počet rovnic
c1.q = 0; (c2.p - c1.p) = 10*c1.q;c1.q = c2.q;
Dokumentace
● ”Popis modelu”
● “Popis proměnné”
● Objeví se v generované dokumentaci:
partial block SO "Single Output continuous control block" extends BlockIcon; RealOutput y "Connector of Real output signal" end SO;
Inicializace● vše v derivaci musí mít počáteční podmínku● pokud nemá, prostředí odhaduje samo
○ 0○ úvodní iterace
● dvě možnosti:○ definice start
■ fixed = true / false○ initial equation
● ne najednou!
model těstoReal x(start = 2, fixed = true, final unit="m") "pocatecni pozice";
initial equationx = 2;
equationder(x) = 8;
end těsto;
● Definují zobrazení a pozice● Ikon● Diagramu● Propojení
● Dokumentace● Vizuální návrh● Vše ostatní krom
matematických vlastností● Nemá vliv na funkci
connector Pin "Pin of an electrical component" Modelica.SIunits.Voltage v "Potential at the pin flow Modelica.SIunits.Current i "Current flowing into the pin" annotation ( unassignedMessage="An electrical current cannot be uniquely calculated."); annotation (defaultComponentName="pin", Icon(coordinateSystem(preserveAspectRatio=true, extent={{-100,-100},{100, 100}}), graphics={Rectangle( extent={{-100,100},{100,-100}}, lineColor={0,0,255}, fillColor={0,0,255}, fillPattern=FillPattern.Solid)}), Diagram(coordinateSystem(preserveAspectRatio=true, extent={{-100,-100},{ 100,100}}), graphics={Rectangle( extent={{-40,40},{40,-40}}, lineColor={0,0,255}, fillColor={0,0,255}, fillPattern=FillPattern.Solid), Text( extent={{-160,110},{40,50}}, lineColor={0,0,255}, textString="%name")}), Documentation(revisions="<html><ul><li><i> 1998 </i> by Christoph Clauss<br> initially implemented<br> </li></ul></html>"));end Pin;
Anotace
Další zdroje● www.modelica.org● Peter Fritzson
○ http://www.ida.liu.se/labs/pelab/modelica/OpenModelica/releases/current/doc/ModelicaTutorialFritzson.pdf - skvělý tutoriál
○ Principles of Object-Oriented Modeling and Simulation with Modelica 2.1 ■ http://www.bausch-gall.de/ModelicaBookExcerpts.pdf■ http://patf-biokyb.lf1.cuni.cz/wiki/cvut/mos_materialy
● pwd protected● Tiller
○ https://cw.felk.cvut.cz/lib/exe/fetch.php/courses/a6m33mos/tiller_introductiontophysicalmodelingwithmodelica.pdf
○ http://book.xogeny.com/
● Nástroje Modelica● Vlastnosti Modelicy● Co je vizuální návrh a co je equation based modelování● Modelica umí simulovat spojité i diskrétní● Bloky se spojují konektory● K definici zobrazení se používají anotace● Hlídáme si jednotky
Shrnutí
top related