\chapter{Jazyk Modelica a~OpenModelica}
Modelica je nechráněný, objektově orientovaný jazyk založený na~rovnicích, který umožňuje pohodlné fyzikální modelování složitých systémů obsahujících elektrické, elektronické, hydraulické, tepelné, řídicí, silnoproudé, anebo procesně orientované dílčí komponenty \cite{Fritzsonc2011}.

Jazyk Modelica je využíván celou řadou simulačních a~vývojových prostředí. Mezi ty nejznámější patří bezesporu Dymola, jejíž licence je ovšem zpoplatněna, nebo například OpenModelica, která je na~rozdíl od programu Dymola takzvaným \zkratkatext{zkOSS} (\zk{zkOSS}).

Za účelem vytvoření fyzikálního modelu elektromechanického systému bylo použito právě softwaru OpenModelica. Jazyk Modelica, ze kterého program OpenModelica vychází, je popsán v~této kapitole.

\section{Jazyk Modelica}
Model vytvořený v~jazyku Modelica je popsán zdrojovým kódem v~podobě textové reprezentace. Tento model je uložen v~souboru s~příponou \textit{.mo}. Je třeba si uvědomit, že Modelica je spíše \textit{modelovací jazyk}, než klasický programovací jazyk. K~vytváření modelů je možné použít běžný textový editor, v~němž se realizuje popis vytvářeného modelu elektromechanického systému. Postupy vytváření modelu jsou uvedeny v~kapitole \ref{sec:OpenModelica}.

Každý vytvořený model má jazykem Modelica jasně definovanou strukturu. Příklad základního rozčlenění modelu je vyobrazen v~následujícím popisu \ref{lst:zakladni.cleneni.modelu}.

\begin{lstlisting}[language=Modelica, caption={Základní struktura modelu},captionpos=b,label={lst:zakladni.cleneni.modelu}]
model NazevModelu
	<PromenneModelu>
equation
	<RovniceModelu>
end NazevModelu
\end{lstlisting}

V textové reprezentaci začíná každý model klíčovým slovem \textit{model}, za nímž následuje uživatelem zvolený název modelu. Na~dalších řádcích jsou uváděny definice a~deklarace jednotlivých proměnných prostředí. Pod klíčovým slovem \textit{equation} se nachází rovnice popisující model. Pro ukončení definice modelu slouží klíčové slovo \textit{end}, za nímž opět následuje uživatelem zvolený název modelu. 

Tak jako každý programovací jazyk má svoji syntaxi, tak i~jazyk Modelica má jasně definovanou strukturu, která je však mnohem bohatší, než bylo uvedeno ve výpisu \ref{lst:zakladni.cleneni.modelu}. V~následující tabulce pak můžeme vidět výpis všech klíčových slov jazyku Modelica.

\begin{table}[!h]
\caption{Přehled klíčových slov jazyku Modelica}
  \begin{center} 	
  	\small
	  \begin{tabular}{|c|c|c|c|c|}
	    \hline
	algorithm	&	discrete	&	false		&	loop		&	pure			\\ \hline
	and			&	each		&	final		&	model		&	record			\\ \hline
	annotation	&	else		&	flow		&	not			&	redeclare		\\ \hline
	elseif		&	for			&	operator	&	replaceable	&	block			\\ \hline
	elsewhen	&	function	&	or			&	return		&	break			\\ \hline
	encapsulated&	if			&	outer		&	stream		&	class			\\ \hline
	end			&	import		&	output		&	then		&	connect			\\ \hline
	enumeration	&	impure		&	package		&	true		&	connector		\\ \hline
	equation	&	in			&	parameter	&	type		&	constant		\\ \hline
	expandable	&	initial		&	partial		&	when		&	constrainedby	\\ \hline
	extends		&	inner		&	protected	&	while		&	der				\\ \hline
	external	&	input		&	public		&	within		&	 				\\ \hline
	  \end{tabular}
  \end{center}
