• No results found

Vývoj softwaru pro samostatnou jednotku dávkovače hmot

N/A
N/A
Protected

Academic year: 2022

Share "Vývoj softwaru pro samostatnou jednotku dávkovače hmot"

Copied!
47
0
0

Loading.... (view fulltext now)

Full text

(1)

Vývoj softwaru pro samostatnou jednotku dávkovače hmot

Bakalářská práce

Studijní program: B2646 – Informační technologie Studijní obor: 1802R007 – Informační technologie Autor práce: Matěj Kraušner

Vedoucí práce: Ing. Roman Špánek Ph.D.

(2)

Software development for standalone unit

Bachelor thesis

Study programme: B2646 – Information technology Study branch: 1802R007 – Information technology

Author: Matěj Kraušner

Supervisor: Ing. Roman Špánek Ph.D.

(3)

Zadání bakalářské práce

Vývoj softwaru pro samostatnou jednotku dávkovače hmot

Jméno a příjmení: Matěj Kraušner Osobní číslo: M16000038

Studijní program: B2646 Informační technologie Studijní obor: Informační technologie

Zadávající katedra: Ústav mechatroniky a technické informatiky Akademický rok: 2018/2019

Zásady pro vypracování:

1. Seznamte se systémy sudových čerpadel a s komunikačními protokoly pro přenos dat mezi IFC jednotkou a OS Windows.

2. Navrhněte a naprogramujte software, který umožní nastavení a výčet dat IFC jednotky. K přenosu dat použijte vhodný komunikační protokol.

3. Ověřte funkčnost navrženého softwaru na reálném hardwaru.

4. Popište možnosti rozšíření funkčnosti softwaru pro zajištění regulace a tuningu teplotních zařízení.

(4)

Rozsah grafických prací: dle potřeby dokumentace Rozsah pracovní zprávy: 30–40 stran

Forma zpracování práce: tištěná/elektronická

Seznam odborné literatury:

[1] AXELSON, J.Complete edition: The Developer´s Guide. Lakeview Research; Fifth Edition, Fifth edition edition (March 1, 2015) ISBN-13: 978-1931448284.

[2] GAMMA, E., HELM, R.,Design Patterns: Elements of Reusable Object-Oriented Software. Prentice Hall;

Auflage – ISBN-10: 0201633612, ISBN-13: 978-0201633610.

[3] MARTIN C.,R., Clean Architecture: A Craftsman’s Guide to Software Structure and Design (Robert C.

Martin Series). Prentice Hall; 1 edition (September 20, 2017).

Vedoucí práce: Ing. Roman Špánek, Ph.D.

Ústav mechatroniky a technické informatiky Datum zadání práce: 10. října 2018

Předpokládaný termín odevzdání: 30. dubna 2019

L. S.

prof. Ing. Zdeněk Plíva, Ph.D.

děkan

doc. Ing. Milan Kolář, CSc.

vedoucí ústavu

(5)

Prohlášení

Byl jsem seznámen s tím, že na mou bakalářskou práci se plně vztahuje zákon č. 121/2000 Sb., o právu autorském, zejména § 60 – školní dílo.

Beru na vědomí, že Technická univerzita v Liberci (TUL) nezasahu- je do mých autorských práv užitím mé bakalářské práce pro vnitřní potřebu TUL.

Užiji-li bakalářskou práci nebo poskytnu-li licenci k jejímu využi- tí, jsem si vědom povinnosti informovat o této skutečnosti TUL;

v tomto případě má TUL právo ode mne požadovat úhradu nákla- dů, které vynaložila na vytvoření díla, až do jejich skutečné výše.

Bakalářskou práci jsem vypracoval samostatně s použitím uvedené literatury a na základě konzultací s vedoucím mé bakalářské práce a konzultantem.

Současně čestně prohlašuji, že tištěná verze práce se shoduje s elek- tronickou verzí, vloženou do IS STAG.

Datum:

Podpis:

(6)

Abstrakt

Cílem této bakalářské práce je analyzovat systémy sudových čer- padel a komunikační protokoly pro přenos dat mezi IFC jednotkou a Windows. Navrhnout software ve zvoleném jazyce pro nastave- ní, výčet dat IFC jednotky a tento program realizovat. Pro tento software zvolit vhodný komunikační protokol. Vytvořený software otestovat na reálném systému a popsat možnosti rozšíření funkč- nosti pro zajištění regulace a tuningu teplotních zařízení. Pro práci byl zvolen programovací jazyk C# a komunikace byla zadavate- lem určena na USB s firmou vyvinutým protokolem. Dříve zmíněné a zadané podmínky byly splněny a výsledkem této práce je reálný software plnící požadovanou funkci.

Klíčová slova: regulace, USB komunikace, výčet dat, nastavení dat, komunikace s hardware, COM komunikace

Abstract

The goal of this bachelor thesis is to analyse systems of barrel pumps. Analyse communication protocols and analyse data transfer between IFC unit and Windows. Design software which is able to read data of IFC standalone unit and create this software. Choose appropriate communication protocol for this software. Test created software using real hardware and describe possibility of extension like temperature settings. Software was realized using C# program- ming language.USB was chosen as communication interface. Used communication protocol was designed by ATN Hölzel Gmbh com- pany. Previously described specifications were met and the outcome of this thesis is fully functional software.

Keywords: data reading, regulation, USB communication, data settings, hardware communication, COM communication, data rea- ding

(7)

Poděkování

Rád bych poděkoval všem, kteří přispěli ke vzniku tohoto díla, a to především vedoucímu mé bakalářské práce panu Ing. Romanovi Špánkovi Ph.D., společnosti ATN Hölzel Gmbh za kladný a moti- vující přístup po celou dobu práce, a také své rodině i své přítelkyni za podporu.

(8)

Obsah

Seznam zkratek . . . 11

1 Úvod 12 2 Programovací jazyky a použité technologie 13 2.1 Vývojové prostředí . . . 13

2.1.1 Dostupná rozšíření . . . 13

2.2 Programovací jazyky a použité technologie . . . 13

2.2.1 Jazyk C a C++. . . 13

2.2.2 Jazyk C# . . . 14

2.2.3 Java . . . 14

2.2.4 Datové typy v C# . . . 15

2.2.5 Resource Manager a RESX soubory . . . 17

2.2.6 Časovače . . . 17

3 IFC standalone box a systémy sudových čerpadel 19 4 Regulace a komunikace mezi zařízeními 21 4.1 Regulace. . . 21

4.1.1 Regulace se zpětnou vazbou . . . 21

4.1.2 Regulace bez zpětné vazby. . . 21

4.2 Komunikace mezi zařízeními . . . 22

4.2.1 OSI model. . . 22

4.2.2 Ethernet. . . 23

4.2.3 Bezdrátová komunikace . . . 23

4.2.4 USB a komunikace . . . 24

4.2.5 Komunikační protokoly . . . 25

4.2.6 Cyklický redundantní součet. . . 26

5 Návrh a realizace řešení 27 5.1 Požadavky zadavtele . . . 27

5.2 Návrh řešení. . . 27

5.3 Vlastní aplikace . . . 28

5.3.1 Datové struktury . . . 28

5.3.2 Knihovna funkcí . . . 31

5.3.3 Řídící vrstva . . . 33

5.3.4 Grafické rozhraní . . . 36

(9)

5.3.5 Funkce a metody grafického rozhraní . . . 38 5.4 Návrh grafického zpracování, možnosti rozšíření aplikace a testování . 40 5.4.1 Návrh grafického zpracování . . . 40 5.4.2 Testování aplikace . . . 40 5.4.3 Možnosti rozšíření aplikace . . . 41

6 Závěr 43

Literatura 44

(10)

Seznam obrázků

3.1 Lepící stanice . . . 20

5.1 Algoritmus CRC . . . 33

5.2 Hlavní okno aplikace . . . 36

5.3 Nastavení jazyka . . . 37

5.4 Nastavení COM . . . 38

5.5 Příklad RESX souboru, DE verze . . . 39

5.6 Návrh grafiky aplikace . . . 41

(11)

Seznam tabulek

3.1 Složení lepící stanice . . . 20

4.1 Protokoly a vrstvy . . . 26

5.1 Problémové znaky . . . 31

5.2 Struktura rámců . . . 35

5.3 Datové rámce . . . 35

(12)

Seznam zkratek

TUL Technická univerzita v Liberci

FM Fakulta mechatroniky, informatiky a mezioborových studií Technické univerzity v Liberci

CRC Cyklický redundantní součet USB Universální sériová sběrnice GUI Grafické rozhraní

ID Identifikátor

PLC Programovatelný logický automat DNS Domain name service

DHCP Dynamic host configuration protocol HTTP Hyper text transfer protocol

HTTPS Secured Hyper text transfer protocol SSH Secured Shell

SMTP Simple mail transfer protocol

(13)

1 Úvod

Hlavním motivem pro zpracování bakalářské práce na zadané téma nesoucí název Vývoj softwaru pro samostatnou jednotku dávkovače hmot byla snaha o zdokonalení autorových schopností návrhu software, čemuž se do budoucna autor této bakalářské práce hodlá také věnovat. Velkou motivací v průběhu zpracování zadané práce byla vidina dosažení reálně používaného a fungujícho programu.

