• No results found

• 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.

• 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.

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.

• 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 metometo-dy 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

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

Related documents