Kody kreskowe w magazynie działają wtedy, gdy symbologia zapisana na etykiecie pasuje do skanera, a wydruk jest wystarczająco czytelny. Błąd w jednym z tych elementów kończy się nieodczytanym kodem, a w gorszym wypadku odczytem nieprawdziwej wartości.

Tekst idzie za procesem magazynu: od budowy kodu i etykiet GS1, przez kody dwuwymiarowe i druk, do doboru skanera. Zasady odczytu numerów seryjnych omawia osobno strona o skanowaniu numeru seryjnego.

Kody kreskowe w magazynie - budowa i odczyt

Zasada odczytu kodu liniowego

Graficzny zapis informacji za pomocą ciemnych i jasnych elementów nazywamy kodem kreskowym. Reguły jego budowy, czyli wymiary, zbiór kodowanych znaków i algorytm cyfry kontrolnej, opisuje symbologia. Ten sam ciąg cyfr wygląda więc inaczej w EAN-13, a inaczej w Code 128.

Czytnik laserowy prowadzi wąską wiązkę wzdłuż kodu i oświetla jeden punkt naraz. Jasne przerwy odbijają światło mocniej, a ciemne kreski słabiej, więc fotodioda dostaje sygnał o zmiennym natężeniu. Czas trwania każdego impulsu odpowiada szerokości elementu, a dekoder zamienia ciąg impulsów na cyfry lub litery i przekazuje je do komputera.

Podział kodów według wymiaru

Rodzaj koduSposób zapisu informacjiPrzykłady
Jednowymiarowy (liniowy, 1D)Informacja w jednej linii, najczęściej w postaci kresekEAN-13, Code 128, Code 39
Dwuwymiarowy piętrowyKilka linii kodu jedna pod drugą, rozwinięcie kodu liniowegoPDF417
Dwuwymiarowy matrycowyInformacja na powierzchni, zapisana polami zamiast kresekDataMatrix, QR
Kod złożonyPołączenie elementów kodu liniowego i dwuwymiarowegoGS1 Composite (kod liniowy z komponentem 2D)
Kod trójwymiarowyWytłaczany kod liniowy, odczyt na podstawie różnic głębokościOznaczenia tłoczone w metalu
Karton na palecie z dużym kodem QR i małymi kodami liniowymi na etykietach, na tle regałów magazynowych
Kody 1D i 2D na jednej paczce - etap identyfikacji jednostki przy przyjęciu towaru

Symbologie 1D w magazynie - EAN-13 i Code 128

W magazynie spotyka się kilka symbologii liniowych, bo każda powstała do innego zadania. Studio WMS.net generuje kody 1D i 2D dla dowolnego elementu magazynu, od pojedynczych artykułów po całe palety. Według opisu tego systemu najczęściej używa się w nim kodów EAN-128 (dziś GS1-128) i Code 39 oraz kodu 2 z 5 i EAN-13. Opis tego modułu znajduje się na stronie o kodach kreskowych w programie Studio Magazyn WMS.net.

SymbologiaZakres znakówTypowe zastosowanie w magazynie
EAN-1313 cyfr, ostatnia to cyfra kontrolna (GTIN-13)Jednostka handlowa, kod na opakowaniu jednostkowym skanowany także w sklepie
Code 128Pełny zestaw ASCII, w podzbiorze C pary cyfrAdresy lokalizacji, numery dokumentów, numery wewnętrzne
GS1-128Code 128 z FNC1 i identyfikatorami zastosowaniaEtykieta logistyczna palety i kartonu zbiorczego
Code 39Cyfry i wielkie litery oraz kilka znaków specjalnychStarsze oznaczenia wewnętrzne, prosta identyfikacja
ITF-14Wyłącznie 14 cyfr numeru GTIN-14Opakowanie zbiorcze i transportowe