Cílem práce je nejprve se seznámit s fungováním systémů sudových čerpadel říze- ných samostatnou jednotkou a jejím firmwarem. Dalším bodem této práce je nastí- nění problematiky regulace v technice, konkrétně regulace se zpětnou vazbou a bez zpětné vazby, poté seznámení se s možnostmi komunikace mezi zařízeními ať fyzic- kou, či bezdrátovou cestou. V praktické části bakalářské práce bude cílem navrhnout a realizovat výše zmíněný software.

Pro výsledný program bude nutné vybrat vhodný programovací jazyk z čehož plyne seznámení se s možnostmi současných programovacích jazyků a technologií.

Dalším úkolem práce je navrhnout odpovídající grafické rozhraní poskytující dosta- tečné možnosti pro zobrazení potřebných dat. Vzhled programu by měl odpovídat předem zadaným kritériím německé firmy ATN Hölzel Gmbh, a to konkrétně kom- binaci barev zelená, šedá a bílá, které jsou typické pro výše zmíněnou společnost.

Výsledkem práce by měl být reálný software schopný komunikovat se standalone IFC jednotkou vyrobenou firmou ATN Hölzel GmbH. Komunikace mezi software a samotným zařízením bude probíhat pomocí USB rozhraní. Mimo funkcí zmíněných v zadání, jako vyčítání dat a základní nastavování dat, by měl software být schopný exportovat hodnoty a taktéž musí obsahovat několik základních jazykových mutací - anglickou, českou a německou. Firmou byly požadovány pouze dvě mutace (anglická a německá). Z vlastní iniciativy jsem se rozhodl přidat i českou verzi.

(14)

2 Programovací jazyky a použité technolo- gie

2.1 Vývojové prostředí

Microsoft Visual Studio je vývojové prostředí uvedené na trh firmou Microsoft, které může být použito k vývoji aplikací s grafickým rozhraním, webových stránek a apli- kací nebo konzolových aplikací. Nejnovější verze nese označení Microsoft Visual Stu- dio 2017. Vývojové prostředí obsahující editor kódu s možností refaktorování a pod- porou IntelliSense, obsahuje taktéž integrovaný debugger. Je možné s ním pracovat na úrovních kódu i samotného běhu aplikace. Ostatní integrované nástroje podporují design formulářů Windows, databázových schémat nebo webových aplikací.[3]

2.1.1 Dostupná rozšíření

Mezi základní podporované jazyky patří Visual Basic.NET, C, C++ a C#. Další jazyky včetně kompilátorů a všech nezbytných částí lze přidat pomocí vestavěného updateru. Mezi jazyky, které je možné přidat patří například Ruby, Python nebo Oxygene. V novějších verzích programu jsou dostupné i nástroje pro vývoj mobilních aplikací a taktéž emulátora a debuggery pro tyto jazyky. Taktéž je dostupná mutace tohoto vývojového prostředí pro systém macOS.[3]

2.2 Programovací jazyky a použité technologie

2.2.1 Jazyk C a C++

Jazyk C je postaven na původní syntaxi jazyka B a byl vyvinut pro potřeby Unixu.

Jedná se nízkoúrovňový, kompilovaný a minimalistický programovací jazyk. Je nej- častěji používaným jazykem pro psaní systémů, systémových knihoven, překladačů nebo interpreterů vyšších jazyků. Jedná se o nízkoúrovňový programovací jazyk, kte- rý má velmi blízko k assembleru. Což je jeho obrovská síla. Z toho plyne také velká složitost tohoto jazyka. Vychází z něho velká většina moderních programovacích ja- zyků, jako například Java, PHP nebo C#. Jazyk C dokáže pracovat přímo s pamětí a nástroji procesoru. Proto je hojně využíván pro firmware různých zařízení řízených

(15)

mikroprocesorem. Jeho další výhodou je obrovská rychlost zpracování srovnatelná s assemblerem. Před použitím zdrojového kódu v C je nutné ho přeložit například za použití GCC překladače. Jazyk C ovšem neumožňuje vytvářet objekty a pracovat s nimi. To umožňuje nadstavba pod názvem C++. Tento jazyk přejímá velkou část vlastností jazyka C a navíc umožňuje vytváření a používání objektů.[4][5][7]

2.2.2 Jazyk C#

C# je vysokoúrovňový objektově orientovaný programovací jazyk, který vznikl ja- ko produkt firmy Microsoft ve spolupráci s platformou .NET Framework v roce 2002. Byl schválen standardizačními komisemi ECMA a ISO (standarty ECMA-334 a ISO/IEC 23270). Jazyk je založen na kombinaci jazyků C++ a Java, syntaxe se čerpá z jazyka C a je tedy jeho nepřímým potomkem. Jazyk má mnoho růz- ných využití, dá se použít k vývoji webových aplikací, databázových aplikací nebo k formulářovým aplikacím pro operační systém Windows, či pro vývoj mobilních aplikací.[24][25]

C# je definován, jako jednoduchý, moderní a mnohoúčelový programovací jazyk poskytující podporu pro principy softwarového inženýrství. Tím je myšleno, že jazyk sám si udržuje kontrolu hranic polí, obsahuje automatický ”garbage collector”, což znamená automatické uvolňování paměti po zaniklých proměnných. V tomto jazy- ce se dají vyvíjet aplikace pro sofistikované operační systémy, stejně tak software pro použití v prostředí s omezenými možnostmi. Jazyk by měl nakládat efektiv- ně s procesorovým časem a pamětí, v tomto ohledu se ale nemůže měřit s nižšími programovacími jazyky, jako například C nebo Assembler.[24][25]

2.2.3 Java

Java je nejpoužívanějším programovacím jazykem na světě. Programy vyvinuté v tomto programovacím jazyce jsou velmi snadno přenositelné, proto se využívají u aplikací, které musí fungovat na široké škále zařízení (Desktopové počítače, mobil- ní zařízení, vestavěné platformy nebo čipové karty). Java byla vyvinuta společností Sun Microsystems v roce 1995, za jejího otce je považován James Gosling.[6]

Jedná se o objektově orientovaný jazyk. Před každým spuštěním kódu je nutná jeho kompilace, neboli přeložení do bytecode. Syntaxe tohoto jazyka je ovlivněna jazyky C, C++ a C#. Velmi hojně se využívá pro client-server aplikace a webové aplikace. Celý jazyk je licencovaný jako GNU General Public Licence. Nejnovější verzí jazyka je Java SE 12 vydaná v březnu 2019. Po vydání této verze nebude již dále podporována Java 9.[6]

(16)

Java má několik základních vlastností. Je jednoduchá a objektově orientovaná, což znamená, že kromě osmi základních datových typů se ostatní tváří jako objek- ty. Celková syntaxe je velmi podobná jazyku C a C++, Java je ovšem o mnoho jednodušší. Je to distribuovaný programovací jazyk, což znamená, že zdrojový kód se překládá do bytecode, který není závislý na architektuře počítače a je spoušťěn pomocí interpreteru (například Java Virtual Machine) jehož výsledek je strojový kód pro procesor. V novějších interpretacích Java se kód před prvním spuštěním dynamicky kompiluje do strojového kódu pro dané zařízení. V ARM zařízeních se spouští bitový kód Java programu.[6]

2.2.4 Datové typy v C#

Jazyk C jako takový bere v úvahu dvě velké kategorie datových typů. Prvním typem jsou datové typy hodnotové a druhým typem jsou typy referenční. K hodnotovým datovým typů lze přistupovat přímo, což je největší rozdíl oproti referenčním dato- vým typům.[1]

První sada hodnotových datových typů se nazývá celočíselné datové typy. Sem patří sbyte, byte, short, ushort, int, uint, long a také ulong. Nejmenším typem je byte, který má veliksot 8 bitů a je možné v něm uchovávat číselné hodnoty od 0 až 255. Jeho modifikací je datový typ sbyte, který má stejnou velikost 8 bitů, ale je v něm možné uchovávat jiné hodnoty a to v rozsahu od -128 až 127. Do tohoto datového typu je možné zahrnout pouze 28 hodnot, což znamená, že jedna hodnota musí být vyhrazena i pro 0, proto interval není symetrický. [1]

Mezi hodnotové datové typy patří také short jehož velikost je 16 bitů, takže ob- sáhne interval -32 768 až 32 767, zde je opět vidět nesymetrie intervalu, která je způsobena zahrnutím nuly. Dále je zde ushort, který je neznaménkovou obdobou typu short, má tedy i shodnout velikost 16 bitů a lze do něj umístit čísla v intervalu 0 až 65 535, interval je daný velikostí datového typu 216. Typ short je v jazyce C#

označován jako Int16 a jeho mutace jako UInt16.[1]

Následuje datový typ int, neboli integer. Tento datový typ je nejčastěji používa- ným datovým typem pro celočíselné hodnoty. Jeho rozsah stačí pro většinu operací v programování, lze do něj uložit čísla v rozmezí hodnot -2 147 483 648 až 2 147 483 647. Jeho neznaménková verze má rozsah 0 až 4 294 967 295. Šířka těchto datových typů je 32 bitů, tím pádem poskytují až 232 různých hodnot. C# může tyto typy volat pomocí názvů Int32 a UInt32.[1]

Mezi celočíselnými datovými typy je nejrozsáhleší typ long a jeho mutace ulong.

Tyto struktury poskytují prostor až pro 264unikátních hodnot. To znamená extrémní rozsahy -9 223 372 036 854 775 808 až 9 223 372 036 854 775 807 respektive 0 až 18 446 744 073 709 551 615. Tyto struktury nesou v C# označení Int64 a UInt64.[1]

