\chapter{Systémy SCADA}\label{chp:scada_intro}

Systémy SCADA (\texten{Supervisory Control And Data Acquisition}), inak nazývané
aj systémy merania a~regulácie, sú systémy určené na~dohľad nad~technologickými
celkami, ich ovládanie a~taktiež zbieranie dát o~ich fungovaní.
Tieto ciele zväčša takéto systémy dosahujú pomocou niekoľkých svojich súčastí
a~funkcionalít.

Dohľad nad~celkami a~ich ovládanie zabezpečujú rôzne grafické ovládacie panely.
Tieto často zobrazujú schému celého systému alebo jej časti, v~ktorej dokáže
operátor sledovať stav jednotlivých komponentov, prípadne im aj zadávať príkazy
alebo meniť ich hodnoty.
Okrem takéhoto aktívneho dohľadu býva súčasťou systémov SCADA aj pasívny dohľad
pomocou prednastavených reakcií na~udalosti, ktoré môžu nastať.
Príkladom takejto reakcie je napríklad odoslanie SMS poverenej osobe
po~prekročení nejakej kritickej hodnoty.

Nemenej dôležitou súčasťou systémov SCADA je zber dát o~fungovaní celého
technologického celku.
Tieto dáta môžu zbierať zo~samotných zariadení, ale aj z~malých senzorov
rozmiestnených v~celku.
Následne zozbierané dáta uchovávajú a~uchované hodnoty zobrazujú v~grafoch
a~tabuľkách, čím umožňujú operátorom lepší dohľad nad~tým, ako sa hodnoty menili
v~čase.
Takto zozbierané historické dáta sú taktiež dobrým podkladom pre~podrobnejšiu
analýzu, buď v~rámci samotných systémov SCADA, alebo aj mimo nich.


\chapter{Protokoly v~systémoch SCADA}\label{chp:scada_protocols}

V~systémoch SCADA sa na~zber dát, ale aj ich ovládanie využíva široké spektrum
protokolov.
V~tejto časti opisujem niektoré z~nich.

\section{Modbus}

Modbus je otvorený protokol určený na~komunikáciu zariadení na~báze
klient-server.
Dokáže komunikovať prostredníctvom niekoľkých prenosových médií a~protokolov.
Najpoužívanejšími sú TCP/IP (Modbus/TCP) a~sériová linka RS-485 (Modbus/RTU).

Základom dátového modelu protokolu sú štyri primárne tabuľky, pričom v~každej
dokáže adresovať až 65\,535 položiek.\;\cite[6]{modbus_specs}

\begin{itemize}
    \item Diskrétne vstupy (\texten{Discrete Inputs})
        -- jeden výstupný bit zariadenia dostupný iba na~čítanie
    \item Cievky (\texten{Coils})
        -- jeden vstupno/výstupný bit zariadenia, na~ktorý je možné príkazom
        zapisovať
    \item Vstupné registre (\texten{Input Registers})
        -- 16-bitové výstupné slovo zariadenia dostupné iba na čítanie
    \item Uchovávacie registre (\texten{Holding Registers})
        -- 16-bitové vstupno/výstupné slovo zariadenia, je možné ho aj zapisovať
\end{itemize}

Každá z~týchto tabuliek má v~protokole funkciu na~čítanie niekoľkých po~sebe
idúcich záznamov, prípadne aj funkciu na~ich zápis.
V~prípade diskrétnych vstupov a~cievok dokáže pracovať s~až 2\,000 záznamami
alebo až 123 záznamami v~prípade vstupných registrov a~uchovávacích
registrov.\;\cite[11 -- 31]{modbus_specs}

\section{BACnet}

BACnet (\texten{Building Automation and Control Network}) je ďalším otvoreným
protokolom hojne využívaným v~systémoch merania a~regulácie.
Protokol je určený na~komunikáciu a~výmenu informácií medzi rôznymi zariadeniami
a~systémami.
Samotný protokol dokáže fungovať nad~viacerými protokolmi nižších vrstiev,
napríklad nad~transportným protokolom UDP (BACnet/IP) alebo po~sériovej zbernici
(BACnet MS/TP).

