České vysoké učení technické v Praze Fakulta elektrotechnická
Bakalářská práce
Snímání čárového kódu pro pokladní systém
Martin Haberland
Vedoucí práce:
Ing. Martin Bloch, CSc.
Studijní program: Elektrotechnika a informatika B2612/2257 Obor: Výpočetní technika
2
Prohlášení Prohlašuji, že jsem svou bakalářskou práci vypracoval samostatně a použil jsem pouze podklady uvedené v přiloženém seznamu. Nemám závažný důvod proti užití tohoto školního díla ve smyslu §60 Zákona č. 121/2000 Sb., o právu autorském, o právech související s právem autorským a o změně některých zákonů (autorský zákon).
V Praze dne 3.1.2008
…………………………………………………………………………
3
4
Abstract This work is a result of investigation of the problem concerning technology of barcode and creating SW for its reading.
Abstrakt Práce je výsledkem zkoumání problému, který se týká technologie čárových kódů a tvoření SW pro jejich snímání.
5
6
Obsah Seznam obrázků Seznam tabulek 1 Úvod 2 Popis problému, specifikace cíle 2.1 Implementace 2.2 Snímací zařízení 2.3 Aplikační část 2.4 Úložiště dat 2.5 Cíle 3 Analýza 3.1 Základní princip čtečky čárových kódů 3.2 Vysvětlení činnosti CCD 3.2.1 Přípravná fáze 3.2.2 Expozice obrazu 3.2.3 Snímání obrazu 3.3 Čárové kódy 3.3.1 Kód 2 / 5 3.3.2 Kód EAN 3.3.2.1 EAN – 8 3.3.2.2 EAN – 13 3.4 RS-232 3.4.1 RS-232 obecně 3.4.2 Základní technický popis 3.4.3 Asynchronní komunikace 4 Realizace 4.1 Popis 4.2 Reader, writer 4.3 Jádro pokladního systému 4.3.1 Kontextový model 4.3.2 Popis implementace 4.3.3 Postup implementace 5 Testování 5.1 Commapi 5.2 Jádro pokladního systému 6 Závěr 7 Seznam literatury 8 Přílohy 8.1 Dokumentace projektu 8.2 Náhled GUI 8.3 Fragment kódu sériové komunikace 9 Seznam použitých zkratek 10 Obsah přiloženého CD
9 11 13 14 14 14 16 16 16 17 17 17 17 17 18 19 19 20 20 22 24 24 24 24 26 26 29 30 30 31 33 34 34 34 36 37 38 38 38 39 41 42
7
8
Seznam obrázků Obrázek 2.1: Nastavení parametrů sériového portu v operačním systému Obrázek 2.2: Schéma zapojení USB kabelu
15 16
Obrázek 3.1: Dopadající fotony na CCD a excitace elektronů Obrázek 3.2: Princip přeměny světelného záření na elektrický signál Obrázek 3.3: Ukázka čárového kódu
18 18 19
Obrázek 3.4: Struktura čárového kódu EAN-8 Obrázek 3.5: Čárový kód EAN-13 Obrázek 3.6: Logické stavy pro napěťové úrovně RS-232
21 22 25
Obrázek 4.1: Referenční čárové kódy pro nastavení dekódování čtečky čárových kódů Obrázek 4.2: Kontextový model – reader, writer Obrázek 4.3: Kontextový model jádra pokladního systému Obrázek 4.4: Obecný model MVC
28 29 30 31
9
10
Seznam tabulek
Tabulka 3.1: Kódovací tabulka pro kód 2/5 Tabulka 3.2: Kódovací tabulka pro EAN – 8 / EAN – 13
19 20
Tabulka 3.3: Základní struktura čárového kódu EAN-8 Tabulka 3.4: Obecný výpočet kontrolní číslice
20 21
Tabulka 3.5: Rozpoznání sad kódování 2. – 7. číslice. A,B,C jsou sady viz. Tabulka 3.2 Tabulka 3.6: Základní struktura čárového kódu EAN-13
23 23
Tabulka 4.1: Balíčky a implementované třídy. Písmeno „I“ před názvem označuje interface.
32
11
12
1 Úvod Tato studie je zamyšlením nad problematikou čárových kódů, jejich snímání a způsobu jak řešit a realizovat software (SW) pro aplikaci, která takto získaná data pomocí čárového kódu zpracovává. Úlohu můžeme rozdělit do tří částí a to na „snímací část“, „aplikační část“ a „úložiště dat“. Celá aplikace je programována v jazyku Java, komunikační cestou mezi snímací a aplikační částí je sériový přenos informací (dat) RS 232 a jako úložiště dat je volena databáze MySQL. Snímací část zde bude zastupovat již funkčně připravená čtečka čárových kódů se sériovým rozhraním, která bude připravena snímat („číst“) . V oblasti množiny čárových kódů se v této práci zaměříme na kódy a jejich kontrolní výpočty převážně používané v České Republice , okrajově budou zmíněny i další. Aplikační část – zastoupená vyvinutým SW zajišťuje správné a smysluplné zpracování dat, jako získání kódu, validace a použití pro získaní dat z databáze právě podle aktuálního čárového kódu. Úložiště dat představuje systém řízení báze dat (SŘBD), pro naše potřeby bude postačovat databáze MySQL. Věcí zkoumání je také způsob jakým docílíme vůbec prvotní (základní) přečtení kódu. Existují dvě technologie použití, a to snímání laserovým paprskem nebo LED (Light Emitting Diodes). V dnešním životě se můžeme dennodenně setkat s tímto způsobem snímání – v supermarketech, čerpacích stanicích a jistě by se našla spousta dalšího uplatnění, např. knihovny, půjčovny různého zaměření atd. Navazující částí této práce je převod informací ze světelného spektra do elektrické oblasti a dále vyhodnocení již elektrických informací, nebo-li dekódování takto získaných informací – dat. Zde bychom chtěli nastínit „umístění“ dekodéru a sice, že se může nacházet v aplikačních softwarech nebo je dekodér součástí snímacích zařízeních. Tato varianta tzv. interního dekodéru je dnes nejpoužívanější.
13
2 Popis problému, specifikace cíle 2.1 Implementace Řešení snímání čárových kódů můžeme realizovat několika způsoby. Jedním ze způsobů snímání čárových kódů je zakoupení celého systému. Další možností je pořízení snímacího hardwaru a použití již připraveného softwaru, jejichž spojením lze získat funkční systém. My se zde zaměříme na variantu, kdy budeme mít k dispozici snímací zařízení (čtečku čárových kódů). Aplikační SW budeme implementovat. Před vlastní implementací je potřeba pečlivě zvážit jaký použijeme programovací jazyk a jaký snímač. Protože se jedná o aplikaci, která má ke své úplné činnosti potřebné periferní zařízení, nabízí se programovací jazyk C++. Ale pojďme se podívat, jestli neexistují jiná řešení s programovacím jazykem, který by svým použitím přinesl nějakou významnou výhodu. Zde se nabízí jazyk JAVA, který se dnes spíše používá pro psaní rozsáhlých a bezpečných webových aplikací – skupina Enterprise Edition (J2EE), ale existuje i skupina, do které se Java řadí – skupina Standard Edition (J2SE). Ta postačí k tomu, abychom mohli řešit implementaci v jazyku Java. Srovnáme-li C++ a Javu z pohledu vnitřní reprezentace celého projektu, můžeme s klidným srdcem říct, že výsledkem bude objektově orientovaná struktura (OOP). Pohlédneme-li na věc z hlediska přístupu aplikace k určitému HW, v našem případě čtečky čárových kódů, potom je ve výhodě C++. K HW totiž můžeme přistoupit přímo přes API MS, kdežto u Javy tomu tak není, protože se jedná o interpretační jazyk, tj., že při překladu napsaného kódu programátorem nedojde k přeložení do binární podoby, ale do tzv. bajtkódu. Bajtkód zpracovává výše zmíněný interpret (JRE – java runtime enviroment, virtuální stroj). V tomto okamžiku narážíme na značný problém, který se na první okamžik zdá neřešitelný. Téměř jednoznačně vyniká C++. Pokud by se ale vyřešil problém s HW a API pro Javu, mohl by se použít programovací jazyk JAVA namísto C++. A proč? Protože právě tím, že aplikace psané v Javě jsou interpretované, se stávají platformově nezávislými, a to je dle našeho názoru výzva k tomu, abychom se pustili do hledání řešení přístupu k HW periferiím těchto „javovských“ SE aplikací. Po několikatýdenním zkoumání jsme zjistili, že tento problém (API) se dá pro Javu vyřešit balíčkem „comm32.jar“, který umožní komunikaci javovských aplikacích s HW přes sériové rozhraní RS232. Toto řešení není špatné, ale do praxe není moc vyhovující, proto jsme ještě dál hledali řešení s USB rozhraním, ale neúspěšně. Nicméně jsme zvolili variantu RS232, protože i tak dosáhneme platformové nezávislosti.
2.2 Snímací zařízení Zde stojíme před rozhodnutím kde a jaký druh pořídit. Otázka „kde“ je poměrně jednoduchá. Můžeme si zařízení půjčit nebo zakoupit. V našem případě byla otázka řešena zakoupením čtečky čárových kódů – model MT9062. Jaký druh, to už je zapotřebí promyslet z důvodu použitelnosti v praxi, ale také i na implementační možnosti (omezení). Druhem se zde rozumí, jaký bude mít čtečka způsob snímání – laserový nebo LED. Dále jde o komunikační rozhraní mezi čtecím zařízením a PC. Máme k dispozici buď USB (universal serial bus - sběrnice) nebo RS232 (sériová dvoubodová komunikace). Protože už víme, že budeme používat komunikaci RS232, volíme čtečku s tímto rozhraním a co se způsobu snímání týče, pro jednoduchou demonstraci plně
14
postačí čtečka s LED snímáním. Pro běžnou praxi je nutné použít laserovou čtečku s větší citlivostí a možností snímat čárový kód na větší vzdálenost. Dále narážíme na dosud nezmíněnou, značně nepříjemnou věc a sice, že čtečky s rozhraním RS232 mají vyvedené externí napájení (5 V) pro snímač CCD, což nám částečně komplikuje situaci. Této situaci se vyhneme, pokud budeme používat standardní stolní PC, u kterých výrobci, jak se zdá, s těmito problémy počítali. Datový a napájecí kabel čtečky je řešen tak, že napájecí část je vedena přes speciální zástrčku v PC do jeho napájecího zdroje, čímž se problém vyřešil. Jinak tomu je, když chceme aplikovat čtečku na notebooku. Jednak se již dnes téměř neobjevují notebooky s „vytaženým“ RS232 na panel, avšak jeho podpora je zajištěná – můžeme např. vyřešit dokovací stanicí, na které se už porty objevují. Toto řešení pro datovou část je sice elegantní ale cenově poněkud náročné a z toho důvodu byl problém řešen jinak. Byl použit USB – serial converter. Jedná se o konvertor, který „převede“ USB rozhraní počítače na RS232 a to je přesně to, co potřebujeme k naši „java“ aplikaci, která bude komunikovat s HW právě tímto způsobem. Použití konvertoru je značně jednoduché. Operačnímu systému přidáme HW a nainstalujeme ovládací SW konvertoru. Poté stačí mírná konfigurace, je-li potřebná.
Obrázek 2.1: Nastavení parametrů sériového portu v operačním systému Tímto máme vyřešen problém se sériovým rozhraním a připojení datové části čtečky k počítači, který nemá vyveden sériový port. Dále se musíme zabývat externím napájením pro CCD čtečky. Možností jak tento problém řešit je např. použít externí napájecí stabilizovaný zdroj (adaptér), který má sekundární stranu uzpůsobenou na el. napětí 5 V. Když bychom se podívali na řešení napájení čtečky USB, snadno zjistíme, že elektrické napětí 5 V je součástí USB rozhraní. Nebude tudíž asi obtížné „vyextrahovat“ napájení z USB rozhraní. Vše tedy naznačuje použít USB pro napájení CCD čtečky. Dosáhneme toho dle Obrázku 2.2.
15
Obrázek 2.2: Schéma zapojení USB kabelu Nyní můžeme říci, že máme připravené příznivé podmínky pro použití naší sériové čtečky jak po datové stránce, tak u externího napájení. Přitom jsme odbourali nutnost použití napájecího adaptéru, což je jistě cenově výhodnější a navíc je použití USB pro napájení je mnohem pohodlnější.
2.3 Aplikační část Tato část je vlastně jádrem systému, který má fungovat podle určitých pravidel a kritérií což jsou potencionální „aktéři“ na problém, který vyřešíme správnou implementací aplikační části. Aplikace by měla: Umět komunikovat se čtečkou čárových kódů. Být schopna přijmout obecná data po sériové lince. Zpracovat data, jedná-li se o čárový kód. Provádět odpovídající kontrolu – validaci kódu dle jeho typu. Umožnit vložit čárový kód ručně při poruše čtecího zařízení nebo poruše na lince. Manipulovat s kódem tak, že se podle něj najdou odpovídající data v systému řízení báze dat. 7. Obsahovat příjemné a užitečné uživatelské rozhraní – GUI.
1. 2. 3. 4. 5. 6.
2.4 Úložiště dat V této sekci lze říci, že žádné vážné problémy nenastaly. Pro ukládání dat je v této aplikaci zavedena databáze MySQL, která opět pro demonstrační účely plně vyhovuje. Částečným problémem je chybné kódování dat v databázi, nastavení kódování v java projektu při databázové komunikaci a nastavení kódování celého projektu. Toto kódování musí být všude stejné a to UTF-8. 2.5 Cíle 1. Zdokonalit aplikaci tak, aby byla schopna komunikovat se snímačem, který má USB rozhraní. 2. Vylepšit komunikaci tím způsobem, že bude možno provádět konfiguraci čtečky přímo z používaného SW. 3. Použití více typů čárových kódů za běhu aplikace. 4. Rozšíření o moduly, které zajistí plně funkcionální pokladní systém, síťové nasazení, skladové hospodářství, inventury, tisk čárového kódu a ovládání dalších periferií. 5. Záměrem je též uplatnění v praxi. 16
3 Analýza 3.1 Základní princip čtečky čárových kódů Základním kamenem je elektronická součástka používaná pro snímání obrazové informace. Uplatnění má například ve videokamerách, digitálních fotoaparátech, faxech, scannerech, čtečkách čárových kódů. CCD - pochází z anglického Charge-Coupled Device, což v překladu znamená zařízení s vázanými náboji. CCD využívá podobně jako všechny ostatní světlocitlivé součástky fyzikálního jevu známého jako fotoefekt. Tento jev spočívá v tom, že částice světla foton při nárazu do atomu dokáže přemístit některý z jeho elektronů ze základního do tzv. excitovaného stavu, tzn. že elektron opustí valenční pás atomu. Odevzdá mu přitom energii E=ν.h, kde ν je kmitočet fotonu (u viditelného světla v řádu stovek THz) a h je tzv. Planckova konstanta. V polovodiči se takto uvolněný elektron může podílet na elektrické vodivosti respektive je možno ho z polovodiče odvést pomocí přiložených elektrod. U CCD je ovšem elektroda od polovodiče izolována tenoučkou vrstvičkou kysličníku křemičitého SiO2, který se chová jako dokonalý izolant, takže fotoefektem uvolněné elektrony nemohou být odvedeny pryč.
3.2 Vysvětlení činnosti CCD 3.2.1 Přípravná fáze Během této fáze jsou z CCD bez přístupu světla odebrány všechny volné elektrony, čímž je z něho smazán jakýkoliv zbytek předchozího nasnímaného obrazu. 3.2.2 Expozice obrazu Na elektrody označené na obrázku 3.1. se přivede kladné napětí a na CCD se nechá působit světlo (například v digitálním fotoaparátu se otevře závěrka). Dopadající fotony excitují v polovodiči elektrony, které jsou pak přitahovány ke kladně nabitým elektrodám. Po elektronech zbudou v polovodiči tzv. díry, které vůči svému okolí vykazují kladný náboj a ty jsou naopak přitahovány elektrodou na spodku CCD. Hranice pixelů jsou na obrázku znázorněny svislými tečkovanými čarami. Protože na pixel vlevo dopadlo více fotonů, je u jeho elektrody shromážděno více elektronů než u pixelu vpravo.
17
fotony
Obrázek 3.1: Dopadající fotony na CCD a excitace elektronů 3.2.3 Snímání obrazu Po ukončení dopadu fotonů se začne na množiny elektrod 1, 2 a 3, viz. Obrázek 3.2 přivádět trojfázový hodinový signál (existují i CCD se čtyřfázovým nebo naopak dvoufázovým čtením). To v praxi znamená, že na elektrodách 2 se začne pozvolna zvyšovat napětí, zatímco na elektrodách 1 se souběžně snižuje. Díky tomu jsou shluky elektronů přitahovány pod elektrody 2. Následně se celý děj opakuje mezi elektrodami 2 a 3, dále mezi 3 a 1 a tak stále dokola. Shluky elektronů z jednotlivých pixelů se tak posouvají přes sousední pixely směrem k výstupnímu zesilovači (na obrázcích vpravo). Tento zesilovač pak zesílí malý proud odpovídající počtu nachytaných elektronů v jednotlivých pixelech na napěťové úrovně vhodné pro další zpracování obrazu.
Obrázek 3.2: Princip přeměny světelného záření na elektrický signál
18
3.3 Čárové kódy Čárové kódy už dříve nahrazovaly ruční práce, které představovaly sběr vstupních dat pro následné použití v různých aplikacích. Čárový kód není nic jiného, než tmavé a světlé mezery s předem definovanou šířkou viz. Obrázek 3.3. Smyslem toho je, že snímacím zařízením (čtečka čárových kódů, fax, scanner) přečteme tyto šířky mezer, transformujeme na posloupnost elektrických impulsů různé šířky a porovnáme s tabulkou přípustných kombinací. Pokud je posloupnost v tabulce nalezena, je prohlášena za odpovídající znakový řetězec. V dnešní době se používá kolem 200 různých kódů. Pro ukázku uvádím kód 2 / 5 a dnes nejrozšířenější a nejpoužívanější kód EAN.
Obrázek 3.3: Ukázka čárového kódu 3.3.1 Kód 2 / 5 Kód je tvořen pěticí čar pro jeden znak, z nichž vždy jsou tři úzké a dvě široké. Touto formou lze kódovat pouze číslice od 0 do 9. Poměr široké čáry ku úzké je 3 : 1. Široké mají hodnotu = 1 a úzké hodnotu = 0. Výhodou tohoto kódu je velká tolerance, díky které může fungovat i při menší kvalitě natištěného kódu, naopak nevýhodou je jeho poměrná délka. Důležitým dodatkem je, že mezery nenesou žádnou informaci.
ZNAK 0 1 2 3 4 5 6 7 8 9 Start Stop
ČÁRA 1 0 1 0 1 0 1 0 0 1 0 1 1
ČÁRA 2 0 0 1 1 0 0 1 0 0 1 1 0
ČÁRA 3 1 0 0 0 1 1 1 0 0 0 0 1
ČÁRA 4 1 0 0 0 0 0 0 1 1 1
Tabulka 3.1: Kódovací tabulka pro kód 2/5
19
ČÁRA 5 0 1 1 0 1 0 0 1 0 0
3.3.2 Kód EAN European Article Numbering (EAN) - jedná se o nejznámější čárový kód užívaný pro zboží prodávané v obchodní síti. Tento čárový kód může užívat každý stát zapojený do mezinárodního sdružení EAN International. Čárový kód EAN dokáže kódovat číslice 0 až 9, přičemž každá číslice je kódována dvěma čárami a dvěma mezerami. Může obsahovat buďto 8 číslic (EAN-8) nebo třináct číslic (EAN-13). První dvě nebo tři číslice vždy určují stát původu (např. ČR má číslo 859), dalších několik číslic (většinou čtyři až šest) určují výrobce a zbývající číslice kromě poslední určují konkrétní zboží. Poslední číslice je kontrolní, ta ověřuje správnost dekódování. Čísla jednotlivým státům přiděluje sdružení GS1 se sídlem v Bruselu. Čísla výrobcům přiděluje v České Republice GS1 Czech Republic.
ČÍSLICE 0 1 2 3 4 5 6 7 8 9
SADA A
SADA B
SADA C
0001101 0011001 0010011 0111101 0100011 0110001 0101111 0111011 0110111 0001011
0100111 0110011 0011011 0100001 0011101 0111001 0000101 0010001 0001001 0010111
1110010 1100110 1101100 1000010 1011100 1001110 1010000 1000100 1001000 1110100
Tabulka 3.2: Kódovací tabulka pro EAN – 8 / EAN - 13
3.3.2.1 EAN – 8 V tomto případě se kóduje 8 číslic, z toho první tři jsou identifikátorem země, další čtyři vlastní data a poslední osmá slouží jako kontrolní číslice. Každá číslice se kóduje dvěma světlými mezerami a dvěma tmavými čarami právě různých šířek podle velikosti bloku. Blok je definován jako základní šířka čáry nebo mezery. Kód má tuto základní strukturu:
START
V ý 101
DATA_L SADA A 1. – 4. číslice
DĚLÍCÍ ZNAK 01010
DATA_R
KONTROLNÍ ČÍSLICE
STOP
SADA C 5. – 7. číslice
VÝPOČET 8. číslice
101
Tabulka 3.3: Základní struktura čárového kódu EAN-8
20
BARCODE POZICE VÁHA VÝPOČET (v) VÁŽENÝ VÝPOČET (vv)
A LICHÁ 3 A*3
B SUDÁ 1 B*1
C LICHÁ 3 C*3
D SUDÁ 1 D*1
E LICHÁ 3 E*3
F SUDÁ 1 F*1
G LICHÁ 3 G*3
vv = A * 3 + B * 1 + C * 3 + D * 1 + E * 3 + F * 1 + G * 3
Tabulka 3.4: Obecný výpočet kontrolní číslice K výsledku váženého výpočtu najdeme nejbližší větší číslo „A“ takové, že: Amod10 = 0 Potom výpočet kontrolní číslice (kč) : kč = (Amod10 = 0) – vv Kódování kontrolní číslice : SADA C Příklad: Máme dán tento čárový kód (obr. 2). Uvedeme start / stop , dělící znak, kódování číslic a výpočet kontrolní číslice. Nejprve musíme určit základní šířku čáry, tj. určit blok – z obrázku níže :
Obrázek 3.4: Struktura čárového kódu EAN-8
21
Výpočet kontrolní číslice : vv = 5 * 3 + 5 * 1 + 1 * 3 + 2 * 3 + 3 * 3 + 4 * 1 + 5 * 3 vv = 53 Amod10 = 0
=>
A = 60
kč = A – vv kč = 60 – 53 kč = 7
Zakódování číslic : START 101 5 5 1 2
-
0110001 0110001 0011001 0010011
SADA_A SADA_A SADA_A SADA_A
DĚLÍCÍ ZNAK 01010 3 4 5 7
-
1000010 1011100 1001110 1000100
SADA_C SADA_C SADA_C SADA_C
kontrolní číslice
STOP 101
3.3.2.2 EAN – 13 V tomto případě se kóduje 13 číslic (Obrázek 3.5), z nichž první tři jsou opět identifikátor země (u nás 859), čtyři následující číslice udávají číslo výrobce přidělené na základě regionální specifikace, dalších pět číslic identifikuje výrobek a poslední (13.) číslice je kontrolní číslice. EAN – 13 se od EAN – 8 liší tím, že číslice 2. – 7. se nekódují vždy stejně, ale záleží na první číslici v kódu, která udává způsob kódování těchto číslic – viz. Tabulka 3.5.
Obrázek 3.5: Čárový kód EAN-13
22
1. ČÍSLICE
ČÍSLICE 2. – 7. AAAAAA AABABB AABBAB AABBBA ABAABB ABBAAB ABBBAA ABABAB ABABBA ABBABA
0 1 2 3 4 5 6 7 8 9
ČÍSLICE 8. – 13. CCCCCC CCCCCC CCCCCC CCCCCC CCCCCC CCCCCC CCCCCC CCCCCC CCCCCC CCCCCC
Tabulka 3.5: Rozpoznání sad kódování 2. – 7. číslice. A,B,C jsou sady viz. Tabulka 3.2
START
PRVNÍ ČÍSLICE
DĚLÍCÍ ZNAK
DATA_L SADA A, B
101
0–9
DATA_R SADA C
01010
2. – 7. číslice
8. – 12. číslice
KONTROLNÍ ČÍSLICE SADA C VÝPOČET 13. číslice
Tabulka 3.6: Základní struktura čárového kódu EAN-13 Výpočet kontrolní číslice: Je analogický s EAN – 8, s tím rozdílem, že pro výpočet použijeme prvních 12 číslic a otočíme navzájem váhy u lichých a sudých pozic číslic. Např.:
kontrolní číslice
Liché: Sudé:
(1+3+5+7+9+1) * 1 = 26 (2+4+6+8+0+2) * 3 = 66 92
kontrolní číslice = 100 – 92 = 8
23
Amod10 = 0
=> A = 100
STOP
101
3.4 RS-232
3.4.1 RS-232 obecně Standard RS-232, respektive jeho poslední varianta RS-232C z roku 1969, (také sériový port nebo sériová linka) se používá jako komunikační rozhraní osobních počítačů a další elektroniky. RS-232 umožňuje propojení a vzájemnou sériovou komunikaci dvou zařízení, tzn. že jednotlivé bity přenášených dat jsou vysílány postupně za sebou (v sérii) po jediném vodiči podobně jako u síťové technologie Ethernet nebo rozhraní USB. V současné době se v oblasti osobních počítačů od používání sériového rozhraní RS-232 již téměř definitivně ustoupilo a bylo nahrazeno výkonnějším Univerzálním Sériovým Rozhraním (USB). Nicméně v průmyslu je tento standard, především jeho modifikace standardy RS-422 a RS-485, velice rozšířen a pro své specifické rysy tomu tak bude i nadále. Na rozdíl od komplexnějšího USB, standard RS-232 pouze definuje, jak přenést určitou sekvenci bitů a nezabývá se už vyššími vrstvami komunikace. 3.4.2 Základní technický popis Standard definuje asynchronní sériovou komunikaci pro přenos dat. Pořadí přenosu datových bitů je od nejméně významného bitu (LSB) po bit nejvýznamnější (MSB). Počet datových bitů je volitelný, obvykle se používá 8 bitů, lze se také setkat se 7 nebo 9 bity. Logický stav „0“/„1“ přenášených dat je reprezentován pomocí dvou možných úrovní napětí, které jsou bipolární a dle zařízení mohou nabývat hodnot ±5 V, ±10 V, ±12 V nebo ±15 V. Nejčastěji se používá varianta při které logické hodnotě 1 odpovídá napětí -12 V a logické hodnotě 0 pak +12 V (Obrázek 3.6). Základní tři vodiče rozhraní (příjem RxD, vysílání TxD a společná zem GND) jsou doplněny ještě dalšími sloužícími k řízení přenosu (vstupy DCD, DSR, CTS, RI, výstupy DTR, RTS). Ty mohou a nemusí být používány (zapojeny), nebo mohou být použity pro napájení elektronických obvodů v zařízení, jako je například počítačová myš. Výstupní elektronika je vybavena ochranou proti zkratu, kdy po překročení proudu 20 mA proud již dále neroste. 3.4.3 Asynchronní komunikace I když komunikující zařízení znají rychlost, jakou se data přenášejí, musí přijímač začít přijímat ve správný okamžik, tedy musí proběhnout synchronizace. V případě synchronní komunikace souběžně s datovým vodičem existuje i synchronizační vodič, na kterém vysílač oznamuje přijímači „teď jsem poslal data“, viz LPT a signál STROBE. Naopak u asynchronní komunikace se synchronizační vodič nepoužívá, pouze vysílač pošle nějaká definovaná data po datovém vodiči, po jejichž přijetí se přijímač synchronizuje. V případě RS232 každé sekvenci datových bitů předchází jeden start bit, kterým se logická hodnota na lince přepne (původně v klidovém stavu) do opačného stavu. Po datových bitech následuje paritní bit a za ním jeden nebo více stop bitů, během kterých je linka opět v klidovém stavu. Je tak možné pro komunikaci použít méně vodičů na úkor určitého snížení rychlosti způsobeného synchronizací. K podobné synchronizaci dochází i u Ethernetu, kde na začátku každého rámce vyšle vysílač několik bajtů, ve kterých se střídají bity 0 a 1.
24
Obrázek 3.6: Logické stavy pro napěťové úrovně RS-232
25
4 Realizace 4.1 Popis Veškerý vývoj jádra pokladního systému začal nejprve úvahou nad programovacím jazykem, následně nad vývojovým prostředím, použitím typu databáze a jak realizovat sériový přenos dat. Již v úvodu jsme se rozhodli pro programovací jazyk Java a JDK 1.6 (Java Development Kit) z důvodu platformové nezávislosti. Vývojové prostředí je Elipse 3.2 a databáze je MySQL, která je součástí programu XAMPP for Windows Version 1.5.3a.Verze databáze je 5.0.21. Použité balíčky: 1. commapi 1.1 comm.jar 1.2 javax.comm.properties 1.3 win32com.dll 2. mysqlConnector 2.2 mysql-connector-java-5.0.4-bin.jar Commapi – sériová komunikace Mysqlconnector – driver pro JDBC (Java Database Connectivity) komunikační rozhraní databáze. Umístění souborů balíčků: Cesty pro nakopírování souborů budou uvedeny absolutně, podle našeho nastavení počítače, pro jiné PC jsou cesty analogické. comm.jar - C:\Program Files\Java\jdk1.6.0_01\jre\lib\comm.jar javax.comm.properties - C:\Program Files\Java\jdk1.6.0_01\jre\lib\javax.comm.properties win32com.dll - C:\WINDOWS\system32\win32com.dll mysql-connector-java-5.0.4-bin.jar - C:\Program Files\Java\jdk1.6.0_01\jre\lib\ext\ mysqlconnector-java-5.0.4-bin.jar Snímač čárových kódů: V projektu jsme použili čtečku čárových kódů od firmy Virtuos, která má následují technické parametry, které uvádí výrobce (http://www.virtuos.cz/scannery/mt906x.php): Šířka čtecího pole: 120 mm Hloubka čtecího pole: 0 - 50 mm Rozlišení: 4mils (0,1 mm) PSC (kontrastní poměr): minimálně 0,45 Rychlost snímání: 45 snímků/sec Zdroj světla: 660 nm červená LED (viditelné světlo) Snímač: CCD 2088 pixelů Napájecí napětí: 5 V ± 5 % Proudový odběr dekódování: - 65 mA ± 10 mA
26
Proudový odběr klidový: - 35 mA ± 5 mA Rozměry: (v x š x h) 185,5 x 89 x 27 mm Hmotnost bez kabelu: 120 g ± 5 g Kabel: výměnné kabely, délka 210 cm Pracovní teplota: 0°C až 50°C Skladová teplota: -20°C až 60°C Relativní vlhkost: 20% až 80%, bez kondenzace Shoda dle normy FCC class A a CE (EN55022 CLASS B, En50082-1) Čtecí režimy: se spouští, nepřetržitý (bez spouště) Rozhraní: RS232 Dekódování č.kódů: UPC-E, EAN-8, EAN-13, ISBN, ISSN, Interleave 2 of 5, Code 11, Code 32, Code 39, Code 93, Code 128, Codabar, MSI/Plessey, BC-412, JAN, China Post Code Pro správnou funkčnost musíme čtečku nakonfigurovat dle našich požadavků pro pokladní systém. Konfigurace čtečky se provádí typizovanými čárovými kódy, které jsou součástí manuálu od výrobce. Postup je takový, že např. potřebujeme-li číst kód EAN-8, najdeme v manuálu odpovídající čárový kód pro tuto konfiguraci a jednoduše čtečkou tento kód přečteme. Tímto jsme nastavili dekódování pro EAN-8. Uvedeme tedy konfiguraci čtečky pro náš systém. Nastavení se samozřejmě může měnit podle různých požadavků. Pro názornost uvádíme čárové kódy pro nastavení dekódování:
27
Obrázek 4.1: Referenční čárové kódy pro nastavení dekódování čtečky čárových kódů
Konfigurace: 1. 2. 3. 4. 5.
Dekódování čárových kódů – EAN-8, EAN-13 Snímání při zmáčknutí tlačítka Komunikace – RS232 Nastavení posílání sufixu za čárovým kódem – „K“ Akustická signalizace - zapnuta
28
4.2 Reader, writer Dříve než jsme začali se samotnou implementací jádra pokladního systému, potřebovali jsme vyzkoušet a rozběhnout komunikaci RS232 samostatně. Protože jsme v té době ještě neměli k dispozici snímač čárových kódů, znamenalo to nějakým způsobem použít balíček „comm.jar“ , který je určen pro účely sériové komunikace. Vytvořili jsme tedy testovací projekt, který obsahuje dvě třídy – Reader a Writer. Dále jsme do obou tříd projektu importovali výše zmíněný balíček (comm.jar). Míněnou funkcionalitu nastíníme následujícím modelem – Obrázek 4.2.
Uživatel
Uživatel
Vložení dat
WRITER
Zobrazení dat
DATA RS232
PC_1
READER
PC_2
Obrázek 4.2: Kontextový model – reader, writer Uživatel zadá vstupní data např. nějaký řetězec a WRITER provede zápis na příslušný sériový port – jeho jméno je pro testovací účely nastaveno přímo v kódu a odešle přes RS232 na druhý počítač kde už spuštěný READER tyto data „odposlechne“, přijme a zobrazí jinému uživateli. Naslouchání na sériovém portu je zajištěno vláknem, které se „probudí“ v okamžiku, když na portu vznikne událost – data jsou k dispozici. Data se čtou tak dlouho, než vstupní stream (vstupní proudění dat) nepozná, že se jedná o konec datového řetězce, který signalizuje -1. Tento sice jednoduchý, ale podstatný model se nám podařilo implementovat a rozběhnout. Podstatný protože je vlastně i základním modelem pro jádro pokladního systému. Tzn., že pokud provedeme jistě potřebné úpravy ve třídě Reader, budeme moci třídu použít. Jedná-li se o třídu Writer, tak tuto nahradí snímač čárových kódů.
29
4.3 Jádro pokladního systému Dostáváme se k vlastnímu jádru pokladního systému, řešení nastiňuje jeho model na Obrázku 4.3. 4.3.1 Kontextový model Čárový kód
Databáze SELECT podle čárového kódu
Odražený světelný paprsek Světelný paprsek
Data dle selectu
Snímač čárových kódů
Pokladní systém Zobrazení dat
Poslání dat
Uživatel Uživatel
Ruční zadání nebo editace čárového kódu
Validace
Obrázek 4.3: Kontextový model jádra pokladního systému Ze snímače čárových kódů je vysláno červené světlo, které má v našem případě vlnovou délku 660 nm. Po dopadu na tmavé místa čárového kódu dojde k pohlcení světla a naopak od světlých míst se světlo odrazí zpět do CCD snímače. Ve čtečce nejdříve dojde k vyhodnocení tmavých a světlých úseků kódu a potom se tyto informace dekódují interním dekodérem, přičemž znovu uvádíme, že typ dekódování je vždy poplatný nastavení vnitřního dekodéru. Čtečka takto dekódovaný čárový kód pošle do jádra pokladního systému, kde se dále zpracovává. Jako první proběhne validace zaslaného čárového kódu. Pokud je vše v pořádku, kód se odešle do databáze a jako výsledek se nám vrátí data , která jsou podle něj vybrána. Jestliže se v databázi kód nenalezne, potom jsou vrácená data nulová a uživatel obdrží informační zprávu – data nenalezena. Pokud validace skončí chybou tak uživatel dostane zprávu o tom, že čárový kód je nevalidní. V tomto případě má uživatel možnost čárový kód „ručně“ opravit, nebo ho zadat celý znovu a odeslat do databáze.
30
4.3.2 Popis implementace Nyní se zaměříme jak jsme implementovali jádro pokladního systému. Aplikaci jsme psali, jak je výše uvedeno, v programovacím jazyku Java, ke kterému nepochybně patří objektově orientované programování. Z toho vyplívá, že způsob implementace je objektově zaměřen. Aplikace je navržena podle MVC (model view controler) a tvoří ji jednotlivé balíčky, které obsahují třídy a interfaces. Základní rozdělení aplikace je na „frontend“ a „backend“. Frontend – zadávání, zobrazování dat, komunikace s uživatelem. Backend – přístup k datům, vkládání / výběr z (do) databáze, zápis / čtení ze (do) souboru, komunikace s periferii – RS232, USB, LPT. Implementačně to znamená, že frontend komunikuje s backendem. Frontend buď zašle data na backend a ten je zpracuje (zápis, uložení) nebo jsou data požadována na frontendu, potom backend provede čtení nebo výběr dat a předá je na frontend.
TO
ASEMBLER
POJO
DAO
GUI
MANAGER
databáze
Obrázek 4.4: Obecný model MVC Frontend: GUI TO
-
obecné uživatelské rozhraní transportní objekt, getter / setter
Backend: MANAGER DAO POJO ASEMBLER -
manager dat data access object, přístup k datům plain old java object, databáze přesetování TO na POJO a naopak, getter / sester
31
GUI Požadavkem je také komunikace s uživatelem. Toto je řešeno použitím GUI (grafic user interface). GUI je postaveno na knihovně „javax.swing“ a jejími třídami. Dále je GUI implementováno tak, že se automaticky přizpůsobuje rozměrům obrazovky. Změny velikosti komponent a celého GUI je zajištěno layout managery. Pokud aplikaci pustíme na větším monitoru, layout automaticky přepočítá velikosti komponent (výška a šířka) a přizpůsobí je rozměrům obrazovky. Při použití menšího monitoru, jsou šířky a délky komponent zmenšeny. Toto je výhoda pro použití v praxi, protože se někde používají větší a někde menší monitory. Dále je uživatelský interface koncipován tak, že ovládací prvky (tlačítka) jsou větších rozměrů, protože jsme počítali i s tím, že v praxi může být použit dotykový LCD (Liquid Crystal Display) panel. Uživatel tedy může aplikaci ovládat i dotykově. Balíčky frontend.form backend backend.DAO TO util.databaze util.properties util.validateData
Třídy GeneralForm ISerialDataManager ISerialDataDAO ArticleTO ConnectionToDB Configurator Validator
SerialDataManager SerialDataDAO
IArticleManager IArticleDAO
ArticleManager ArticleDAO
Tabulka 4.1: Balíčky a implementované třídy. Písmeno „I“ před názvem označuje interface.
Popis tříd a interfejsů ArticleDAO Třída přistupuje přímo k datům. Z databáze vrátí data podle čárového kódu. ArticleManager Manager získá celý objekt ArticleTO od ArticleDAO. ArticleTO Transportní objekt, obsahuje jednotlivé properties (proměnné) a k nim gettry a settry. Configurator Tato třída zajišťuje čtení dat z konfiguračního souboru podle klíče. Konfigurační soubor application.properties je textový a je určen pro konfigurační nastavení aplikace. Pomocí tohoto souboru konfigurujeme název sériového portu (COM1, COM2 … ) a typ čárového kódu (kódování EAN8 nebo EAN13). ConnectionToDB Konektivita s databází. Jako rozhraní pro spojení používáme JDBC (Java Database Connectivity) a pro databázi MySQL driver (ovladač) mysql-connector-java-5.0.4-bin.jar. GeneralForm Třída GeneralForm dědí třídu Frame a představuje uživatelské rozhraní.
32
IArticleDAO Interface pro ArticleDAO. Metody:
public ArticleTO getArticleByBarcode(String Barcode)
IArticleManager Interface pro ArticleManager. Metody:
public ArticleTO getArticleByBarcode(String Barcode)
IConnectionToDB Interface pro ConnectionToDB. Metody:
public void doConnectin()
ISerialDataDAO Interface pro SerialDataDAO. Metody:
public void doConnection()
ISerialDataManager Interface pro SerialDataManager. Metody:
public void connectionToSerialPort()
SerialDataDAO Třída, která komunikuje se snímačem čárových kódů přes rozhraní RS232. Přijme data, zpracuje a zašle je třídě GeneralForm. SerialDataManager Volá třídu SerialDataDAO a její metodu doConnection() ke komunikaci se snímačem. Validator Třída pro validaci čárových kódů, které jsou přečteny čtečkou čárových kódů a také, které může uživatel zadat ručně.
4.3.3 Postup implementace 1) 2) 3) 4) 5) 6) 7)
Vývoj kostry systému GUI Spuštění bez implementace těl metod Spuštění a rozběhnutí databáze Spuštění s testovacími daty Implementace těl metod pro ostrá data Spuštění i s implementací metod a databází
33
5 Testování Testování všech dílčích částí probíhalo při tvorbě projektu. 5.1 Commapi V první fází testování bylo úkolem vyzkoušet balíček „comm.jar“. Postup byl takový, že pomocí předpřipravených programů (examplů), které byly součásti „commapi“ jsme na příkazový řádek vypisovali seznam portů, které jsou v aktuálním počítači k dispozici. Další zkouškou bylo tyto porty otevřít a zavřít. Všechny testy proběhly úspěšně. Potom jsme pomocí výše uváděného writeru a readeru provedli test komunikace mezi dvěma počítači. Počítače byly propojeny sériovým kabelem s koncovými konektory Cannon 9. Na prvním počítači, kde byl spuštěn writer jsme na příkazový řádek zadali libovolný vstupní řetězec a přes RS232 byl odeslán na druhý počítač, kde byla data přijata, zpracována a na konec vytištěna na příkazovou řádku. Tento test proběhl úspěšně. 5.2 Jádro pokladního systému V druhé fázi jsme se zaměřili na testování projektu v časové posloupnosti tak, jak byl systém vyvíjen. Testování rozdělíme na jednotlivé části a na konec bude test systému jako jednoho celku. Snímací část Čtečku čárových kódů jsme nejprve testovali na programu staženém z webu (Advanced Serial Data Logger). Zkoušeli jsme různé konfigurace čtečky, zejména nastavení dekódování, posílání prefixu, sufixu a čtení příslušných čárových kódů. Na tomto testovacím programu proběhlo vše v pořádku – test byl úspěšný. Potom jsme použili naši třídu reader a očekávali stejný výsledek jako s programem z webu. Na první pokus se test nezdařil. Po několika iteracích jsme provedli úpravy ve čtecím vláknu třídy reader. Problém byl v tom, že ve čtecí smyčce jsme očekávali konec dat jako -1. Jenomže data na sériovém portu zůstávala až do dalšího načtení (jiného čárového kódu). Tedy při startu čtení z portu jsme ve smyčce „přeiterovali“ a vždy jsme se dostali na ta samá data ještě jednou. Vlastně tím, že data na portu byla stále k dispozici, jsme nedokázali poznat konec řetězce (-1). Tento problém jsme vyřešili posláním sufixu „K“ (za čárovým kódem), na který jsme ve smyčce čekali. Po nalezení sufixu smyčka končí a sériový port je vynulován. Po této úpravě se již podařilo úspěšně a bez chyb načíst čárový kód. Test dopadl na konec také úspěšně.
Aplikační část U této části proběhla zkouška frontendu a backendu. Nejdříve jsme testovali GUI (frontend) – zobrazení, vystředění na obrazovce, rozložení komponent a layout managery. Tyto testy proběhly po několika zkouškách úspěšně. Backend byl nejprve zkoušen bez implementace metod a bez databáze, pouze jako kostra, která musí fungovat aniž by program vypsal nějakou výjimku. Tato zkouška dopadla ihned v pořádku. Dále jsme do holých metod naimplementovali těla s testovacími daty (místo databáze) a přes debug mode jsme ověřili správnost celé kostry backendu. Test byl úspěšný. Zkušební těla metod a data jsme ještě ponechali a spojili jsme frontend s backendem a ověřili
34
správnou funkčnost zobrazení zkušebních dat. Opačně jsme ještě otestovali v debug modu cestu z frontendu na backend. Tady jsme vložili data přímo do grafického formuláře a sledovali jestli se tato data dostanou na správné místo v backendu. Debugování bylo o úspěšné.
Úložiště dat Databázi jsme nainstalovali a ručním psaním SQL dotazů jsme vkládali a vyhledávali data. Test proběhl ihned úspěšně. Následně bylo provedeno napojení jádra pokladního systému na databázi. Nejprve proběhla zkouška konektivity a pak vyhledání dat podle čárového kódu. Zkouška byla úspěšná. Ještě jsme kontrolovali správnost kódovaní dat v databázi. Nastavením kódování UTF-8 jsme zaručili bezchybné zobrazování dat v aplikaci.
35
6 Závěr Při této prácí jsme měli možnost porozumět principu snímání čárových kódů a orientovat se ve snímačích čárových kódů. Dále jsme si vyzkoušeli pracovat se sériovou komunikací RS232 a řešit problematiku sériových portů. Největším úskalím bylo vyřešit problém datové komunikace a externí napájení snímače při použití počítače, který nemá sériový port fyzicky umístěný na panelu. Naprogramovali jsme aplikaci, která demonstruje jádro pokladního systému. Úmyslem do budoucna je použít toto jádro v komplexním pokladním systému. V případě, že bychom měli na vývoj větší časový prostor, aplikace by mohla mít větší rozsah své funkcionality. Rádi bychom doplnili funkci návrhu a tisku čárového kódu na samolepící štítky, ovládání dalších periferních zařízení, které k pokladnímu systému patří. K zamyšlení se také nabízí, jak řešit síťový systém. Řešením vzniklých problémů jsme si odnesli několik zajímavých poznatků z oblastí snímání čárových kódů. Zejména pak princip, na kterém je kódování a dekódování založeno, počet typů méně či více používaných kódů v praxi.
36
7 Seznam literatury [1] Pavel Herout. Java – bohatství knihoven. České Budějovice, 2003. [2] EZ One Shot, CCD Scanner. Programovací příručka. [3] Zapojení USB kabelu. http://www.pr-software.net/document/usb-kabel/ [4] Diskuzní forum: Java. http://forum.builder.cz/list.php?14,page=1 [5] CCD–MT9062/9063/9065 CCD čtečka čárového kódu. http://www.virtuos.cz/scannery/mt906x.php) [6] RS-232. http://cs.wikipedia.org/wiki/RS-232 [7] Nejpoužívanější typy čárových kódů. http://www.kodys.cz/carovykod/nejpouzivanejsich-typu-carovych-kodu/ [8] The Java Communications API. http://www.particle.kth.se/~lindsey/JavaCourse/Book/Part3/Chapter23/commAPI.html [9] Čárový kód. http://www.kodys.cz/carovy-kod%7C1/ [10] HW server představuje - RS-232. http://rs232.hw.cz/ [11] DS EAN/UPC fontware. http://64.233.183.104/search?q=cache:Z_8i3lQ2NIIJ:www.developservice.cz/0/doc_ean upc.pdf+k%C3%B3dovac%C3%AD+tabulka+pro+EAN&hl=cs&ct=clnk&cd=5&gl=cz &lr=lang_cs [12] EAN-8 SYMBOLOGY. http://www.barcodeisland.com/ean8.phtml#Example
37
8 Přílohy 8.1 Dokumentace projektu
8.2 Náhled GUI
38
8.3 Fragment kódu sériové komunikace try { // získání identifikace portu portList = CommPortIdentifier.getPortIdentifiers(); // ziskani konkretni ID portu do { portId = (CommPortIdentifier) portList.nextElement(); } while (!portId.getName().equals(NAME_PORT)); // porovnání typů portů, pokud najdeme PORT_SERIAL pokračujeme dál if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) { // porovnání nazvu portu portName = portId.getName(); if (portName.equals(NAME_PORT)) { try { // identifikátor portu, otevření portu 2000 serialPort = (SerialPort) portId.open("ReadPort", 2000); } catch (PortInUseException e) { // vyjímka, port je obsazen System.out.println("Obsaz " + e); }
try { // čtecí stream seriového portu, vstupní proud dat inputStream = serialPort.getInputStream(); } catch (IOException e) { System.out.println("Read " + e); // vyjímka IO } try { // přidání pusluchače k seriovému portu serialPort.addEventListener(this); } catch (TooManyListenersException e) { System.out.println("Listerner " + e); } serialPort.notifyOnDataAvailable(true); try { // nastavení parametrů ser. portu serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); } catch (UnsupportedCommOperationException e) { System.out.println("Operation " + e);
39
} } } } catch (Exception e) { System.out.println(e); } }
40
9 Seznam použitých zkratek SW - Software MySQL - Databáze SŘBD - Systém řízení báze dat LED - Light Emitting Diodes C++ Programovací jazyk J2EE - Java 2 Enterprise Edition J2SE - Java 2 Standard Edition OOP - Object orient programing / objektově orientované programování HW - Hadware API MS - Application binary interface / rozhraní knihoven pro Microsoft JRE – Java runtime enviroment API - Application binary interface / rozhraní knihoven PC - Computer / počítač USB - Universal serial bus / univerzální sériová sběrnice CCD - Charge-Coupled Device / zařízení s vázanými náboji. GND - System Ground / zem proti které spínají binární výstupy GUI - Grafic user interface / grafické uživatelské rozhraní UTF-8 - Transformation Format / kódování řetězců znaků Unicode SiO2 - Kysličník křemičitý EAN - European Article Numbering / Evropské číselné kódování EAN-13 - European Article Numbering 13 / Evropské číselné kódování 13 číslic EAN-8 - European Article Numbering 13 / Evropské číselné kódování 8 číslic RS-232 - Sériová komunikace RS-422 - Sériová komunikace RS-485 - Sériová komunikace LSB - Označení nejméně významného bitu RxD - Receive Data / příjem dat TxD - Transmit Data / vysílání dat DCD - Data Carrier Detect / detekce nosného kmitočtu DSR - Data Set Ready / data připravena CTS - Clear to Send / vynulování dat (komunikační cesta volná) RI - Ring Indicator / signál zvonění DTR - Data Terminal Ready / data připravena RTS - Request to Send / žádost o odeslání dat LPT - Line Print Terminal / paraelní komunikace (port) STROBE - signál v paraelní komunikaci indikuje zahájení zápisu dat JDK - Java Development Kit JDBC - Java Database Connectivity PSC - Kontrastní poměr MVC - Model view controler TO - Transportní objekt DAO - Data access object, přístup k datům POJO - Plain old java object LCD - Liquid Crystal Display debug - Mód, ve kterém se odlaďují chyby softwaru SQL - Structured Query Language
41
10 Obsah přiloženého CD Popis jednotlivých adresářů:
\html\doc\
HTML dokumentace projektu
\src\databaze\
instalační balíček XAMPP (databáze MySQL)
\src\java\
instalační balíček Java Runtime Enviroment JRE 1.6
\src\knihovny\commapi\
soubory pro commapi
\src\knihovny\mysql-connector-java-5.0.4\ Driver mysql-connector
\src\zdrojoveSoubory\
zdrojové soubory projektu
\text\
PDF soubor bakalářské práce
\data\
bakalárská práce ve formátu *.doc.
\readme.txt
popis obsahu jednotlivých adresářů
\index.html
úvodní stránka
42