(17)

V pokročilém programování, kde je třeba hledět i na využitou paměť, jak při běhu programu, tak pro ukládání dat je nutné důkladně zvážit použité datové typy pro konkrétní data. Například, pokud hodláme ukládat věk osoby zvolíme typ byte nikoliv integer, který je čtyřikrát větší. Když bude bráno v úvahu ukládání dat o deseti milionech osob při použití byte nároky na úložiště jsou přibližně 9,5 MB a při použití integer 38,1 MB.[1]

Desetinná čísla jsou taktéž součástí hodnotových datových typů. Mají pouze dva zástupce. Prvním z nich je typ float, který má rozsah +-1.5∗ 10−45 až +-3.4∗ 1038. Float je v paměti reprezentován 32 bity a je ukládán jako ”single”, což znamená, že je jeden bit určen pro znaménko, 8 bitů pro exponent a 23 bitů reprezentuje mantisu.

[1]

Druhým zástupcem je přesnější typ double s rozsahem +-5∗10−324až +-1.7∗10308. O mnoho větší rozsah je dán veliksotí datového typu, která je 64 bitů. Ani jeden z desetinných typů není úplně přesný. Nepřesnosti jsou způsobeny ukládáním čísel, jako mocnin 2. Přesnost typu float je sedm cifer a přesnost double je 15 až 16 cifer. Odychlky bývají zanedbatelné ovšem v některých programech mohou způsobit problémy. Proto není vhodné tyto datové typy používat například v bankovních aplikacích. Pro tyto účely se hodí typ decimal popsaný níže.[1]

Nejpřesnějším hodnotovým typem uchovávající desetinná čísla je decimal. Jeho přesnost je 28 až 29 cifer. Rozsah uložených hodnot je +-1∗ 10−28 až +-7.9∗ 1028. Ukládání dat neřeší pomocí mocnin, ale ukládá hodnotu jako text. Pro matematické operace je však nevhodný a nahrazuje se typy float a double.[1]

Dále je zde typ char, který ukládá data o jednom znaku z ASCII tabulky. Jeho rozsah je 216 nebo 0 až 65 535. V ASCII tabulce jsou uloženy i speciální hodnoty pro operační systémy, například znak s hodnotou 0x02 značí začátek textu. Ná- sleduje poslední celočíselný datový typ boolean. Tato struktura reprezentuje pouze dvě hodnoty - true a false, přesto se ukládá na 8 bitů. Tento datový typ je většinou výsledkem podmínky.[1][2]

Jediným refernčním typem je string. Jedná se o složitější datovou strukturu slo- ženou z proměnných typu char. Tento typ němá nijak omezenou délku a pracuje se s ním pomocí různých operací určených přímo pro tento typ. Jako příklad, je zde uvedeno spojování proměnných typu string, je zde možnost spojit dvě proměnné omocí jednoduchého operátoru ”+”. Při malém počtu opakování se tato možnost jeví stejně rychlá jako správnější metoda objektu string String.Concat(string1, string2).

Ovšem při větším počtu operací, například 10 000 a více už je rozdíl opravdu zna- telný a metoda Concat() je extrémně rychlejší.[1][2]

(18)

2.2.5 Resource Manager a RESX soubory

Resource manager je třída jazyku C#, která umožňuje změnu jazykové mutace pro- gramu bez nutnosti aplikaci restartovat. Tato třída pracuje se soubory typu RESX.

Resource manager je nutné deklarovat ve všech částech programu, kde jej hodláme využívat.[8]

Resource soubory jsou zjednodušeně řečeno, databázové soubory, kde v poli s pří- slušným ID nalezneme slovo nebo frázi v daném jazyce. RESX jsou vlastně speciálně formátované XML soubory. Musí obsahovat hlavičku ve které je uvedeno scháma jméno/hodnota. Ruční vytváření těchto souborů je velmi náchylné na chyby, proto je výhodnější použít pro vytvoření i úpravu příslušný editor.[8]

2.2.6 Časovače

Časovač je název součástky v počítači, která umožňuje měřit časové úseky s ex- trémní přesností. Každý počítač jich může mít více. Často jsou časovače realizovány jako čítače u kterých je nastavena hodnota, která se postupně snižuje až k nule.

Když čítač/časovač dosáhne nulové hodnoty spustí rutinu přerušení. Pokud časo- vač měří zadaný časový úsek, může procesor zpracovávat jiné úlohy a v důsledku toho nedochází tak k zablokování procesoru jednou úlohou a zároveň dochází ke zvýšení výkonu. Existuje i speciální čekání, které pomocí instrukce vymezí výkon procesoru pouze pro jednu úlohu. Časovač může pracovat buď v periodickém nebo jednorázovém režimu. V periodickém režimu je rutina přerušení vykonávána pokaž- dé po uplynutí nastaveného času. V režimu jednorázovém je rutina vykonána pouze jednou. Časovače se dělí na tři základní odvětví - mechanické, elektromechanické a digitální, speciální kategorií jsou časovače softwarové.[9]

Mechanické časovače jsou nejjednodušší používané časovače. Fungují za použití hodinového strojku s pružinkou a kotvou. V levnější verzi těchto zařízení se používá aerodynamická brzda.[9]

Existují dva druhy elektromechanických časovačů - s elektromotorem a s bimeta- lovým páskem. Bimetalový pásek v časovači je tvořen ze dvou různých kovů s roz- dílnou tepelnou roztažností. Tento pásek je zahříván elektrickým proudem, po do- statečném zahřátí dojde k ohnutí a rozepnutí kontaktů čímž pásek začně chladnout.

Po vychladnutí se kontakty opět spojí a pásek je znovu ohříván a proces se opaku- je. Tento způsob je hojně využíván například v automobilech, nebo u elektrických jističů. Časovače s elektromotorem využívají střídavého proudu k uvedení vnitřního ozubeného kola do pohybu a tím pádem uvede do pohybu i vnitřní kotvu. Na kotvu jsou zapojeny elektrické kontakty, kterými je řízen proud vstupující do časovače.

Pro navrácení elektromotoru do původní pozice se používá takzvaná třecí spojka.

Tento typ časovačů se používá v domácích spotřebičích, jako například pračka nebo sušička.[9]

(19)

Nejpřesnějším typem časovače je digitální. Obsahuje elektronické hodiny fungu- jící pomocí krystalu o určité frekvenci v kombinaci s integrovaným obvodem. Tyto časovače jsou dnes nejčastěji implementovány v jednočipových počítačích pomocí software nebo pomocí programovatelných obvodů, které využívají booleovu alger- bru. U takovýchto časovačů vyžadujeme extrémně přesné měření času a pokročilé funkce, jako například nastavování spínaných intervalů nebo opakování pouze v ur- čité dny a časy. Vyrábější se, jak ve formě čipů do zařízení, tak například ve formě zásuvkového adaptéru[9]

V jazyce C je možné časovač neboli ”timer” používat po zahrnutí knihovny Sys- tem.Timers, nebo System.threading.Timer. Po vytvoření instance třídy Timer je nutné nastavit několik parametrů - čas běhu časovače, režim a kód, který se má vykonat po uplynutí časovače. Čas běhu se nastavuje pomocí přiřazení celočíselné hodnoty v milisekundách do proměnné timer.Interval. Část programu, která se má vykonat po uplynutí časového úseku se definuje přidáním jména metody do atribu- tu timer.Elapsed. Vlastní kód metody je vykonáván jednou nebo opakovaně podle nastavení atributu timer.AutoReset. Pokud je atribut nastaven na hodnotu ”true”

kód se bude vykonávat při každém přetečení časovače, v opačném případě je kód vykonán pouze jednou. Celý běh časovače se spustí přiřazením hodnoty ”true” do proměnné timer.Enabled a zavoláním metody timer.Start().[9][10]

(20)

3 IFC standalone box a systémy sudových čerpadel

Systémy sudových čerpadel od firmy ATN Hölzel GmbH jsou určeny pro nanášení lepidel, těsnících hmot a jiných hustých kapalin. Kapaliny jsou čerpány z nádob o obsahu 20 až 1000 litrů. Systém se skládá z řídcí jednotky s ovládacím pane- lem, jednoho nebo dvou RAM lisů (sudových čerpadel) s IFC ovládací jednotkou a pneumatické jednotky. IFC Standalone jenotka je zodpovědná za řizení přijímání a přeposílání dat kontrolního zařízení systému. Tato jednotka byla speciálně vyvi- nuta firmou ATN Hölzel GmbH pro řízení výše zmíněných systémů, její různé verze jsou použity ve většině produktů firmy. Dvě hlavní verze jednotky jsou:

• IFC Smart Pump Box, který obsahuje jednotku pro manuální ovládání a na- stavení připojených čidel a zařízení.

• IFC Smart Universal Box, který slouží pouze jako mezistanice mezi zářízením a sofistikovanějším řídícím zařízením jako například výše zmíněným IFC Smart Pump Box

Každá IFC jednotka obsahuje tři desky tištěných spojů, pro komunikaci s PLC, ří- zených mikroprocesorem. Tyto desky jsou IFC Heatpower board, IFC I/O board a Controll board. Komunikace probíhá pomocí CANopen a PROFINET sběrnico- vých protokolů. Firmware jednotky reaguje na data přijatá pomocí USB portu a celý je psaný v jazyce C.[22][23]