Informácie si jednotlivé zariadenia v~sieti BACnet uchovávajú
v~štandardizovaných objektoch (\texten{Objects}) a~každý objekt má dané
vlastnosti (\texten{Properties}).
Niektoré vlastnosti objektu sú nemenné a~definované výrobcom, prípadne
pri~inštalácii zariadenia.
Tieto bližšie popisujú daný objekt, napríklad jeho meno a~typ.
Iné vlastnosti sú premenné a~udávajú aktuálny stav objektu, napríklad aktuálnu
hodnotu alebo chybový stav.\;\cite[1\,586 -- 1\,587]{bacnet}

Na~samotnú komunikáciu a~výmenu informácií definuje protokol služby
(\texten{Services}).
Tie sú rozdelené do~piatich kategórií: služby alarmov a udalostí, služby
prístupu k~súborom, služby na~správu objektov, služby na~správu zariadenia
a~služby virtuálneho terminálu.
Ďalej je možné definované služby rozdeliť na~potvrdzované (\texten{Confirmed})
a~nepotvrdzované (\texten{Unconfirmed}), podľa toho, či sa na~danú požiadavku
služby očakáva od~zariadenia BACnet odpoveď, alebo nie.\;\cite[1\,588 --
1\,589]{bacnet}

\section{SNMP}

SNMP (\texten{Simple Network Management Protocol}) je sieťový protokol na~správu
a~hlavne monitorovanie sieťových zariadení.
Táto správa nie je obmedzená len na~sieťové prepínače a~smerovače, ale dokáže
pracovať s~akýmikoľvek zariadeniami v~sieti, ktoré tento protokol podporujú.

Zariadenia sa dajú rozdeliť na~dve kategórie.
Stanica na~správu siete (\texten{Network Management Station}, ďalej len NMS) má
úlohu hlavného zariadenia, ktoré zbiera údaje od~iných zariadení systémom
požiadavka -- odpoveď a~taktiež čaká na~signály od~iných zariadení, že sa niečo
stalo, napríklad výpadok linky.
Týmito inými zariadeniami sú agenti (\texten{Agents}), teda samostatný softvér
bežiaci na~monitorovanom zariadení, alebo súčasť iného softvéru.
Príkladom takéhoto iného softvéru je webový server, ktorý naopak čaká
na~požiadavky a~odpovedá na~ne, prípadne vykoná požadovanú akciu.
Zároveň pri~neočakávaných udalostiach posiela signály príslušnej
NMS.\;\cite[3]{snmp_orly}

Každý agent má zoznam objektov a~ich vlastností, ktoré vie sprístupniť NMS.
Tieto objekty sú adresované hierarchicky pomocou identifikátoru objektu
(skrátene OID) a~pre~každého agenta sú definované pomocou štruktúry spravovaných
informácií (\texten{Structure of Management Information}, skrátene SMI).
Objekty samotné popisuje báza riadiacich informácií (\texten{Management
Information Base}, skrátene MIB), v~ktorej sa nachádzajú textové názvy a~popisy
jednotlivých objektov, ktoré môže agent implementovať.\;\cite[4]{snmp_orly}

\section{M-Bus}

M-Bus (\texten{Meter Bus}) je ďalším protokolom pracujúcim na~sériovej linke.
Podobne, ako iné sériové protokoly, pracuje aj M-Bus na~princípe
\texten{Master/Slave}, teda na~linke je jedno hlavné zariadenie, ktoré spravuje
viacero periférnych zariadení.
Primárnym určením tohto protokolu bolo vzdialené čítanie stavu meračov energií,
z~čoho vychádza aj jeho názov.\;\cite{mbus_specs}

