\section{Popis grafického rozhraní aplikace a funkcí}\label{sec:aplikace}
Obsahem této kapitoly je konkrétní popis jednotlivých grafických komponent aplikace a popis jejich funkčnosti. V jednotlivých podkapitolách jsou dále popsány implementované nástroje a jejich funkce. Konkrétně se zde budeme věnovat správě uživatelů, přidání, připojení a konfiguraci kamer, ukládání dat aplikace jak pro nastavení, tak záznam, připojení PT motoru a jeho funkcím, grafům a logování událostí. V některých oblastech, kde je to potřebné, se dotkneme minulé implementaci, a to z důvodu jak výsledného porovnání, tak faktu, že v~některých implementacích z testovacích důvodu zůstaly částečně implementované i funkce sloužící pro staré způsoby ovládaní aplikace.

\subsection{Grafické rozdělení hlavního okna a popis komponent}
V této sekci jsou popsány jednotlivé části grafického rozhraní z pohledu jejich ovládání, významu a funkce. Podrobněji budou jednotlivé funkce popsány v dalších sekcích věnujících se jejich implementaci. Celkový přehled grafického rozhraní je přiložen v příloze \ref*{apendix:gui}. Při implementaci těchto panelů a oken bylo v případě oken s nastavením využito především tabulkového rozložení prvků "Grid Layout". V případě panelů a modulárních oken bylo využito takzvaných "Stack panelů"~v kombinaci s tabulkovým rozložením. Hlavním důvodem pro využití byla možnost automatické úpravy velikostí jednotlivých prvků jak při změně rozlišení obrazovky, tak i při změně rozložení dokovatelných panelů

\subsubsection{Hlavička a hlavní menu aplikace}
První částí grafického rozhraní je hlavička celé aplikace. Zde, kromě loga, názvu aplikace a standardních ovládacích prvků aplikace pro minimalizaci, maximalizaci a zavření, stojí za zmínku implementované zobrazení statusu aplikace. Tento status slouží pro informaci o~momentálním stavu aplikace a taktéž pro upozornění, pokud je přihlášený administrátor celé aplikace. Tyto stavy můžeme rozdělit následovně:
\begin{itemize}
	\item OK - Standardní chování aplikace.
	\item DISSCONNECTED - Některá z kamer není připojená.
	\item ALARM - Některá z připojených kamer detekuje měřením nestandardní situaci.
	\item WARNING - LOW DISK SPACE! - Blíží se vyčerpání místa na záznamovém disku, bude přerušeno ukládání dat.
\end{itemize}
Za zmínku ještě stojí, že ve stavu aplikace "ALARM"~je vizuálně, pomocí přerušovaného červeného pruhu, signalizována tato situace pro zlepšení orientace operátora.

Hlavní menu aplikace obsahuje v současné verzi dvě záložky, a to "Options"~a "Application". Záložka "Options"~obsahuje funkci pro navrácení rozložení aplikace, dále možnost vyvolání okna pro nastavení aplikace a okna pro správu a nastavení kamer a taktéž možnosti práce se správou uživatelů, která je podrobněji popsána v kapitole \ref{sec:users}. 
Pod položkou "Application"~se skrývají funkce pro aktualizace aplikace a kamer, prohledávání sítě, otevření uživatelského manuálu a vyvolání "About"~okna pro obecný popis aplikace.

\subsubsection{Informační panel}
Informační panel je v základním rozložení aplikace ukotven v levé části. Slouží především pro práci s aplikací a kamerami, výběr jednotlivých kamer a zobrazení potřebných informací o~dané vybrané kameře. Konkrétně se zde v horní části nachází ovládací prvky pro vyvolání okna přidání a nastavení kamer, pořízení manuálního snímku, nahrávání manuální radiometrické sekvence, konfiguraci měření kamery a pokus o znovupřipojení. Tyto funkce jsou spřaženy s~vybranou kamerou.

Další částí je textový přehled kamer se zobrazením jejich stavů a možností jejich výběru a mazání. Na základě výběru, který je umožněn kliknutím na jednotlivé položky seznamu se aktualizují informace o vybrané kameře, které jsou dostupné a zobrazené přímo pod tímto seznamem. Konkrétně jsou zde zobrazeny informace o IP adrese vybrané kamery, sériové a~artiklové číslo a verze firmwaru. Dále zapsaná aktuální měření v kameře s jejich aktuálními hodnotami a taktéž stavy digitálních výstupů kamery. Poslední komponentou tohoto panelu je možnost volby mezi automatickou barevnou paletou termálního obrazu a manuální, kde je možné nastavit fixní vizuální reprezentaci teplot v barevné škále.

\subsubsection{Centrální panely hlavního okna}
Centrální panel obsahuje několik záložek, ve kterých jsou obsaženy panely pro přehled různých funkcí aplikace. Těmto panelům lze díky dokování změnit polohu, případně je lze oddělit od aplikace a použít jako separátní okna.

\begin{figure} [h]
	\centering
	\includegraphics[width=0.4\linewidth]{fig/miniBlock.png}
	\caption{Miniatura kamery SAFETIS pro panel "Thermal Streams"}
	\label{fig:miniblock}
\end{figure}

Prvním panelem je "Thermal streams", kde jsou zobrazeny miniatury vložených a připojených kamer (viz obrázek č. \ref{fig:miniblock}). Tyto miniatury zobrazují kromě obrazu kamer také jejich název, aktuální teplotu a IP adresu. Pokud se jedná o připojený systém s PT motorem, je zde taktéž zobrazena i aktuální pozice daného systému. Další funkcionalitou je možnost výběru kamery levým tlačítkem myši pro zobrazení informací v informačním panelu a taktéž vizuální signalizace, opět červeným blikáním, v případě, že kamera zaznamená požadovanou měřenou situaci.

Panel "Detailed view", zobrazený na obrázku č. \ref{fig:detail}, slouží pro detailnější pohled na vybraný obraz z kamery. Na základě jakéhokoliv výběru je v levé části zobrazen zvětšený obraz streamu, který je možné přiblížit pomocí kolečka myši nebo příslušného posuvníku. Pro tento výběr taktéž slouží seznam miniatur kamer s aktuálním streamem implementovaný v pravé části. Tato část taktéž slouží pro zobrazení hranic měřicích nástrojů a vizualizaci pixelů, překračujících limitní hodnotu. 

\begin{figure} [h]
	\centering
	\includegraphics[width=0.7\linewidth]{fig/detailPixel.png}
	\caption{Panel s detailním pohledem na vybranou kameru SAFETIS}
	\label{fig:detail}