\end{table}
Na rozdíl od běžného programovacího jazyka, kde je použito prosté přiřazování hodnot k~jednotlivým proměnným, je každý fyzikální model v~jazyce Modelica, popsán především diferenciálními, diferenčními nebo algebraickými rovnicemi. Sada rovnic tak tvoří část popisu z~jazyku Modelica. Simulační nástroj pak může, a~obvykle také musí, manipulovat s~rovnicemi v~podobě symbolických proměnných, a~to z~toho důvodu, aby bylo určeno pořadí jejich provedení a~také rozlišeno, která proměnná v~rovnici slouží jako vstupní a~která jako výstupní argument. Jednoduchý příklad sumátoru může vypadat jako je uvedeno ve výpisu \ref{lst:priklad.modelu.sumatoru}.

\begin{small}
\begin{lstlisting}[language=Modelica, caption={Příklad modelu sumátoru}, captionpos=b,label=lst:priklad.modelu.sumatoru]
model Sumator
	RealInput Cislo1;
	RealInput Cislo2;
	RealOutput Soucet;
equation
	Soucet = Cislo1 + Cislo2;
end Sumator
\end{lstlisting}
\end{small}

Pod názvem modelu \textit{Sumator} se nachází deklarace proměnných, které jsou zakončeny středníky. Středník ukončuje řádek funkčního programu podobně jako v~jazyce C/C++. Deklarované nebo definované proměnné jsou vzápětí použity v~sekci \textit{equation}. Rovnice uvedená na~řádku číslo 6 říká, že součet proměnných \textit{Cislo1} a~\textit{Cislo2} je roven proměnné \textit{Soucet}. Je potřeba zdůraznit, že operátor „rovná se =“ zde neznamená přiřazení hodnoty jako je tomu v~jazyce C/C++, ale udává rovnost výrazů uvedených na~levé a~pravé straně od tohoto operátoru. Uvedenou rovnici bychom mohli také vyjádřit v~následující podobě: \begin{eqnarray}
	Cislo1+Cislo2-Soucet=0;
\end{eqnarray} Každá rovnice je pak zakončena stejně jako jednotlivé parametry středníkem.

Analogicky k~jiným jazykům jako je například C/C++ také Modelica disponuje různými dalšími nástroji, kterými lze algoritmus zpřehlednit. Za jeden ze základních nástrojů můžeme považovat komentáře. Jazyk Modelica jich nabízí několik druhů.

Prvním komentářem totožným s~jazykem C/C++ je symbol dvojitého lomítka „//“. Tento symbol je překladačem jazyka Modelica ignorován a~má význam jednořádkového komentáře.

Jemu obdobný typ, který však slouží naopak k~zápisu víceřádkového komentáře, lze zapsat pomocí dvou párů znaků „/*“ a „*/“, které uvozují začátek a~konec víceřádkového komentáře. U~víceřádkových komentářů je ovšem nebezpečí vzniku tzv. vhnízděného komentáře, který může vést k~pozdější chybě. Proto je výrazně lepší používat na~víceřádkové komentáře definovanou funkci patřičného vývojového prostředí.

Dalším typem komentáře je dokumentační komentář. Tento druh komentáře lze uvést na~konec jakéhokoliv řádku. Obsahuje--li ale příslušný řádek středník, je zapotřebí tento komentář umístit ještě před něj. Dokumentační komentáře slouží pro popis daného prvku, kterým mohou být modely, proměnné či rovnice.

Při exportu modelu do~formátu \zkratkatext{zkFMU} se tyto komentáře používají pro dokumentaci. Názorná ukázka komentářů je uvedena ve výpisu \ref{lst:prikladkomentaremodelica}.

\begin{small}
\begin{lstlisting}[language=Modelica, caption={Komentáře v jazyku Modelica},label=lst:prikladkomentaremodelica,captionpos=b]
model Sumator "Soucet dvojice cisel"
	RealInput Cislo1; // Scitanec 1
	RealInput Cislo2; // Scitanec 2
	RealOutput Soucet "Soucet";
equation
	Soucet = Cislo1 + Cislo2 "Rovnice sumatoru";
end Sumator
\end{lstlisting}
\end{small}

Modelica disponuje také rozsáhlými knihovnami a~knihovními funkcemi. Kromě funkcí se zde nacházejí různé objekty jako např. odpory, kondenzátory, pružiny, ventily, ale i~snímače či jiné prvky, které se mezi sebou vzájemně propojují tak, aby vzniklo ucelené schéma vytvářeného modelu.