Špecifikom protokolu M-Bus je, že umožňuje napájanie periférnych zariadení
priamo z~dátovej zbernice.
To je umožnené špeciálnym kódovaním bitov do~elektrických signálov.
Hlavné zariadenie signalizuje logickú jednotku nastavením zbernice na~napätie
36~V, naopak logickej nule zodpovedá zníženie napätia o~12~V.
Periférne zariadenia kódujú bity zmenou odoberaného prúdu.
Odber pod~1,5~mA znamená logickú jednotku a~tento prúd môže zariadenie využiť aj
na~samotné napájanie, logická nula je kódovaná zvýšením odberu
o~11~až~20~mA.\;\cite{mbus_specs}

\section{Ďalšie protokoly}

Okrem už popísaných protokolov sú v~systémoch SCADA využívané aj ďalšie
protokoly komunikujúce nad~sieťovými transportnými protokolmi, HTTP alebo
pomocou sériovej linky.
Často ide o~proprietárne protokoly, ale existujú ale aj protokoly s~otvorenými
štandardmi.
Príkladom protokolu využívajúceho HTTP na~prenos dát je \texten{InfluxDB Line
Protocol}\footnote{\url{https://docs.influxdata.com/influxdb/v1.8/write_protocols/line_protocol_tutorial/}}.
Nástroj Collectd\footnote{\url{https://collectd.org/}} zas využíva vlastný
binárny protokol komunikujúci nad~UDP.

\section{Problém paralelného prístupu}

Problémom protokolov komunikujúcich pomocou sériovej linky je, že neumožňujú
paralelnú komunikáciu, teda naraz môže s~jednou sériovou linkou komunikovať len
jedno hlavné zariadenie, ktoré je na~linku pripojené.
Taktiež v~prípade, že týmto hlavným zariadením je počítač s~operačným systémom,
ktorý umožňuje súbeh viacerých procesov, tak k~jednému sériovému portu umožní
naraz prístup len jednému z~nich.
Tento problém ale majú aj niektoré sieťové zariadenia, kedy počas otvoreného
spojenia všetky ostatné pokusy o~vytvorenie spojenia zamietnu.

To vytvára problém v~prípade, keď viacero systémov potrebuje komunikovať
s~cieľovou linkou naraz, pretože v~takomto prípade im pri neúspešnom pokuse
nezostáva nič iné, ako pokus opakovať, čo v~prípade veľkého množstva
komunikujúcich systémov môže viesť až k~ich~vyhladovaniu.


\chapter{Modely zberu dát v~systémoch SCADA}\label{chp:collection_models}

V~nasledujúcej kapitole priblížim používané prístupy k~zbieraniu dát.
Tie vieme rozdeliť do~dvoch kategórií podľa toho, kto je iniciátorom, teda
na~čí pokyn sa dáta prenášajú z~ich zdroja do~cieľa.

\section{\texten{Push} model}

Prvým je takzvaný \texten{push} model.
Pri~tomto prístupe je iniciátorom samotné zdrojové zariadenie.
Z~pohľadu systému zberu dát ním je napríklad senzor alebo iné monitorované
zariadenie.
To samo odošle dáta v~momente ich dostupnosti alebo po~nazbieraní určitého
množstva inému systému, napríklad systému na~zber dát alebo databázovému systému
predom dohodnutým kanálom.

Príkladom sú oznámenia o~zmene hodnoty protokolu BACnet alebo TRAP signály
protokolu SNMP.

Výhodou tohto modelu je menšie vyťaženie komunikačného kanálu a~adresáta dát
v~prípade, že posielaných dát nie je veľmi veľa.

\section{\texten{Pull} model}

Opačným modelom je \texten{pull} model.
V~tomto prípade centrálny prvok alebo prvky pravidelne dopytuje monitorovaných
zariadení na~aktuálnu hodnotu prípadne zmenu sledovanej premennej alebo či
nastala iná udalosť, ktorú je potrebné zaznamenať.

Tento prístup je jednoduchší z~pohľadu monitorovaného zariadenia, pretože tomu
stačí vedieť odpovedať na~požiadavky a~nemusí vedieť o~všetkých cieľoch
zozbieraných dát, prípadne ponúkať možnosť tieto ciele nakonfigurovať.