\end{figure}

Dalším panelem v řadě je "Graphs", kde je implementovaný časový graf průběhu maximální teploty v čase z vybraných kamer. Z důvodu paměťových nároků lze vybrat časové úseky po kterých se graf automaticky začne přepisovat, zároveň je implementována redukce četnosti vzorků, dle vybraného časového úseku. Další možností přizpůsobení je manuální škálování osy grafu, případně změna barvy jednotlivých průběhů. Jelikož se jedná o aplikaci zkoumající prevenci zahoření, byly zvoleny pouze hodnoty maximálních teplot celého obrazu.

Poslední částí je takzvaný "Event logger". V této části je zobrazeno několik druhů vnějších událostí, které mohou nastat při běhu programu. Zároveň jsou tato data zaznamenávána fyzicky na interní disk PC a je tedy možné je exportovat. Data se ukládají textově do příslušné složky v dokumentech. Přestože se kvůli přehlednosti do aplikace načítá pouze posledních 200 záznamů, jsou data uložena v souboru všechna od prvního spuštění, až do fyzického přemazání tohoto souboru. Aplikace rozlišuje tři typy událostí, a to informační, varovné a situace alarmu. Přehled těchto událostí je uveden v tabulce \ref{tab:events}.

\begin{table}[h]
\centering
\begin{tabular}{  l   r }
	\hline 
	Typ & Událost  \\ \hline 
	Info & Spuštění aplikace\\
	Info & Ukončení aplikace\\
	Info & Přidání kamery\\
	Info & Načtení dat z kamery\\
	Info & Připojení kamery\\
	Info & Znovupřipojení kamery\\
	Info & Smazání kamery\\
	Info & Změna na automatický rozsah\\
	Info & Změna na manuální rozsah\\
	Info & Změna konfigurace kamery\\
	Info & Přihlášení daného uživatele\\
	Info & Přihlášení daného administrátora\\
	Info & Změna hesla administrátorem\\
	Info & Odhlášení uživatele\\
	
	Warning & Výpadek připojení na control portu\\
	Warning & Výpadek připojení na stream portu\\
	Warning & Neúspěšný pokus o znovupřipojení\\
	Warning & Obecné upozornění při změně stavu kamery\\
	
	Alarm & Detekování alarmové situace\\
	\hline
\end{tabular}
\caption{Přehled zaznamenaných událostí}
\label{tab:events}
\end{table}

Součástí tohoto záznamu je i časová značka události. Kromě těchto viditelných událostí je vytvořen vnitřní logovací systém zaznamenávající sled událostí a případných chybových hlášek, který je taktéž ukládán do textového souboru. V případě nestandardní situace programu je využíván pro rychlejší lokalizaci případné chyby.

\subsection{Správa uživatelů aplikace}\label{sec:users}
Jak již bylo zmíněno, hlavní funkcí aplikace je upozornit na vznikající riziko požáru, tedy předpokladem byla vizuální kontrola aplikace operátorem. Pro případné zjištění pochybení byl do aplikace implementován uživatelský režim, který slouží jak k blokování některých funkcí uživatelům a umožnění konfigurace aplikace pouze administrátorům, tak k záznamu osoby, která v danou dobu je zodpovědná za kontrolu aplikace.

Po spuštění aplikace je tedy současně se spuštěním hlavního okna vyvoláno přihlašovací okno uživatelů. Program je implementován tak, že neumožní přístup k žádným funkcím pokud není nikdo přihlášený a po odhlášení uživatele se automaticky aplikace vrátí do stavu zablokování a výzvy na zadání uživatelského jména a hesla. Pro prvotní přihlášení a testovací funkce je základní přístup nastaven jako admin-admin. Ten odblokuje přístup ke všem funkcím aplikace v takzvaném administrátorském režimu. V tomto režimu je možné konfigurovat připojená zařízení, jakožto i měnit samotné nastavení aplikace, nebo konfigurovat pozice a presety PT motoru.

Druhým režimem je režim operátorský. Zde je zablokován přístup ke konfiguracím a nastavením, a tedy lze v aplikaci pouze kontrolovat aktuální měření. Tento přístup byl zaveden i jako preventivní opatření před vědomou či nechtěnou změnou nastavení, která by mohla mít za následek selhání systému.

\subsubsection{Administrace uživatelů}
Správu seznamu uživatelů může provádět pouze administrátorský přihlášený účet, a to jednak v okně "Manage users"~(viz obrázek č. \ref{fig:manageUsers}), které je možné vyvolat z hlavního menu aplikace, v záložce "Options"~pod položkou "Admin". Dalším nástrojem je možnost změna hesla libovolného uživatele v okně "Change password", které má stejné umístění jako předchozí zmíněné. Poslední položkou v podzáložce "Admin"~v hlavním menu, je funkce na odhlášení aktuálního uživatele, která je společně s možností změny hesla přístupná i operátorům. 

\begin{figure} [h]
	\centering
	\includegraphics[width=0.4\linewidth]{fig/manageUsers.png}
	\caption{Okno správy uživatelů}
	\label{fig:manageUsers}
\end{figure}

V okně "Manage users"~je uveden aktuální seznam vytvořených uživatelů s jejich jménem a rolí a možností přidáváním a mazáním uživatelů. Délka uživatelského jména musí mít minimální počet 5 znaků. Pro smazání jakéhokoliv uživatele je potřeba znalost jeho hesla, aby nedošlo k náhodnému smazání uživatele. V okně "Change password"~má uživatel možnost při znalosti starého hesla změnit po jeho zadání své aktuální heslo. Tato změna je opět kontrolována na minimální počet znaků, jakož i na správnost starého hesla a shodě duplicitního zadání nového hesla.

V současné verzi jsou data o uživatelích uložena v dokumentech ve skrytém textovém souboru se změněnou příponou ".dat". Jelikož je při instalaci celého systému vytvořen a automaticky přihlašován po startu uživatelský účet Windows s omezenou možností konfigurace, a tedy nemožností změnit viditelnost složek a souborů, nebylo dosud přistoupeno k šifrování dat. Přesto je počítáno, a jsou připraveny funkce, na šifrování dat v souboru za pomocí statického klíče a systémových funkcí třídy "Cryptography"~z namespace "System.Security". Tyto funkce pracují na principu PBKDF2 (Password-Based Key Derivation Function 2) a~jsou schopné na základě klíče a šifrovaného streamu uložit, a poté otevřít a dekódovat data.

