Modelka - Modelica

Modelica
Modelica Language.png
Paradygmat Język deklaratywny
Deweloper Projekt Stowarzyszenia Modelica (MAP)
Po raz pierwszy pojawiły się 1997
Wersja stabilna
3.5 / 18 lutego 2021
OS Wieloplatformowy
Licencja CC-BY-SA
Rozszerzenia nazw plików .mo
Strona internetowa www.modelica.org
Główne wdrożenia
AMESim , CATIA Systems, Dymola , JModelica.org , MapleSim , Wolfram SystemModeler , OpenModelica , Scicos , simulationx , Xcos

Modelica jest zorientowanym obiektowo , deklaratywnym , wielodomenowym językiem modelowania do modelowania zorientowanego na komponenty złożonych systemów, np. systemów zawierających podkomponenty mechaniczne, elektryczne, elektroniczne, hydrauliczne, termiczne, sterujące, elektryczne lub procesowe. Darmowy język Modelica jest rozwijany przez stowarzyszenie Modelica Association non-profit. Stowarzyszenie Modelica opracowuje również darmową Bibliotekę Standardową Modelica, która zawiera około 1400 ogólnych komponentów modelu i 1200 funkcji w różnych domenach, począwszy od wersji 4.0.0.

Charakterystyka

Chociaż Modelica przypomina języki programowania obiektowego , takie jak C++ lub Java , różni się dwoma ważnymi względami. Po pierwsze, Modelica jest językiem modelowania, a nie konwencjonalnym językiem programowania . Klasy Modelica nie są kompilowane w zwykłym sensie, ale są tłumaczone na obiekty, które są następnie ćwiczone przez silnik symulacyjny. Silnik symulacji nie jest określony przez język, chociaż przedstawiono pewne wymagane możliwości.

Po drugie, chociaż klasy mogą zawierać elementy algorytmiczne podobne do instrukcji lub bloków w językach programowania, ich podstawową zawartością jest zbiór równań . W przeciwieństwie do typowej instrukcji przypisania, takiej jak

x := 2 + y;

gdzie po lewej stronie zestawienia przypisana jest wartość obliczona z wyrażenia po prawej stronie, równanie może mieć wyrażenia zarówno po prawej, jak i po lewej stronie, np.

x + y = 3 * z;

Równania nie opisują przypisania, ale równość . W terminologii Modelica równania nie mają z góry określonej przyczynowości . Silnik symulacji może (i zwykle musi) manipulować równaniami symbolicznie, aby określić kolejność ich wykonywania oraz które składniki równania są danymi wejściowymi, a które danymi wyjściowymi.

Historia

Prace projektowe Modelica zostały zainicjowane we wrześniu 1996 roku przez Hilding Elmqvist. Celem było opracowanie zorientowanego obiektowo języka do modelowania systemów technicznych w celu ponownego wykorzystania i wymiany dynamicznych modeli systemów w znormalizowanym formacie. Modelica 1.0 bazuje na pracy doktorskiej Hildinga Elmqvista oraz doświadczeniach z językami modelowania Allan, Dymola , NMF ObjectMath, Omola, SIDOPS+ i Smile. Hilding Elmqvist jest kluczowym architektem Modelica, ale wiele innych osób również wniosło swój wkład (patrz załącznik E w specyfikacji Modelica). We wrześniu 1997 została wydana wersja 1.0 specyfikacji Modelica, która była podstawą do prototypowego wdrożenia w komercyjnym systemie oprogramowania Dymola. W roku 2000 powstało stowarzyszenie Modelica, non-profit, które ma zarządzać stale rozwijającym się językiem Modelica i rozwojem bezpłatnej Biblioteki Standardowej Modelica. W tym samym roku rozpoczęto wykorzystanie Modeliki w zastosowaniach przemysłowych.

Ta tabela przedstawia oś czasu historii specyfikacji Modelica:

