\chapter{LabVIEW a~CompactRIO}
Komerčně dostupný software \zk{zkLabVIEW}, jehož název vychází ze zkratky \zkratkatext{zkLabVIEW}, je produktem společnosti National Instruments (NI). Tento programovací nástroj vznikl před třiceti lety s~cílem propojit měřící zařízení s~počítačem. V~té době revoluční myšlenka nově vzniklého programovacího nástroje \zk{zkLabVIEW} je založena na~grafickém programování. Grafické programování je realizováno pomocí vkládání a~následném propojování jednotlivých bloků do~ucelených logických diagramů reprezentujících do~té doby běžně používané textové zápisy.

Jednotlivé funkční bloky v~diagramu se vzájemně propojují a~vzniká tak mezi nimi datový tok. Datový tok zajišťuje čekání každého funkčního bloku na~dostupnost všech informací přivedených na~jeho vstupy. Teprve poté, co jsou všechna přivedená vstupní data příslušného funkčního bloku platná, dojde k~provedení jednotlivých funkcí obsažených v~bloku. Jednotlivé stavební bloky jsou nazývány virtuálními přístroji (Virtual Instruments - VI) a~mohou zastávat matematické, logické či jiné sofistikované programy, které umožňují analýzy, měření, testování, řízení, zpracování a~manipulaci s~velkými datovými objemy.

\zk{zkLabVIEW} velmi usnadňuje a~do značné míry také zjednodušuje integraci hardwaru. Díky tomu je možné v~relativně krátkém čase začít se sběrem dat a~jejich následnou vizualizací a~zpracováním v~podstatě z~jakéhokoliv I/O zařízení. Ve spojení s~grafickou syntaxí programování, která zkracuje dobu vývoje řešení technického problému, \zk{zkLabVIEW} usnadňuje návrh komplexních řídicích, měřících a~testovacích systémů z~mnoha technických odvětví. \zk{zkLabVIEW} se tak stalo téměř nepostradatelným pomocníkem při řešení výzev technického rázu napříč širokým spektrem aplikačních oblastí.

\section{LabVIEW}
Vývojové prostředí, které \zk{zkLabVIEW} nabízí, je vcelku jednoduché. Po spuštění se vytvoří nový projekt, jehož adresářová struktura bude obsahovat nově vytvořené programy, diagramy nebo vývojová schémata, která se označují jako VI. Tyto VI je možné spustit v~prostředí \zk{zkLabVIEW}, ale i~exportovat do~samostatně spustitelných souborů, k~jejichž spuštění není licencované prostředí \zk{zkLabVIEW} nezbytné.

Po založení projektu a~vytvoření nového VI je zobrazeno okno \textit{„Front Panel“} a~\textit{„Block Diagram“}. \textit{Front Panel} slouží k~ovládání a~vizualizaci naprogramovaného řešení procesu. Je možné na~něm zobrazit tlačítka, grafy, pole pro zadávání textových řetězů a~mnohé další prvky, které jsou propojeny s~\textit{Blokovým Diagramem}. \textit{Blokový Diagram} slouží ke strukturalizovanému grafickému zápisu algoritmu, podle kterého budou vykonávány jednotlivé funkce vytvořené aplikace. \textit{„Naprogramování“} se provádí výběrem a~umístěním vhodných bloků z~rozsáhlé palety funkcí na~pracovní plochu VI. Propojování jednotlivých bloků je realizováno pomocí virtuálních vodičů, které reprezentují posloupnost toku dat ve vytvářeném schématu. V~případě spuštění vytvořeného VI mohou být některé operace či funkce vykonány přednostně, a~to z~toho důvodu, že je v~programu použito paralelního toku dat.

Pro účely plnění cílů této práce bylo \zk{zkLabVIEW} použito k~importování modelu elektromechanického systému definovaného jazykem Modelica. Tento model byl nejdříve vytvořen v~prostředí OpenModelica a~následně byl vyexportován do~\zkratkatext{zkFMU}, které podléhá standardu \zk{zkFMI} 2.0. Jedním z~cílů této práce je naimportovat vygenerované \zk{zkFMU} právě do~prostředí \zk{zkLabVIEW}. Vzhledem k~tomu, že naimportovaný model má být použit k~\zkratkatext{zkHIL} simulaci, je zapotřebí použít dostatečně rychlé a~výkonné rozhraní, které umožní spojení počítače s~hardwarem. Pro připojení fyzického zařízení (hardwaru) k~PC byl použit systém CompactRIO, který poskytuje možnost připojení fyzických vstupů a~výstupů díky široké paletě I/O karet.