Z implementačního hlediska jsou data o uživatelích načtena v moment startu aplikace z~daného souboru do seznamu objektů uživatelů. Během případných úprav, jako je změna hesla, či přidání nebo smazání uživatele, dojde po ověření správnosti všech náležitostí k aktualizaci objektů v seznamu a přepsání kompletního souboru. Data v souboru jsou přepsána okamžitě z důvodu možnosti okamžitého přihlášení nových uživatelů, ale hlavně k zachování dat i při případném nestandardním chování aplikace. Pro zápis dat nebyla zvolena serializace, ale řádkový zápis s definicí separačních znaků pro jednotlivá potřebná data a následné inverzní vyčítání a separace.

\subsection{Konfigurační režim aplikace}
Konfigurační režim aplikace slouží pro nastavení párování ethernetových připojení k zásuvným modulům pro pevné disky. Zároveň slouží jako funkce pro detekci fyzické manipulace s aplikací a ošetření proti použití aplikace mimo stanovené průmyslové PC. V aplikaci je implementované konfigurační okno, zobrazené na obrázku č. \ref{fig:konfigDisks}, které lze vyvolat při přihlášení administrátora s definovaným jménem, a to "NetAdminWSW". Důvodem implementace konfigurátoru bylo zjednodušení úvodního nastavení aplikace. V okně konfigurátoru nalezneme seznam nalezených síťových zařízení s jejich ID hardwaru, názvem a polem pro zadání párovaného diskového slotu, a dále seznam nalezených disků s informací o ATA kanálu, který slouží právě pro toto párování. Další funkcí tohoto okna je možnost nastavení statických IP adres všem síťovým kartám.

Konfigurace propojení ATA kanálů a čtveřic ethernetových připojení byla implementována hlavně z důvodu cenové náročnosti SSD disků s velikostí 2TB. Proto byl zvolen pevný plotnový disk, a to s ohledem na rychlost zápisu. U tohoto konkrétního disku je maximální povolená rychlost zápisu pouze 140 MB/s. Pokud tedy budeme uvažovat kameru SAFETIS s rozlišením 640x512 pixelů a frekvencí 30 Hz, je teoretická rychlost pro zápis radiometrického videa 18,75 MB/s. Tento údaj je orientační, jelikož při záznamu se ukládají ještě další hodnoty, a ne jenom obrazové. Tedy pokud budeme počítat se 16 připojenými kamerami, které by nahrávaly současně, bylo by třeba využít disk s rychlostí zápisu minimálně 300 MB/s. Díky této vyšší potřebné rychlosti zápisu bylo přistoupeno k rozdělení ethernetových portů na čtveřice, přičemž ke každé z nich je přiřazen jeden ze čtyř dostupných zásuvných modulů.

\begin{figure} [h]
	\centering
	\includegraphics[width=0.55\linewidth]{fig/konfigDisks.png}
	\caption{Okno pro nastavení párování disků se síťovým připojením}
	\label{fig:konfigDisks}
\end{figure}

Z pohledu implementace jsou před konfigurací prohledány všechny dostupné objekty typu "NetworkInterface", přičemž pokud je daný objekt typu "Ethernet", je uložena jeho fyzická adresa a název do interního vytvořeného objektu. Pro vyhledání disků je využit "ManagementObjectSearcher", který na základě vstupního řetězce prohledává nástroje správy a vrací objekty typu "ManagementObject"~s informacemi o daných zařízeních. Po nalezení aktuálně připojených disků jsou všechny uloženy interně do seznamu jako objekty typu "DriveItemViewModel"~s parametry přiřazené písmeno disku, název disku, souborový systém a číslo ATA kanálu. Po nastavení čísla kanálu jednotlivým připojením a potvrzení je uložen fyzický soubor obsahující právě toto párování. Ten je při každém dalším startu otevřen a jsou načteny a ověřeny jeho data. Validace těchto dat probíhá stejným prohledáním, které bylo zmíněno, a~porovnáním s uloženými daty. Pokud data nejsou validní, je programově zabráněno aplikaci ukládat data z kamer na disky, a uživatel je o tom upozorněn varovným oknem a statusem aplikace. Toto zabránění ukládání dat, jak již bylo zmíněno, slouží také jako ochrana před šířením na vlastní platformy.

\subsection{Práce s kamerami SAFETIS}
Aplikace je implementována pro práci až se 16 kamerami, respektive kamerovými systémy, s PT motorem. Je k tomu přizpůsobeno grafické zpracování aplikace i limit počtu přidaných kamer. V této sekci se jednak budeme věnovat práci se seznamem kamer, jejich připojení a konfiguraci. Pro každou kameru je vytvořen objekt typu "SmartisViewModel"~obsahující instanci modelu kamery SAFETIS, dle návrhového vzoru MVVM.
\subsubsection{Přidání a mazání ze seznamu}
Pro aplikaci je implementován seznam objektů typu "SmartisViewModel", nad kterým jsou prováděny operace spojené jak s přidáváním jednotlivých zařízení, tak prací s nimi. Pro práci s jednotlivými kamerami si aplikace v každém čase drží instanci jedné kamery jako vybrané. Tu lze zvolit již zmíněnými několika způsoby, například v levém informačním panelu. Původní koncepcí aplikace bylo plně manuální přidávání kamer v okně správy kamer. Tato varianta zde stále zůstala validní, a to hlavně z testovacích důvodů. Tedy kliknutím na tlačítko "Add SAFETIS"~v okně "SAFETIS Settings"~(viz obrázek č. \ref{fig:safetissettings}) je automaticky vytvořen objekt s parametry uvedenými v tomto okně. Zde je možné taktéž instance kamer mazat ze seznamu. V pozdější fázi implementace bylo přistoupeno k automatickému přidávání kamer. To funguje na principu prohledávání sítě, a to na předem definovaných rozsazích adres. Původní zvyklostí byla přítomnost kamer na adresách 10.0.0.2 až 10.0.0.254, po konzultacích byla do webbrowseru aplikace implementována funkce na změnu IP adresy dle artiklového čísla. To je složeno z textového označení a číslem vyrobeného kusu počítaného od čísla 1000. Tedy toto číslo je fyzicky rozděleno na 2 poloviny a kamery v této konfiguraci se nyní nacházejí v rozsazích 10.0.10.00 až 10.0.19.99. Oba tyto rozsahy aplikace prohledává automaticky, přičemž v případě druhého rozsahu aplikace prohledává na posledním bajtu adresy pouze čísla v rozmezí 0 až 99. Hledání kamery je provedeno ve vlastním vlákně po spuštění aplikace nejprve pingem na danou adresu. Pokud je odezva pingu kladná, je vytvořeno dočasné TCP připojení za pomocí TCP klientu a je odeslán příkaz HIS na dané připojení. Pokud se na dané adrese nachází kamera SAFETIS, odpoví na tento příkaz OK a je automaticky přidána do seznamu kamer. V negativním případě je vyhodnoceno jiné zařízení připojené na dané adrese a je tedy ignorována pozitivní odpověď na předchozí ping.

