Softvérové vybavenie systému: Rozdiel medzi revíziami
Riadok 104: | Riadok 104: | ||
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. | 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. | ||
− | [[Image:dnr.png|thumb| | + | [[Image:dnr.png|thumb|125px|center|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: | 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: |
Verzia zo dňa a času 16:55, 22. jún 2010
Obsah
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]:
- 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++.
- 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.
- 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.
- GUI – schopnosť implementovať grafické používateľské prostredie je často dôležitá. V Pythone je zabezpečená pomocou modulu TK.
- vývojové prostredie – doteraz slabá stránka jazyka Python. Interaktívne prostredie IDLE zatiaľ nemôže konkurovať vývojovým prostrediam iných jazykov.
- 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.
- 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
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.
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.
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.
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.
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.
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.