Softvérové vybavenie systému: Rozdiel medzi revíziami

Z Kiwiki
Skočit na navigaci Skočit na vyhledávání
d
 
(6 medziľahlých úprav od rovnakého používateľa nie je zobrazených.)
Riadok 3: Riadok 3:
 
[[Kategória:Informatika]]
 
[[Kategória:Informatika]]
 
[[Kategória:Mechatronika]]
 
[[Kategória:Mechatronika]]
{{Praca_uvod|6|Autonómny systém pre zber teplotných dát z pôdneho profilu|Mikroprocesory PSoC|Protokol 1-Wire|Rozhranie I2C|Návrh a realizácia obvodového zapojenia systému zberu teplotných dát|Návrh a realizácia zapojenia senzorov systému zberu teplotných dát|Softvérové vybavenie systému|||||}}
+
{{Praca_uvod|6|Autonómny systém pre zber teplotných dát z pôdneho profilu|Mikroprocesory PSoC|Protokol 1-Wire|Rozhranie I2C|Návrh a realizácia obvodového zapojenia systému zberu teplotných dát|Návrh a realizácia zapojenia senzorov systému zberu teplotných dát|Softvérové vybavenie systému|http://ggaspar.dyndns.info/~meranie web projektu|||||}}
 
__TOC__
 
__TOC__
 
=Softvérové vybavenie systému=
 
=Softvérové vybavenie systému=
Riadok 202: Riadok 202:
 
V tabuľke do stĺpca teplomer zapisujeme adresu zariadenia, do stĺpca dátum zapisujeme dátum a čas merania a do tabuľky teplota zapisujeme teplotu v decimálnom tvare na Obr. 4.7.
 
V tabuľke do stĺpca teplomer zapisujeme adresu zariadenia, do stĺpca dátum zapisujeme dátum a čas merania a do tabuľky teplota zapisujeme teplotu v decimálnom tvare na Obr. 4.7.
  
[[Image:dbsql.png|thumb|center|125px|Obr. 4.7 Záznam v databáze SQL]]
+
[[Image:dbsql.png|thumb|center|250px|Obr. 4.7 Záznam v databáze SQL]]
 +
 
 +
=== Webová stránka ===
 +
Na Obr. 4.8 je zobrazené GUI, pomocou ktorého sa nastavujú parametre odosielané na spracovanie. V pravej tabuľke s zaškrtávacími políčkami si používateľ vyberá, ktoré teplomery budú spracované. Ako pomôcka pri výbere slúži grafická legenda napravo od tabuľky, kde je vyznačená poloha jednotlivých teplomerov vzhľadom na povrch zeme a aj ich farebné označenie v grafe.
 +
 
 +
[[Image:webs.png|thumb|center|250px|Obr. 4.8 Webová stránka]]
 +
 
 +
Po stlačení tlačidla „Lokalita“ sa zobrazí lokalita miesta merania pomocou Google Maps, a po stlačení tlačidla „Uložiť graf“ máme možnosť uložiť vytvorený graf vo formáte PNG.
 +
 
 +
V ľavej tabuľke sa nastavuje časové obdobie, za ktoré sa majú dáta spracovať. Po stlačení tlačidla „Zobraz“ sa zvolené parametre prenesú metódou POST na web server, kde sa ďalej spracujú modulom mod_python. Ako odpoveď je odoslaný HTML reťazec s lokalitou vygenerovaného obrázka. „Zobrazenie posledného záznamu“ zobrazí graf na Obr. 4.9 s bodmi umiestnenými podľa posledného záznamu v databáze.
 +
 
 +
[[Image:poslz.png|thumb|center|250px|Obr. 4.9 Zobrazenie posledného záznamu]]
 +
 
 +
„Zobrazenie za dnes“ zobrazí graf na Obr. 4.10 vytvorený v čase od 00:00 hod do aktuálneho času aktuálneho dňa.
 +
 
 +
[[Image:zadnes.png|thumb|center|250px|Obr. 4.10 Zobrazenie za dnes]]
 +
 
 +
„Zobrazenie za týždeň“ na zobrazí graf Obr. 4.11 za posledných sedem dní, vytvorený v čase od 00:00 hod prvého dňa do aktuálneho času aktuálneho dňa.
 +
 
 +
[[Image:zatyz.png|thumb|center|250px|Obr. 4.11 Zobrazenie za týždeň]]
 +
 
 +
„Zobrazenie za mesiac“ zobrazí graf na Obr. 4.12 za posledných tridsať dní, vytvorený v čase od 00:00 hod prvého dňa do aktuálneho času aktuálneho dňa.
 +
 
 +
 
 +
[[Image:zames.png|thumb|center|250px|Obr. 4.12 Zobrazenie za mesiac]]
 +
 
 +
Takto definované časové úseky sú pevne definované. Používateľ si však môže zvoliť časové obdobie pomocou dvoch okien na vkladanie dátumov.
 +
 
 +
Okná „Dátum od:“ a „Dátum do:“ slúžia na flexibilné nastavenie želaného časového obdobia na vyhodnotenie dát. Zobrazí sa graf na Obr. 4.13 za zvolený počet dní, vytvorený v čase od 00:00 hod prvého dňa do aktuálneho času aktuálneho dňa.
 +
 
 +
[[Image:oddo.png|thumb|center|250px|Obr. 4.13 Zobrazenie „Od: Do:]]
 +
 
 +
 
 +
 
 +
 
 +
'''Záver'''
 +
 
 +
Cieľom práce bolo navrhnúť a implementovať systém pre zber teplotných dát z pôdneho profilu. V prvej časti práce boli predstavené technológie a realizácia hardvérovej časti a v druhej časti bola popísaná architektúra distribuovaného systému a  jej softvérové vybavenie. Výsledkom práce je funkčný technologický prototyp, na ktorom prebiehajú v súčasnosti merania.
 +
 
 +
Pravdepodobne najdôležitejším momentom pri realizácii senzorovej časti, bolo po výbere súčiastok rozhodnutie o type puzdra a jeho hydroizolácií. Vďaka zvolenému plastovému puzdru, ktoré bolo vyrobené na zákazku, majú jednotlivé senzory pevnú schránku, takže nie sú mechanicky namáhané. Ako izolačný materiál sa osvedčila silikónová pasta. Na konci novembra 2009, ani po približne mesiaci používania nedošlo k žiadnemu problému pri spracovaní signálu.
 +
 
 +
Architektúra distribuovaného systému bola zložená z troch vrstiev. Firmvérová vrstva má na starosti komunikáciu s nadradeným počítačom a so sieťou 1-Wire. Prijíma dáta od jednotlivých teplomerov, počíta ich CRC a odosiela ich do sériového rozhrania. Záznamová vrstva vysiela príkazy na meranie teploty a výsledné dáta ukladá do databázy. Prezentačná vrstva slúži na priamu interakciu s používateľom. Používateľ vyberá parametre vyhodnocovania zozbieraných teplotných dát, ktoré sú následne na webovom serveri spracované a ako odpoveď sa zobrazí vytvorený graf.
 +
 
 +
Grafické zobrazenie výsledkov meraní zobrazuje teploty namerané jednotlivými senzormi umiestnenými nad povrchom aj  pod povrchom pôdy. Najviac tepelne závislé sú senzory umiestnené nad povrchom. Priebeh meraní senzora umiestneného 10 centimetrov pod povrchom vykazuje zreteľný fázový posun oproti nadzemným senzorom. Senzor umiestnený najhlbšie má najmenšie odchýlky od stabilnej teploty.
 +
 
 +
Záujem o modifikáciu finálnej verzie systému na systém pre meranie teplotných strát v budovách bol prejavený správcom budov lokálnej firmy. Ďalšie využitie je možné pre meranie teplôt na rôznych konštrukciách napr. na mostoch. Výmenou senzorov za iný typ je možné zbierať údaje aj o iných fyzikálnych veličinách.
 +
 
 +
Budúci vývoj zahŕňa rozšírenie firmvéru, v ktorom bude zahrnuté aj číslo výrobku, obsahujúce údaje o použitej pamäti a RTC. Pomocou tohto čísla bude systém spolupracovať s aplikačným softvérom. Tento umožní používateľovi vytvoriť vlastnú konfiguráciu systému, ktorá môže pozostávať z viacerých meracích uzlov, viacerých databáz a meranie nebude obmedzené iba na päť teplomerov. Aplikácia bude obsahovať nastavenia periódy meraní jednotlivých teplomerov, spracovanie údajov do databázy a tvorbu grafov z rôznych zdrojov nameraných dát.
 +
 
 +
 
 +
 
 +
'''Použitá literatúra'''
 +
 
 +
#ASHBY, Robert. ''Designer's Guide to the Cypress PSoC''. London : Elsevier, 2005. 273 s. ISBN 9780750677806.
 +
#CYPRESS, Semiconductor Corporation. ''PSoC Programmable System-on-Chip : Technical Reference Manual (TRM)''. San Jose, USA&nbsp;, c2008. 572 s. Document No. 001-14463 Rev. *C. Dostupný z WWW:&nbsp;<www.cypress.com>.
 +
#MAXIM, Integrated Products. ''Guidelines for Reliable Long Line 1-Wire Networks : AN-148''. Sunnyvale, CA, USA&nbsp;: Maxim Integrated Products, 2008. 16 s. Dostupný z WWW:&nbsp;<www.maxim-ic.com>.
 +
#MAXIM, Integrated Products.''DS18S20 High-Precision 1-Wire Digital Thermometer''. Sunnyvale, CA, USA&nbsp;: Maxim Integrated Products, 2008. 23 s. Dostupný z WWW:&nbsp;<www.maxim-ic.com>.
 +
#NXP, B.V. ''The I2C bus specification : Version 2.1''. Southampton, United Kingdom&nbsp;: NXP B.V., 2000. 46 s. Dostupný z WWW:&nbsp;<www.nxp.com>.
 +
#RAMTRON, International Corporation. ''FM24V10 : 1Mb Serial 3V F-RAM Memory''. Colorado Springs, CO, USA&nbsp;: Ramtron International Corporation, 2009. 15 s. Dostupný z WWW:&nbsp;<www.ramtron.com>.
 +
#NXP, B.V. ''PCF8563 : Real-Time clock/calendar''. Southampton, United Kingdom&nbsp;: NXP B.V., 2008. 32 s. Dostupný z WWW:&nbsp;<www.nxp.com>.
 +
#Python Programming Language [online]. 2.6.4. 2009 [cit. 2010-04-02]. Www.python.org. Dostupné z WWW: <[http://python.org/about/ http://python.org/about/]>.
 +
#MySQL::The world‘s most popular open source database [online]. 5.1.45. 2010 [cit. 2010-04-02]. Dostupné z WWW: <[http://www.mysql.com/why-mysql/ http://www.mysql.com/why-mysql/]>.
 +
#The Apache Software Foundation [online]. 2.2.15. 2010 [cit. 2010-04-02]. Dostupné z WWW: <[http://httpd.apache.org/ABOUT_APACHE.html http://httpd.apache.org/ABOUT_APACHE.html]>.
 +
#Apache/Python Integration [online]. 3.3.1. 2009 [cit. 2010-04-02]. Dostupné z WWW: <[http://www.modpython.org/live/current/modpython.pdf http://www.modpython.org/live/current/modpython.pdf]>.
 +
#HARMS, Daryl; MCDONALD, Kenneth. ''Začínáme programovat v jazyce Python.'' Brno : Computer Press, 2003. 456 s. ISBN 80-7226-799-X.
 +
#FABO, P., GAŠPAR, G., PAVLÍKOVÁ, S., ŠIROKÝ, P.: ''Methods of statistical evaluation of data from long-term measurement of soil temperature profile using open-source tools.'' Trenčianske Teplice: ISC Mechatronika 2010

Aktuálna revízia z 18:06, 1. marec 2012

Softvérové vybavenie systému

Softvérové prostriedky

V systéme sú využívané otvorené a slobodné softvérové prostriedky, ktoré sú voľne dostupné a majú obrovskú podporu zo strany vývojárskych komunít a zo strany používateľov. V súčasnosti sú už dostatočne renomované a predstavujú spoľahlivú voľbu.

Programovací jazyk Python

Python je moderný, otvorený a slobodný programovací jazyk vyvinutý Guidom van Rossumom. Umožňuje vytvárať aplikácie omnoho rýchlejšie, ako pri programovaní v tradičných jazykoch ako C, C++ alebo Java. Jazyk je platformovo nezávislý, beží na MS Windows, UNIX/Linux systémoch a aj na systémoch Apple Macintosh. Je vhodný na písanie malých aplikácií alebo skriptov, ale aj pre vývoj veľkých softvérových projektov. Základné vlastnosti jazyka [12]:

  1. výpočtová rýchlosť – vzhľadom na to, že je bajtovo kompilovaný, je Python pomerne rýchly. Je však o mnoho pomalší, ako obdobné programy v C alebo C++. Táto nevýhoda je vo výpočtovo náročných moduloch riešená tak, že časť ich kódu je napísaná v C alebo C++.
  2. rýchlosť tvorby kódu – označuje vyjadrovacie a konštrukčné možnosti jazyka. Python je schopný vykonávať aj pomerne zložité akcie pomocou jednoduchého kódu.
  3. objektová orientácia – objektovo orientované programovanie je dôležité pre takmer každý zo súčasných programovacích jazykov. Python túto požiadavku spĺňa.
  4. GUI – schopnosť implementovať grafické používateľské prostredie je často dôležitá. V Pythone je zabezpečená pomocou modulu TK.
  5. vývojové prostredie – doteraz slabá stránka jazyka Python. Interaktívne prostredie IDLE zatiaľ nemôže konkurovať vývojovým prostrediam iných jazykov.
  6. vhodnosť pre veľké projekty – je ďalším kritériom kvality jazyka; či má jazyk vlastnosti, ktoré podporujú jeho komplexnosť tak, ako program naberá na veľkosti.
  7. dostupnosť knižníc – produktivita písania programu je často závislá od dostupnosti knižníc, v Pythone označovaných moduly. Python má obrovské množstvo kvalitných knižníc na prácu s vedeckými výpočtami, grafikou, databázami, atď.

Realizovaný systém je založený na Pythone vo verzii 2.6.4. Používame moduly:

serial – pre komunikáciu so sériovým rozhraním

MySQLdb – pre komunikáciu s databázou

time – pre prácu s časom

datetime – pre prácu s dátumom

matplotlib – pre tvorbu grafov

image – na úpravu obrázkov

numpy – na matematické výpočty

Databázový systém MySQL

MySQL reprezentuje slobodný a otvorený, viac užívateľský, viacvláknový SQL relačný databázový server. MySQL je vydávaný vo verziách pre viacero platforiem napr. Linux, Windows a jeho podpora je implementovaná vo viacerých programovacích jazykoch ako Python, PHP alebo C++ . Databázový systém je relačný, typu DBMS (database management system). Každá databáza je v MySQL tvorená z jednej alebo z viacerých tabuliek, ktoré majú riadky a stĺpce. V riadkoch sa rozoznávajú jednotlivé záznamy, stĺpce udávajú dátový typ jednotlivých záznamov a pracuje sa s nimi ako s poľami. Práca s MySQL databázou je vykonávaná pomocou takzvaných dotazov, ktoré vychádzajú z programovacieho jazyka SQL (Structured Query Language).

MySQL je populárny pre jeho použitie vo webových aplikáciách a databázových komponentoch LAMP a WAMP platforiem (Linux/Windows-Apache-MySQL-Python/PHP/Perl) a pre jeho nástroje na hľadanie chýb ako Bugzilla, ktoré používajú otvorené zdrojové kódy.

MySQL Server je dostupný ako voľný software pod licenciou GNU General Public License (GPL), a je dostupný aj v komerčnej verzii ako MySQL Enterprise. Ako MySQL serverový software samotný, tak ak klientské knižnice sú distribuované pod dvojakým licencovaním. Užívatelia majú na výber GNU General Public License, ktorú MySQL rozšírila o FLOSS Licenčnú výnimku. Umožňuje v licencii nahradiť licencovaný software nahradením MySQL klientských knižníc inými OSI kompilátmi s licenciou Open Source, ktoré nie sú v zhode s GPL. Zákazníci ktorí si neželajú podmienky GPL si môžu zakúpiť zvláštnu licenciu. Podobne ako mnoho iných open-source programov, značka "MySQL" je chránená obchodnou známkou a môže sa použiť výhradne s povolením držiteľa práv.

Webový server Apache

Apache je otvorený webový server hrajúci kľúčovú úlohu od začiatku rozvoja siete Internet. Je vyvíjaný a udržiavaný komunitou vývojárov zastrešených pod Apache Software Foundation. Aplikácia je dostupná pre široký výber operačných systémov ako UNIX, GNU Linux, FreeBSD, Mac OS X, Windows. Od roku 1996 je Apache najrozšírenejší http server a v roku 2010 bol Apache nainštalovaný na 54,46% všetkých webových serverov [9].

Pre túto prácu bol Apache zvolený kvôli svojej dostupnosti v repozitároch hosťovského systému GNU Linux – Ubuntu 9.10 Karmic Koala, pre svoju jednoduchú konfigurovateľnosť a širokú podporu komunity. Najdôležitejšou skutočnosťou pre voľbu tohto web servera je možnosť doňho priamo implementovať interpreter jazyka Python pomocou modulu mod_python.


Modul mod_python

Mod_python predstavuje:

  • rozširujúci modul webového servera Apache, ktorý do servera zakomponuje interpreter jazyka Python, a tak serveru umožní vykonávať jeho skripty
  • serverový handler častí požiadavky, umožňujúci, aby bola ktorákoľvek časť požiadavky implementovaná v Pythone. Toto rovnako umožňuje aj pre filtre a handleri pripojení.
  • Rozhranie pre podmnožinu Apache API umožňujúce volať interné funkcie Apache z Pythonu. Toto poskytuje prístup k interným informáciám servera a máme možnosť využiť funkcie servera Apache, napríklad prístup k logom.
  • nástroje pre vývoj webových aplikácií. Poskytuje súbor štandardných handlerov: Publisher, PSP a CGI, z ktorých každý má alternatívny vývojový framework, rovnako ako súbor objektov a funkcií pre spracovanie cookies, session management a ďalšie úlohy bežné pri programovaní webových služieb.

Fragment kódu použitej funkcie pre načítanie parametrov z web stránky a odoslanie odpovede serveru Apache:

def handler(req,**params):   #názov funkcie ktorú volá metóda POST
req.content_type='text/html' #obsah je typu text/html
req.send_http_header()       #požiadavka na odoslanie hlavičky
for name in params.keys():   #načítanie parametrov
if name==t1:
t1=True
...........
s=““[http://ggaspar.selfip.com/ http://ggaspar.selfip.com]““ #reťazec, ktorý bude odoslaný serveru ako #odpoveď
req.write(s)                 #zápis odpovede
return apache.OK             #ukončenie komunikácie so serverom

Architektúra systému

Obr. 4.1 Architektúra systému distribuovaného merania

V systéme spolupracujú tri vrstvy podľa Obr. 4.1:

firmvérová vrstva – sprostredkováva komunikáciu s 1-Wire zariadeniami a nadradeným počítačom pomocou sériového rozhrania

záznamová vrstva – v stanovených časových intervaloch oslovuje firmvérovú vrstvu s požiadavkou na meranie, takto získané dáta ukladá do databázy

prezentačná vrstva – pomocou GUI pristupuje s používateľskou požiadavkou k databáze, spracováva dáta a vytvára výsledný graf

Takáto architektúra systému umožní prípadné rozšírenie na systém typu „enterprise“. Prezentačná vrstva je úplne oddelená a môže byť používaná z ktoréhokoľvek geografického umiestnenia, pričom sa môže pripájať k neobmedzenému počtu databázových serverov. Záznamová vrstva môže zasa komunikovať s neobmedzeným počtom meracích zariadení s rôznou geografickou polohou a zapisovať získané dáta do databázy.

Firmvérová vrstva

Firmvér pre mikroprocesor CY8C29466PXI bol napísaný v implementácii programovacieho jazyka C firmy Imagecraft. Predstavuje udalosťami riadený pseudo operačný systém vyobrazený na Obr 4.2.

Obr. 4.2 Firmvérová vrstva

V nekonečnej slučke sú vyhodnocované pseudo príkazy prijaté z rozhrania RS-232 a sú vykonávané definované postupnosti príkazov – diagnostické podprogramy SYS, DNR a ADR, a podprogram pre meranie teploty TMP.

Diagnostické podprogramy

Diagnostické podprogramy predstavujú účinný nástroj v kontrole pracovných stavov systému. Využiteľné sú najmä pri nastavovaní parametrov sériového rozhrania, pri riešení problémov 1-Wire siete a pridávaní ďalších 1-Wire zariadení.

Podprogram SYS

Je jednoduchý podprogram na Obr 4.3, ktorého úlohou je odoslať správu „System alive!“ na sériové rozhranie. Toto je základná diagnostická funkcia, ktorá používateľa informuje, že systém je funkčný, beží v slučke a dokáže zapísať do sériového rozhrania.

Obr. 4.3 Podprogram SYS

Fragment kódu ukazuje použitie funkcie modulu UART na zapísanie reťazca do sériového rozhrania a prechod na nový riadok:

UART_CPutString("System alive ...\r\n"); //zápis reťazca do sériového rozhrania
UART_PutCRLF();                          //prechod na nový riadok CR,LF

Podprogram DNR

Je podprogram podľa Obr. 4.4, ktorý osloví 1-Wire sieť s požiadavkou, aby sa pripojené zariadenia prezentovali prezenčným impulzom. Zariadenia, ktoré sa prezentovali sú spočítané a do sériového rozhrania je zapísaná informácia „DNR: xx“, kde xx reprezentuje súčet zariadení, ktoré odpovedali na požiadavku.

Obr. 4.4 Podprogram DNR

Tento podprogram využíva funkciu Get1WConfig, ktorá bola vytvorená pre použitie v podprogramoch DNR a ADR. Vo fragmente kódu je zobrazený prechod medzi jednotlivými zariadeniami:

OneWireSW_Reset();               //začiatok komunikácie 
if(OneWireSW_First()==0) return; //prejdeme na prvé zariadenie
OneWireSW_GetROM(scpArray);      //načítame adresu do poľa
devNum++;                        //inkrementujeme počet zariadení
.............
OneWireSW_Next();                //prejdeme na nasledujúci
OneWireSW_GetROM(scpArray);      //načítame adresu do poľa
devNum++;                        //inkrementujeme počet zariadení

Podprogram ADR

Tento podprogram slúži na zobrazenie adries pripojených zariadení. Postup je podobný, ako pri podprograme DNR. Podľa Obr. 4.5, osloví 1-Wire sieť s požiadavkou, aby sa pripojené zariadenia prezentovali prezenčným impulzom. Adresy zariadení, ktoré sa prezentovali sú postupne zapisované do sériového rozhrania v tvare „ADR: xxxxxx“, kde xxxxxx reprezentuje adresu zariadenia s dĺžkou 64 bitov.

Obr. 4.5 Podprogram ADR

Podprogram pre meranie teploty TMP

Úlohou tohto podprogramu je merať teplotu na základe používateľsky definovaného parametra. Parameter je 64 bitová adresa 1-Wire zariadenia. Tento parameter je zapísaný do 1-Wire siete a príslušné 1-Wire zariadenie vykoná meranie a jeho konverziu na 9-bajtový reťazec. Dáta sú následne načítané do pamäti mikroprocesora, ktorý z nich vypočíta CRC a porovná ho s CRC v reťazci na Obr. 4.6. Ak sú vypočítané aj načítané CRC rovnaké, do sériového rozhrania je zapísaný reťazec v tvare „adresa;teplota“, kde adresa predstavuje adresu teplomera a teplota zasa nameranú teplotu.

Obr. 4.6 Podprogram TMP

Fragment kódu zobrazuje postupnosť príkazov pri meraní teploty:

OneWireSW_Reset();           //začiatok komunikácie  
OneWireSW_WriteByte(0x55);   //príkaz MatchROM
for(i=0; i<8; i++) OneWireSW_WriteByte(scpArray[i]); //zapíšeme adresu po jednom bajte
OneWireSW_WriteByte(0x44);   //príkaz Convert Temperature
OneWireSW_SetStrong();       //nastavíme strongpullup
OneWireSW_Delay10mTimes(75); //750 ms na meranie
OneWireSW_SetResistive();    //nastavíme resistive
OneWireSW_Reset();           //koniec komunikácie

Meranie teploty začína vyslaním reset impulzu. Zápisom na adresu 0x55 zadávame sieti príkaz MatchROM, takže budeme zaručene komunikovať iba so zariadením, ktorého adresa sa vo všetkých 64 bitoch zhoduje s adresou, ktorú odošleme v nasledujúcom kroku. Adresa teplomera sa do siete posiela po jednotlivých bajtoch. Po odoslaní posledného bajtu adresy teplomera môžeme zapísať na adresu 0x44 príkaz Convert Temperature. V nasledujúcom kroku nastavíme pin mikroprocesora na StrongPullup, počkáme 750 ms na spracovanie merania a pin mikroprocesora nastavíme opäť na Resistive. Komunikácia končí odoslaním reset impulzu.

Časť kódu zobrazujúca implementáciu CRC funkcie:

OneWireSW_WriteByte(0x55);       //príkaz MatchROM
<nowiki>for(i=0; i<8; i++) OneWireSW_WriteByte(scpArray[i]); //zapisujeme po jednom bajte
OneWireSW_WriteByte(0xBE);       //príkaz Read Scratchpad
for(i=0; i<9; i++)               //v scratchpade je 9 bytov teploty
{
char znak=OneWireSW_ReadByte(); //do premennej vložíme načítaný bajt
char crc=OneWireSW_CRC8(znak);  //do premennej vložíme vypočítané CRC
if (i==8){                      //skontrolujeme, či sa CRC rovná
 if(crc==0) crctest=0;
 else crctest=1;
 }
UART_PutSHexByte(znak);         // znak vložíme do sériového rozhrania
}

Pri načítavaní nameranej hodnoty postupujeme pri adresovaní zariadenia podobne, ako v predchádzajúcom príklade. Ďalej načítavame do poľa namerané dáta po jednom bajte vyslaním príkazu Read Scratchpad na adresu 0xBE. V tomto kroku prebieha aj výpočet CRC, ktoré v poslednom prechode cyklu má byť rovné 0. Ak je CRC rovné 0, dáta sa odošlú do sériového rozhrania.

Záznamová vrstva

Jadrom záznamovej vrstvy je skript meranie.py napísaný v jazyku Python. Jeho úlohou je v zadaných časových intervaloch vysielať na sériové rozhranie požiadavky na meranie na jednotlivých teplomeroch, takto získané dáta spracovať a vo vhodnom formáte uložiť do databázy.

Po spustení skriptu najprv nastavíme komunikáciu so sériovým rozhraním a údaje na pripojenie sa k databáze. Do sériového rozhrania pošleme požiadavku na meranie s parametrom, ktorým je adresa teplomera. Zo sériového rozhrania načítame ako odpoveď 9-bajtový reťazec v hexadecimálnom tvare, z ktorého načítame bajty MSB, LSB a CRM. Z týchto dostávame výslednú teplotu v decimálnom tvare použitím nasledujúceho fragmentu kódu:

lsb=int(str[17:19],16)>>1 #výber lsb z reťazca, prevod na int a 1-bitovy posun vpravo
msb=int(str[19:21],16)    #vyber msb z reťazca a prevod na číslo
crm=int(str[29:31],16)    #vyber crm z reťazca a prevod na číslo
if msb==0:                #kontrola či je MSB kladné alebo záporné
teplo=(lsb-0.25+(float(16-crm)/16))
elif msb==255:
teplo=(-128+(lsb-0.25+(float(16-crm)/16)))
teplota="%4.2f" %teplo    #prevod čísla na reťazec 4 číslic, z toho 2 desatinných

Komunikácia po sériovom rozhraní

Komunikácia je zabezpečená použitím modulu serial. V nasledujúcom vzorovom kóde sú popísané základné funkcie:

import serial         #zahrnutie modulu ''serial'' do skriptu
ser = serial.Serial('/dev/ttyUSB0', 19200, timeout=1) #nastavenie parametrov sériovej komunikácie
ser.flushInput()      #vymazanie vstupného buffera 
ser.flushOutput()     #vymazanie výstupného buffera
ser.write('@TBM\r\n') #zápis príkazu na zber teploty do sériového rozhrania
str=ser.readline()    #načítam riadok s&nbsp;odpoveďou zo sériového rozhrania

Komunikácia s databázou MySQL

Zápis dát je vykonávaný prostredníctvom modulu MySQLdb.

import MySQLdb        #zahrnutie modulu ''MySQLdb'' do skriptu
conn=MySQLdb.connect(user="root", passwd="heslo", db="database") #nastavenie parametrov na pripojenie k databáze
cursor=conn.cursor () #vytvorenie kurzora pre konzolu MySQL
cursor.execute("INSERT INTO meranie (teplomer, datum, teplota) VALUES (%s,%s,%s)", (tep,cas,teplota)) #SQL príkaz pre vloženie riadku do tabuľky s&nbsp;použitím premenných

V tabuľke do stĺpca teplomer zapisujeme adresu zariadenia, do stĺpca dátum zapisujeme dátum a čas merania a do tabuľky teplota zapisujeme teplotu v decimálnom tvare na Obr. 4.7.

Obr. 4.7 Záznam v databáze SQL

Webová stránka

Na Obr. 4.8 je zobrazené GUI, pomocou ktorého sa nastavujú parametre odosielané na spracovanie. V pravej tabuľke s zaškrtávacími políčkami si používateľ vyberá, ktoré teplomery budú spracované. Ako pomôcka pri výbere slúži grafická legenda napravo od tabuľky, kde je vyznačená poloha jednotlivých teplomerov vzhľadom na povrch zeme a aj ich farebné označenie v grafe.

Obr. 4.8 Webová stránka

Po stlačení tlačidla „Lokalita“ sa zobrazí lokalita miesta merania pomocou Google Maps, a po stlačení tlačidla „Uložiť graf“ máme možnosť uložiť vytvorený graf vo formáte PNG.

V ľavej tabuľke sa nastavuje časové obdobie, za ktoré sa majú dáta spracovať. Po stlačení tlačidla „Zobraz“ sa zvolené parametre prenesú metódou POST na web server, kde sa ďalej spracujú modulom mod_python. Ako odpoveď je odoslaný HTML reťazec s lokalitou vygenerovaného obrázka. „Zobrazenie posledného záznamu“ zobrazí graf na Obr. 4.9 s bodmi umiestnenými podľa posledného záznamu v databáze.

Obr. 4.9 Zobrazenie posledného záznamu

„Zobrazenie za dnes“ zobrazí graf na Obr. 4.10 vytvorený v čase od 00:00 hod do aktuálneho času aktuálneho dňa.

Obr. 4.10 Zobrazenie za dnes

„Zobrazenie za týždeň“ na zobrazí graf Obr. 4.11 za posledných sedem dní, vytvorený v čase od 00:00 hod prvého dňa do aktuálneho času aktuálneho dňa.

Obr. 4.11 Zobrazenie za týždeň

„Zobrazenie za mesiac“ zobrazí graf na Obr. 4.12 za posledných tridsať dní, vytvorený v čase od 00:00 hod prvého dňa do aktuálneho času aktuálneho dňa.


Obr. 4.12 Zobrazenie za mesiac

Takto definované časové úseky sú pevne definované. Používateľ si však môže zvoliť časové obdobie pomocou dvoch okien na vkladanie dátumov.

Okná „Dátum od:“ a „Dátum do:“ slúžia na flexibilné nastavenie želaného časového obdobia na vyhodnotenie dát. Zobrazí sa graf na Obr. 4.13 za zvolený počet dní, vytvorený v čase od 00:00 hod prvého dňa do aktuálneho času aktuálneho dňa.

Obr. 4.13 Zobrazenie „Od: Do:



Záver

Cieľom práce bolo navrhnúť a implementovať systém pre zber teplotných dát z pôdneho profilu. V prvej časti práce boli predstavené technológie a realizácia hardvérovej časti a v druhej časti bola popísaná architektúra distribuovaného systému a  jej softvérové vybavenie. Výsledkom práce je funkčný technologický prototyp, na ktorom prebiehajú v súčasnosti merania.

Pravdepodobne najdôležitejším momentom pri realizácii senzorovej časti, bolo po výbere súčiastok rozhodnutie o type puzdra a jeho hydroizolácií. Vďaka zvolenému plastovému puzdru, ktoré bolo vyrobené na zákazku, majú jednotlivé senzory pevnú schránku, takže nie sú mechanicky namáhané. Ako izolačný materiál sa osvedčila silikónová pasta. Na konci novembra 2009, ani po približne mesiaci používania nedošlo k žiadnemu problému pri spracovaní signálu.

Architektúra distribuovaného systému bola zložená z troch vrstiev. Firmvérová vrstva má na starosti komunikáciu s nadradeným počítačom a so sieťou 1-Wire. Prijíma dáta od jednotlivých teplomerov, počíta ich CRC a odosiela ich do sériového rozhrania. Záznamová vrstva vysiela príkazy na meranie teploty a výsledné dáta ukladá do databázy. Prezentačná vrstva slúži na priamu interakciu s používateľom. Používateľ vyberá parametre vyhodnocovania zozbieraných teplotných dát, ktoré sú následne na webovom serveri spracované a ako odpoveď sa zobrazí vytvorený graf.

Grafické zobrazenie výsledkov meraní zobrazuje teploty namerané jednotlivými senzormi umiestnenými nad povrchom aj  pod povrchom pôdy. Najviac tepelne závislé sú senzory umiestnené nad povrchom. Priebeh meraní senzora umiestneného 10 centimetrov pod povrchom vykazuje zreteľný fázový posun oproti nadzemným senzorom. Senzor umiestnený najhlbšie má najmenšie odchýlky od stabilnej teploty.

Záujem o modifikáciu finálnej verzie systému na systém pre meranie teplotných strát v budovách bol prejavený správcom budov lokálnej firmy. Ďalšie využitie je možné pre meranie teplôt na rôznych konštrukciách napr. na mostoch. Výmenou senzorov za iný typ je možné zbierať údaje aj o iných fyzikálnych veličinách.

Budúci vývoj zahŕňa rozšírenie firmvéru, v ktorom bude zahrnuté aj číslo výrobku, obsahujúce údaje o použitej pamäti a RTC. Pomocou tohto čísla bude systém spolupracovať s aplikačným softvérom. Tento umožní používateľovi vytvoriť vlastnú konfiguráciu systému, ktorá môže pozostávať z viacerých meracích uzlov, viacerých databáz a meranie nebude obmedzené iba na päť teplomerov. Aplikácia bude obsahovať nastavenia periódy meraní jednotlivých teplomerov, spracovanie údajov do databázy a tvorbu grafov z rôznych zdrojov nameraných dát.


Použitá literatúra

  1. ASHBY, Robert. Designer's Guide to the Cypress PSoC. London : Elsevier, 2005. 273 s. ISBN 9780750677806.
  2. CYPRESS, Semiconductor Corporation. PSoC Programmable System-on-Chip : Technical Reference Manual (TRM). San Jose, USA , c2008. 572 s. Document No. 001-14463 Rev. *C. Dostupný z WWW: <www.cypress.com>.
  3. MAXIM, Integrated Products. Guidelines for Reliable Long Line 1-Wire Networks : AN-148. Sunnyvale, CA, USA : Maxim Integrated Products, 2008. 16 s. Dostupný z WWW: <www.maxim-ic.com>.
  4. MAXIM, Integrated Products.DS18S20 High-Precision 1-Wire Digital Thermometer. Sunnyvale, CA, USA : Maxim Integrated Products, 2008. 23 s. Dostupný z WWW: <www.maxim-ic.com>.
  5. NXP, B.V. The I2C bus specification : Version 2.1. Southampton, United Kingdom : NXP B.V., 2000. 46 s. Dostupný z WWW: <www.nxp.com>.
  6. RAMTRON, International Corporation. FM24V10 : 1Mb Serial 3V F-RAM Memory. Colorado Springs, CO, USA : Ramtron International Corporation, 2009. 15 s. Dostupný z WWW: <www.ramtron.com>.
  7. NXP, B.V. PCF8563 : Real-Time clock/calendar. Southampton, United Kingdom : NXP B.V., 2008. 32 s. Dostupný z WWW: <www.nxp.com>.
  8. Python Programming Language [online]. 2.6.4. 2009 [cit. 2010-04-02]. Www.python.org. Dostupné z WWW: <http://python.org/about/>.
  9. MySQL::The world‘s most popular open source database [online]. 5.1.45. 2010 [cit. 2010-04-02]. Dostupné z WWW: <http://www.mysql.com/why-mysql/>.
  10. The Apache Software Foundation [online]. 2.2.15. 2010 [cit. 2010-04-02]. Dostupné z WWW: <http://httpd.apache.org/ABOUT_APACHE.html>.
  11. Apache/Python Integration [online]. 3.3.1. 2009 [cit. 2010-04-02]. Dostupné z WWW: <http://www.modpython.org/live/current/modpython.pdf>.
  12. HARMS, Daryl; MCDONALD, Kenneth. Začínáme programovat v jazyce Python. Brno : Computer Press, 2003. 456 s. ISBN 80-7226-799-X.
  13. FABO, P., GAŠPAR, G., PAVLÍKOVÁ, S., ŠIROKÝ, P.: Methods of statistical evaluation of data from long-term measurement of soil temperature profile using open-source tools. Trenčianske Teplice: ISC Mechatronika 2010