\begin{figure} [h]
	\centering
	\includegraphics[width=0.6\linewidth]{fig/safetisSettings.png}
	\caption{Okno nastavení kamer SAFETIS}
	\label{fig:safetissettings}
\end{figure}

\subsubsection{Připojování a komunikace}
Model objektu kamery SAFETIS v sobě z pohledu komunikace a připojení obsahuje instance obslužných tříd a to "SmartisTcpControl"~a "SmartisTcpStream". Každá instance kamery tedy z pohledu připojení obsahuje dva TCP klienty, a to na dané IP adrese a masce podsítě a na dvou portech a to 2251 a 2252. První zmiňovaný port slouží pro konfiguraci a čtení dat měření a druhý slouží pro přenos obrazového streamu. Při úspěšném připojení TCP klienta si aplikace uloží instanci daného klienta zároveň s vyčtením a uložením instance objektu "TcpStream". Tomuto streamu jsou potom nastaveny časy pro vypršení komunikace a jsou na něj zapisována data daná formátem definované komunikace na základě seznamu příkazu viz tabulky č. \ref{tab:prikazyGet} a č.\ref{tab:prikazySet} a následným převedením textové zprávy na pole bajtů. Po odeslání dat je daný stream vyčištěn pomocí funkce "Flush"~a je očekávána definovaná odpověď kamery. Na základě odpovědi je poté postupováno dále. Standardní odpovědí na příkazy typu set je potvrzení kamery OK v případě validního zpracování kamerou a v případě chyby je to zpráva ERR. V případě příkazů typu get jsou data převedena z pole bajtů na textovou zprávu to stringu a poté dle typu zprávy zpracována příslušnými implementovanými textovými parsery. 

Možností připojení kamery je několik. Prvním z nich je v případě automatického nalezení kamery při spuštění a nebo nalezeném výskytu v konfiguračním souboru aplikace kamera připojena automaticky. Další možností je využití manuálního připojení kamery z okna "SAFETIS settings", případně pomocí tlačítka reconnect v horní části informačního panelu aplikace. V případě opětovného připojení je za podmínky nefunkčního alespoň jednoho ze dvou připojení ukončen a vyčištěn stream a ukončen klient TCP. Poté jsou zavolány znovu funkce na jejich připojení. Při implementaci a testování jsme narazili na problém se stabilitou daných připojení, proto je v aplikaci taktéž implementován systémový časovač s minutovou periodou. Jeho funkcí je kontrola jednotlivých instancí kamer a ověření zda je zařízení stále připojeno. Pokud detekuje odpojení, automaticky se snaží o nové navázání spojení. Současně s tím bylo pro tuto variantu implementováno resetování připojení ze strany kamery v případě zastavení komunikace z druhého směru, a to s periodou 30 s. Hlavním důvodem pro implementaci resetování připojení z pohledu kamery byl předpoklad neustále komunikace. 

Implementačně z pohledu komunikace jsou v aplikaci zavedeny dva časovače. První z nich obsluhuje vyčítání obrazu, přičemž jeho perioda je nastavena podle vyčtené hodnoty frekvence kamery. Ten poté s danou periodou obsluhuje nové snímky a jejich vyčítání. Zároveň má implementovanou toleranci na nevalidní snímky a případné odpojení streamu. Pokud funkce na generování obrazu ze zaslaných dat detekuje více snímků jak pětinásobek frekvence kamery za sebou, dojde automaticky k odpojení obrazového připojení. Druhý časovač obsluhuje jak vyčítání aktuálních měření kamery, tak získávání informací. Jeho perioda je fixně nastavena na 250 ms jelikož není vyžadována rychlejší odezva. Ve vnitřní implementaci volání se v každém cyklu data měřících nástrojů a digitálních výstupů kamery. Zároveň je zde implementován čítač volání a při každém 70. průběhu jsou vyčítány informace kamery především kvůli teplotě jádra, na základě které je zpřesňováno měření kamery výběrem vyčtených kalibračních hodnot. Taktéž je v tomto časovači implementován čítač problémů, tedy pokud během vyčítání dojde k neočekávané situaci, je ukončeno připojení stejným způsobem jako v předchozím případě. Pro aktualizaci dat ViewModelu je ve většině případů využito odchycení implementovaných událostí. Tato implementace funguje na principu pozorovatele, ten na základě definované generované události v našem případě reaguje na nově příchozí data a propaguje je z instance Modelu do ViewModelu, aby bylo možné provést grafickou změnu. 

\subsubsection{Generování obrazu}
Obraz z kamery je generovaný po obdržení dat snímku v iteraci streamovacího časovače. Získaná data jsou ve formátu pole bajtů a prvním krokem je jejich převedení na pole hodnot typu ushort, jelikož jsou data ve formátu surových hodnot kamery tak zvaných RAW hodnot. Tato data jsou poté předána funkci obstarávající generování obrazu. Tato funkce na základě minimální a maximální hodnoty v obraze v případě automatického rozsahu nebo na základě limitních hodnot manuálního rozsahu nejprve vytvoří přiřazení barev teplotní palety k jednotlivým teplotním skokům. Tedy je nejprve vypočítán teplotní rozsah příslušný jedné z 255 barev teplotní palety. Na základě těchto dat je poté vytvořen obraz ve formátu "BitmapSource", který je poté graficky zobrazován jak v miniaturách, tak v panelu detailního zobrazení. Součástí generování obrazu je taktéž vizualizace pixelů, které splňují podmínku měření. Pro optimalizaci výkonu, bylo definováno 12 možných barev těchto pixelů. Jelikož aplikace slouží primárně pro detekci vysokých teplot, tedy blízkých hornímu rozsahu, jsou tyto barvy zafixovány programově v barvách palety a je jim přiřazený kód 1 až 12. Pokud je při vyčtení obrazu detekována teplota pixelu překračující mezní hodnotu, je tomuto pixelu v duplicitním poli změněna RAW hodnota na kod vybrané barvy a při přiřazení je tato hodnota kontrolována a automaticky je těmto pixelům přiřazována barva. Při zobrazení není tedy třeba využití překrývání obrazu a barvy pixelů jsou generovány přímo ve zdrojovém "BitmapSource", který je zobrazován. Pro ukládání dat je poté použito pole hodnot nedegradované o tyto data. Dalším prvkem, který je obrazově zobrazen, jsou měřicí oblasti ROI, které jsou z důvodu přehlednosti zobrazeny pouze v panelu detailního zobrazení. Tyto oblasti jsou vykresleny za pomocí plátna ("Canvas") jako grafické objekty systémové třídy "UIElement". Na základě typu a jejich souřadnic jsou přidány do seznamu těchto objektů a vykresleny. 