Uwolnienie Data wydania Najważniejsze
1,0 1997, wrzesień Pierwsza wersja do modelowania ciągłych układów dynamicznych.
1,1 1998, grudzień Elementy językowe do modelowania systemów dyskretnych (przed, kiedy)
1.2 1999, czerwiec Interfejs do C i Fortran, wewnętrzne/zewnętrzne dla zmiennych globalnych, dopracowana semantyka obsługi zdarzeń
1,3 1999, grudzień Ulepszona semantyka połączeń wewnętrznych/zewnętrznych, elementów chronionych, wyrażeń tablicowych.
1,4 2000, grudzień Usunięto regułę deklaracji przed użyciem, udoskonaloną koncepcję pakietu, udoskonaloną klauzulę when
2,0 2002, lipiec Inicjalizacja modeli, standaryzacja wyglądu graficznego, funkcje z mieszanymi argumentami pozycyjnymi i nazwanymi, konstruktor rekordów, wyliczenia
2,1 2004, marzec Nadmierne złącze do modelu 3-wym. układy mechaniczne, ulepszona redeklaracja podmodeli, tablicowe i tablicowe indeksy wyliczeń
2.2 2005, luty Rozszerzalne złącze do modelowych szyn sygnałowych, warunkowych deklaracji komponentów, tablic z dynamiczną zmianą rozmiaru funkcji
3,0 2007, wrzesień Wersja porządkowa: nowo napisana specyfikacja, udoskonalony system typów i wygląd graficzny, naprawione błędy językowe, zrównoważona koncepcja modelu do wykrywania błędów modelu w znacznie lepszy sposób
3.1 2009, maj Złącze Stream do obsługi dwukierunkowego przepływu płynu, przeciążania operatora, mapowania części modelu do środowisk wykonawczych (do użytku w systemach wbudowanych )
3.2 2010, marzec Ulepszona inicjalizacja metodą homotopii, funkcje jako formalne dane wejściowe do funkcji, obsługa Unicode , kontrola dostępu w celu ochrony IP , ulepszona obsługa bibliotek obiektów
3,3 2012, maj Dodano elementy języka do opisu okresowych i nieokresowych sterowników synchronicznych opartych na równaniach taktowanych, a także synchronicznych maszyn stanów.
3.4 2017, kwiecień Automatyczna konwersja modeli. Wiele drobnych ulepszeń
3,5 2021, luty Adnotacje dla wstępnie zdefiniowanych wykresów. Zmiana formatu specyfikacji, z wieloma zmianami redakcyjnymi. Wyjaśnienia dotyczące synchronicznych elementów języka i maszyn stanowych. Wiele drobnych wyjaśnień dotyczących funkcji, konwersji modeli i kilku innych części specyfikacji.

Realizacje

Komercyjne front-endy dla Modeliki to AMESim francuskiej firmy Imagine SA (obecnie część Siemens PLM Software ), Dymola szwedzkiej firmy Dynasim AB (obecnie część Dassault Systemes ), Wolfram SystemModeler (dawniej MathModelica ) szwedzkiej firmy Wolfram MathCore AB (obecnie część Wolfram Research ), SimulationX niemieckiej firmy ESI ITI GmbH , MapleSim kanadyjskiej firmy Maplesoft , JModelica.org (open source, wycofane z produkcji) i Modelon Impact szwedzkiej firmy Modelon AB oraz CATIA Systems firmy Dassault Systemes ( CATIA jest jednym z głównych CAD systemów).

Openmodelica to otwarte środowisko modelowania i symulacji oparte na modelu Modelica, przeznaczone do zastosowań przemysłowych i akademickich. Jej długofalowy rozwój wspiera organizacja non-profit – Open Source Modelica Consortium (OSMC). Celem wysiłku OpenModelica jest stworzenie wszechstronnego środowiska modelowania, kompilacji i symulacji Open Source Modelica opartego na wolnym oprogramowaniu dystrybuowanym w postaci binarnej i kodu źródłowego do badań, nauczania i zastosowań przemysłowych.

Bezpłatne środowisko symulacji Scicos używa podzbioru Modelica do modelowania komponentów. Wsparcie dla większej części języka Modelica jest obecnie w fazie rozwoju. Niemniej jednak nadal istnieje pewna niekompatybilność i rozbieżność interpretacji między wszystkimi różnymi narzędziami dotyczącymi języka Modelica.

Przykłady

Poniższy fragment kodu przedstawia bardzo prosty przykład systemu pierwszego rzędu ( ):

model FirstOrder
  parameter Real c=1 "Time constant";
  Real x (start=10) "An unknown";
equation
  der(x) = -c*x "A first order differential equation";
end FirstOrder;