(21)

Obrázek 3.1: Lepící stanice, Zdroj: SLINTÁK, Stanislav. Specifikace technických vlastností IFC Standalone Vývojsoftwaru. Oppach, Německo, 2018.

Číslo Název Poznámka

1, 2 Ovládací / Řídící jednotka Řídící jednotka

3 RAM A 1. sudové čerpadlo

4 IFC - Skřín A Ovládací zařízení 1. sudového čerpadla

5 RAM B 2. sudové čerpadlo

6 IFC - Skříň B Ovládací zařízení 2. sudového čerpadla 9 Pneumatická jednotka

Tabulka 3.1: Složení lepící stanice, Zdroj: SLINTÁK, Stanislav. Specifikace technic- kých vlastností IFC Standalone Vývojsoftwaru. Oppach, Německo, 2018.

(22)

4 Regulace a komunikace mezi zařízeními

4.1 Regulace

Regulace v technice, znamená udržování určité veličiny na stanovené hodnotě, nebo hodnotách. Udržovaná veličina se nazývá ”Regulovaná veličina” a stanovená hodno- ta, kterou se snažíme udržet, se nazývá ”Referenční hodnota”. Regulace se objevuje v různých systémech, ve kterých dochází ke kontaktu s okolím. Může se objevo- vat v přírodě, ve společnosti, ale především v technice. Automatickou regulací nebo automatickým řízením se zabývá kybernetika.[12]

Hlavním principem regulace je měření regulované veličiny a její porovnávání s re- ferenční hodnotou. Jejich odchylka je užívána pro ovlivňování systému takovým způsobem, aby byla odchylka minimální, nebo při nejmenším v mezích stanovené tolerance. [12]

4.1.1 Regulace se zpětnou vazbou

Zpětná vazba, nebo také zpětnovazební smyčka je označení pro situaci, kdy vý- stup regulovaného systému ovlivňuje zpětně řídící systém. Pokud úkony při regu- laci působí proti odchylce od referenční hodnoty, nazýváme ji ”Zápornou zpětnou vazbou”.[11][12]

Pokud zvýšení hodnoty na výstupu systému v důsledku regulace způsobí další navýšení hodnoty na výstupu systému, jedná se o ”Kladnou zpětnou vazbu”. Zmí- něná kladná zpětná vazba se využívá při zesílení, nebo zrychlení žádoucího jevu, či výstupu ze systému. Kladnou zpětnou vazbu lze popsat následující soustavou rovnic:[11][12]

Y (s) = A· U(s) + A · B · Y (s) (4.1)

Y (s)/U (s) = A/(1− B · A) (4.2)

4.1.2 Regulace bez zpětné vazby

Pokud je regulace bez zpěrné vazby, nazýváme ji ovládání. Ovládání je událost v ovládaném systému, kde jedna nebo více ovládaných veličin ovlivňují systém na základě známých zákonitostí. Znakem pro ovládaný systém je otevřený obvod pro

(23)

jednotlivé přenosové členy. Zmíněný proces ovládání může působit pouze na tako- vou veličinu, která je stanovena nebo nadimenzována, jiné vlivy nejsou ovládáním odstranitelné.[12]

4.2 Komunikace mezi zařízeními

Komunikace mezi počítači a širokou škálou zařízení představuje velmi složitý sys- tém. Každé zařízení je rozdílně vybaveno po softwarové i hardwarové stránce, proto je nutné definovat určité pravidla a zákonitosti pro přenos dat. Pro jednodušší po- pis pravidel vznikl soupis pravidel komunikace nazývající se ”hierarchický OSI mo- del”. Zařízení mohou komunikovat pomocí různých rozhraní, jako například ethernet, USB, sériové porty nebo za použití bezdrátových modulů.

4.2.1 OSI model

OSI model je snahou o standardizaci síťové komunikace mezi zařízeními. Byl vypra- cován společností ISO, a v roce 1984 přjat jako mezinárodní norma ISO 7498. Model má sedm vrstev rozdělených do dvou skupin. I když podle referenčního modelu není možné vrstvy vynechávat, tak ne každá komunikační síť odděluje a využívá všechny modelové vrstvy. Každá vrstva má jasně definované funkce, které vykoná a následně předá data sousední vrstvě ve směru komunikace, taktéž může využívat funkce nižší sousední vrstvy.[13][14]

První v pořadí je fyzická vrstva.Tato vrstva poskytuje specifikaci fyzických spojů mezi zařízeními. Navazuje a ukončuje spojení, spolupracuje na efektivním rozložení dostupných zdrojů mezi všechny uživatele a dále převádí data do formátu, potřeb- ného pro zvolené komunikační médium.[13][14]

Druhá je podle modelu vrstva linková, která zajišťuje spojení mezi dvěma zařízení- mi. Řadí data přijaté od fyzické vrstvy do rámců, přičemž výsledné rámce opatřuje fyzickou adresou a koordinuje fyzickou vrstvu. Detekuje, případně i opravuje chyby, které nebyly zachyceny fyzickou vrstvou. Některé zdroje tvrdí, že v sítích založe- ných na IEEE 802 by měla být vrstva rozdělena na další dvě části - Vrstva přístupu k médiu a vrstva logického řízení linek.[13][14]

Třetí vrstva nese název síťová vrstva. Hlavní funkcí této části OSI modelu je směrování v síťi. Zajišťuje přenos různých dat, opatřených patřičným označením, od zdroje k cíli. Taktéž zachycuje a zaznamenává problémy při doručování dat. Dokáže odstranit rozdíly ve vlastnostech různých technologií v přenosových síťích.[13][14]

Vrstva číslo čtyři se nazývá transportní. Její činností je přenos dat mezi dvěma uzly. Hlavním cílem funkce této vrstvy je zajistit dostatečně kvalitní přenos pro vyšší vrstvy OSI modelu. Na tomto segmentu taktéž fungují protokoly UDP a TCP.

TCP protokol je spojově orientovaný a vyžaduje tedy potvrzené dodání všech dat.

(24)

UDP protokol je především rychlý a není tedy problém, pokud se procento dat při přenosu ztratí.[13][14]

Na páté pozici je vrstva relační. Hlavním úkolem této části je synchronizace a spo- lupráce mezi relačními vrstvami obou zapojených systémů. Vytváří a ukončuje spoje- ní mezi vrstvami. Jedna z funkcí této vrstvy je přiřazování synchronizačních značek k packetům.[13][14]

Následující vrstva je prezentační. Tato vrstva transformuje přijatá data do tvaru, které používají aplikace. K této transformaci patří operace komprimace, konver- tování a šifrování. Výsledné datové struktury se mohou lišit na obou koncových systémech. Rovněž na této vrstvě dochází k transformaci dat pro použití v nižších vrstvách.[13][14]

Poslední vrstvou OSI modelu je vrstva aplikační. Hlavním smyslem této vrstvy je poskytnutí přístupu aplikacím ke komunikačnímu systému a koordinovat jejich spo- lupráci. K této vrstvě přísluší taktéž práce protokolů DNS, DHCP, HTTP, HTTPS, SSH, SMTP a několika dalších.[13][14]

4.2.2 Ethernet

Ethernet je soubor technologií umožňujících komunikaci v počítačové síti. Většina tohoto souboru technologií je standardizována jako IEEE 802.3. Pro propojení zaří- zení v této síti se používá několik druhů vodičů - kroucená dvoulinka, optické kabely a dříve se používaly i koaxiální kabely. Přenosová rychlost ethernetu se pohybuje mezi 1 Mb/s a 100 Gb/s. V ethernetové síťi je možné provozovat více komunikač- ních protokolů týkajících se síťové vrstvy. Je zde realizována fyzická a linková vrstva OSI modelu. Pomocí ethernetu je možné propojit širokou škálu zařízení od počítačů přes datová úložiště až po televizní přijímače.[15]

Dva hlavní protokoly pro komunikaci v ethernet síťi jsou IPv4 a IPv6. Protokol IPv4 je standardizován normou MIL-STD-1777 podle Ministerstva Obrany USA.

Tento protokol je orientovaný datově a odeslané rámce přenáší bez záruky, což ve výsledku znamená, že nepotvrzuje doručení dat ani změnu jejich pořadí. Tyto nedo- statky odstraňuje protokol TCP fungující na vyšší vrstvě OSI modelu. Data obsahují pouze informaci o CRC součtu. IPv4 funguje na omezené množině adres, maximální počet použitelných adres je 232 = 4294967296 , skutečně použitelný počet adres je ovšem mnohem menší, a to díky rozdělování prostoru na podsíťě. Tento adresový prostor je ovšem díky nárůstu počtu zařízení možných připojit do sítě nedostatečný, a proto je postupně nasazován protokol IPv6 s velikostí adresového prostoru 2128.[15]

4.2.3 Bezdrátová komunikace

Jako bezdrátovou komunikaci označujeme propojení dvou nebo více zařízení bez použití mechanických prvků. Bezdrátová komunikace může využívat různých pro-

(25)

středků k přenosu, jako napříkald světlo (optická komunikace) nebo rádiové vlny (zvuk). Dvě propojená zařízení může dělit vzdálenost několika metrů až miliony kilometrů podle použité technologie. Tato technologie se používá zejména ve spoji- tosti s mobilními zařízeními, například mobilní telefony, GPS a tablety. Za vynálezce bezdrátové komunikace je považován Nikola Tesla.[16][17]

