\chapter{Rozšiřující požadavky na HW}
Tato práce navazuje na semestrální práci, jejímž cílem bylo na základě
nejčastějších poruch FVE vydefinovat požadavky na HW pro monitorovací
zařízení. V průběhu vývoje zařízení byla navrhnuta další rozšíření HW, 
která jsou popsány v následujících podkapitolách. Tyto změny se týkají
vyhodnocovací jednotky a silových obvodů.

\section{Oddělení měření a komunikace}
\label{chap:C2000}
Hlavním rozšířením požadavků na HW bylo rozšíření vyhodnocovací jednotky
(\ref{chap:STM32}). Ta měla být původně tvořena pouze mikrokontrolerem
STM32F415, který měl zprostředkovávat jak komunikaci, tak i samotné měření.
V novém návrhu bude tento mikrokontroler společně s IO SM2400 sloužit
pouze jako PLC modem a měření budou realizována pomocí mikrokontroleru
TMS320F28069 od Texas Instruments.
\newline
Tento čip je součástí řady mikrokontrolerů C2000 vhodných pro real-time
aplikace,~kterými je například zpětnovazební řízení nebo online zpracování
signálu. Klíčovými parametry tohoto mikrokontroleru jsou:
\begin{itemize}
  \item[-] Jádro TMS320C28x s FPU
  \item[-] Jádro CLA pro akceleraci real-time výpočtů
  \item[-] Pracovní frekvence 90MHz
  \item[-] 256 kB paměti typu Flash
  \item[-] 100 kB paměti typu RAM
  \item[-] 2 kB jednorázově programovatelné paměti
  \item[-] 12bitový A/D převodník s dvojitým vzorkováním
  \item[-] 3× DMA stream (kanál)
  \item[-] 3× běžný časovač
  \item[-] 8× časovač s podporou Pulse-Width modulation
  \item[-] 4× časovač s podporou High-Resolution capture
  \item[-] 2× rozhraní USART
  \item[-] 1× rozhraní I\textsuperscript{2}C
  \item[-] Podpora lazení jader C28x a CLA pomocí JTAG
\end{itemize}
\vspace{5pt}
Bližší informace lze pak dohledat v katalogovém listu \cite{TI_datasheet}
či manuálu \cite{TI_ref-manual}.
\vspace{10pt}
\newline
Důvodem oddělení měřící a komunikační části vyhodnocovací jednotky byl
požadavek na možné rozšíření pro online vyhodnocování proudového,
popřípadě napěťového obrazu ve frekvenční doméně. Zahoření oblouku
(\ref{chap:arcs_in_PVS}) by tedy bylo detekovatelné dříve, než je běžné
u komerčních řešení, které oblouky detekují až při nárůstu teploty
v kontaktech nebo jejich okolí \cite{solaredge}.

\section{Funkce Rapid-shutdown}
\label{chap:rapid-shutdown}
Druhé rozšíření se týká silových obvodů (\ref{chap:power_circuits}),
konkrétně odpojovačů. V původním návrhu mělo docházet při poruše
k~odpojení celého stringu. Nový návrh počítá s podporou funkce
Rapid-shutdown definované v standardu NEC \cite{NEC}. Zařízení
realizující tuto funkci musí zajistit:
\begin{itemize}
  \item[-] uvedení do stavu nízkého napětí do 30 sekund od poruchy
  \item[-] nízké napětí uvnitř stringu - hodnoty do 80 V
  \item[-] nízké napětí mimo string (bus) - hodnoty do 30 V
  \item[-] možnost dálkového odpojení
\end{itemize}
\vspace{10pt}
Navrhovanou možností realizace je použití zkratovacích relé pro jeden nebo
více sousedících panelů ve stringu. Na rozdíl od běžně dostupných řešení
jako jsou například odpojovače BENY BFS-21 \cite{BENY_datasheet} by toto
řešení nevnášelo přímo do stringu další kontakty. Relé by se připojovala
paralelně tak, jak je naznačeno na obrázku \ref{fig:rapid_shutdown}.
Každé zkratovací relé by muselo být dimenzováno na maximální proud stringu
a napětí odpovídající součtu napětí sousedících zazkratovaných panelů.
Pro příklad zkratování jednoho panelu by mělo být relé dimenzováno
na přibližně 10~A\textsubscript{DC} a 40~V\textsubscript{DC}.
\vspace{10pt}
\begin{figure}[h!]
  \centering
  \includegraphics{obrazky/rapid_shutdown}
  \caption{Použití zkratovacích relé ve funkci Rapid-shutdown}
  \label{fig:rapid_shutdown}
\end{figure}
\vspace{10pt}
\newline
Použití takovéhoto řešení by nemělo mít na panely negativní vliv,
protože zazkratování i při plném osvitu by nemělo způsobit takovou
výkonovou ztrátu, která by panel poškozovala (viz. bod maximálního proudu
VA~charakteristika na obrázku \ref{fig:IV_solar_cell}).
\newline
Zároveň by toto řešení mohlo snížit nároky na relé odpojující string od
busu (\ref{chap:power_circuits}), protože napětí celého stringu by při
zazkratování řádově snížilo napětí stringu nebo by se mohlo zazkratování
panelů využít i při vizuální inspekci stavu panelů
(\ref{chap:visual_inspection}).


\chapter{Implementace SW vybavení}
V následujících kapitolách je popsána implementace řídícího FW pro měřící
část realizovanou mikrokontrolerem TMS320F28069 a komunikační část
složenou z mikrokontroleru STM32F415 a IO SM2400.
\vspace{5pt}
\newline
Pro zachování jednotného stylu s ostatním SW vybavením a to primárně s
tím, které slouží k obsluze periferií mikrokontrolerů, ctí funkce
realizující jejich obsluhu styl POSIX. Důvodem je mimo vyšší přehlednost
také možnost zařazení těchto funkcí mezi drivery firmy ModemTec používané
pro práci nejen s mikrokontrolery ale i jinými platformami a zařízeními.
Obecný popis driverů, který odpovídá stylu POSIX v programovacím
jazyce~C, je součástí přílohy~\ref{appen:driver}.

