Dokumentacja wstępna kody 2D

Transkrypt

Dokumentacja wstępna kody 2D
Krzysztof Leszczyński
Adam Sosnowski
Michał Winiarski
Projekt UCYF
Temat: Dekodowanie kodów 2D.
1. Opis zagadnienia
Kody dwuwymiarowe – nazywane często kodami 2D – stanowią uporządkowany zbiór
jasnych i ciemnych komórek o regularnych kształtach (kwadrat, prostokąt, koło, sześciokąt)
przedstawiający dane w postaci zgodnej z opisem dla określonej symboliki 2D.
Kody dwuwymiarowe mogą być piętrowe lub matrycowe. Większą popularność zyskały
symboliki matrycowe zapewniające możliwość większego zagęszczenia danych. Kody
matrycowe mają z reguły kształt kwadratu, tworząc unikalny wzór składający się z
kilkudziesięciu rzędów i kolumn.
Ten typ kodowania jest używany często do oznaczania dokumentów. Stosowany jest
także na przesyłkach w transporcie i spedycji. Często wykorzystywany jest także w przemyśle
elektronicznym.
Analizując stopień zastosowania różnych sposobów kodowania widoczna jest tendencja
stosowania kodów dwuwymiarowych w przemyśle, szczególnie w produkcji dóbr
wysokoprecyzyjnych (np. elektronika, medycyna, motoryzacja).
Najważniejsze zalety kodów dwuwymiarowych w stosunku do kodów liniowych to
możliwość umieszczenia na mniejszej powierzchni większej ilości informacji nadającej się do
automatycznego odczytu oraz lepszy sposób zabezpieczenia i kodowania danych
uwzględniający technikę wykrywania oraz korygowania błędów.
Jednym z najpopularniejszych kodów 2D jest kod Data Matrix, którego dekodowaniem
zajmiemy się w naszym projekcie.
2. Specyfikacja Data Matrix
Został opracowany przez firmę Robotic Vision Systems, Inc. Składa się z kwadratowych
modułów ułożonych wewnątrz wzorca wyszukiwania stanowiącego obwód symbolu.
Stosowane są dwa rodzaje kodów Data Matrix: ECC 00-140 i ECC200. Sześć schematów
kodowania sprawia, że można dobrać zapis kodu czyniąc go jak najmniejszym. Obecnie
polecanym standardem jest ECC 200. Pozwala na zakodowanie 2335 znaków
alfanumerycznych, 1556 znaków ośmiobitowych bądź 3116 znaków numerycznych. Używa
on efektywniejszych algorytmów do kodowania danych, wykrywania błędów i ich korekcji.
ECC 00-140 wykorzystuje kody splotowe, natomiast ECC 200 robi użytek z kodów ReedaSolomona.
Poniższa tabela przedstawia pojemność informacyjną kodu Data Matrix dla różnych
kombinacji wierszy/kolumn. Przedstawione liczby odnoszą się do trybu ECC 200.
Wymiary
Szczegóły
Pojemność informacyjna
8Wiersze Regiony Bajty Bajty ECC
Cyfry Alfanumeryczne bitowe
Kolumny danych danych błędów %
ASCII
10 x 10
1
3
5 62,5 6
3
1
12 x 12
1
5
7 58,3 10
6
3
14 x 14
1
8
10 55,6 16
10
6
16 x 16
1
12
12 50,0 24
16
10
18 x 18
1
18
14 43,8 36
25
16
20 x 20
1
22
18 45,0 44
31
20
22 x 22
1
30
20 40,0 60
43
28
24 x 24
1
36
24 40,0 72
52
34
26 x 26
1
44
28 38,9 88
64
42
32 x 32
4
62
36 36,7 124
91
60
36 x 36
4
86
42 32,8 172
127
84
40 x 40
4
114
48 29,6 228
169
112
44 x 44
4
144
56 28,0 288
214
142
48 x 48
4
174
68 28,1 348
259
172
52 x 52
4
204
84 29,2 408
304
202
64 x 64
16
280
112 28,6 560
418
278
72 x 72
16
368
144 28,1 736
550
366
80 x 80
16
456
192 29,6 912
682
454
88 x 88
16
576
224 28,0 1152
862
574
96 x 96
16
696
272 28,1 1392
1042
694
104x104 16
816
336 29,2 1632
1222
814
120x120 36
1050 408 28,0 2100
1573
1048
132x132 36
1304 496 27,6 2608
1954
1302
144x144 36
1558 620 28,5 3116
2335
1556
Przykład kodu Data Matrix:
Ramka określająca
orientację kodu
Ramka określająca
rozmiar macierzy
Zakodowane dane
3. Opis implementacji i algorytmu działania układu
Obrazek reprezentujący dwuwymiarowy kod zapisywany jest w postaci tablicy bitów
Tab[][]. Na podstawie rozmiaru tablicy określana jest maksymalna liczba znaków jaka może
być zapisana na obrazku. Przy pomocy komunikacji USB do układu dekodera przesyłana jest z
komputera informacja o wielkości obrazka i tablica bitów reprezentująca kod DataMatrix.
Pola czarne oznaczają bitową „1”, pola białe „0”.
Układ składa się z trzech głównych procesów: code, search_pos oraz read bit.
Proces code jest wykonywany tylko raz, zaraz po otrzymaniu danych z komputera. Na
podstawie wielkość zakodowanego obrazka generowana jest tablica pozycji poszczególnych
bitów kolejnych znaków zakodowanej wiadomości. Sposób tworzenia tablicy lokalizacji bitów
został przedstawiony na schemacie nr 1.
Procesy search_pos oraz read_bit wykonywane są naprzemiennie.
Proces search_pos przeszukuje kolejne pola utworzonej przez proces code tablicy pozycji,
odnajdując miejsca poszczególnych bitów zakodowanej wiadomości. Proces read_bit
sczytuje wartość danego pola i wstawia do ciągu bitów, reprezentującego zakodowany znak,
przesuwając bitowo w lewo poszczególne bity. W projekcie wykorzystywane jest kodowanie
ASCII, więc każdy znak składa się z ośmiu bitów. Naprzemienne wywoływanie procesów
search_pos i read_bit trwa do czasu skompletowania pełnej informacji o znaku. Gdy to
nastąpi znak jest odkodowywany. Procedura zostaje powtórzona dla kolejnych znaków
zakodowanej wiadomości, aż do momentu napotkania przez proces read_bit szczególnej
sytuacji, w której odkodowany znak jest informacją o końcu wiadomości. Odkodowana treść
zostaje przesłana do komputera w postaci znaków ASCII.
Zasada działania procesów search_pos i read_bit została przedstawiona na schematach.
Schemat 2 obrazuje proces tworzenie ciągu bitów reprezentujących znak, natomiast schemat
3 pokazuje zasadę odkodowywania znaku.
4. Symulacja działania dekodera.
Wynik kompilacji układu:
Poniżej zostały przedstawione wyniki symulacji dekodera. Pokazują one prawidłowe
działanie układu- wiadomość została zdekodowana poprawnie.
zakodowana wiadomość: „al5”
zakodowana wiadomość: „z5khx”
5. Interfejs układu
Nazwa sygnału
data_in1
data_in2
data_out1
data_out2
reset
data_in
data_out
Typ sygnału
IN
OUT
IN
OUT
IN
IN
OUT
Rozmiar
1 bit
1 bit
1 bit
1 bit
1 bit
64 bit
8 bit
Funkcja
Bit sterujący klienta
Bit sterujący układu
Bit sterujący układu
Bit sterujący klienta
Czyszczenie pamięci RAM
Pobieranie danych
Zwracanie wyników
data_in1
0
1
1
Pobieranie danych
data_in2
Stan
0
Bezczynność
0
Gotowość do wysłania
1
Transmisja
data_out1
0
1
1
Wysyłanie danych
data_out2
Stan
0
Bezczynność
0
Gotowość do wysłania
1
Transmisja
6. Struktura układu
7. Materiały:
- program służący do kodowania wiadomości do kodu DataMatrix:
http://sourceforge.net/projects/iec16022sharp/
-program sczytujący obrazek .BMP z zakodowaną wiadomością do tablicy bitów:
https://developer.berlios.de/project/showfiles.php?group_id=7751&release_id=11873
-(
(/"
* (
"
(+
,+-
+
(
!"0,#%
)
!"#
$%
'&
&
(
)
(
!"#
$
%
&
'&
(
)
)
!
!"#
$%
"!"+
)"-
(,!".,
,
!"#
)*
$
)*
%&&'
%&&'!$( #
++
++
)*
#,"
-/01'22
! "
-#$
&.
% #$% "
&'(#$)
'(#$*
&'( +
'( +