EAN-13 identyfikuje produkt na świecie i nie mieści numeru partii ani daty ważności. Code 128 jest gęstszy niż Code 39, bo w podzbiorze C zapisuje dwie cyfry jednym znakiem, dlatego numer dokumentu zajmuje na etykiecie mniej miejsca. Kod 2 z 5 (ITF-14) występuje na kartonach zbiorczych i zawiera tylko GTIN-14, więc nie zastępuje etykiety logistycznej z SSCC.

Cyfra kontrolna GTIN

Ostatnia cyfra numeru GTIN chroni przed literówką przy ręcznym wpisaniu i przed błędnym odczytem. Wagi 3 i 1 mnoży się od prawej strony, sumę dopełnia się do pełnej dziesiątki, a wynik porównuje z cyfrą zapisaną w kodzie. Poniższy przykład w JavaScript pokazuje tę kontrolę w formularzu przyjęcia towaru.

// przykład: kontrola cyfry kontrolnej GTIN/EAN (algorytm GS1, wagi 3 i 1 liczone od prawej)
function gtinPoprawny(kod) {
  if (!/^(\d{8}|\d{12,14})$/.test(kod)) return false;
  const cyfry = kod.split('').map(Number);
  const kontrolna = cyfry.pop();
  let suma = 0;
  for (let i = cyfry.length - 1, waga = 3; i >= 0; i--, waga = 4 - waga) {
    suma += cyfry[i] * waga;
  }
  return (10 - (suma % 10)) % 10 === kontrolna;
}

gtinPoprawny('4006381333931'); // true
gtinPoprawny('4006381333932'); // false

Reguła: system odrzuca odczyt z błędną cyfrą kontrolną już na kolektorze, zanim wartość trafi do dokumentu magazynowego.

GS1-128 i identyfikatory zastosowania

Struktura etykiety logistycznej

W etykiecie GS1-128 obowiązują dodatkowe zasady ponad Code 128: po znaku startu wstawia się znak funkcyjny FNC1, a każde pole danych poprzedza identyfikator zastosowania (AI). Identyfikator mówi czytnikowi, jakie dane zaraz nastąpią i jak je interpretować. W tekście pod kodem AI zapisuje się w nawiasach, ale nawiasy nie wchodzą do samego symbolu.

Identyfikator (AI)Znaczenie polaFormat
00SSCC, numer jednostki logistycznej18 cyfr, stała długość
01GTIN jednostki handlowej14 cyfr, stała długość
10Numer partii produkcyjnejDo 20 znaków, zmienna długość
17Data ważnościRRMMDD, stała długość
37Liczba jednostek handlowych w jednostce logistycznejDo 8 cyfr, zmienna długość

Pola o zmiennej długości, jak numer partii, kończy znak FNC1, o ile po nich zapisano kolejne dane. Bez niego czytnik nie rozdzieli końca partii od początku następnego pola. Numer SSCC zaczyna się od cyfry rozszerzenia, po której następuje prefiks firmowy GS1 z numerem seryjnym, a kończy się cyfrą kontrolną. Etykieta logistyczna z SSCC pozwala śledzić paletę w całym łańcuchu dostaw, a jej opis publikuje GS1 Polska w opisie etykiety logistycznej.

Etykieta GS1 w systemie WMS

System magazynowy nadaje SSCC przy tworzeniu jednostki i drukuje etykietę, a przy kolejnych operacjach rozpoznaje paletę po jednym skanie. Wdrożenie takiego znakowania opisują strony o etykiecie GS1 w programie magazynowym WMS i o etykiecie logistycznej GS1 w wersji ogólnej. Przy dużych magazynach znakowanie lokalizacji i palet rozpatruje strona o wdrożeniu kodów kreskowych w magazynie wysokiego składowania.

Kontrola odczytu z etykiety i dokumentu

Po zeskanowaniu etykiety aplikacja rozkłada kod na pola i porównuje je z dokumentem. Numer SSCC znajduje w bazie jednostkę logistyczną, GTIN potwierdza towar, a AI 10 i AI 17 wskazują partię oraz termin. Jeśli GTIN z etykiety nie występuje na dokumencie przyjęcia, system zatrzymuje operację i prosi o decyzję.