\section{Mikrokontroler TMS320F28069}
Jak bylo již zmíměno ve stručném popisu mikrokontroleru (\ref{chap:C2000}),
TMS320F28069 je dvoujádrový mikrokontroler, respektive obsahuje jádro CLA
sloužící k akceleraci výpočtů v reálném čase. Ačkoliv mají obě jádra
mikrokontroleru sdílený paměťový prostor a mohou obsluhovat stejné
periferie, tak nemají stejnou instrukční sadu nebo shodné datové typy.
Nejdůležitější rozdíly mezi oběma jádry mikrokontroleru při jejich
programování v jazyce~C jsou popsány v tabulce \ref{tab:CLA_vs_C28x}.
\begin{table}[!h]
  \begin{tabular}{|m{0.5\textwidth}|m{0.15\textwidth}|m{0.25\textwidth}|}
    \cellcolor{gray} \color{white} \textbf{rozdíly} &
    \cellcolor{gray} \color{white} \textbf{jádro C28x} &
    \cellcolor{gray} \color{white} \textbf{jádro CLA} 
    \\ \hline
    \textbf{podpora standardních knihoven} & ano & ne
    \\ \hline
    \textbf{podpora dynamické alokace paměti} & ano & ne
    \\ \hline
    \textbf{zásobník} & vlastní & nahrazen částí RAM
    \\ \hline
    \textbf{inicializace globálních proměnných} & automatická & manuální
    \\ \hline
    \textbf{rekurze a ukazatele na funkce} & ano & ne
    \\ \hline
    \textbf{bitová šířka ukazatele} & 22bit & 16bit
    \\ \hline
    \textbf{bitová šířka datového typu \emph{int}} & 16bit & 32bit
    \\ \hline
    \textbf{bitová šířka datového typu \emph{float}} & 32bit & 32bit
    \\ \hline
  \end{tabular}
  \caption{Porovnání jader mikrokontroleru TMS320F28069
  \cite{TI_CLA-guide}}
  \label{tab:CLA_vs_C28x}
\end{table}
\newline
Pro mikrokontrolery řady C2000, kterým je i TMS320F28069, je
nejběžnějším způsobem programování použití vývojového prostředí Code
Composer Studio. Jedná se o vývojové prostředí vycházející z prostrědí
Eclipse rozšířené o nástroje pro programování a lazení mikrokontrolerů
od výrobce Texas Instruments. Toto prostředí používá vlastní
kompilátor, který zajišťuje správný překlad jak pro běžná jádra C28x,
tak i pro jádra CLA. Průběh kompilace je naznačen na obrázku
\ref{fig:C2000_compile}.
\newpage
\begin{figure}[h!]
  \centering
  \includegraphics{obrazky/C2000_compile}
  \caption{Překlad programu v prostředí Code Composer Studio
  \cite{TI_CLA-guide}}
  \label{fig:C2000_compile}
\end{figure}
\vspace{-10pt}
\noindent
Prostředí odlišuje zdrojové soubory pro CLA jádro na základě koncovky
\emph{.cla}, popřípadě pomocí příznaku pro překlad v nastavení projektu.
Při samotném překladu těchto zdrojových souborů je pak vyvolán speciální
překladač pro omezenou instrukční sadu jader CLA. Následně jsou oba
překlady do asembleru sloučeny a na základě linker skriptu namapovány
do paměti.
\vspace{10pt}
\newline
Druhým důležitým prvkem vývojového prostředí Code Composer Studio
je integrace vývojářské sady C2000Ware. Jedná se o balík obsahující 
dokumentaci, SW implementovaný v jazycích C a asembler a soubor
vzorových řešení pro mikrokontrolery z rodiny C2000. Na své nejnižší
úrovní definuje struktury pro přístup k registrům periferií a jádra
mikrokontroleru. Nad těmito strukturami poté implementuje knihovní
funkce pro práci s periferiemi. Dále C2000Ware obsahuje knihovní
funkce pro digitální zpracování signálu, digitální řízení, běžné
matematické funkce, komunikaci (USB, Ethernet, EtherCAT),
kryptografii a podporu operačního systému reálného času FreeRTOS.
\vspace{5pt}
\newline
Použitý mikrokontroler TMS320F28069 je z druhé generace čipů C2000,
pro které neexistují v rámci C2000Ware knihovní funkce pro obsluhu
periferií ale pouze struktury pro přístup k jejich registrům, které
jsou stručně popsané v příloze \ref{appen:c2000ware}. Tyto funkce
tedy bylo nutné vytvořit a jejich zdrojové kódy ve verzi aktuální
k datu odevzdání této práce jsou součástí elektronických příloh
(viz. seznam v příloze \ref{appen:el_list}).

\subsection{Program pro jádro CLA}
Jádro CLA bude sloužit pro zpracování dat z A/D převodníků, kterými
jsou souběžně navzorkované hodnoty proudu a napětí stringu a odpor,
respektive napětí na odporovém děliči s fotorezistorem pro výpočet
referenční hodnoty osvitu panelu.
\vspace{5pt}
\newline
Program pro CLA jádro se dělí do takzvaných tasků. Jedná se o rutiny,
které se spouštějí dle stanovené priority. Podobně jako rutiny
přerušení jsou tasky spouštěné na základě události, kterou může být
buď softwarové vynucení nebo signál od periferie. V případě
monitorovacího zařízení je spouštěcím signálem start A/D převodu.
Druhou podobností tasku a rutiny přerušení je implementace v podobě
funkce bez vstupních argumentů a bez návratové hodnoty. Pro účely
předávání argumentů a návratových hodnot slouží dvě fronty v předem
stanovená části paměti RAM. Fronta z jádra CLA pro výsledky a fronta
do jádra CLA pro argumenty. Proměnné argumentů a výsledků musí být
namapovány právě do těchto front. Ostatní proměnné jako například
konstanty a podobně musí být také namapovány a to do části RAM, ke
které má periferie CLA jádra přístup a je nutné je inicializovat
buďto pomocí hlavního jádra C28x, které musí mít povolený přístup
do paměti RAM CLA jádra nebo pro inicializaci vyhradit task
softwarově spouštěný v úvodu programu.

\subsubsection{Zpracování hodnot z A/D převodníku}
Při zpracování dat z A/D převodníku se v obou případech postupuje
podobně. Při spuštění tasků, které jsou popsány v tabulce
\ref{tab:CLA_tasks}, způsobené začátkem A/D převodu se nejdříve
posunou předchozí výsledky převodů ve frontě tak, že vzorek \emph{N}
je nahrazen vzorkem \emph{N-1}. Po posunutí všech vzorků ve frontě
a dokončení A/D převodu se vyčte 12bitový výsledek z příslušného
datového registru převodníku a následně je převeden na inženýrskou
veličinu dle vztahu:
\vspace{-2pt}
\begin{center}
  $sample = ((float)ADC_{12bit} \times scale) + offset$