Vzájemnou interakci dvou komponent v~modelu definuje fyzický port, který je taktéž nazýván konektorem \cite{ModelicaLanguageSpec}. Propojení jednotlivých komponent pomocí konektorů lze zapisovat do~textového souboru. Při tvorbě modelů by ovšem textová reprezentace byla méně názorná a~čitelná. Za tímto účelem proto vznikla různá grafická prostředí a~nástroje, které tuto práci značně ulehčují. Takovým grafickým nástrojem může být software OpenModelica a~jeho vývojové prostředí \zkratkatext{zkOMEdit} (\zk{zkOMEdit}).

\section{OpenModelica}
\label{sec:OpenModelica}
OpenModelica je volně dostupným nástrojem s~otevřeným kódem (\zk{zkOSS}) založeným na~jazyku Modelica. Umožňuje modelování, simulaci, optimalizaci a~analýzu rozsáhlých dynamických systémů. Její dlouhodobý vývoj je podporován neziskovou organizací \zkratkatext{zkOSMC} (\zk{zkOSMC}), která spolupracuje se švédskou univerzitou Linköping. OpenModelica nalézá uplatnění také v~automobilovém průmyslu či robotice.

Hlavním nástrojem OpenModelica se stal \zkratkatext{zkOMEdit}\\ (\zk{zkOMEdit}), jenž ulehčuje práci při vývoji nových modelů a~návrhu algoritmů pro jejich řízení. Některé vybrané vlastnosti a~způsoby ovládání \zk{zkOMEdit}oru jsou popsány dále.

\subsection{OpenModelica Connection Editor}
\zkratkatext{zkOMEdit} je open source grafické a~textové uživatelské prostředí, které bylo vyvinuto pro tvorbu, editaci a~simulaci modelů definovaných jazykem Modelica. 

Grafické prostředí \zkratkatext{zkOMEdit} (dále jen \zk{zkOMEdit}) se dá pomyslně rozdělit do~tří hlavních částí. První částí je horní ovládací lišta s~několika funkčními tlačítky a~auto-rolovacími nabídkami. Ve druhé části, nalevo od bílého plátna, se nachází stromově uspořádaný výpis všech vložených knihoven do~prostředí \zk{zkOMEdit}oru. Z~této knihovny je možné při vytváření modelů vybírat jednotlivé prvky a~vkládat je na~poslední část uživatelského prostředí, jež je tvořena z~počátku prázdným bílým plátnem. V~jednotlivých knihovnách umístěných v~levé nabídce je možné nalézt mimo jiné i~ukázkové příklady zapojení jednoduchých systémů z~různých technických oblastí. Podle těchto technických oblastí jsou pak logicky uspořádány jednotlivé knihovní bloky.

Vložení libovolného prvku z~knihovny do~vlastního modelu se provede metodou „drag and drop“, tedy táhni a~pusť. Po vložení komponentu do~pracovní oblasti je vždy vyvoláno dialogové okno a~uživatel je vyzván k~zadání libovolného pojmenování příslušného prvku. Po naskládání jednotlivých komponentů vytvářeného modelu je nutné jednotlivé bloky propojit. To se provádí pomocí terminálů zobrazených u~každého, ať už vstupního, anebo výstupního konektoru příslušného bloku.

Po propojení jednotlivých bloků schématu je nutné nechat kompilátorem \zkratkatext{zkOMC} (\zk{zkOMC}) zkontrolovat správnost zapojení. \zkratkatext{zkOMC} přeloží vytvořený model do~jazyka C s~tabulkou symbolů, která obsahuje definice tříd, funkcí a~proměnných daného modelu. V~případě chyby je v~dolní části pracovní plochy zobrazen Message Browser, ve kterém je zobrazen výpis jednotlivých chyb a~varování. Při úspěšném překladu modelu je do~tohoto okna vypsána zpráva o~úspěchu překladu a~času jeho uskutečnění.