Pokud mluvíme o bezdrátové komunikaci mezi počítači, jedná se o tzv. Wi-Fi. Jde o komunikaci pomocí vlnění v bezlicenčním frekvenčním pásmu 2,4GHz. Od roku 1997 je v platnosti standard o komunikaci v pásmu ISM s označením IEEE 802.11.

V roce 1999 byl tento standard doplněn o normy IEEE 802.11a a IEEE 802.11b, v dalších letech přibyly standardy IEEE 802.11g a IEEE 802.11n. Oficiální rychlost komunikace v těchto sítích je 54 Mb/s, reálná rychlost přenosu je ovšem přibližně poloviční.[16][17]

4.2.4 USB a komunikace

Universal serial bus, neboli universální sériová sběrnice, zkráceně USB je velmi roz- šířená externí sběrnice používaná k propojení ruzných zařízení. Její hlavní vlastností je propojení zařízení stylem ”point-to-point”. Reálně se nejedná o sběrnici, protože neobsahuje společný vodič pro hodinový signál a další náležitosti. Na logické úrov- ni se ovšem o sběrnici jedná z důvodu omezení komunikace pouze dvou zařízení v jeden čas a to i přes několik USB hubů. Pro snadné používání tohoto rozhraní je navrženo pro práci v ”hot plug” módu, neboli možnost odpojení a připojení zařízení bez nutnosti zařízení vypnout nebo restartovat. Napájení většiny zařízení připojova- ných pomocí sběrnice USB je napájeno pomocí napájecích vodičů obsažených v USB portu.[18]

USB komunikace je založena na stromové struktuře propojení zařízení. Jako kořen stromu je označeno zařízení, které řídí komunikace celé zapojené struktury, nebo- li ”master”, ostatní zařízení zapojená v takové struktuře pracují v módu ”slave”.

Vzhledem k faktu, že v uvažované struktuře bude vždy pouze jedno zařízení master, může dojít k velkému zjednodušení komunikačního protokolu. Je možné zapojit více zařízení ”master”, ale je zapotřebí několika speciálních přechodníků.[18]

Zařízení propojena pomocí USB rozhraní mohou komunikovat několika rychlost- mi. V normě USB 1.0 byly stanoveny dvě přenosové rychlosti. Rychlost ”Full speed”

podporuje rychlost přenosu 1,5 MB/s to znamená až 12 Mb/s. Tuto rychlost přeno- su musí podporovat každý rozbočovač v propojené struktuře včetně master zařízení, přenosová rychlost nemusí být ovšem podporována koncovým zařízením. Druhá pře- nosová rychlost se nazývá ”Low speed” a je určena pro zařízení, která nepotřebují pro práci tak vysoký přenos a má hodnotu 187,5 kB/s, to znamená 1,5 Mb/s. V roce 2001 byla stanovena nová norma USB 2.0 a tím pádem přidána i nová rychlost zvaná

(26)

”High speed” s přenosem 60 MB/s (480 Mb/s). Této rychlosti, ale většina zařízení nedosáhne.[18]

4.2.5 Komunikační protokoly

Komunikační protokoly v kontextu počítačových síťí je soubor pravidel určujících podobu a význam jednotlivých zpráv předávaných v síťi. Protokol není závislý na implementaci, to má za následek, že je možné propojit různá zařízení s různými ar- chitekturami, či ruznými operačními systémy. Realizace je softwarová, hardwarová nebo kombinace obou možností. V nejjednodušší podobě protokol určuje synchroni- zaci a syntaxi komunikace mezi dvěma body v síťi. Protokol taktéž určuje podobu přenášených datových rámců, neboli packetů. Komunikační protokol musí zvládat velké množství úloh, proto je zpracování rozděleno do několika vrstev, kde každá vrstva má možnost využití služeb vrstvy položené níže v OSI modelu. Nejvyšší vrst- va pak předává data koncovému uživateli.[?][?]

Vlastností komunikačních protokolů je mnoho, mezi základní vlastnosti patří zjiš- tění spojení a objevování nových komunikačních uzlů v síťi. Velmi významným proce- sem nebo vlastností protokolu je takzvaný ”Handshake”, neboli počáteční domluva mezi dvěma zařízeními. Zahrnuje nastavení vlastností komunikačního kanálu a je považován za začátek komunikace. Protokol taktéž disponuje vlastností detekovat nesprávně naformátovaná, nebo poškozená data a rámce. Je zde také určen postup, co s takovými daty dělat. Nepostradatelnou vlastností je také ukončení spojení.[?][?]

Existují soubory komunikačních protokolů, takzvané ”Protokolové zásobníky”.

Jedná se o sady protokolů pro počítačové sítě a jejich implementaci. Protokoly v sadě jsou navrženy v jednotném konceptu, což vede ke snadnějšímu nasazení do provozu.

[?][?]

Protokoly v jedné sadě jsou většinou děleny na tři části, a to na aplikační, trans- portní a fyzickou. Pro komunikaci mezi částmi protokolového zásobníku má každý operační systém navržen dvě rozhraní a to na hraně mezi částí transportní a apli- kační, druhé rozhraní mezi fyzickou a transportní vrstvou. První zmíněné rozhraní definuje, jakým způsobem mají aplikace komunikovat a používat transportní vrst- vu. Druhé rozhraní určuje například, jak transportní vrstva využívá ovladače pro konkrétní hardware. V následující tabulce 4.1 je zobrazen příklad Protokolového zásobníku.[?][?]

Během testování komunikačních protokolů na referenčních zařízeních může dojít k jistým nesrovnalostem a odchylkám v testovaných datech a referenční komunikaci oproti definici protokolu. Výsledkem je zapracování vyjímek do protokolu, tomuto postupu se obecně říká ”workaround”. Po úspěšném testování získá zařízení certifi- kaci pro daný protokol. [?][?]

(27)

Protokol Vrstva HTTP Aplikační

TCP Transportní

IP Síťová

Ethernet Linková IEEE 802.3u Fyzická Tabulka 4.1: Protokoly a vrstvy

4.2.6 Cyklický redundantní součet

Cyklický redundantní součet, jinak taktéž zkráceně CRC (z anglického ”Cyclic re- dundant count”) se nazývá hashovací funkce určená k odhalení chyb během komuni- kace po síti. Dá se taktéž použít při kontrole ukládání dat. Jedná se o matematicky jednoduchou a velmi rozšířenou metodu kontrolního součtu. Výsledkem kontrolní- ho součtu je šestnáct bitů, neboli dva byty připojené na konec odesílaných dat při jejichž přenosu nebo uložení by mohlo dojít k chybě. Při opětovném načtení nebo přijetí dat je CRC vypočítáván znovu a je porovnáván s již uloženým součtem. Po- kud je součet shodný, tak data dorazila bez poškození, či změny, pokud se CRC neshoduje, došlo k poškození dat. [21]

V některých případech je možné data podle hodnoty součtu opravit. Jedná se o jednoduchou metodu rozpoznání selhání techniky, ovšem pro odhalení pirátského útoku je až moc jednoduchý. Každou bitovou posloupnost vstupních dat můžeme zapsat též jako polynom, ze kterého je vypočítáváno CRC.[21]

110101b = x5+ x4+ x2+ 1 (4.3) Kontrolní součet je vypočítáván ze vstupní posloupnosti dat a z určitého klíče.

Výsledkem celého procesu výpočtu je polynom převedený do bitové posloupnos- ti. Vlastní výpočet probíhá binární operací XOR postupně mezi všemi polynomy na vstupu. Výsledek je pak stejný, jako pokud sečteme všechny vstupní polynomy v matematickém tělese GF(2n).[21]

(28)

5 Návrh a realizace řešení

5.1 Požadavky zadavtele

Požadavky zadavatele na realizaci aplikace obsahují několik zásadních bodů a to rozdělení architektury aplikace minimálně do tří vrstev, kde žádná vrstva nebude spustitelná bez nižší vrstvy. Dále je požadováno, aby architektura umožňovala jedno- duché rozšíření o další funkce. V neposlední řadě byl kladen důraz na kompatibilitu s operačními systémy Windows 7 a Windows 10. Taktéž bylo zadavatelem určeno, že komunikace mezi standalone jednotkou a počítačem bude probíhat pomocí USB roz- hraní. Vlastní aplikace by měla vyčítat data z digitálních portů, analogových portů a z termálních čidel. Po dohodě se zadavatelem bylo určeno, že vyčítání dat bude rozděleno do několika úrovní priorit a především díky faktu, že na některé skupiny dat je nutné se dotazovat častěji než na jiné, i pro samotnou implementaci je snažší přijímat a zpracovávat data rozložená do delšího časového úseku. V neposlední řadě zadavatel požaduje možnost měnit jazyk aplikace, musí se tedy jednat o jednoduché přepínání bez nutnosti restartovat software.

5.2 Návrh řešení

Podle požadavků by aplikace měla být navržena do tří vrstev, přičemž nižší vrstva musí být kompilovatelná a spustitelná bez vrstvy vyšší. Samostatnou kategorii tvoří pomocná knihovna funkcí, která je navržena pro uchovávání pomocných metod při zpracovávní konkrétních dat a operacích s nimi. Nejnižší vrstva je navržena pro třídy určené k uchovávní dat, tím pádem obsahuje pouze datové struktury a jim přidružené základní metody. Druhá vrstva dle návrhu obsahuje nadřazenou strukturu pro práci a uchovávání polí struktur s konkrétními daty. Nejvyšší vrstvou je třída Logic, která řídí samotnou aplikaci a zároveň předává data grafickému rozhraní.