\end{center}
Takto získaný vzorek odpovídá nejnovější měřené inženýrské hodnotě.
V případě CLA-tasku~1 je inženýrskou hodnotou přímo napětí a proud
stringu a tak se po převodu vloží na první pozice výstupní fronty.
V případě CLA-tasku~2 se jedná o nepřímé měření osvitu a je nutné
změřený odpor fotorezistoru na referenční hodnotu osvitu panelu
převést. V obou případech ale fronta slouží k průměrování výsledků.
\vspace{5pt}
\newline
Na základě srovnávacího měření provedené kolegou Ing.~Janem Petrovem
z VŠB–TU Ostrava byla stanovena převodní charakteristika odporu na osvit,
která je vynesena v grafu na obrázku \ref{fig:irradiance_sensor}.
Při měření byl použit fotorezistor GL5528 \cite{GL5528_datasheet},
referenční měřící jednotka osvitu Voltcraft PL-110SM
\cite{PL-110SM_datasheet} a jako zdroj světla halogenová žárovka.
Pro zlepšení přesnosti referenční hodnoty osvitu bude vhodné
tato měření opakovat při osvitu slunečním světlem o intenzitě 0 až
1000~W/m\textsuperscript{2}.
\begin{table}[!h]
  \begin{tabular}{|m{0.3\textwidth}|m{0.6\textwidth}|}
    \multicolumn{2}{c|}{\cellcolor{gray} \color{white}
      \textbf{CLA-task 1 (MVECT1)}}
    \\ \hline
    \textbf{spuštění} &
      start A/D převodu - SOC kanál 1
    \\ \hline
    \textbf{funkce} &
      \emph{void adcCla\_VAProcessTask(void);}
    \\ \hline
    \textbf{argumenty} &
      \emph{float adcCla\_VAInput[2][N];}
    \\ \hline
    \textbf{konstatny a \newline parametry} &
      \emph{float adcCla\_currentScale;} \newline
      \emph{float adcCla\_currentOffset;} \newline
      \emph{float adcCla\_voltageScale;} \newline
      \emph{float adcCla\_voltageOffset;} \newline
      \emph{float adcCla\_arcFilterNumCoefs[8][M];} \newline
      \emph{float adcCla\_arcFilterDenCoefs[8][M];}
    \\ \hline
      \textbf{návratové hodnoty} &
      \emph{float adcCla\_VAResult[2];} \newline
      \emph{float adcCla\_arcFilterOutputs[M];}
    \\ \hline
  \end{tabular}
  \begin{tabular}{|m{0.3\textwidth}|m{0.6\textwidth}|}
    \multicolumn{2}{c|}{\cellcolor{gray} \color{white}
      \textbf{CLA-task 2 (MVECT2)}}
    \\ \hline
    \textbf{spuštění} &
      start A/D převodu - SOC kanál 2
    \\ \hline
    \textbf{funkce} &
      \emph{void adcCla\_irrProcessTask(void)};
    \\ \hline
    \textbf{argumenty} &
      \emph{float adcCla\_irrInput[N]};
    \\ \hline
    \textbf{konstatny a \newline parametry} &
      \emph{float adcCla\_irrScale;} \newline
      \emph{float adcCla\_irrOffset;} \newline
      \emph{float adcCla\_irrExp;} \newline
      \emph{float adcCla\_irrMult;}
    \\ \hline
    \textbf{návratové hodnoty} &
      \emph{float adcCla\_irrResult;}
    \\ \hline
  \end{tabular}
  \caption{Seznam použitých CLA tasků}
  \label{tab:CLA_tasks}
\end{table}
\begin{figure}[h!]
  \centering
  \includegraphics{obrazky/irradiance_sensor}
  \caption{Závislost hodnoty osvitu na odporu fotorezistoru
  \cite{modemtec}}
  \label{fig:irradiance_sensor}
\end{figure}

\subsubsection{Detekce zahoření oblouku}
Jak bylo zmíněno v kapitole \ref{chap:signal_processing}, tak jedním ze
způsobů detekce elektrických oblouků je analýza proudu, popřípadě napětí
stringu ve frekvenční doméně.
\vspace{5pt}
\newline
Pro analýzu bylo data opět naměřená kolegou Janem Petrovem. Ukázka
toho jak oblouk na FVE může vypadat a jak se projeví v časové
a frekvenční doméně je možné vidět na obrázku~\ref{fig:arc_spectrum}.
Výsledky dalších měření jsou součástí přílohy~\ref{appen:arc_detection}.
\begin{figure}[h!]
  \centering
  \includegraphics{obrazky/arc_spectrum}
  \caption{Měření pro detekci zahoření oblouku \cite{modemtec}}
  \label{fig:arc_spectrum}
\end{figure}
\newline
Měření byla prováděna na malé FVE s šesti solárními panely a střídačem
Huawei SUN2000 \cite{SUN2000_datasheet}. Pro vytvoření oblouků byl použit
přípravek s posuvným jiskřištěm a pro měření proudu byl použit osciloskop
DSOX3034A \cite{DSOX3034A_datasheet} s proudovou sondou.
\vspace{10pt}
\newline
Z měření je patrné že oblouk, jak při proražení elektrické pevnosti, tak
i při samotném hoření, generuje šum v oblasti do 150kHz s maximem okolo
40kHz. Zároveň je ale potřeba počítat s vyššími harmonickými, které mohou
být ve FVE generované střídači (viz. příloha \ref{appen:arc_detection})
nebo naindukované ve stringu z okolí. Z tohoto důvodu nestačí pouze
detekovat přítomnost vyšších harmonických, ale je potřeba zjistit, zda
je jejich zdrojem zahoření oblouku. Hlavním rozdílem mezi spektrem
oblouku a vnějším rušením je šířka spektra. Vnější zdroje generují
rušení na určitých frekvencích, kdy například pro střídače platí, že to
jsou násobky spínací frekvence střídače. Oproti tomu šum způsobený
obloukem je generován v celém intervalu do 150~kHz. K~odlišení zahoření
oblouku od vnějšího rušení je tedy potřeba sledovat celý interval spektra
nebo spektrum rozdělit do více intervalů a následně tyto intervaly
vyhodnocovat odděleně. Na základě kombinace výsledků v jednotlivých
částech odlišit oblouk s vlivem ve všech částech od vnějšího rušení
působící jen v některých.
\newpage
\noindent
Pro samotnou implementaci detekce zahoření oblouku byly navrhnuty dva
algoritmy popsané diagramy na obrázcích \ref{fig:arc_fourier} a
\ref{fig:arc_filters}.
\vspace{5pt}
\newline
První vychází z Fourierovy transformace proudového obrazu. Po naměření
a převodu \emph{N} vzorků CLA jádro signalizuje naplnění fronty jádru
C28x, které vyvolá funkci pro výpočet Fourierovy transformace. Spektrum
je následně naprahováno v intervalu do 150kHz. Z naprahovaného spektra
je pak odečtena nejdelší šířka spektra rušení, která určí, zda se jedná
o širokospektrální šum způsobený zahořením oblouku nebo o úzkospektrální
vnější rušení.
\begin{figure}[h!]
  \centering
  \includegraphics{obrazky/arc_fourier}
  \caption{Popis detekce oblouku využívající Fourierovu transformaci}
  \label{fig:arc_fourier}