\section{Možnosti platformy CompactRIO}
Platforma \zkratkatext{zkcRIO} (dále jen \zk{zkcRIO}) se skládá ze základního rámu (častěji však nazývaného šasi), které kombinuje dva typy vestavěných průmyslových kontrolérů. První, Real-Time kontrolér, kterým je \zk{zkcRIO} vybaveno, zajišťuje komunikaci a~zpracování signálů v~reálném čase. Umožňuje implementaci řídicích algoritmů a~podporuje širokou škálu hodinových frekvencí, které jsou důležité pro připojení Rekonfigurovatelných I/O modulů -- odtud zkratka RIO. Druhým kontrolérem v~šasi je hradlové pole -- \zkratkatext{zkFPGA} (\zk{zkFPGA}), které poskytuje možnost realizace vysokorychlostního řízení a~vlastního časování a~spouštění přímo v~hardwaru. Další výhodou \zk{zkFPGA}, poháněného čipem firmy Xilinx, je vysokorychlostní zpracování dat. Oba kontroléry jsou však podle tvrzení National Instruments kompatibilní pouze se sériově vyráběnými I/O moduly. 

I/O moduly se vkládají do~šasi \zk{zkcRIO} a~vyrábí se v~mnoha velikostech a~provedeních. I/O moduly jsou mechanicky odolné a~umožňují připojení nebo odpojení bez nutnosti vypínání jednotky \zk{zkcRIO}. Jedná se o~speciálně navržené I/O karty, které jsou určené pro připojení určitého laboratorního zařízení příslušným komunikačním rozhraním (např. GPIB, CAN, sériové linky nebo také drivery pro motory a~další).

Kromě Real-Time kontroléru a~hradlového pole platforma \zk{zkcRIO} poskytuje možnost buď přímého připojení \zk{zkcRIO} k~počítači pomocí síťové karty, anebo je možné \zk{zkcRIO} připojit do~místní sítě LAN. V~druhém případě je nutné konfigurovat příslušné síťové prvky LAN (například router), aby bylo zamezeno cílenému zneužití zařízení.

\subsection{LabVIEW RealTime}
Pro práci s~platformou \zk{zkcRIO} je potřeba nainstalovat následující software do~PC, které bude ke \zk{zkcRIO} připojeno:
\begin{itemize}
\item NI LabVIEW 2009 nebo novější
\item NI LabVIEW Real-Time Module 2009 nebo novější
\item NI LabVIEW FPGA Module 2009 nebo novější
\item NI-RIO 3.2 nebo novější.
\end{itemize} 
\smallskip
\par
Nainstalované balíčky funkcí se objeví v~paletě bloků v~sekci Control \& Simulation. Po jejich instalaci nebo kontrole je vhodné také zkontrolovat dostupné aktualizace pro Measurement \& Automation Explorer (MAX) na~příslušném PC. MAX nemůže být bohužel aktualizován automaticky.

K práci s~platformou \zk{zkcRIO} je nutné přivést napájení na~vstupní svorky šasi. Správné zapojení napětí a~jeho parametry je nutné vždy vyhledat v~dokumentaci příslušného šasi. Obecně lze říci, že je možné téměř pro všechny šasi použít napájení $+24VDC$. Propojení \zk{zkcRIO} a~počítače lze realizovat pomocí rozhraní USB 2.0, nebo lépe ethernetovým kabelem. Do~šasi \zk{zkcRIO} se vloží potřebné I/O moduly, které slouží pro připojení fyzického hardware. Všechny připojené karty se společně se svými datovými komunikačním kanály objeví vždy ve stromové struktuře projektu.

Grafické programování může být realizováno v~blocích VI, které svým umístěním v~adresářové struktuře vypovídají o~tom, pro jaké účely slouží a~kterým výpočetním nástrojem budou zpracovávány. V~případě, že je žádoucí, aby VI bylo vykonáváno pomocí procesoru počítače, který je s~\zkratkatext{zkcRIO} spojen, je nutné umístit VI pod adresář Dependencies. Chceme-li vytvořené VI nechat obsluhovat Real-Time procesorem uvnitř šasi \zkratkatext{zkcRIO}, musí být VI uloženo pod adresářem šasi např. Chasis (cRIO-9074). Poslední možností je provozovat VI v~prostředí \zk{zkFPGA}, které je taktéž uvnitř šasi. Takovéto VI musí být umístěno pod adresářem FPGA Target.

Programování Real-Time smyčky se realizuje uvnitř VI, ve kterém je vložena Real-Time simulační smyčka z~palety funkcí Control \& Simulation. Do~této smyčky lze vytvořit diagram využívající výpočetní kapacitu Real-Time procesoru uvnitř \zk{zkcRIO}. Při použití velmi rychlého hradlového pole se musí graficky vytvořený program nejprve zkompilovat a~následně přeložit do~jazyku VHDL. Překlad do~jazyka VHDL zabere cca 10 minut, což je doba, po kterou není možné s~VI v~\zk{zkLabVIEW} pracovat (v jiném VI však ano).