\subsubsection{Konfigurace}
V této podkapitole se budeme věnovat konfiguraci kamery z pohledu parametrů a měřicích nástrojů. V první řadě se jedná o grafickou strukturu a význam jednotlivých parametrů a poté vlastní implementaci. Pro konfiguraci kamery je implementováno okno "SAFETIS Configuration", které je rozděleno na několik panelů. Zde je postupným procházením a nastavením možné změnit aktuální konfiguraci. 
\begin{figure} [h]
	\centering
	\includegraphics[width=0.7\linewidth]{fig/konfigROI.png}
	\caption{Okno konfigurace kamery SAFETIS při definování měřících oblastí}
	\label{fig:konfigROI}
\end{figure}
Prvním panelem je "Radiometry", zde je možné konfigurovat parametry kamery, jako je emisivita, odražená teplota a teplota atmosféry, teplotní rozsah a periodu interní kalibrace NUC. Panel "Miscelanious"~slouží pro změnu IP adresy a~masky podsítě kamery. Zároveň je zde možné definovat aktuální datum a čas kamery. V další sekci "ROI Selection"~(viz obrázek č. \ref{fig:konfigROI}) je možné graficky definovat měřicí oblasti takzvané ROI do obrazu kamery. V levé části lze vybrat požadovaný nástroj a za pomocí kreslení jsou uloženy příslušné parametry vybraného nástroje, dále je zde možné těmto oblastem definovat název a~případně je mazat. S těmito nástroji se dále pracuje v následujícím panelu "Alarm Settings". V této sekci probíhá podrobnější nastavení parametrů měření přičemž význam jednotlivých položek je uveden v tabulce č. \ref{tab:config} a je graficky zobrazen na obrázku č. \ref{fig:konfigTab}.

\begin{table}[h]
	\centering
	\begin{tabular}{  l   r }
		\hline 
		Název & Popis  \\ \hline 
			
		\# & Číslo měření\\
		Pixel limit & Minimální počet pixelů potřebný pro spuštění alarmu\\
		Time limit & Minimální doba po kterou musí být pixely aktivovány\\
		Pixel count &Informace o počtu pixelů v měřícím nástroji\\
		Temp. limit & Limitní teplota pro spuštění alarmu\\
		\#0 až \#6 & Jednotlivé digitální výstupy kamery pro přiřazení k měření\\
		SCU & Jednotlivé digitální výstupy PC Vecow a jejich párování k měření\\
		Color & Barva zobrazení pixelů, které překročily teplotní limit\\
		\hline
	\end{tabular}
	\caption{Přehled konfiguračních parametrů}
	\label{tab:config}
\end{table}

Poslední možností nastavení je zapnutí clusterovací funkce kamery, tedy nestandardní situace je vyhodnocena pouze pokud daný počet pixelů překračuje limitní teplotu po danou dobu, a zároveň jsou tyto pixely sousedící. V panelu "Outputs Settings"~je možné definovat pro jednotlivé párované digitální výstupy kamery délku přesahu pulsu po skončení alarmu, a taktéž zda se jedná o puls s náběžnou nebo sestupnou hranou. Poslední sekce "Finalization"~slouží pouze k potvrzení a nahrání této konfigurace buď do kamery, nebo v případě zařízení s PT motorem, do vybrané konfigurace. 

\begin{figure} [h]
	\centering
	\includegraphics[width=0.7\linewidth]{fig/konfigTab.png}
	\caption{Okno konfigurace kamery SAFETIS při nastavení parametrů měření}
	\label{fig:konfigTab}
\end{figure}

Z pohledu implementace konfiguraci zařízení spravuje instance "SmartisConfigViewModelu"~obsažená s hlavním aplikačním ViewModelu. Ja je inicializována jako prázdná při spuštění programu a vytváření jednotlivých ViewModelů a její data jsou naplněna v moment otevření konfiguračního okna vybrané kamery. Data, která jsou této instanci předána jsou porovnáním uložených a aktuálních dat z kamery. Po otevření a při změně parametrů jsou kontrolovány jednotlivé aspekty daných hodnot. Příkladem může bý test hodnoty emisivity jak na validní znaky, tak i na rozsah hodnot 0 až 1. V případě výběru a kreslení měřicích nástrojů, jsou vytvořeny a uloženy objekty typu "SmartisROI"~a "SmartisRoiViewModel", v nichž jsou uložena data o neškálovaných bodech, typu nástroje a ostatních parametrů měření. Taktéž je vytvořen jejich seznam. Dále je vytvořen seznam digitálních výstupů kamery s jejich nastavením. Po nastavení všech parametrů a při aplikování do kamery je na základě volání přiřazeného příkazu datovým bindingem spuštěna sekvence příkazů. Nejprve je pozastavena komunikace na obou portech, poté je odeslán příkaz pro pozastavení měření kamery a následně příkaz definující začátek konfigurace kamery. Po provedení těchto kroků jsou sekvenčně odeslána všechna data nastavená během konfigurace, pomocí instance objektu "TcpStream"~připojené a vybrané kamery. Pokud odeslání proběhlo validně, je ukončen konfigurační mód kamery a jsou opět spuštěny časovače pro vyčítání obrazu a čtení dat. Pokud došlo ke změně IP adresy kamery, je automaticky přenastavena i aplikačně a je spuštěn příkaz na změnu připojení. Po dokončení jsou aktualizována data v objektu "SmartisSettings", která slouží pro ukládání konfigurace do souboru s nastavením ale i pro vyčítání konfiguračních dat při selekci a otevření tohoto okna. Kamera po změně konfigurace provede vnitřně dané změny a po provedení se automaticky spustí komunikace s programem.