\end{figure}
\newline
Druhá implementace vychází z použití digitálních filtrů. Každý filtr
realizuje pásmovou propust pro určitou část frekvencí mezi 0 až 150kHz.
Pokud amplituda některého filtrovaného signálu překročí určitý práh,
je tato část spektra považována za zarušenou. Následně se z kombinace
jednotlivých částí spektra určí celková šířka spektra rušení a stejně
jako v případě detekce vycházející z Fourierovy transformace je za
zdroj vyšších harmonických prohlášen buď oblouk či vnější rušení.
\vspace{10pt}
\newline
Nevýhodou prvního algoritmu je zpracovávání po dávkách. Tento přístup
by nebyl výhodný pro zpracovávání na zvoleném mikrokontroleru
TMS320F28069, který je uzpůsoben pro zpracovávání signálu v reálném
čase. Proto byl pro prototyp monitorovacího zařízení zvolen algoritmus
využívající banku pásmových propustí. Tento algoritmus zároveň provádí
většinu výpočtů na jádře CLA a lze jej implementovat tak, že výstup
filtrů lze z většiny určit ještě před získání nejnovějšího vzorku A/D
převodu, tzn. hned při spuštění tasku. To zrychlí odezvu a zároveň
nebude zbytečně zatěžovat jádro C28x spravující komunikace směrem k
G3-PLC síti.
\newpage
\begin{figure}[h!]
  \centering
  \includegraphics{obrazky/arc_filters}
  \caption{Popis detekce oblouku využívající banku pásmových propustí}
  \label{fig:arc_filters}
\end{figure}
\noindent
Pro návrh banky pásmových propustí bylo použito prostředí MATLAB, ve
kterém byli navrženy IIR filtry typu Butterworth osmého řádu. Jejich
amplitudová odezva pro signál vzorkovaný s frekvencí 500~kHz je
vykreslena v grafu \ref{fig:filter_response}. Průběhy po použití
filtrů na reálné měření je pak možné vidět v druhé části
přílohy~\ref{appen:arc_detection}.
\begin{figure}[h!]
  \centering
  \includegraphics{obrazky/filter_response}
  \caption{Amplitudová odezva pásmových propustí}
  \label{fig:filter_response}
\end{figure}

\subsection{Program pro jádro C28x}
Jádro C28x bude sloužit jako koncentrátor dat jednotlivých měření
a zároveň jako server, který je bude předávat nadřazenému systému.
\vspace{-10pt}
\newline
\begin{wrapfigure}{r}{0.55\textwidth}
  \centering
  \vspace{-15pt}
  \includegraphics{obrazky/C28x_inout}
  \caption{Vstupy a výstupy jádra C28x}
  \label{fig:C28x_inout}
\end{wrapfigure}
Jednotlivé vstupy a výstupy obsluhované jádrem C28x jsou naznačeny
na obrázku \ref{fig:C28x_inout}. Jedná se o vstupy A/D převodníku,
digitální vstup snímače rozdílového proudu, připojení
I\textsuperscript{2}C snímačů teploty, digitální výstupy pro spínání
odpojovačů a zkratovacích relé a komunikační rozhraní UART pro spojení
s STM32F415 respektive G3-PLC modemem a možnost výpisu chybových a
informačních zpráv.
\vspace{-20pt}
\newline

\subsubsection{Obsluha periferií}
Monitorovací zařízení využívá následující periferie mikrokontroleru
TMS320F28069, pro které byly implementované knihovní funkce v POSIX
stylu (viz. příloha~\ref{appen:driver}):
\begin{enumerate}
  \item GPIO pro obsluhu digitálních vstupů a výstupů
  \item Watchdog časovač pro možnost obnovení při zacyklení běhu
  \item I\textsuperscript{2}C (master) pro vyčítání dat ze snímačů
        teploty 
  \item UART pro komunikaci s STM32F415 (G3-PLC modemem) a možnosti
        výpisů pro lazení programu
  \item ePWM ve funkci časovače pro přesné vzorkování A/D převodu
        a měření procesorového času
  \item A/D převodník ve spojení s CLA jádrem pro měření napětí
        stringu, proudu stringem a referenčního osvitu