Celá aplikace má po startu vyčkat na nastavení sériového portu, jeho následné připojení a spuštění uživatelem. Teprve následující krok spustí cyklické dotazování na konkrétní data v režii Logic vrstvy.

Jelikož komunikace s vlastním zařízením je zadavatelem stanovena na USB roz- hraní je nutné určit i odpvídající komunikační protokol a zajistit jeho funkčnost.

Software by taktéž neměl umožnit ukončení programu bez řádného odpojení séri- ového portu. V případě nesprávného odpojení může dojít k blokaci COM portu

(29)

v systému a taktéž k blokaci fyzického portu na desce počítače. Důsledkem je nutný restart celého operačního systému.

Pro účely komunikce skrze sériový port byl zadavatelem stanoven komunikační protokol s CRC součtem. Protokol předává data určité délky zakončena CRC v po- době jednoho bytu. Každá bytová posloupnost odesílaná na sériový port musí mít určité náležitosti a specifické byty na určitých pozicích. Na základě správného do- tazu software obdrží požadovaná data v určitém formátu. Přijatá data je ale nutné před zpracováním zkontrolovat. Zpracování je nutné navrhnout tak, aby dokázalo oddělit hlavičku a CRC výsledné bytové posloupnosti převést na požadovaná data a ta předat dále ke zpracování.

Pro zpracování dat byla navržena knihovna funkcí obsahující metody pro zpra- cování dat a jejich úpravu. Jednotlivé metody budou doplněny během práce. Velmi důležitou částí této knihovny bude funkce generující CRC pro odesílaná data a taktéž metoda pro kontrolu kontrolního redundantního součtu pro přijatá data a následné vyhodnocení, zda data byla přijata bez chyby. Velmi důležitou částí v návrhu je návrh třídy pro jazykové mutace aplikace. Obsahovat by měla informace o aktu- álně zvoleném jazyce, uloženém jazyce a náskedně by měla obsahovat odkazy na databázové soubory s jednotlivými slovy nebo větami.

K aplikaci musí být taktéž navrženo grafické rozhraní splňující všechny požadav- ky zadavatele a zobrazovat všechny potřebná data. Návrh GUI je následující - musí obsahovat prvky pro zobrazení šesti teplotních senzorů, šesti nastavení požadova- né teploty a šesti možností nastavení tolerance teploty. Dále možnosti pro vypnutí a zapnutí teplotních čidel. Čtyři prvko zobrazení hodnot analogových portů, dva prvky zobrazující hodnotu digitálních portů, tlačítko pro vyvolání formuláře nasta- vení a připojení COM portu a tlačítko pro uzavření aplikace. Jako poslední prvek by mělo být tlačítko pro nastavení jazykové mutace aplikace.

Vzhledem k požadavku zadavatele na realtime zobrazování hodnot je nutné na- vrhnout několik časovačů pro práci aplikace. Jeden časovač pro dotazování dat ze standalone jednotky. Tento časovač bude cyklicky odesílat dotazy na jednotlivé sku- piny dat pomocí připojeného COM portu. Takže může být spuštěn až ve chvíli, kdy je port připojen. Druhý časovač je navržen pro zobrazování z datové vrstvy do gra- fického rozhraní.

5.3 Vlastní aplikace

5.3.1 Datové struktury

Vlastní apliakce obsahuje několik datových struktur vytvořených přímo podle poža- davků zadavatele a část jich vyplynula z návrhu programu. Všechny datové struktury

(30)

jsou již při návrhu řazeny do takzvané ”Tools” vrstvy a fyzicky jsou uloženy v ad- resáři Tools. Každá z těchto struktur je psána jako samostatná třída v odděleném souboru. Struktury obsahují i své vlastní metody nutné pro operace s nimi.

• První součást balíčku datových struktur zvaného Components je Temperatu- re. Tato třída je navržena pro uchovávání teplot jednotlivých teplotních čidel neboli heaterů. Třída obsahuje jeden atribut ”Value”

• Další datovou strukturou je třída Pressure představující hodnotu tlaku dané- ho čidla. Jedná se o třídu s jedním atributem ”Value” pro uchovávání hodnoty tlaku. Atribut ”Value” má modifikátor přístupu nastavený na hodnotu ”pri- vate”. Hodnotu je možné nastavovat přímým přístupem pressure.Value. Třída má tři tři základní metody. Z nichž první je konstruktor objektu. Konstruk- tor je bez parametrů a při zavolání automaticky nastavuje vnitřní atribut na hodnotu ”0”. Další metodou je ”isPressure()” metoda nevyžaduje žádné para- metry a vrací hodnotu typu Boolean. Na základě vyhodnocení zda se vnitřní hodnota tlaku rovná nule vrací buď ”True” v případě kladného vyhodnocení, nebo ”False” pokud je hodnota rozdílná od nuly. Tato metoda má modifikátor přístupu public. Třetí metodou v pořadí je ToString metoda s modifikátorem přístupu public. Jedná se o metodu, která vrací hodnotu datového typu String, jejímž obsahem je textové vyjádření vnitřního atributu Value.

• Třetí datovou strukturou je COMConnection. Jedná se nejdůležitější třidu této vrstvy a celého programu. Pomocí této struktury program komunikuje s připojeným zařízením. Má dva vnitřní atributy - ”connected” typu boolean s modifikátorem přístupu private a ”port” typu SerialPort s přístupem public.

Atribut ”connected” má počáteční hodnotu False. Tato třída obsahuje pět me- tod, první z nich je konstruktor COMconnection(), která nastavuje hodnotu vnitřní proměnné ”port” na hodnotu ”null”. Další metodou v pořadí je ”Con- nectionCheck()”, tato metoda má modifikátor přístupu public a návratovou hodnotu Boolean. Metoda testuje zda je aktuálně připojeno zařízení pomocí COM portu. V první podmínce metoda testuje zda je port již nastaven, při negativním vyhodnocení podmínky je vrácena hodnota False, v případě, že je port nastaven se pokračuje k další podmínce. Druhá podmínka testuje, zda je port připojen pomocí proměnné třídy SerialPort.IsOpen, v případě kladné- ho vyhodnocení metoda mění hodnotu atributu ”connected” na True a vrací taktéž dnotu True, v případě záporného vyhodnocení vrací metoda hodnotu False. Následuje metoda ”Connect()”, která zajišťuje připojení k příslušnému portu. Metoda je přístupná s modifikátorem public. Nejprve podmínka otestu- je, zda je port nastaven , poté jestli port není již připojen, v případě příznivého vyhodnocení je port přiojen pomocí metody port.Open() a atribut connection je nastaven na True. Velmi důležitou součástí je metoda ”SendData()” tato

(31)

metoda má modifikátor přístupu public a přijímá jeden argument - pole ty- pu ”bytes”. Metoda ověří, zda je port připojen a odešle data pomocí metody port.Write(...). Poslední metodou je ”Disconnect()”, tato metoda ověří, zda je port připojen, pokud ano odpojí se pomocí metody port.Close() a nastaví atribut ”connected” na hodnotu False.

• Následuje třída DigitalPort, tato struktura je navržena pro ukládání dat o di- gitálních portech. Tato třída dědí některé své vlastnosti od abstraktní třídy Port. Obsahuje dva vlastní atributy Type a Value, oba typu Char. Třetí atribut je zděděný s názvem Name typu String. Obsahuje pouze dvě metody. První z nich je konstruktor, který má tři argumenty - Name typu String, Type ty- pu char a Value typu char. Nastaví příslušné argumenty k atributům datové struktury. Následuje metoda ”setValue()”, která přiřazuje hodnotu k atributu Value. Hodnota je do metody předávána ve formě argumentu typu char.

• Další třídou je AnalogPort, která stejně jako předchozí třída, dědí od třídy abstrktní třídy Port. Má dva atributy - Name a Value. Name je typu String a je děděná, následuje proměnná Value, která je typu Int16. Datová struktura má pouze dvě metody - konstruktor a ”setValue(...)”. Kontruktor přiřazuje zadané argumenty k příslušným vnitřním proměnným. Metoda ”setValue()”

mění hodnotu proměnné Value v průběhu programu.

• Pro potřeby součásti programu ComboBox bylo nutné vytvořit i třídu pro po- ložky ukládáné v tomto prvku. Datová struktura nese název ComboBoxItem.

Tato struktura má dva vnitřní atributy - Text a Value, oba typu string. Třída obsahuje přetížený konstruktor pro jeden nebo dva argumenty. V případě jed- noho argumentu je předaná hodnota nastavena oboum vnitřním proměnným.

V případě dvou argumentů jsou přiřazeny příslušným proměnným. Následují dvě metody. První z nich je metoda ToString(), která vrací textovou repre- zentaci vnitřních hodnot třídy. Druhá metoda nese název valueStr(), která předává hodnotu vnitřní proměnné Value adtového typu String.

• Poslední datovou strukturou je třída Data, která se nachází v balíčku ”Di- recting” Jedná se o třídu uchovávající většinu důležitých dat pro běh programu.