\subsection{Nastavení aplikace}
Pro nastavení parametrů ovlivňujících samotnou aplikaci slouží okno "Application setup"~na obrázku č. \ref{fig:appSettings}, které lze vyvolat z hlavního menu aplikace. Zde je možné najít následující parametry rozdělené do několika skupin. V sekci "General settings"~lze nastavit interpolaci obrazu, tedy vykreslení hran pixelů nebo jejich rozmazání, dále "Layout autosave", který pokud je zapnut, slouží pro uložení fyzického souboru s rozložením panelů aplikace, který je následně vyvolán při následujícím startu aplikace. Další možností je zapnutí a vypnutí akustické signalizace alarmové situace při měření. Možnost "Multi Snapshot Enable"~slouží k zobrazení výběru jednotlivých kamer, přičemž při výběru více než jedné je umožněno vytvářet snímky z těchto kamer jedním kliknutím. Poslední v této sekci je položka "Alarm colors", která slouží pro nastavení barvy vizuální signalizace alarmu.
V části "Capture settings"~je umožněna uživateli volba tvorby nových složek automatického záznamu v rozmezí dne, týdne a měsíce.
Dále v sekci "Visualisation settings"~nalezneme možnost nastavení teplotní palety obrazu, barvy hranic měřících nástrojů ROI a možnost nastavení počtu řádků a sloupců mřížky miniatur kamer.

\begin{figure} [h]
	\centering
	\includegraphics[width=0.5\linewidth]{fig/appSettings.png}
	\caption{Okno pro nastavení aplikace}
	\label{fig:appSettings}
\end{figure}

\subsubsection{Ukládání a implementace dat nastavení}
Pro ukládání dat nastavení, a to nejenom aplikačních, ale i kamer a presetů PT motoru, jsou implementovány v aplikaci třídy "Settings"~a "SettingsViewModel". V těchto třídách jsou držena data sloužící právě pro uložení do fyzického souboru a následné načtení. V třídě "Settings"~nalezneme data aplikačního nastavení, ale také seznam objektů typu "SmartisSettings". Tyto objekty v sobě drží informace o přidaných kamerách, jakožto i v případě systému s PT motorem seznam těchto přednastavených pozic s konfiguracemi. Všechna data obsažená v třídě "Settings"~a jejich obsažených instancích a proměnných jsou za pomocí instance třídy "StreamWriter"~a pomocí systémové třídy "XmlSerializer"~zapsána do fyzického XML souboru při standardním ukončení aplikace. V některých případech lze ignorovat zápis dat, respektive jejich serializaci, za pomocí direktivy "[XmlIgnore]", přičemž takto označená data nejsou uložena. Tento konfigurační soubor je při spuštění aplikace vyhledán, a pokud je přečten a je vyhodnocen jako validní, je díky jeho uložení pomocí serializace z něj automaticky vytvořena instance třídy "Settings"~a naplněna daty obsaženými v tomto souboru. Není tedy třeba využití implementace parseru, jako například při ukládání konfiguračního souboru. 


\subsection{Aktualizace aplikace a kamer}
Z důvodu předpokladu nemožnosti minimalizace aplikace a přístupu do systému Windows byla implementována možnost aktualizace jak aplikace tak firmwaru kamer. Pro tyto účely slouží okno "Update", které je možné vyvolat z hlavního menu aplikace a je zobrazeno na obrázku č. \ref{fig:update}. Toto okno v sobě obsahuje obě varianty aktualizací.

Pro aktualizaci aplikace je možné stáhnout aktuální verzi instalátoru z webových stránek firmy Workswell s.r.o. Pro ověření nutnosti aplikace je soubor z webových stránek stažen s názvem podporující parsování textu aplikace. Při ověřování je kontrolována přítomnost klíčových slov "SCS"~a "update", po kterých následují čísla udávající verzi instalátoru oddělených tečkami. Tato čísla se poté porovnávají s aktuálně nainstalovanou verzí aplikace, a pokud je instalátor vyhodnocen jako novější, je po kliknutí na tlačítko "Update application"~aktuální aplikace ukončena a je spuštěn externím procesem tento instalátor. Po reinstalaci je vynuceno restartování celého počítače a díky nastavení automatického spouštění aplikace je spuštěna automaticky aktualizovaná, nainstalovaná verze.

\begin{figure} [h]
	\centering
	\includegraphics[width=0.75\linewidth]{fig/update.png}
	\caption{Okno aktualizaci kamer a aplikace}
	\label{fig:update}
\end{figure}

Aktualizace firmwaru kamer probíhá podobným způsobem z pohledu ověření verze. Shodné je parsování názvu aktualizačního souboru s ověřením klíčového slova SAFETIS, přičemž následuje číslo verze firmwaru. Po vybrání a ověření validity souboru je možné provést aktualizaci firmwaru všech připojených kamer. Jelikož jsou zařízení držena v programu jako instance jejich objektů, je po potvrzení aktualizace procházen v aktualizačním vlákně jejich seznam a kontrolována aktuální programová verze kamer z nich vyčtená. Pokud načtený soubor obsahuje novější verzi, pozastaví se programově komunikace s kamerou a začne se definovaným způsobem odesílat aktualizační soubor. Nejprve je odeslán příkaz, který kameru upozorní na aktualizační proces, v němž je taktéž zaslána délka dat vyčtených z fyzického aktualizačního souboru. Následovně jsou odeslána datovým proudem "TcpStream"~pomocí připojeného klienta všechna vyčtená data. Kamera po zaslání provede vnitřní aktualizaci a po dokončení se celé zařízení restartuje.

\subsection{Záznam dat z kamery}
Obecně aplikace podporuje několik typů ukládání dat. Můžeme je rozdělit na manuální a automatické ukládání, přičemž toto rozdělení je z pohledu implementace totožné, respektive využívá shodné funkce pro dané ukládání. Druhým dělením je ukládání radiometrických snímků, radiometrických sekvencí a případně i ukládání videa ve formátu ".avi". V této sekci bude popsáno obecně ukládání, v případě manuálního i jeho ovládací prvky a formát ukládaných radiometrických dat. Pro oba typy ukládání je automaticky aplikací generovaná stromová struktura adresářů. Jak již bylo zmíněno, kořenovým adresářem pro ukládání dat je párovaný disk s daným ethernetovým portem. Informaci o disku a odhadovanou velikost záznamu videa za minutu lze nalézt v okně "SAFETIS Settings". Dále jsou automaticky vytvářeny pro jednotlivé kamery příslušné složky s jejich názvem a interně jsou rozděleny na snímky a sekvence. V těchto složkách jsou umístěna data z manuálního ukládání, dále jsou zde taktéž vytvářeny složky pro automatický záznam, a to dle nastavení aplikace. Pro kontrolu složek a jejich vytváření je implementován časovač s hodinovou periodou, který kontroluje vytváření nových složek a zároveň je existence cesty kontrolována při každém spuštění aplikace a začátku ukládání dat. 