\end{enumerate}
\vspace{5pt}
Jednotlivé knihovní funkce pro obsluhu periferií pak dohromady tvoří
abstrakční úroveň označovanou jako HAL. Díky ní je možné jednotnými
funkcemi obsluhovat periferie bez znalosti konkrétní realizace dané
periferie uvnitř mikrokontroleru. Zároveň jsou tyto funkce kompatibilní
s drivery firmy ModemTec a lze je tak mezi ně zařadit. Veškeré
periferie jsou pak skrze tyto drivery dostupné jako struktury
\emph{devio\_t}. Jedinou nutnou operací při tvorbě nového programu
je pak správná instanciace struktur periferií v hlavičkovém souboru
\emph{conf\_driver.h} a následně pouze používání obecných funkcí
popsaných v příloze~\ref{appen:driver}.
\begin{enumerate}
  \item \textbf{GPIO}
  \newline
  Driver pro obsluhu vstupně výstupních linek GPIO, při inicializaci
  vypne pull-up rezistory a nastaví všechny své piny na vstupní. Toto
  nastavení lze pak změnit nebo vyčíst pomocí funkce \emph{io\_ioctl}
  a příslušných příkazů. Další příkazy umožňují nastavit logickou úroveň
  výstupních pinů nebo ji překlopit a funkcí \emph{io\_read} vyčíst
  logickou úroveň z datového registru vstupně/výstupní linky.
  \vspace{5pt}
  \item \textbf{Watchdog}
  \newline
  Struktura periferie watchdog časovače je instanciována s požadovým
  dělícím poměrem hodinového signálu, jehož hodnota, popřípadě nejbližší
  vyšší možná hodnota, se nastaví v rámci inicializace a nelze měnit.
  Následně je možné pomocí funkce \emph{io\_ioctl} watchdog spustit,
  zastavit a vynulování čítače, aby nedošlo k resetu mikrokontroleru.
  \vspace{5pt}
  \item \textbf{I\textsuperscript{2}C}
  \newline
  Při instanciaci I\textsuperscript{2}C driveru jsou trvale zvoleny
  piny, které budou použity pro datový a hodinový vstup-výstup do 
  periferie a zda bude periferie inicializována jako master či slave
  zařízení\footnote{Aktuální verze driveru podporuje jen inicializaci
  jako I\textsuperscript{2}C master}. Pomocí příkazů funkce
  \emph{io\_ioctl} lze nastavit rychlost komunikace, způsob adresování
  (7/10bitové) a případně adresu slave zařízení, které bude použita,
  pokud je periferie  inicializováno jako master. Samotná komunikace po
  sběrnici je možná buďto pomocí \emph{io\_read} respektive
  \emph{io\_write}, které budou blokovacím (pool) způsobem dotazovat,
  respektive zapisovat na zvolenou slave adresu anebo pomocí příkazu
  funkce \emph{io\_ioctl} na zaslání povelu doplněného o data či zaslání
  povelu a čekání na odpověď.
  \vspace{5pt}
  \item \textbf{UART}
  \newline
  Při instanciaci se také volí piny, konkrétně piny pro příjem (Rx) a
  odesílání (Tx). Při inicializaci jsou tyto piny inicializovány jako
  piny pro periferii UART, dále jsou nastaveny výchozí parametry
  komunikace na rychlost 9600 Baudů, 8 datových bitů, bez parity a
  1 stopbit a je povoleno přerušení při přijmutí zprávy. V přerušovací
  rutině se přijmutá data vkládají do vnitřního bufferu UART driveru,
  který musí být driveru poskytnutý v rámci jeho instanciace. Funkce
  \emph{io\_ioctl} a příslušné příkazy pak umožňují vyčítat a měnit
  parametry komunikace, funkce \emph{io\_read} neblokujícím způsobem
  vyčítá data z vnitřního bufferu driveru a funkce \emph{io\_write}
  blokujícím způsobem pošle poskytnutá data.
  \vspace{5pt}
  \item \textbf{ePWM (TIM)}
  \newline
  Drivery firmy ModemTec definují driver pro časovač, popřípadě časovač
  s možností input-capture a output-compare. Oproti tomu použitý
  mikrokontroler TMS320F28069 tuto funkcionalitu rozděluje mezi periferie
  'ePWM module' pro generování výstupních a synchronizačních impulsů a
  'eCAP module' pro měření délky vstupních impulsů.
  \vspace{5pt}
  \newline
  Z tohoto důvodu je při instanciaci nutné dle požadavků na driver
  časovače vložit adresu registrů ePWM modulu, eCAP modulu nebo
  obě\footnote{Aktuální verze driveru podporuje jen inicializaci ePWM}.
  Následně se příslušné moduly inicializují do režimu běžného časovače.
  Pomocí funkce \emph{io\_ioctl} je pak možné přepnout režim časovače
  na generování výstupních pulsů nebo na měření délky vstupních. V obou
  případech je také možné nastavit callback volaný z příslušné rutiny
  obsluhy přerušení. Dále je pomocí funkce \emph{io\_ioctl} možné 
  nastavit požadovanou frekvenci časovače, nastavit a vyčíst hodnotu
  čítače časovače, nastavit střídu pro výstupní signál nebo ji vyčíst
  při měření vstupního signálu a spouštět čítání. 
  \vspace{5pt}
  \item \textbf{ADC \& CLA}
  \newline
  Posledním driverem je driver obsluhující A/D převodník, jehož
  výsledky jsou odbavovány pomocí CLA jádra. V rámci driverů firmy
  ModemTec je možné definovat více druhů implementací driveru pro
  A/D převodník, jako je například ADC s využitím DMA přenosu výsledků,
  ADC využívající spouštění časovačem pro přesné vzorkování anebo 
  právě implementace speciální pro mikrokontrolery řady C2000
  využívající CLA jádro pro zpracování dat z převodu.
  \newline
  Pro instanciaci tohoto driveru je kromě adres registrů ADC a CLA
  jádra také nutné vložit odkaz na driver časovače, který bude sloužit
  ke spouštění vzorkování, adresu funkce implementovanou pro CLA task
  a adresu kam bude CLA jádro ukládat výsledky společně s jejich délkou.
  Při inicializace se ve funkci \emph{io\_init} nejprve zkopíruje kód 
  CLA tasků do příslušné části paměti RAM. Poté se na základě zvoleného
  CLA tasku nastaví adresa funkce, která jej obsluhuje a povolí se
  přerušení od dokončení CLA tasku. Následuje inicializace A/D
  převodníku a analogových vstupních linek. Při zavolání funkce
  \emph{io\_open}, respektive \emph{io\_close}, se kromě spuštění
  respektive zastavení A/D převodníku také spouští a zastavuje
  vzorkovací časovač. Funkce \emph{io\_ioctl} umožňuje pomocí
  multiplexoru A/D převodníku zvolit vstupní analogovou linku, dále
  nastavit zda bude docházet k vzorkování jednoho kanálu anebo
  souběžnému vzorkování dvou párových kanálů, zvolit vzorkovací
  frekvenci a nastavit callback funkci zavolanou při chybě nebo
  dokončení převodu. Samotný převod je spouštěn funkcí \emph{io\_read},
  která na začátku povolí spouštění A/D převodů vzorkovacím časovačem
  na požadovaný počet provedených převodů. Následně spouštění opět
  přeruší a zkopíruje výsledek z paměti CLA jádra do poskytnutého
  bufferu. 
\end{enumerate}
 
\subsubsection{Modbus server}
Pro komunikaci hodnot naměřených mikrokontrolerem TMS320F28069
byl zvolen ve vestavných systémech a průmyslu populární protokol
Modbus.
\vspace{5pt}
\newline
Jedná se o protokol definující pouze aplikační vrstvu. Komunikace
probíhá na principu klient/server a to i mezi zařízeními připojenými
k různým typům sítí. Nejčastěji se Modbus provozuje buďto jako sériový
komunikační protokol používající RS485 nebo RS232 pod označením
Modbus~RTU nebo využívající internetovou komunikaci TCP/IP na
portu~502 pod označením Modbus~TCP do jehož paketu je vkládána
vlastní Modbus zpráva, jejíž struktura je naznačena na obrázku
\ref{fig:modbus_principle}.
\begin{figure}[h!]
  \centering
  \includegraphics{obrazky/modbus_principle}
  \caption{Struktura zpráv v rámci Modbusu \cite{Modbus_specification}}
  \label{fig:modbus_principle}
\end{figure}
\vspace{-10pt}
\newline
Datový model Modbusu se skládá ze čtyř tabulek. Každá tabulka obsahuje
maximálně 65536 datových záznamů, které se ukládají do registrů o šířce
16 bitů. Těmito tabulkami, respektive skupinami registrů, jsou:
\vspace{10pt}
\newline
\begin{tabular}{rl}
  \textbf{Discrete inputs:} & bitově orientované registry určené
  pouze pro čtení \\
  \textbf{Coils:} & bitově orientované registry určené pro čtení
  i zápis \\
  \textbf{Input registers:} & registry obsahující 16bitové slova
  určená pouze pro čtení \\
  \textbf{Holding registers:} & registry obsahující 16bitová slova
  určená pro čtení a zápis \\