Tvorba modelu je možná také po přepnutí se do~textového módu v~horní části pracovního plátna. V~textovém módu je zobrazen popis modelu v~jazyce Modelica, který je možné upravovat či doplňovat o~další prvky nebo části algoritmů za použití správné syntaxe. Zde je rovněž možné shlédnout definici a~deklaraci jednotlivých proměnných prostředí, vzájemná propojení jednotlivých stavebních bloků modelu a~také sadu rovnic, které model popisují.

Po vytvoření modelu je nutné provést vestavěným kompilátorem kontrolu modelu. Kompilace samotná nezabere mnoho času, ale v~případě syntaktické chyby nemůže být kompilace dokončena a~je nuté chybu opravit a~kontrolu modelu spustit znovu. Případné syntaktické chyby a~jejich detailní popis se zobrazí v~nově aktivovaném okně, které je umístěno ve spodní části vývojového prostředí. Po úspěšné kompilaci modelu můžeme spustit simulaci, a~to v~několika režimech. Na~výběr máme klasickou simulaci, simulaci s~podporou překládacího ladícího nástroje, simulaci s~nástrojem pro ladění algoritmu nebo simulaci s~animací. Před spuštěním samotné simulace v~kterémkoliv režimu je vhodné nastavit její parametry. Mezi hlavní parametry simulace patří počáteční a~konečný čas simulace, dále pak použitý solver pro výpočet simulace a~jeho krok. Více parametrů a~jejich popis lze nalézt v~dokumentaci \zk{zkOMC} dostupné na~\cite{OMCompilerSettup}.

Kromě kontroly syntaxe modelu je možné také použít funkci Instantiate Model, jež převede vytvořený kód z~jazyka Modelica do~jazyka C/C++. Tento převedený algoritmus je možné následně využít v~jiných vývojových prostředích k~dalšímu zpracování.

OpenModelica obsahuje také \zkratkatext{zkOMShell} (\zk{zkOMShell}), což je prostředí ve stylu příkazového řádku, které umožňuje analyzovat a~interpretovat příkazy jazyku Modelica za účelem výpočtů, simulace a~vykreslování vytvořených modelů.

Další částí OpenModelica je také OpenModelica Notebook (OMNotebook). Jedná se o~editor podobný programu Mathematica, který implementuje tvorbu WYSIWIG interaktivních knih. Tyto knihy mohou být používány jako učební pomůcky pro výuku programování v~jazyce Modelica. Další využití nalezne OMNotebook při tvorbě tutoriálů či dokumentací postupů v~Modelica. Tento interaktivní zápisník tak sjednocuje programování, jeho dokumentaci a~vizualizaci dosažených výsledků. Použití OMNotebooku zachycuje obrázek \ref{obr:openmodelica.notebook}.

\begin{figure}[!ht]
	\begin{center}	
	\includegraphics[width=1 \linewidth]{obrazky/OMnotebook}
	\label{obr:openmodelica.notebook}
	\caption{Příklad použití dokumentačního nástroje OMNotebook}		
	\end{center}
\end{figure}
Mezi další nástroje, kterými OpenModelica disponuje, patří také \zkratkatext{zkOMPython} (\zk{zkOMPython}) a~\zkratkatext{zkMDT} (\zk{zkMDT}). \zk{zkOMPython} je rozhraní vyvíjené společností Python, pro jeho stejnojmenný programovací jazyk, které umožňuje uživateli přistupovat a~využívat modelovací a~simulační schopnosti OpenModelica \cite{OMPython}. Druhý nástroj \zkratkatext{zkMDT}, jak už jeho samotný název napovídá, do~sebe integruje kompilátor OpenModelica, a~poskytuje tak prostředí pro práci s~vývojovými projekty Modelica a~MetaModelica. Tento plugin je určen především vývojářům nástrojů, nikoliv však pro aplikaci a~vývoj modelů popsaných jazykem Modelica \cite{MDTuserguide}. Proto jsou tyto dílčí nástroje OpenModelica z~hlediska cílů této práce nezajímavé a~nebudou již dále rozváděny.