Ciekawymi rzeczami, na które należy zwrócić uwagę w tym przykładzie, są kwalifikator „parametr”, który wskazuje, że dana zmienna jest niezmienna w czasie, oraz operator „der”, który reprezentuje (symbolicznie) pochodną czasową zmiennej. Warto również zwrócić uwagę na ciągi dokumentacji, które mogą być powiązane z deklaracjami i równaniami.

Głównym obszarem zastosowań Modelica jest modelowanie systemów fizycznych. Najbardziej podstawowe koncepcje strukturalizacji przedstawiono na prostych przykładach z dziedziny elektrycznej:

Typy wbudowane i pochodzące od użytkownika

Modelica posiada cztery wbudowane typy Real, Integer, Boolean, String. Zazwyczaj wyprowadzane są typy zdefiniowane przez użytkownika, aby powiązać wielkość fizyczną, jednostkę, wartości nominalne i inne atrybuty:

type Voltage = Real(quantity="ElectricalPotential", unit="V");
type Current = Real(quantity="ElectricalCurrent", unit="A");
  ...

Łączniki opisujące fizyczną interakcję

Interakcja komponentu z innymi komponentami jest definiowana przez fizyczne porty, zwane złączami , np. pin elektryczny jest zdefiniowany jako

connector Pin "Electrical pin"
   Voltage      v "Potential at the pin";
   flow Current i "Current flowing into the component";
end Pin;

Podczas rysowania linii połączeń między portami oznacza to, że odpowiednie zmienne łącznika bez prefiksu „flow” są identyczne (tutaj: „v”) i że odpowiednie zmienne łącznika z prefiksem „flow” (tutaj: „i”) są definiowane przez równanie o sumie zerowej (suma wszystkich odpowiednich zmiennych „przepływu” wynosi zero). Motywacją jest automatyczne spełnienie odpowiednich równań bilansowych w nieskończenie małym punkcie połączenia.

Podstawowe elementy modelu

Podstawowy składnik modelu jest definiowany przez model i zawiera równania opisujące relacje między zmiennymi łącznika w formie deklaratywnej (tj. bez określania kolejności obliczeń):

model Capacitor
  parameter Capacitance C;
  Voltage u "Voltage drop between pin_p and pin_n";
  Pin pin_p, pin_n;
equation
  0 = pin_p.i + pin_n.i;
  u = pin_p.v - pin_n.v;
  C * der(u) = pin_p.i;
end Capacitor;

Celem jest, aby połączony zbiór elementów modelu prowadził do układu równań różniczkowych, algebraicznych i dyskretnych, w których liczba niewiadomych i liczba równań są identyczne. W Modelice osiąga się to poprzez wymaganie tak zwanych modeli zrównoważonych .

Pełne zasady definiowania zrównoważonych modeli są dość złożone i można je przeczytać w sekcji 4.7.

Jednak w większości przypadków można wydać prostą regułę, która liczy zmienne i równania w taki sam sposób, jak robi to większość narzędzi symulacyjnych:

A model is balanced when the number of its equations
equals the number of its variables.

biorąc pod uwagę, że zmienne i równania należy liczyć zgodnie z następującą zasadą:

->Number of model equations                            = 
  Number of equations defined in the model             + 
  number of flow variables in the outside connectors
 
->Number of model variables = Number of variables defined in the model
  (including the variables in the physical connectors) 

Należy zauważyć, że standardowe złącza wejściowe (takie jak RealInput lub IntegerInput) nie mają wpływu na liczbę zmiennych, ponieważ nie są w nich zdefiniowane żadne nowe zmienne.

Powód tej zasady można zrozumieć myśląc o kondensatorze zdefiniowanym powyżej. Jego kołki zawierają zmienną przepływu, tj. prąd, każdy. Kiedy to sprawdzamy, nie jest on połączony z niczym. Odpowiada to ustawieniu równania pin.i=0 dla każdego pinu. Dlatego musimy dodać równanie dla każdej zmiennej przepływu.

Oczywiście przykład można rozszerzyć na inne przypadki, w których zaangażowane są inne rodzaje zmiennych przepływu (np. siły, momenty itp.).

Kiedy nasz kondensator zostanie podłączony do innego (zrównoważonego) modelu przez jeden z jego styków, zostanie wygenerowane równanie połączenia, które zastąpi dwa równania i=0 połączonych styków. Ponieważ równanie połączenia odpowiada dwóm równaniom skalarnym, operacja połączenia opuści zrównoważony większy model (stworzony przez nasz kondensator i model, z którym jest połączony).