\end{tabular} 
\vspace{15pt}
\newline
Pro každou tabulku pak existují odpovídající funkční kódy, které
říkají, zda chceme číst či zapisovat do jednoho nebo více registrů
dané skupiny, popřípadě zda chceme vyčítat některý ze stavových
registrů Modbus zařízení.
\newpage
\noindent
Pro realizaci Modbus serveru byla použita volně dostupná knihovna
nanoMODBUS \cite{nanoModbus_repo}. Tato knihovna implementuje Modbus
server i Modbus klient, a to jak pro Modbus~RTU tak i pro Modbus~TCP.
\vspace{10pt}
\newline
Při práci s touto knihovnou je nutné implementovat timeout
mechanismus, v přídadě jádra C28x realizovaný pomocí ePWM časovače,
a na platformě závislé funkce pro čtení a zápis:
\vspace{5pt}
\newline
\begin{tabular}{l}
  \emph{int32\_t read(uint8\_t* buf, uint16\_t count,
  int32\_t byte\_timeout\_ms);} \\
  \emph{int32\_t write(const uint8\_t* buf, uint16\_t count,
  int32\_t byte\_timeout\_ms);}
\end{tabular}
\vspace{5pt}
\newline
Dále je možné pro každou zprávu, respektive její funkční kód,
registrovat callback funkci, pomocí které lze namapovat resistry
z Modbus tabulek na konkrétní proměnné v zařízení nebo realizovat
další funkcionalitu spojenou s přijmutím zprávy. Zároveň je možné
nepoužívané funkce funkčních kódů vyřadit z překladu pomocí
speciálních definic uvedených v popisu repozitáře knihovny. 
Pro jádro C28x bylo zároveň nutné knihovnu mírně upravit tak, aby
místo osmibitových datových typů používala šestnáctibitové, které
jsou pro toto jádro nejmenší podporované.
\vspace{10pt}
\newline
Výsledný Modbus RTU server monitorovacího zařízení spravovaný
mikrokontrolerem obsahuje registry popsané v tabulce
\ref{tab:nanoModbus_registers}. Při implementaci Modbus klienta bude
nutné dbát na to, že vyčítaná data obsahují proměnné i s 32 a
64~bitovými čísly, která jsou rozděleny mezi více registrů. V rámci
modbus registru jsou hodnoty ve formátu big-endian (MSb je v paměti
uložen jako první). Registry popisující širší proměnné jsou za sebou
ale řazeny ve smyslu little-endian (LSb jako první). Toto řazení a
sktruktura odpovědi s 32~bitovým číslem s plovoucí desetinnou čárkou
jsou naznačeny na obrázku \ref{fig:modbus_endianity}.
\begin{figure}[!h]
  \centering
  \includegraphics{obrazky/modbus_endianity}
  \caption{Endianita implementované Modbus komunikace}
  \label{fig:modbus_endianity}
\end{figure}
\begin{table}[!h]
  \begin{tabular}{|m{0.15\textwidth}|m{0.17\textwidth}|m{0.58\textwidth}|}
    \cellcolor{gray} \color{white} \textbf{Modbus registry} &
    \cellcolor{gray} \color{white} \textbf{Datový typ proměnné} &
    \cellcolor{gray} \color{white} \textbf{Popis} 
    \\ \hline
    1 & bitfield (uint16\_t) & dva nejvyšší bity ovládají odpojovače
    na kladné a záporné větvi stringu \newline
    ['1' = string odpojen, '0' = string připojen]
    \\ \hline
    2 & bitfield (uint16\_t) & ovládání až šestnácti zkratovacích relé
    \newline
    ['1' = relé sepnuto, '0' = relé rozepnuto]
    \\ \hline
    10001 & bitfield (uint16\_t) & nejvyšší bit indikuje stav snímače
    rozdílového proudu ['1' = proud detekován, '0' = bez detekce]
    \\ \hline
    10002 & bitfield (uint16\_t) &
    příznakové bity stavu monitorovacího zařízení (viz. tabulka
    \ref{tab:nanoModbus_states})
    \\ \hline
    30001-30002 & float (32bit) & Hodnota napětí na stringu [V]
    \\ \hline
    30003-30004 & float (32bit) & Hodnota proudu stringem [A]
    \\ \hline
    30005-30006 & float (32bit) & Hodnota výkonu stringu [W]
    \\ \hline
    30007-30008 & float (32bit) & Hodnota referenčního osvitu
    [W/m\textsuperscript{2}]
    \\ \hline
    30009-30010 & float (32bit) & Teplota panelu [$^\circ$C]
    \\ \hline
    30011-30012 & float (32bit) & Teplota okolí [$^\circ$C]
    \\ \hline
    40001-40004 & uint64\_t & Aktuální (procesorový) čas [s]
    \\ \hline
    40005-40006 & float (32bit) & Hodnota energie stringu [J]
    \\ \hline
    40007 & uint16\_t & Čítač detekovaných oblouků [-]
    \\ \hline
  \end{tabular}
  \caption{Registrová mapa Modbus RTU serveru}
  \label{tab:nanoModbus_registers}
\end{table}
\begin{table}[!h]
  \centering
  \begin{tabular}{|m{0.1\textwidth}|m{0.5\textwidth}|}
  \cellcolor{gray} \color{white} \textbf{Pozice} &
  \cellcolor{gray} \color{white} \textbf{Popis příznaku}
  \\ \hline
  \textbf{bit 15} & Chyba při měření proudu stringem
  \\ \hline
  \textbf{bit 14} & Chyba při měření napětí stringu
  \\ \hline
  \textbf{bit 13} & Chyba při určování výkonu stringu
  \\ \hline
  \textbf{bit 12} & Chyba při určování energie stringu
  \\ \hline
  \textbf{bit 11} & Chyba při měření rozdílového proudu  
  \\ \hline
  \textbf{bit 10} & Chyba při detekci zahoření oblouku
  \\ \hline
  \textbf{bit 9} & Chyba při měření referenčního osvitu
  \\ \hline
  \textbf{bit 8} & Chyba při měření teploty panelu
  \\ \hline
  \textbf{bit 7} & Chyba při měření teploty okolí
  \\ \hline  
  \textbf{bit 1} & Indikace běhu zařízení (bit se překlápí)
  \\ \hline
  \textbf{bit 0} & Indikace dokončení inicializace zařízení
  \\ \hline
  \end{tabular}
  \caption{Popis příznakových bitů monitorovacího zařízení}
  \label{tab:nanoModbus_states}
\end{table}
\newpage