OpenModelica, kromě řady jiných funkcí, umožňuje exportovat a~importovat modely formátu \zkratkatext{zkFMU} (\zk{zkFMU}), které budou spolu se standardem \zk{zkFMI} 2.0  popsány dále v~kapitole \ref{sec:fmi} a~\ref{sec:FMUexport}. Samotný proces exportu nebo importu modelu z/do formátu \zk{zkFMU} se provede výběrem příslušné položky z~autorolovací nabídky v~horní paletě menu, která je označena zkratkou \zk{zkFMI}.

Když srovnáme výsledek tvorby modelu stejnosměrného motoru v~\zkratkatext{zkOMEdit}u (obrázek \ref{obr:model.ssmotoru.openmodelica.grafika}) například s~hojně používaným Simulinkem (obrázek \ref{obr:model.ssmotoru.simulink}), vidíme mezi technikou tvorby a~jejich výsledkem mnohé odlišnosti. Rozdíly jsou způsobeny tím, že OpenModelica na~rozdíl od MATLAB-Simulink umožňuje kromě kauzálního modelování také fyzikální modelování, které je v~některé literatuře označováno jako akauzální.

\section{Fyzikální modelování}
\label{sec:fyzikalni.modelovani} 
Největší výhodou metody fyzikálního modelování je, že není nutné mít fyzický přístup k~zařízení, pro které bude řízení navrhováno a~pro které bude později použito. Pro to, abychom nebyli omezováni použitými technologiemi na~daném zařízení, je vhodné vytvořit modely, na~kterých bude odzkoušeno základní nastavení regulačních smyček bez toho, aby zařízení muselo být reálně vyrobeno. Účelem fyzikálního modelování je navrhnout algoritmy řízení pro zařízení již ve fázi projektování. Velkým přínosem je úspora času a~peněžních prostředků vynaložených na~tvorbu prototypu zařízení.

Vzhledem k~tomu, že při modelování elektromechanických systémů dochází téměř vždy ke zjednodušování, obsahuje pak model oproti reálnému prostředí značné nepřesnosti. Některé parametry však mohou být zanedbávány zcela účelově, a~to např. z~důvodu složitosti modelu, jeho výpočetní náročnosti či samotné možnosti realizace modelu. 

V první fázi návrhu řídicích algoritmů se používá \zkratkatext{zkMIL} (\zk{zkMIL}) simulace, jejímž cílem je návrh regulace pro modely elektromechanických soustav. V~tomto případě se však jedná pouze o~idealizovaný návrh, který nebere v~potaz vzájemné propojení hardwarového a~softwarového prostředí, výpočetní výkon ani rychlost komunikačních sběrnic. Návrh regulace může být proveden např. v~programovém prostředí MATLAB-Simulink. (Odstavec čerpá z~\cite{Lamberg2000}).

Další částí vývoje je proces, ve kterém jsou testovány algoritmy řízení navržené v~první fázi, a~to na~reálné soustavě pomocí \zkratkatext{zkHRT} zařízení. \zk{zkHRT} může být realizováno například pomocí vhodné I/O karty, která je vložena do~počítače. Tato karta poskytne deterministické, a~tedy i~skutečné RealTime spojení řídicího algoritmu s~fyzickým zařízením či simulátorem. Při práci v~Simulinku je možné použít toolboxy pro překlad programu do~jazyka C/C++. Následnou kompilací tohoto programu do~cílového hardwaru je možné provést testování navrženého řídicího algoritmu v~reálném zařízení. (Odstavec čerpá z~\cite{Lamberg2000}).

\zk{zkHIL} simulace je jedním z~posledních kroků vývoje návrhu řídicích algoritmů. Po něm následuje už pouze připojení k~reálnému zařízení. Při \zk{zkHIL} simulaci je chování fyzického zařízení simulováno pomocí softwarových a~hardwarových modelů. Reálné komponenty zařízení (jeho fyzické části) jsou připojeny ke komunikačnímu rozhraní do~simulátoru, který reprodukuje chování fyzického zařízení v~reálném čase. Názorný příklad \zk{zkHIL} simulace je ukázán na~obrázku \ref{obr:HIL}, který byl převzat z~\cite{rexcontrols}. (Odstavec čerpá z~\cite{Lamberg2000}).