Data ważności ma jedną pułapkę: dzień zapisany jako 00 oznacza ostatni dzień miesiąca, więc parser nie może traktować go jako błędu. Numer partii z kodu trafia do kartoteki partii, dzięki czemu późniejsza kompletacja wybiera towar według terminu, a nie według kolejności skanów.

Kody dwuwymiarowe DataMatrix i QR

Kody dwuwymiarowe zapisują dane w matrycy modułów, więc mieszczą znacznie więcej informacji na mniejszej powierzchni niż kody liniowe. Zawierają korekcję błędów, dzięki czemu odczyt udaje się mimo drobnego uszkodzenia. GS1 przewiduje kilka odmian kodów 2D, wśród nich GS1 DataMatrix i kod QR z GS1 Digital Link, co opisuje strona GS1 Polska o kodach 2D.

  • DataMatrix - bardzo mały kod, który mieści się na drobnych częściach i opakowaniach jednostkowych, dlatego znakuje się nim elementy elektroniczne i wyroby farmaceutyczne.
  • QR - większy kod z trzema wzorcami pozycjonującymi w narożnikach, czytany szybko z dowolnego kąta, także aparatem telefonu.

Odczyt kodu 2D wymaga skanera obrazowego (imagera), a nie lasera. Starszy skaner liniowy zobaczy z takiej etykiety wyłącznie kody 1D, jeśli je zawiera. Warianty czytników opisuje strona o kolektorze Motorola Symbol MC9090, który występuje z czytnikiem 1D albo 2D.

Korekcja błędów w kodach 2D opiera się na kodowaniu Reeda-Solomona. W kodzie QR wybiera się jeden z czterech poziomów korekcji, od L do H, które pozwalają odtworzyć odpowiednio około 7, 15, 25 i 30 procent uszkodzonych danych. Wyższy poziom oznacza jednak większy symbol przy tej samej treści, więc na małej etykiecie wybiera się go z umiarem.

Generowanie i druk etykiet z kodami

Generowanie kodu w systemie

Program magazynowy pozwala zdefiniować, na podstawie jakich danych powstaje kod. Procedura generująca tworzy obraz kodu i zapisuje go bezpośrednio w bazie SQL albo jako plik graficzny, na przykład PNG lub JPEG. Użytkownik zmienia rozmiar i gęstość kodu, a także inne jego parametry, a potem umieszcza go na etykiecie produktowej.

Obraz zapisany w bazie ułatwia zachowanie tej samej wersji etykiety przy ponownym wydruku. Plik graficzny nadaje się tam, gdzie etykietę drukuje osobny program. Przy druku wprost na drukarce termicznej często lepszy jest jednak kod generowany przez samą drukarkę, bo jest ostrzejszy niż obraz o niższej rozdzielczości.

Drukarka etykiet i język ZPL

Etykiety magazynowe drukuje się na drukarkach termotransferowych, w których taśma przenosi barwnik na etykietę, oraz na termicznych bezpośrednich, w których papier ciemnieje pod głowicą. Termotransfer daje trwalszy nadruk, a wydruk bezpośredni nadaje się do krótkotrwałych oznaczeń. Parametry przykładowej drukarki opisuje strona o drukarce Zebra ZM400.

^XA
^FXEAN-13 na etykiecie produktu, drukarka sama liczy cyfrę kontrolną^FS
^FO60,40^BY3,3,120^BEN,120,Y,N^FD590123412345^FS
^FXCode 128 z adresem lokalizacji^FS
^FO60,240^BY2,3,100^BCN,100,Y,N,N^FDA-02-05-3^FS
^XZ

Przykład poleceń ZPL dla drukarki Zebra pokazuje, że kod nie jest obrazem: drukarka sama buduje kreski z danych i szerokości modułu ^BY. Polecenie ^BE drukuje EAN-13 z 12 podanych cyfr i dolicza cyfrę kontrolną, a ^BC drukuje Code 128.

Drukarka etykiet z wyświetlaczem i wysuwającą się rolką etykiet z kodami na tle hali magazynowej
Drukarka etykiet w strefie wysyłki - etap, w którym dane z dokumentu zamieniają się w kod na etykiecie