Třída obsahuje sedm vnitřních proměnných. Mluvíme o pěti polích - tři typu Temperature, jedno typu DigitalPort a jedno typu AnalogPort. Dále obsahuje proměnnou typu Boolean read. Následuje proměnnná typu Tools pro volání metody knihovny funkcí. Součástí datové struktury je taktéž několik metod pro operace s daty, jako je například uložení a předání obsahu proměnných vyšší vrstvev.

(32)

V při původním návrhu byla abstraktní třída Port značně obsáhlejší. Ovšem po- stupem času se tato cesta ukázala jako špatná a zbytečně složitá. Původní návrh počítal s jednotnými atributy pro obě datové struktury (AnalogPort a DigitalPort).

Při konzultacích a postupu programu vyšlo najevo, že obě struktury potřebují uklá- dat data v různém formátu a u třídy DigitalPort je nutné zachovávat informaci o typu portu (vstupní, výstupní, HighCurrent). Z tohotu důvodu došlo později k zú- žení abstraktní třídy pouze na jeden atribut.

5.3.2 Knihovna funkcí

Pro práci a operaci s daty ve všech úrovních programu jsem navrhnul jednotnou kni- hovnu funkcí zvanou Tools. Tato knihovna je navržena jako třída se dvěma vnitřními proměnnými. První z nich je proměnná POLY, která obsahuje hexadecimální hod- notu 0xC4 vyjadřující polynom x7+ x6+ x2, který je využíván při operacích s CRC.

Druhou proměnnou je pole typu string s názvem chars o velikost 33 záznamů. To- to pole obsahuje textové vyjádření problémových hodnot obsažených v přijímaných datech. Jedná se o prvních třicet tři hodnot z tabulky znaků ASCII. Pole znaků je navrženo tak, aby celočíselná hodnota znaku odpovídala jeho indexu v tabulce.

Hex Text Hex Text Hex Text

0x00 Null 0x0B Vertical Tab 0x16 Synchronous Idle

0x01 Start of heading 0x0C Form feed 0x17 End of trans. block 0x02 Start of text 0x0D Carriage return 0x18 Cancel

0x03 End of text 0x0E Shift out 0x19 End of medium

0x04 End of transmission 0x0F Shift in 0x1A Substitute

0x05 Enquiry 0x10 Data link escape 0x1B Escape

0x06 Acknowledge 0x11 Device control 1 0x1C File Separator 0x07 Bell 0x12 Device control 2 0x1D Group Separator 0x08 Backspace 0x13 Device control 3 0x1E Record Separator 0x09 Horizontal Tab 0x14 Device control 4 0x1F Unit Separator 0x0A Line Feed 0x15 Negative acknowledge 0x20 Space

Tabulka 5.1: Problémové znaky

• První z metod je ”bytsToString” jejíž vstupní argument je pole bytů k převe- dení na text. Právě tato metoda využívá pole problémových znaků. Metoda postupně prochází předané pole a byty postupně převádí na neznaménkový integer. Poté kontroluje jestli nepatří do rozsahu problémových znaků, pokud ano dosadí textovou hodnotu tohoto znaku v hranatých závorkách, pokud ne, dostadí znak odpovídající hodnoty podle ASCII tabulky. Když metoda projde celé pole bytů a přiřadí všechny hodnoty vrací výslednou hodnotu typu string.

(33)

• Další metodou je ”stringToHexAndCRC” jedná se o metodu spíše ladícího charakteru. Má jeden vstupní parametr - text, který chceme převést na hexa- decimální hodnotu a opatřit CRC bytem. Řetězec se nejprve převede na pole bytů pomocí vestavěné funkce Encoding.ASCII.GetBytes a uloží se do dočas- ného pole. Toto pole se uloží do pole o jeden byt většího a na poslední místo je uložena hodnota CRC vypočítaná pomocí funkce ”crc8c”, která bude popsána níže. Výsledné pole bytů funkce vrací jako svůj výsledek.

• Metoda wholeToUint16 s návratovou hodnotou typu UInt16 má tři vstupní parametry. První z nich je bytové pole dat. Druhý parametr je index určující první byte pro převod. Třetím parametrem je index posledního bytu převodu.

Metoda postupně prochází pole bytů a jednotlivé dvojice převádí na čísla typu UInt16, která pak ukládá do pole. Toto pole je také návratovou hodnotou metody. V třídě Tools se nachází i obdobná metoda s názvem ”wholeToInt16”, která podobným způsobem převádí bytové pole na pole typu Int16.

• Následuje velmi důležitá metoda pro přepočet hodnot čidla na skutečnou tep- lotu. Tato metoda má název ”calcTemps” s jedním vstupním parametrem.

Návratová hodnota metody je pole typu double. Metoda psotupně prochází předané pole hodnot Int16, postupně ho převádí na typ double a vypočítává výslednou hodnotu podle následujícího vzorce

Result = HodnotaCidla∗ 430

32768 ∗ 2.56 − 256 (5.1)

Hodnota se poté ukládá do pole teplot typu double. Výsledné pole je předáno jako výsledek této funkce.

• Metoda ”wholeToShort” má tři vstupní prametry - pole bytů, počáteční index pro převod a poslední index. Stejně jako metoda ”wholeToUInt16” prochazí pole bytů od předaného indexu a postupně převádí byty na typ char. Zvolil jsem typ Char, protože se dá taktéž vyjádřit v číselné podobě stejně jako typ short. Hodnoty se ukládají do pole a toto pole je taktéž návratovou hodnotou této metody.

• Velmi důležitá je metoda pro výpočet CRC u odchozích dat. Tato metoda má název ”crc8c”. Má dva vstupní parametry - hodnotu aktuálního CRC (většinou je vstupem binární hodnota 8) a pole bytů dat, ze kterých bude vypočítáván kontrolní součet. K výpočtu CRC je nutný polynom bitové dálky osm. Pro tento algoritus výpočtu má polynom hodnotu C4 v hexadecimálním vyjádření, v binární podobě má hodnotu 1100 0100. Postup výpočtu je založen na rotaci bitů vpravo a na operaci XOR. Na obrzázku5.1 je celý algoritmus vyobrazen.

(34)

Obrázek 5.1: Algoritmus CRC

Tento algritmus byl vyvinut firmou ATN Gmbh, jeho kód byl poskytnut v jazyce C. Bylo nutné jeho syntaxi přepsat pro jazyk zvolený k vývoji této aplikace. Tento postup dokáže generovat unikátní CRC pro data délky až 64 bytů. Jeho varianta v jazyce C je využívána ve firmware cílové IFC standalone jednotky.

Opačná metoda k předchozí je ”crc8d”. Jejím hlavním úkolem je porovnání CRC příchozích dat s vypočteným CRC pomocí algoritmu z předchozí metody.

Vstupem této metody jsou dvě proměnné. Jedna obsahuje hodnotu CRC bytu z příchozích dat. Druhým vstupem jsou přijatá data. Stejným postupem jako v předešlé metodě je vypočítáno CRC. Návratovou hodnotou této metody je jeden byte, jehož obsah je roven rozdílu předaného CRC a vypočteného CRC.

• Metoda ”testCRC” s návratovou hodnotou typu boolean a modifikátorem pří- stupu public využívá předchozí metodu ”crc8d”. Postup metody vezme předané pole bytů a oddělí CRC od zbytku dat. Vzniklé pole a jednu proměnnou pře- dá výše zmíněné metodě. Výsledkem metody je porovnání návratové hodnoty s hodnotou 0.

5.3.3 Řídící vrstva

Řídící vrstva aplikace nese název Logic. Je realizována podobu třídy v jazyce C#.

Má tři vnitřní proměnné nutné k fungování. První z nich je objekt obsahující data aplikace. Následuje proměnná typu COMconnection, poslední z proměnných je typu Tools. Jedná se o vrstvu poskytující přístup k metodám této datové vrstvy. Všechny jmenované datové struktury byly popsány výše. Vrstva zajišťuje volání správných metod pro zpracování přijatých dat.

(35)

• První metodou s vysokou důležitostí je ”SetComPort” s jednou vstupní pro- měnnou typu SerialPort. Metoda přiřadí objekt port vnitřní proměnné com- Port a spustí několik metod potřebných k fungování aplikace. Po přiřazení za- volá metodu Connect() objektu Comconnection pro připojení zařízení. Násle- duje přiřarení eventhandleru pro zpracování přijatých dat COM portem.Jeho přesná funkce bude vysvětlena později. Dále jsou spuštěny dvě metody třídy Logic, které nastavují a spouštějí časovače (metody SetTimers() a StartTi- mers()).

• Další metodou je ”disconnect()”. Funkce metody je zřejmá již z názvu. Celý kód metody je velmi jednoduchý. Metoda po kontrole připjení portu zastaví všechny časovače a ve finální fázy odpojí port. Mezi další jednoduché meto- dy patří ”StartTimers()” a ”SetTimers()”. Tyto metody nestavují respektive zapínají časovače potřebné pro obsluhu.

• Nejzásadnější metodou této třídy je EventHandler pro zpracování přijatých dat sériovým portem. Má název com_DataRecieved a je volán, jakmile sériový port přijme data. Prvním krokem v metodě je zjištění délky bytové posloupnos- ti přijatých dat. Následuje jejich načtení do pole typu byte pomocí vestavěné metody sériového portu ”port.Read()”. Dalším krokem je ověření CRC bytu přijaté posloupnosti. V případě kladného vyhodnocení následuje podmínka switch, která podle hodnoty prvního bytu posloupnosti zavolá příslušnou me- todu třídy Tools pro zpracování dat a předá upravená data k dalšímu zpraco- vání příslušné metodě. V případě, že hodnota prvního bytu neodpovídá žádné známé hodnotě je celá posloupnost ignorována a čeká se na další přijatá data.