\begin{figure}[!ht]
	\begin{center}
	\label{obr:HIL}	
	\includegraphics[scale = 1]{obrazky/HILpriklad}
	\caption{Příklad realizace \zkratkatext{zkHIL} simulace \cite{rexcontrols}}
	\end{center}
\end{figure}

Na obrázku \ref{obr:HIL} je schematicky znázorněna \zk{zkHIL} simulace. V~pravé polovině obrázku se nachází počítač, na~němž je spuštěn MATLAB-Simulink s~toolboxem Simscape. PC komunikuje pomocí RDC s~emulátorem I/O, který je připojen k~reálnému řídicímu systému pomocí fyzických IO.

Použití \zk{zkHIL} simulace s~sebou přináší mnoho výhod. Mezi hlavní patří následující:
\begin{itemize}
\item Řídicí a~regulační funkce mohou být testovány v~počátcích vývoje ještě před realizací prototypu. Elektronika proto dosahuje vysoké úrovně vyspělosti a~poskytuje dobrý základ pro další vývojové fáze.
\item Jejím využitím se dá dosáhnout snížení času potřebného pro vývoj zařízení.
\item Nákladné pokusy prováděné v~terénu a~v nebezpečných podmínkách mohou být částečně nahrazeny laboratorními nebo počítačovými experimenty.
\item V~modelu je možné nastavit extrémní nebo neobvyklé podmínky (typicky velmi nízké teploty), kterým je zařízení vystaveno.
\item Systematické testování chyb a~chybových hlášení, které by za podmínek přímého připojení řídicího algoritmu k~reálnému zařízení vedly k~devastujícím nebo katastrofickým výsledkům.
\item Je možné snadno testovat řídicí systém, jak reaguje na~poruchy systému, které by se na~reálné soustavě obtížně realizovaly.
\item Experimenty prováděné v~\zk{zkHIL} systému mohou být přesně reprodukovány a~automaticky opakovány podle potřeby. (Převzato z~\cite{Lamberg2000}.)
\end{itemize}
\smallskip
\par
Kromě \zk{zkMIL} a~\zk{zkHIL} simulace existuje také \zkratkatext{zkSIL} (\zk{zkSIL}) a~\zkratkatext{zkPIL} (\zk{zkPIL}) simulace, které tvoří mezistupně vývoje mezi \zk{zkMIL} a~\zk{zkHIL} simulacemi. Za závěrečný stupeň vývoje zařízení je pak považován stav, kdy je provedena aplikace řídicího systému na~reálném zařízení.

Při \zk{zkSIL} simulaci je vygenerován kód jazyka C z~řídicí části. Vygenerovaný kód je následně spuštěn a~testuje se, jestli se nějakým způsobem neprojeví jiná datová reprezentace, která je použita v~jazyce C. Funkční bloky řídicího systému jsou spouštěny obvykle specializovaným jádrem některého z~komerčně prodávaných \zk{zkSIL} systémů. (Odstavec čerpá z~\cite{rexcontrols}).

\zk{zkPIL} simulace stejně jako \zk{zkSIL} simuluje matematický model v~reálném čase. u~\zk{zkPIL} simulace, na~rozdíl od \zk{zkSIL} simulace, je řídicí systém provozován na~cílové hardwarové platformě. Nejsou však použity žádné I/O karty, čidla ani aktuátory. Data mezi modelem a~řídicím systémem se přenášejí pomocí komunikační sběrnice. \zk{zkPIL} simulace slouží především k~ověření výpočetního výkonu řídicího hardwaru, testování kritických situací a~nejrůznějších podmínek. (Odstavec čerpá z~\cite{rexcontrols}).

\begin{figure}[!hb]
	\begin{center}
	\includegraphics[width=1 \linewidth]{obrazky/ssmotoropenmodelicagrafika}
	\caption{Model stejnosměrného motoru v~prostředí OpenModelica -- grafický editor}
	\label{obr:model.ssmotoru.openmodelica.grafika}
	\end{center}
\end{figure}
Při tvorbě elektromechanických modelů máme na~výběr ze dvou metod. První metoda používá tzv. kauzální a~druhá akauzální postupy modelování částí elektromechanických modelů.