\section{Mikrokontroler STM32F415}
Tento mikrokontroler společně s IO SM2400 bude pro monitorovací
zařízení vytvářet modem, který mu umožní připojení se k G3-PLC síti.
Zároveň platí, že v G3-PLC síti musí vždy existovat zařízení zvané
koordinátor (\ref{chap:communication}), a tak bude muset jeden z
modemů zajišťovat tuto funkci v rámci sítě uvnitř FVE.

\subsection{G3-PLC}
\label{chap:STM32F415_G3-PLC}
Firma ModemTec má ve svém portfoliu již existující modemy pro
komunikaci v rámci G3-PLC sítě, které používají pro správu fyzické
a linkové vrstvy IO SM2400. Z tohoto důvodu není potřeba vytvářet
driver obsluhující tento komunikační IO, ale pro práci je možné
využít již existující knihovny.
\vspace{5pt}
\newline
Pro správnou inicializaci IO SM2400 je nutné po připojení napájení
nahrát firmware buďto skrze připojené host zařízení, kterým je v
případě monitorovacího zařízení mikrokontroler STM32F415, popřípadě
z externí paměti připojené k SM2400 skrze sběrnici SPI. Volbou
firmwaru pro DSP uvnitř SM2400 vybereme způsob zpracovávání na
fyzické vrstvě. Pro správu linkové vrstvy je v SM2400 32bit RISC
procesor, který na základě vybraného firmwaru podporuje sítě typu
G3-PLC, PRIME a další. Zároveň také umožňuje CSMA/CA, adaptační IP
vrstvu, šifrování v souladu s AES128 nebo AES256 a mechanismy pro
sebelokolizaci v rámci sítě. \cite{SM2400}
\vspace{5pt}
\newline
Z pohledu ModemTec driverů lze IO SM2400 inicializovat jak skrze
host zařízení, tak skrze externí paměť. Této funkcionality je
docíleno rozdělením driveru na část pro nahrávání firmwaru
\emph{sm2400loader} a pro komunikaci \emph{sm2400g3}, popřípadě
\emph{sm2400g3phy}. Pokud bychom chtěli, aby se firmware nahrál
z host zařízení je potřeba instanciovat \emph{sm2400loader}, skrze
který je pak možné i za běhu firmware měnit, protože je nahráván
přímo do paměti RAM IO SM2400. Pokud není tento driver instanciován
počítá se s nahráním firmwaru z externí paměti. Pro komunikaci pak
existují dvě varianty driveru. Varianta \emph{sm2400g3}, která v
sobě obsahuje celý G3 stack a tak s host zařízením komunikuje skrze
běžné IPv6 pakety. Varianta \emph{sm2400g3phy} pak umožňuje přijímání
a posílání surových G3 rámců na MAC úrovní. V tomto případě se v
podstatě jedná o rámce dle IEEE 802.15.4 s rozšířenou G3 hlavičkou.
\cite{modemtec}
\begin{figure}[h!]
  \centering
  \includegraphics{obrazky/sm2400_packets}
  \caption{Rozdíl mezi pakety v ModemTec driverech pro SM2400}
  \label{fig:sm2400_packets}
\end{figure}

\subsection{LwIP}
Pro zpracovávání příchozích IPv6 paketů byla zvolena volně dostupná
knihovna lwIP, která je široce rozšířená při síťové komunikaci ve
vestavných zařízeních kvůli možnosti provozu na širokém množství
platforem a to i bez OS.
\vspace{-5pt}
\subsubsection{Popis knihovny}
\vspace{-5pt}
LwIP je implementace protokolu TCP/IP optimalizovaná na nízkou
spotřebu paměti RAM. Celková paměťová náročnost plnohodnotného
TCP protokolu je přibližně 40~kB kódu a typicky desítky~kB v paměti
RAM pro vstupně/výstupní buffery a pomocné proměnné. \cite{lwIP_docu}
\newline
V rámci lwIP jsou implementovány funkce pro podporu protokolů od
linkové po aplikační vrstvu OSI modelu. Jejich výpis je součástí
tabulky \ref{tab:lwIP_features}.
\begin{table}[!h]
  \begin{tabular}{|m{0.3\textwidth}|m{0.6\textwidth}|}
  \hline
  \cellcolor{gray} \color{white} \textbf{Linková vrstva} &
  – PPP (Point-to-Point Protocol)
  \newline
  – ARP (Address Resolution Protocol)
  \\ \hline
  \cellcolor{gray} \color{white} \textbf{Síťová vrstva} &
  – IP (Internet Protocol) s podporou IPv4 i IPv6
  \newline
  – ICMP (Internet Control Message Protocol)
  \newline
  – IGMP (Internet Group Management Protocol)
  \\ \hline
  \cellcolor{gray} \color{white} \textbf{Transportní vrstva} &
  – UDP (User Datagram Protocol)
  \newline
  – TCP (Transmission Control Protocol)
  \\ \hline
  \cellcolor{gray} \color{white} \textbf{Aplikační vrstva} &
  – DNS (Domain names resolver)
  \newline
  – SNMP (Simple Network Management Protocol)
  \newline
  – DHCP (Dynamic Host Configuration Protocol)
  \\ \hline
  \end{tabular}
  \caption{Podpora knihovny lwIP \cite{lwIP_docu}}
  \label{tab:lwIP_features}
\end{table}
\newline
Pro přístup k funkcím z tabulky \ref{tab:lwIP_features} lwIP definuje
tříúrovňové API:
\begin{description}
  \item[\textbf{Raw (native)}:] 
  Nízkoúrovňové API bez zabezpečení vláken, založené na callback funkcích
  pro maximální výkon a minimální paměťovou náročnost. Provádění programu
  je řízeno pomocí callback funkcí, které jsou volány jádrem lwIP, když
  dojde k činnost související s danou akcí. Rozhraní je tedy řízeno přímo
  událostmi bez použití OS. \cite{lwIP_docu} 
  \item[\textbf{Sequential-style}:]
  Rozhraní API s větší režií založené na blokovacích funkcích. Model
  provádění tedy vychází z blokovacího otevřít-číst-zapsat-zavřít.
  Tyto funkce lze ale volat z libovolného vlákna (kromě vlákna TCPIP).
  Stále ale platí, že TCP/IP je ze své podstaty založen na událostech,
  jeho kód a aplikační program se tedy musí nacházet v různých kontextech
  provádění (vláknech), což již vyžaduje přítomnost OS. \cite{lwIP_docu} 
  \item[\textbf{Socket}:]
  Vysokoúrovňové API ve stylu POSIX socketů s největší režií a zabezpečením
  pro vlákna. Toto rozhraní je kompatibilní s existujícími aplikacemi a
  mělo by tak poskytovat veškeré funkce potřebné pro spuštění aplikací
  využívající socket API na jiných platformách (např.: Unix, Windows a
  další). Rozhraní je vystavěno nad Sequential-style API a tak také
  vyžaduje přítomnost OS. \cite{lwIP_docu}