Manuální ukládání snímků je umožněno za pomocí tlačítka v informačním panelu, taktéž pokud je v nastavení zapnuta možnost vytváření více snímků v jeden moment lze po vybrání požadovaných kamer pro tento typ snímání možné využít tuto funkci. Pro automatické periodické ukládání radiometrických snímků slouží nastavení periody taktéž v okně "SAFETIS Settings". Pro automatický záznam snímků je v aplikaci vytvořený objekt typu "CaptureViewModel", který kontroluje existenci složek, ale jeho hlavní funkcí je systémový časovač, který každou sekundu kontroluje zbývající čas do pořízení snímku a taktéž spouští funkce ukládání těchto jednotlivých snímků. 

Pro manuální nahrávání sekvencí slouží taktéž obslužné tlačítko v informačním panelu aplikace, po jeho stisknutí se spustí nahrávání radiometrické sekvence z kamery a zobrazí se údaj o aktuální délce nahrávání. Automatické nahrávání sekvence je spuštěno pokud aplikace zaznamenaná alarmovou situaci, tedy se splní podmínky měření. Pokud je zjištěno probíhající manuální nahrávání, je před spuštěním automatického záznamu zastaveno. Více o implementaci a nastavení automatického nahrávání je uvedeno v sekci \ref{sec:alarm}. V aplikaci je taktéž implementováno ukládání ve formátu ".avi"~za pomocí knihovny Aforge. Tyto funkce pro obsluhu záznamu jsou však v momentální verzi zakomentovány z důvodu testování ostatních záznamových funkcí a testování výkonnosti.

\subsubsection{Formát ukládání radiometrických dat}
Pro ukládání radiometrických dat je využita interní knihovna společnosti Workswell s.r.o, ThermoLib. Tato knihovna slouží jak pro načítání a ukládání radiometrických snímků, tak i sekvencí. Z pohledu formátu ukládání snímků se jedná o ".jpeg"~s uloženými daty v APP1 hlavičce, které se nazývají fff file. V těchto datech jsou uloženy nejprve univerzální hlavičky jednotlivých tagů obsahující odkazy na příslušná data v APP1 hlavičce, po rozkódování těchto tagů lze poté přistupovat k jednotlivým datům, jako jsou teplotní parametry, RAW hodnoty obrazu, či další podstatné parametry, jako GPS nebo měřící nástroje ROI. Opačným způsobem poté dochází i k ukládání těchto dat. Pro ukládání radiometrických sekvencí ve formátu ".seq", respektive ".wseq"~slouží implementovaná třída "ThermoVideo"~v této knihovně. Z pohledu dat se jedná o soubor snímků řazených sekvenčně za sebe v datovém proudu s časovou značkou, tedy při práci se sekvencí jsou stejným způsobem data kódována jako v~případě radiometrických snímků. 

\subsubsection{Alarmový stav aplikace} \label{sec:alarm}
Jednou z hlavních funkcí aplikace je alarmový stav. Ten je vyvolán, pokud alespoň jedna z připojených kamer detekuje svým měřením nestandardní situaci, tedy splní nastavenou podmínku měření. Pokud taková situace nastane, dojde v aplikaci k několika událostem. Je spuštěna vizuální signalizace za pomocí blikání hlavičky aplikace a zvýraznění miniatury kamery, která je v alarmové situaci. Dále, pokud je povolena tato v funkce v nastavení aplikace, je spuštěna i akustická signalizace. Vizuální signalizace alarmu je znázorněna v příloze \ref{apendix:gui} na obrázku č. \ref{fig:guiAlarm}. Další událostí obslouženou při detekci alarmové situace je vyhodnocení měření, a na základě nastavených párování s digitálními výstupy průmyslového PC jsou za použití interní knihovny společnosti Vecow nastaveny logické hodnoty příslušným digitálním výstupům. Dále je aplikaci nastaven stav Alarm a je proveden záznam do aplikačního logu s~časem a názvem kamery. Z pohledu blokace funkcí je znemožněno jakékoliv nahrávání z dané kamery. Pokud je spuštěno manuální nahrávání je automaticky ukončeno. Dále je zablokován přístup ke konfiguraci zařízení, aby nemohlo dojít k jeho změně. Taktéž se spustí automatické nahrávání radiometrického záznamu. Ten je možný nastavit v okně "SAFETIS Settings", a~to konkrétně hodnoty přesahu nahrávání jak před danou událostí, tak po ní.

Z implementačního pohledu je automatické ukládání radiometrického záznamu omezeno úvodním během kamery. Po připojení kamery a spuštění streamu jsou postupně ukládány jednotlivé snímky do bufferu až do velikosti dané nastaveným časovým přesahem a frekvencí kamery. Po naplnění tohoto bufferu je povolen automatický záznam, a také dochází k~postupnému současnému mazání prvního snímku a přidávání aktuálního snímku na konec. Tedy je implementovaná FIFO fronta pro snímky, pro každou kameru. Pokud dojde k~alarmové situaci je spuštěno vlákno pro nahrávání právě těchto snímků, toto vlákno není nijak časově omezeno tedy zároveň dochází k~vyprazdňování fronty pro nahrávání a přidávání nových snímků ze streamu kamery. Jelikož ukládací vlákno není frekvenčně omezeno, dojde k~uložení předchozích snímků rychleji a fronta se vyprázdní. Po vyprázdnění bufferu je předána kontrola nad nahráváním přímo časovači vyčítaní snímků z kamery a každý nový snímek je ihned nahráván do dané sekvence. Po skončení alarmové situace je spuštěn časovač nahrávající danou sekvenci ještě po dobu nastavenou taktéž v okně "SAFETIS settings", taktéž pokud je v této periodě opět dosaženo alarmu, automaticky je navázáno na předchozí nahrávání a~nedojde k ukončení záznamu.

\subsection{Záznam grafického průběhu teploty}
Jak již bylo uvedeno, do grafického záznamu se ukládají aktuální maximální měřené teploty kamery. Pro grafické zobrazení je využitý kartézský graf "RadCartesianChart"~knihovny Telerik, který je zobrazen na obrázku č. \ref{fig:graf}. Ten je propojen datovým bindingem se seznamem podporovaných objektů typu "LineSeries"~ve třídě "GraphsPaneViewModel". Pro každou kameru je vytvořený objekt "LineSeries"~a přidaný do tohoto seznamu. Pro ukládání dat je použit seznam objektů typu "ChartDateTemperatureObject", který v sobě uchovává informace o časové značce a zadané teplotě. Tato data se obnovují po uplynutí interně nastavené periody systémového časovače a jsou přidána do daného seznamu. 