Nástroje, které jsou založeny na~metodě vytváření fyzikálního modelování, jsou mnohdy označovány jako akauzální nebo deklarativní. Jejím protějšem jsou blokově orientované nástroje, které pracují s~hierarchicky propojenými bloky. V~propojeních mezi jednotlivými bloky „tečou“ signály, které přenášejí hodnoty jednotlivých proměnných od výstupu jednoho bloku ke vstupům dalších bloků. V~blocích dochází ke zpracování vstupních informací na~výstupní. Takovéto propojení bloků proto odráží spíše postup výpočtu (algoritmus), namísto struktury modelované reality. U~značně složitých systémů se díky tomuto přístupu pod strukturou výpočtu pomalu ztrácí fyzikální význam modelovaného systému. (Odstavec čerpá z~\cite{kauzalakauzalmodelovani}).

Proto se pro modelování složitějších a~komplexních systémů používají nástroje, v~nichž jsou jednotlivé části modelů definovány přímo v~podobě rovnic namísto algoritmů řešení těchto rovnic. V~tomto kontextu se mluví o~tzv. deklarativním (akauzálním) zápisu modelů, na~rozdíl od kauzálního zápisu v~blokově orientovaných jazycích. V~kauzálním, neboli blokově orientovaném zápisu modelu, musíme např. pomocí grafického propojení jednotlivých knihovních bloků či prvků vyjádřit kauzální popis způsobu výpočtu jednotlivých proměnných modelu. U~akauzálního modelování se naopak předem neví, který pin příslušného bloku bude vstupní a~který bude použit jako výstupní. Akauzální přístup umožňují také nové simulinkové knihovny Simscape a~návazné doménové knihovny SimElectronics, SimHydraulics, SimMechanics aj. (Odstavec čerpá z~\cite{kauzalakauzalmodelovani}).

V této práci bylo k~vytvoření modelu elektromechanického systému v~jazyce Modelica použito vývojového nástroje OpenModelica. Realizace jednoduchého modelu stejnosměrného motoru metodou akauzálního (fyzikálního) modelování v~prostředí OpenModelica je zachycena na~obrázku \ref{obr:model.ssmotoru.openmodelica.grafika}.

\begin{figure}[!h]
	\begin{center}
	\includegraphics[width=1 \linewidth]{obrazky/ssmotorsimulink}
	\caption{Model stejnosměrného motoru v~prostředí MATLAB-Simulink 							\cite{schemadcmotorusimulink}}
	\label{obr:model.ssmotoru.simulink}
	\includegraphics[width=1 \linewidth]{obrazky/ssmotoropenmodelicatext}
	\caption{Model stejnosměrného motoru v~prostředí OpenModelica -- textový editor}
	\label{obr:model.ssmotoru.openmodelica.text}	
	\end{center}
\end{figure}

Naproti tomu, model stejnosměrného motoru vytvořený metodou kauzálního modelování v~prostředí MATLAB-Simulink (viz obrázek \ref{obr:model.ssmotoru.simulink}) nemusí na~první pohled jasně vystihovat svoji fyzikální podstatu.

Z obrázků \ref{obr:model.ssmotoru.openmodelica.grafika}  a~\ref{obr:model.ssmotoru.simulink} je možné rozpoznat patrný rozdíl mezi oběma metodami modelování elektromechanických systémů. V~případě použití OpenModelica a~\zk{zkOMEdit}oru je na~první pohled zcela zřejmý fyzikální význam, který by se mohl v~případě Simulinku u~složitějšího zařízení lehce vytratit.

V textovém režimu OpenModelica, jenž je na~obrázku \ref{obr:model.ssmotoru.openmodelica.text}, můžeme pracovat přímo s~rovnicemi -- obdobně jako v~Simulinku. Je tedy možné zvolit pouze jednu z~nabízených variant OpenModelica, anebo při modelování kombinovat oba způsoby editace.

Při vytváření modelu je nutné dodržovat pravidla standardu \zk{zkFMI} 2.0 (\zkratkatext{zkFMI}). Tento standard je popsán v~kapitole \ref{sec:fmi}.