\subsection{LabVIEW FPGA}
Výpočetní výkon \zkratkatext{zkFPGA} (v překladu Programovatelné Hradlové Pole) se používá pro správu a~obsluhu časově kritických smyček. Díky použití \zk{zkFPGA} je možné dosáhnout vysoké rychlosti při komunikaci s~hardwarem nebo externími hardwarovými nástroji připojenými pomocí I/O modulů.

Časově kritická smyčka, která komunikuje s~RealTime smyčkou, slouží také k~obsluze I/O modulů. S~jednotlivými vstupy a~výstupy I/O modulů lze zacházet jako s~kterýmkoliv jiným knihovním blokem (VI). Jednotlivé porty (vstupy nebo výstupy) stačí přetáhnout do~RealTime smyčky. Následně je možné z~portů I/O modulů číst nebo naopak do~nich zapisovat žádané hodnoty, jejichž rozsah je však omezen typem I/O modulu.

Vzhledem k~tomu, že \zk{zkFPGA} čip použitý k~výpočtu „rychlé“ smyčky programu může být v~závislosti na~použité platformě \zkratkatext{zkcRIO} programován pouze v~jazyku VHDL nebo VERILOG, je potřeba nejdříve vytvořený program zkompilovat a~následně přeložit do~jednoho z~těchto programovacích jazyků. K~přeložení graficky editovaného programu z~prostředí \zk{zkLabVIEW} do~\zk{zkFPGA} čipu slouží šipka Run VI, stejně jako pro spuštění vytvořeného VI, které nepracuje s~\zk{zkFPGA}. Po jejím stisknutí se vytvořený program v~prostředí \zk{zkLabVIEW} automaticky přeloží do~jazyka podporovaného \zk{zkFPGA} čipem. 

Jednou z~nevýhod překladu do~jazyka \zk{zkFPGA} čipu je doba překladu a~zpracování, která trvá řádově minuty (typicky 10 minut), která však také závisí na~složitosti překládaného programu. Podle náročnosti překládaného programu se musí totiž vytvořit potřebný počet komponent cílového jazyka. Z~těchto důvodů je vhodné, pokud je to možné, otestovat funkčnost vytvořeného programu na~RealTime procesoru, kde není nutné nic překládat, a~vývoj programu je tedy mnohem rychlejší a~efektivnější. Doporučuje se tedy pracovat s~více VI a~otestovaný program z~RealTime smyčky následně zkopírovat do~smyčky časově kritické.

\begin{figure}[!h]
	\begin{center}
	\includegraphics[scale=0.8]{obrazky/CRIOsmycky}
	\caption{Diagram architektury Real-Time a~FPGA smyčky \cite{cRIOsmyckyvykonost}}
	\label{obr:LabVIEW.rozlozeni.smycek}
	\end{center}
\end{figure}
Tak jako v~mnoha jiných programovací jazycích a~různých vývojových prostředích je možné vytvořený program procházet a~případně také debugovat a~opravovat, tak i~\zk{zkLabVIEW} disponuje těmito možnostmi. V~klasickém VI, které používá jako výpočetní prostředek centrální procesorovou jednotku (CPU) počítače, na~kterém je VI spuštěno, je možné spustit za pomocí žárovky režim obdobný debugu v~jiných vývojových prostředí. Aktivací tohoto režimu v~prostředí \zk{zkLabVIEW} se běh a~vykonávání graficky vytvořeného programu zpomalí a~po virtuálních spojích natažených mezi vstupy a~výstupy jednotlivých bloků začnou „téct“ data. Tok dat ve schématu je tak možné sledovat a~zjistit, kde při vykonávání/vytváření programu nastala chyba. Chybu je možné/nutné po zastavení debugovacího režimu opravit a~spustit VI znovu. Této debugovací schopnosti je možné využít také pro RealTime smyčky, ale není možné ji použít pro opravy chyb vytvořených v~časově kritické smyčce.

Názorná ukázka rozložení a~komunikace mezi programovými smyčkami pro práci s~platformou \zkratkatext{zkcRIO} je uvedena na~obrázku \ref{obr:LabVIEW.rozlozeni.smycek}. Ze schématu je možné vyčíst, že programová smyčka pro \zk{zkFPGA} slouží ke generaci dat, a~to jak směrem do, tak i~směrem z~\zkratkatext{zkcRIO}. Získaná data z~I/O modulů jsou zapsána do~DMA fronty typu FIFO (First In First Out). Tímto data opouští časově kritickou smyčku a~jsou dále zpracována v~Real-Time smyčce. Data jsou zde přečtena z~DMA FIFO a~zapsána do~Real-Time fronty typu FIFO (RT FIFO). V~Real-Time smyčce jsou vyzískaná data vhodně zpracována dle potřeb aplikace.

Další užitečné informace ohledně rozvržení programových smyček při práci s~platformou \zkratkatext{zkcRIO} jsou dostupná na~webových stránkách National Instruments \cite{cRIOsmyckyvykonost}, kde je možné nalézt také srovnání výkonnosti různých platforem \zk{zkcRIO}.
