Powyższy model kondensatora jest zrównoważony , ponieważ

number of equations =   3+2=5   (flow variables: pin_p.i, pin_n.i, u)
number of variables =       5   (u, pin_p.u, pin_p.i, pin_n.u, pi_n.i)

Weryfikacja za pomocą OpenModelica tego modelu daje de facto

Class Capacitor has 5 equation(s) and 5 variable(s).
3 of these are trivial equation(s).

Innym przykładem, zawierającym zarówno złącza wejściowe, jak i złącza fizyczne, jest następujący komponent z Biblioteki Standardowej Modelica:

model SignalVoltage 
  "Generic voltage source using the input signal as source voltage"
  Interfaces.PositivePin p;
  Interfaces.NegativePin n;
  Modelica.Blocks.Interfaces.RealInput v(unit="V") 
    "Voltage between pin p and n (= p.v - n.v) as input signal";
  SI.Current i "Current flowing from pin p to pin n";
equation 
  v = p.v - n.v;
  0 = p.i + n.i;
  i = p.i;
end SignalVoltage;

Składnik SignalVoltage jest zrównoważony, ponieważ

number of equations =   3+2=5  (flow variables: pin_p.i, pin_n.i, u)
number of variables =       5  (i, pin_p.u, pin_p.i, pin_n.u, pi_n.i)

Ponownie sprawdzenie z OpenModelica daje

Class Modelica.Electrical.Analog.Sources.SignalVoltage has 5 equation(s) and 5 variable(s).
4 of these are trivial equation(s).

Modele hierarchiczne

Model hierarchiczny jest budowany na podstawie modeli podstawowych, tworząc instancje modeli podstawowych, zapewniając odpowiednie wartości parametrów modelu i łącząc konektory modelu. Typowym przykładem jest następujący obwód elektryczny:

model Circuit
   Capacitor C1(C=1e-4) "A Capacitor instance from the model above";
   Capacitor C2(C=1e-5) "A Capacitor instance from the model above";
     ...
equation
   connect(C1.pin_p, C2.pin_n);
   ...
end Circuit;

Za pomocą adnotacji elementu języka (...) do modelu można dodawać definicje, które nie mają wpływu na symulację. Adnotacje służą do definiowania układu graficznego, dokumentacji i informacji o wersji. Podstawowy zestaw adnotacji graficznych jest ustandaryzowany, aby zapewnić, że wygląd graficzny i układ modeli w różnych narzędziach Modelica jest taki sam.

Aplikacje

Modelica została zaprojektowana tak, aby była neutralna domenowo i w rezultacie jest używana w wielu różnych zastosowaniach, takich jak układy płynów (na przykład wytwarzanie energii parowej, hydraulika itp.), aplikacje motoryzacyjne (zwłaszcza układ napędowy) i układy mechaniczne ( na przykład systemy wielokorpusowe, mechatronika itp.).

W sektorze motoryzacyjnym wielu głównych producentów OEM korzysta z Modeliki. Należą do nich Ford, General Motors, Toyota, BMW i Daimler.

Modelica jest również coraz częściej wykorzystywana do symulacji układów termocieczowych i energetycznych.

Modelica została ostatnio uwzględniona w modelowaniu i symulacji elektromagnetycznych stanów nieustalonych (EMT) wielkoskalowych obwodów elektrycznych. MSEMT (Modelica Simulator of Electromagnetic Transients) to pierwsza biblioteka w dziedzinie EMT opracowana za pomocą Modelica i zawierająca szczegółowe modele EMT , takie jak maszyna synchroniczna z nasyceniem, linie transmisyjne (modele szerokopasmowe i modele o stałych parametrach), nieliniowe modele komponentów, takie jak transformator, ogranicznik przepięć, cewka nieliniowa z histerezą, modele łuku, modele obciążenia, sterowanie maszyną (wzbudniki, regulatory, stabilizatory systemu elektroenergetycznego). Biblioteka została zwalidowana za pomocą oprogramowania referencyjnego EMTP .

Charakterystyka Modelica (bezprzyczynowa, zorientowana obiektowo, neutralna dziedzinowo) sprawia, że ​​dobrze nadaje się do symulacji na poziomie systemu , domeny, w której Modelica jest obecnie dobrze ugruntowana.

Zobacz też

Uwagi

Zewnętrzne linki