Jakość wydruku i strefa ciszy

Parametry wydruku decydujące o odczycie

Szerokość najwęższego elementu kodu, czyli moduł, zależy od rozdzielczości drukarki. Przy 203 dpi jeden punkt ma około 0,125 mm, więc moduł dwupunktowy to około 0,25 mm. Zbyt wąski moduł powoduje, że kod czyta się dopiero z bliska, a rozmyty wydruk zlewa sąsiednie kreski. Wokół kodu potrzebna jest wolna strefa ciszy wolna od tekstu i ramek, bo skaner rozpoznaje w niej początek i koniec symbolu.

ObjawMożliwa przyczynaDziałanie
Kod czyta się tylko z bliskaZbyt wąski modułZwiększyć szerokość modułu w poleceniu wydruku
Skaner w ogóle nie widzi koduZa mała strefa ciszy lub ramka przy kodzieOdsunąć tekst i krawędź etykiety od symbolu
Wydruk jasny lub szaryZbyt niska temperatura głowicy albo zużyta taśmaZwiększyć ciemność druku, wymienić taśmę
Rozmyte, zlane kreskiZbyt wysoka temperatura lub zabrudzona głowicaZmniejszyć ciemność druku, wyczyścić głowicę

Jakość kodu ocenia się miernikiem zgodnie z normami serii ISO/IEC 15416 dla kodów liniowych i ISO/IEC 15415 dla dwuwymiarowych, które nadają ocenę od A do F. GS1 Polska oferuje weryfikację jakości kodów i etykiet, do której warto odesłać etykiety trafiające do partnerów handlowych. Dla etykiet wewnętrznych wystarcza próbny odczyt skanerem używanym w magazynie.

Reguła: po każdej zmianie szablonu lub taśmy drukuje się etykietę testową i czyta ją skanerem z hali, a nie tylko oglądaniem podglądu na ekranie.

Dobór skanera do symbologii i procesu

Skaner musi obsługiwać symbologie, których magazyn używa, a jego zasięg musi pasować do miejsca pracy. Przy przyjęciu towaru operator czyta kod z pół metra, na wysokim regale z kilku metrów. Do etykiet z kodem 2D potrzebny jest imager. Szczegółowe kryteria wyboru zawiera strona o programie magazynowym ze skanerem.

  • Skaner laserowy 1D - szybki odczyt kodów liniowych, dobry dla etykiet na regałach i kartonach.
  • Imager 2D - czyta kody liniowe i dwuwymiarowe oraz robi zdjęcia, więc pasuje do etykiet mieszanych.
  • Skaner bezprzewodowy - łączy się z kolektorem lub telefonem przez Bluetooth i zwalnia ręce operatora.
  • Kolektor ze skanerem - urządzenie z ekranem, na którym aplikacja WMS prowadzi operatora przez zadanie.

Czynniki wyboru skanera

Przy wyborze sprawdza się cztery cechy: obsługiwane symbologie, zasięg odczytu, odporność na upadki i pył oraz sposób przekazania odczytu do aplikacji. Skaner może wysyłać dane jako klawiaturę programową albo przez bibliotekę producenta, a różnica wpływa na to, czy aplikacja WMS dostaje surowy tekst, czy także informację o typie kodu.

Prefiks i sufiks dodawane do odczytu, na przykład znak Enter po kodzie, ustawia się w profilu skanera. Nieprawidłowa konfiguracja nie psuje dekodowania, ale powoduje, że wartość trafia w złe pole formularza albo formularz zatwierdza się przedwcześnie.

Wdrożenie skanowania łączy się z systemem WMS już na etapie przyjęcia towaru. Eliminuje to ręczne wprowadzanie danych w najwcześniejszym i najbardziej podatnym na błędy kroku procesu. Kolektory z Androidem opisuje strona o kolektorze danych Android WMS. System można sprawdzić w demo systemu magazynowego, a ofertę producenta przedstawia strona Studio WMS.net.