\end{description}
\subsubsection{Použítí knihovny}
\vspace{-5pt}
Při implementaci SW s využitím knihovny lwIP se stejně jako v případě
obsluhy G3-PLC (\ref{chap:STM32F415_G3-PLC}) respektive IO SM2400 stavělo
na již existujícím SW pro PLC modemy, který pro práci s datovými zprávami
používá také lwIP. 
\vspace{10pt}
\newline
Pro příjem a posílání IPv6 paketů byla využita implementace driveru
\emph{sm2400g3}. Ta IPv6 pakety přeloží tak, aby vyhovovaly protokolu
6LoWPAN a předá je IO SM2400, který je pošle skrze PLC síť, nebo naopak
pokud jde o příjem IPv6 paketu. Jelikož fyzickou, linkovou a síťovou
vrstvu OSI modelu pokrývá IO SM2400 a příslušný driver, tak bude lwIP
knihovna použita pouze pro obsluhu na vrstvě transportní.
\vspace{5pt}
\newline
Průběh zpracovávání komunikace přicházející z G3-PLC sítě je popsán
diagramem na obrázku \ref{fig:lwIP_workflow}. Jak bylo již řečeno, tak
driver IO SM2400 zajišťuje příjem a odesílání IPv6 paketů. Příchozí a
odchozí pakety jsou poté předávány protokolu transportní vrstvy UDP.
Předávání  probíhá ve skrze callback funkce registrované v rámci volaní
funkce \emph{udp\_bind}, která je součástí lwIP Raw API. Kolem UDP
funkcí Raw API pro vyčítání a zápis jsou pak implementovány wrapper
funkce, které z respektive do TCP/IP stacku existujícího v rámci lwIP
vyčítají respektive zapisují data aplikace monitorovacího zařízení. 
\begin{figure}[!h]
  \centering
  \includegraphics{obrazky/lwIP_workflow}
  \caption{Průběh zpracovávání komunikace G3-PLC sítě}
  \label{fig:lwIP_workflow}
\end{figure}


\chapter{Prototyp monitorovacího zařízení}
Pro otestování funkčnosti monitorovacího zařízení byla sestavena
jednoduchá PLC síť se dvěma modemy MT49S a vývojovým kitem
LaunchXL-F28069M.
\vspace{10pt}
\newline
Modem MT49S je produkt firmy ModemTec, který umožňuje komunikaci
a diagnostiku sítí G3-PLC. Modem pracuje buď v transparentním režimu,
kdy je veškerá komunikace považována za datovou a modem pouze
přijatou zprávu ze vstupního sériového portu zabalí do IPv6 paketu
a pošle skrze PLC síť, nebo v příkazovém režimu, kdy jsou do IPv6
paketu zapouzdřeny příkazy ovládající speciální funkce modemu
definované firemním protokolem. Jádro tohoto modemu také vychází z
kombinace mikrokontroleru STM32F415 a IO SM2400 a bylo na něm tedy
možné otestovat zjednodušenou verzi SW vybavení pro správu komunikace
monitorovacího zařízení, která po G3-PLC síti v IPv6 paketech posílá
Modbus RTU zprávy pro měřící kartu realizovanou mikrokontrolerem
TMS320F28069.
\vspace{5pt}
\newline 
Vývojový kit LaunchXL-F28069M je kit osazený mikrokontrolerem
TMS320F28069 a programátorem Texas Instruments XDS100v2, který
umožňuje připojení kitu pomocí USB a následné nahrání program
do paměti RAM i Flash nebo jeho lazení.

\section{Výsledky testování}
Na prototypu byla otestována funkčnost Modbus serveru a aktualizování
sledovaných veličin (viz. obrázek \ref{fig:modbus_response}). Při testu
Modbus serveru byl kit LaunchXL-F28069M připojen pomocí ladícího UART
a sériové rozhraní přímo k PC, který realizoval funkci Modbus klienta
v režimu RTU. Při testu se potvrdilo, že Modbus server je schopen
odpovídat na dotazy klienta a odesílat aktuální hodnoty měření.
\vspace{5pt}
\newline
Druhou testovanou funkcí byla komunikace skrze G3-PLC síť (viz. obrázek
\ref{fig:g3-plc_response}), tedy test firmwaru pro mikrokontroler
STM32F415 na PLC modemu MT49S. Výstupem tohoto testu byla úspěšná odpověď
na dotaz Modbus klienta i po PLC síti. Aktuální verze firmwaru, ale plně
nevyužívá možnosti UDP vrstvy lwIP. Pro Modbus je totiž v rámci UDP
vyhrazený port 502. V následujících verzích se tedy uvažuje úprava
firmwaru tak, aby nebalil Modbus RTU zprávy do obecných IPv6 paketů,
ale aby byl využit port 502. Neuvažuje se ale použití Modbusu v režimu
TCP. Důvodem jsou nekompatibilní timeout mechanismy mezi spojovanou TCP
a G3-PLC komunikací, která už sama o sobě stejně tak jako TCP
zajišťuje potvrzování komunikace.
\begin{figure}[!h]
  \centering
  \includegraphics[width=0.9\textwidth]{obrazky/modbus_response}
  \caption{Test odezvy Modbus serveru}
  \label{fig:modbus_response}
\end{figure}
\begin{figure}[!h]
  \centering
  \includegraphics[width=0.9\textwidth]{obrazky/g3-plc_response}
  \caption{Test komunikace po G3-PLC síti}
  \label{fig:g3-plc_response}
\end{figure}

\newpage
\section{Plánovaná topologie}
Při reálném nasazení monitorovacího zařízení se oproti testovacímu
prototypu počítá s hvězdicovou topologií sítě naznačenou na obrázku
\ref{fig:MT-SD11_topology}. Každé monitorovací zařízení bude skrze
PLC síť spojeno s koordinátorem, kterým může být například malý linuxový
počítač. Z tohoto počítače pak bude možné sledovat stav v celé FVE
popřípadě může tento počítač sloužit jako gateway a posílat data skrze
jinou síť do vyššího dohledového systému. Z místa koncentrátoru bude
také možné odstavit celou FVE a vyhovět tak požadavkům Rapid-shutdown
(\ref{chap:rapid-shutdown}) na centrální možnost odpojení.
\begin{figure}[h!]
  \centering
  \includegraphics{obrazky/MT-SD11_topology}
  \caption{Plánovaná topologie pro monitorovací zařízení
  v rámci FVE \cite{modemtec}}
  \label{fig:MT-SD11_topology}
\end{figure}