• Následuje skupina metod zpracovávající určité datové rámce, které budou po- psány níže. Tyto metody ukládají rámce do polí po jednotlivých bytech. Poté je nakonec pole přidáno vypočítané CRC a celé pole odesláno. Jednotlivé me- tody jsou volány v EventHandleru jednotlivých časovačů této třídy, jak bude popsáno níže.

• Z požadavků zadavatele, zvážení důležitosti dat byli v Logic vrstvě nastaveny tři časovače. První časovač byl nastaven na časový interval 1000ms. Tento časovač je určen pro dotazy na hodnoty analogových portů. Časovač číslo dva je nastaven na interval 2000ms a při uplynutí limitu je odeslán dotaz na hodnoty digitálních portů standalone jednotky. Poslední z časovačů má interval 5000ms, to znamená, že každých 5 vteřin je odeslán dotaz na hodnoty teplotích čidel. Rozvržení časovačů je dáno důležitostí a povahou dat. Data na analogových portech a digitálních portech se mohou měnit poměrně rychle významně, naopak u teplotních čidel nedojde k podstatné změně tak rychle, z toho plyne, že interval 5 vteřin je pro dotazy dostačující. Ke každému časovači

(36)

je přiřazena i metoda s kódem, který se má prvést při uplynutí limitu takzvaný EventHandler.

Dotazy na určitá data jsou realizovány pomocí odesláním určitého řetězce bytů pomocí sériového portu. Data pro získání hodnot mají přesně danou strukturu uve- denou v tabulce 5.2. Délka dat je pro určité dotazy přesně daná, pohybuje se od 4 bytů až po 15 bytů.

1x byte 1x byte x * byte 1x byte Frame ID Data ID data byty CRC

Tabulka 5.2: Struktura rámců

Funkci rámců určuje jejich Frame_ID byte, u některých rámců částečně určuje funkci i Data_ID byte. Tato dvojice bytů je následována posloupností datových bytů zakončených CRC bytem. Konkrétní podoba všech používaných rámců je zobrazena v tabulce5.3.

Frame ID Data ID Význam rámce / Obsah datových bytů CRC 0x11 0x02 Status data o Heat Board, IO Board a Control Board CRC 0x51 0x02 Nastavené hodnoty tepelných senzorů 1-6 CRC 0x52 0x03 Aktuální hodnoty tepelných senzorů 1-6 CRC 0x53 0x81 Zapnutí / vypnutí tepelných senzorů CRC 0x54 0x02 Dotaz na nastavené hodnoty teplotních senzorů CRC 0x54 0x03 Dotaz na aktuální hodnoty teplotních senzorů CRC 0x61 0x01 Data analogových a digitálních vstupů CRC 0x62 0x83 Data pro zápis na analogové a digitální výstupy CRC 0x63 0x05 Dotaz na data analogových a digitálních vstupů CRC

0x71 0x81 Datové byty PID CRC

0x72 0x82 Datové byty PID CRC

0x73 0x83 Datové byty PID CRC

0x74 0x84 Nastavení analogových vstupů a výstupů CRC 0x75 0x85 Data aktuálně nastavené tolerance teplotních čidel CRC 0x76 0x86 Data nastavení požadované tolerance CRC

0x30 0x01 Runtime data CRC

Tabulka 5.3: Datové rámce

(37)

5.3.4 Grafické rozhraní

Grafické rozhraní neboli GUI je navrženo ve formátu Windows Form tak, aby bylo možné v něm zobrazit všechny potřebná data. V základní verzi není přidána žád- ná grafická úprava, pouze prvky pro zobrazení dat a potřebné nastavení jazykové mutace, jak je uvedeno v zadání.

Celé grafické rozhraní je rozděleno do dvou formulářů neboli oken. Jedno pro běh samotného programu obsahující zobrazovací prvky a menu nastavení jazyka. Druhé okno slouží pro nastavení a připojené sériového portu, je možné ho vyvolat stisknu- tím tlačítka v hlavním formuláři. V obou formulářích je odebrán typický křížek pro uzavření okna a je nahrazen tlačítkem přímo ve formuláři. Toto je z důvodu řádného ukončení komunikace se sériovým portem, při jeho nesprávném odpojení by mohlo dojít k zablokování portu s nutností restartování počítače.

Obrázek 5.2: Hlavní okno aplikace

Hlavní formulář je rozdělen do čtyři částí - Zobrazovací oblast pro data, oblast pro nastavení dat, tlačítka spouštějící operace a jedno rozbalovací menu s mechanismem pro změnu jazyka apliakce.

• Část pro zobrazování dat se skládá z dvanácti prvků numericUpDown. Jed- ná se o prvek WindowsForm pro zobrazování číselných hodnot. Každý tento prvek má upravené vlastnosti pomocí kódu pro zobrazování konkrétního inter- valu hodnot s určitou přesností. U všech těchto objektů je vypnuta možnost ručního nastavování hodnot. Pro zobrazení hodnot analogových vstupů jsou prvky upraveny následovně - rozmezí zobrazovaných hodnot je upraveno na interval <-100000;1000000> s přesností na jednotky. Digitální hodnoty jsou zobrazovány v numericUpDown s přesností na jednotky a na intervalu <- 10000;10000>. Jiné nastavení mají prvky pro zobrazování hodnot teplotních

(38)

senzorů. Přesnost je nastavena na dvě desetinná místa a interval zobrazova- ných hodnot je stanoven na <-20000;20000>. Všechny zobrazovací prvky jsou opatřeny popiskem ve zvoleném jazyce.

• Druhou část tvoří prvky pro nastavení teplotních čidel. Skládá se z dvanác- ti prvků numericUpDown a šesti objektů checkBox pro označení aktivních teplotních čidel. Každý z numericUpDown objektů v této části má nastave- ny následující parametry - interval nastavitelných hodnot je <-1000;1000>, přesnost prvku je určena na dvě desetinná místa. U těchto prvků je možné hodnoty zapisovat i určovat pomocí šipek, které jsou součástí prvku. Následu- jí checkBox objekty, kde zaškrtnutí znamená aktivaci příslušného čidla.

• Poslední dvě části se dají považovat po spojení za ovládací panel tohoto for- muláře. Skládá se ze čtyř tlačítek a rozbalovacího menu. První z tlačítek je určeno pro vyvolání formuláře k nastavení sériového portu. Funkce a formulář nastavení budou popsány níže. Další tlačítko je určeno k zahájení komunikace, lépe řečeno spustí zobrazování dat do prvků grafického rozhraní. Toto tlačítko je označeno jako ”Display data”. Následuje tlačítko pro zastavení komunikace se zařízením a je označeno textem ”Disconnect”. Poslední tlačítkem v řadě je tlačítko zajišťující ukončení aplikace. Je nutné taktéž zmínit velmi důležitou část - rozbalovací menu pro určení jazyka aplikace. Realizováno je dvěma vlo- ženými prvky toolStripMenu, objektem ComboBox pro výběr jazykové verze a potvrzujícím tlačítkem. Ihned po zvolení jazyka a potvrzení výberu se změní texty celé aplikace pomocí funkci jenž bude popsána níže.

Obrázek 5.3: Nastavení jazyka

Druhý formulář aplikace je určen pro nastavení parametrů připojení sériového portu. Je rozdělen do dvou částí. První část je určena pro nastavení parametrů a druhou část tvoří tlačítka ovládacího panelu.

• Část formuláře pro nastavení parametrů připojení portu tvoří pět prvků com- boBox v nichž lze postupně nastavit přenosovou rychlost v jednotkách bits/sec.

References

Related documents

1) V případě využití klimatizace, by se příkon mohl následně pohybovat odhadem okolo hodnoty 2 kW (nominální), resp. Počítáno je s nominální hodnotou, kterou

1) přílišná velikost baterie, která narušuje fyziologický aspekt oděvu, zvětšuje váhu a narušuje vzhled. 2) Další z problému jsou ostré hrany některých

Automobilový průmysl je strojírenské průmyslové odv tví, které se zabývá vývojem, výrobou, marketingem a prodejem motorových vozidel. Obrovský vzestup

Merida differs from all the previous princesses in one more important feature – she is the only princess that does not meet her prince charming throughout the

Školní družina je zařízení pro zájmové vzdělávání, jež je mezi ostatními zařízeními určenými pro volný čas dětí nejčastější. „Výchova je společenský proces, a tedy i

Každý den jsem děkoval Bohu, že mi dal Nancy.“ 27 Narodily se jim dvě děti – Ron a Patti. Ačkoli Reagana herectví velmi uspokojovalo, cítil, že kvalita hollywoodských

V projektovém týmu panuje organizační duch, který se řídí dle pravidel dané metodiky (Šochová, 2019, s. • Self-organized tým by měl být tvořen cca sedmi členy. Pokud by

V Harry Potterovi a kameni mudrců nalezneme symboly tohoto typu v podobě kouzelnických hůlek (také symbol A6 ve vrstvě 8), kyje horského trolla, košťat, klíče od trezoru