\begin{figure} [h]
	\centering
	\includegraphics[width=0.8\linewidth]{fig/graf.png}
	\caption{Panel grafického záznamu maximální teploty}
	\label{fig:graf}
\end{figure}

Pro přehlednost a omezení vytížení systému byly definovány jak časové úseky po jejichž uplynutí dochází k odebírání nejstaršího prvku, tak počet prvků v dané kolekci. Pokud dojde uživatelem ke změně daného okna, jsou všechna data z kolekcí odstraněna, a to z důvodu možného nejednotného zobrazení na časové ose. V tabulce č. \ref{tab:graf} jsou uvedena jednotlivá časová okna s jejich periodou a maximálním počtem záznamů. Pro nastavení osy y grafu je při každém záznamu testována globální maximální a minimální hodnota teploty. V případě, že nová hodnota přesáhne aktuální limity, je automaticky přepsána osa y. Pro zpřehlednění jsou limity posunuty o 5 \% aktuálního rozsahu grafu, případně je možné nastavil limity manuálně fixní.

\begin{table}[!h]
	\centering
	\begin{tabular}{  c   c   c  }
		\hline 
		Časové okno & Počet vzorků & Perioda  \\ \hline 
		10 s & 100 & 10 ms\\
		30 s & 100 & 30 ms\\
		1 m & 250 & 240 ms\\
		5 m & 250 & 1.2 s\\
		1 0m & 250 & 2.4 s\\
		30 m & 250 & 7.2 s\\
		1 h & 500 & 7.2 s\\
		6 h & 500 & 43.2 s\\
		12 h & 1000 & 43.2 s\\
		24 h & 1000 & 86.4 s\\
	
		\hline
		
	\end{tabular}
	\caption{Popis časových úseků grafu}
	\label{tab:graf}
\end{table}
\subsection{Ovládání a funkce PT motoru}
Jak již bylo uvedeno, PT motor, respektive jeho řídicí jednotka, je do průmyslového PC Vecow připojena pomocí převodníku Edgar RS232 na Ethernet. IP adresa pro připojení k~tomuto převodníku je nastavena při konfiguraci zařízení, a to na základě artiklového čísla kamery SAFETIS. Toto nastavení je obdobné, na základě čtyřmístného čísla, které je rozděleno fyzicky na dvě poloviny, přičemž k první polovině je přičteno 100. Tedy pro příklad, je-li artiklové číslo kamery WSO-PT-1019, bude IP adresa kamery 10.0.10.19 a převodníku 10.0.110.19. Detekce zda zařízení obsahuje řídicí jednotku s PT motorem je taktéž provedena na základě artiklového čísla kamery, a to konkrétně ověřením klíčového slova PT, respektive WSO-PT. Pokud je přítomnost těchto klíčů vyhodnocena jako pozitivní jsou pro danou kamery odemčeny a~zobrazeny po jejím vybrání obslužné grafické prvky, a taktéž dojde k automatickému pokusu o připojení TCP klienta na adresu danou artiklovým číslem kamery. 

Grafickými ovládacími prvky jsou především možnost aplikování konfigurace pomocí daného tlačítka v konfiguračním okně vybrané kamery a ovládací panel PT motoru v pravé části hlavního okna celé aplikace (viz obrázek č. \ref{fig:ptpanel}). V ovládacím panelu je zobrazena informace, zda je komunikace s řídicí jednotkou připojena, a taktéž název aktuálně vybraného zařízení, které je ovládáno. V další části se nachází ovládací prvky cyklovače presetů, a to nastavení času setrvání v pozici, zapnutí cyklování, zobrazení aktuálního času zbývajícího do přejezdu a ovládací prvky pro spuštění a zastavení cyklovače. V momentální verzi jsou ještě zakomentované prvky pro manuální vynucení přejezdu na předchozí nebo další pozici. V poslední části se nachází ovládací prvky pro přidání přednastavené pozice a nastavení jeho pozice a možnost změny názvu, dále seznam těchto pozic a manuální ovládání motoru.

\begin{figure} [h]
	\centering
	\includegraphics[width=0.3\linewidth]{fig/ptpanel.png}
	\caption{Panel pro ovládání PT motoru}
	\label{fig:ptpanel}
\end{figure}

Z implementačního pohledu je manuální ovládání motoru obsluhováno za pomocí odchycení dvou událostí, a to zmáčknutí a uvolnění daného tlačítka pro pohyb. Při stlačení je odeslán přes dané připojení příkaz ve formátu Pelco-D pro spuštění pohybu v daném směru. Po dobu stisku daného tlačítka se motor otáčí buď do nastaveného fyzického limitu, nebo do uvolnění, kdy je odeslán příkaz k zastavení. Prostřední tlačítko slouží pro vyvolání takzvané základní pozice, kterou lze po podržení tohoto prvku po dobu alespoň 2 sekund změnit na aktuální nastavenou pozici. Jednotlivé presety jsou vnitřně uloženy jako objekty typu "PresetViewModel", kde hlavním údajem, který se používá při komunikaci s řídicí jednotkou, je identifikační číslo daného presetu, které udává zároveň i pozici. Dále zde můžeme nalézt informace o názvu, signalizační barvě či instanci nastavené konfigurace dané pozici. Tyto objekty jsou poté přidávány do listu, který je dále obsluhován především pro cyklování a~je zobrazen v~již zmíněném seznamu. Nastavení konfigurace kamery pro pozici je provedeno v konfiguračním okně a při jeho provedení se přiřadí instance aktuální konfigurační třídy vybranému presetu. Ta je uchována a vyvolána při výběru, a také je poté uložena do souboru s nastavením pro možné načtení při restartu programu. Pro cyklování mezi pozicemi je vytvořen v aplikaci systémový časovač, který po vypršení nastavené doby cyklování odešle příkaz řídicí jednotce o změně pozice a pokud je nastavena konfigurace kamery, spustí nahrání tohoto nastavení. Jelikož není možnost z této řídicí jednotky získat informaci o natočení motoru či signalizaci, zda je motor stále ještě v pohybu, je po odeslání všech příkazů spuštěn další časovač, který má momentálně nastavenou fixní periodu 15 s. Ten slouží pro zamezení spuštění měření kamery během přejezdu, a tedy i zamezení falešných alarmů. Tato perioda byla zjištěna jako maximální doba přejezdu mezi krajními pozicemi motoru.