Błąd w szablonie etykiety rzadko widać przy druku. Papier wychodzi z drukarki, kod wygląda poprawnie, a kłopot pojawia się kilka dni później, gdy odbiorca odrzuca dostawę. Szablon w języku ZPL jest zwykłym tekstem, więc da się go zbudować, a potem sprawdzić, zanim paleta wyjedzie z magazynu.
Spis treści
- Dlaczego drukarka przyjmuje kod, a nie obraz
- Podstawowe komendy języka ZPL
- Tokeny danych w szablonie
- Kodowanie danych GS1 w polu kodu
- Podgląd wydruku i plik gotowy do wysłania
- Sprawdzenie szablonu parserem przed drukiem
- Dobór parametrów do rozdzielczości głowicy
- Pytania i odpowiedzi o projektowanie etykiet ZPL
- Glosariusz pojęć związanych z etykietami ZPL
Dlaczego drukarka przyjmuje kod, a nie obraz
Drukarka biurowa dostaje gotowy obraz strony. Drukarka etykiet otrzymuje opis tekstowy i sama rysuje etykietę. ZPL opracowała firma Zebra Technologies, a obsługują go także urządzenia innych producentów. Opis etykiety zajmuje kilkaset bajtów, obraz tej samej etykiety setki kilobajtów, więc przy druku seryjnym różnica liczy się w czasie oczekiwania.
Ważniejszy jest drugi powód. Kod kreskowy rysowany przez drukarkę powstaje w rozdzielczości głowicy i ma ostre krawędzie. Obraz przeskalowany z innej rozdzielczości daje rozmyte kreski, które czytnik odczytuje gorzej, szczególnie pod kątem.
Podstawowe komendy języka ZPL
Komendy formatowania zaczynają się od daszka, a komendy sterujące drukarką od tyldy. Każda etykieta ma znacznik otwierający i zamykający, a wszystko pomiędzy nimi opisuje jeden wydruk.
| Komenda | Rola | Uwaga praktyczna |
|---|---|---|
^XA i ^XZ | otwarcie i zamknięcie formatu etykiety | drukarka ignoruje wszystko poza tą parą |
^CI28 | kodowanie UTF-8 | bez niej polskie znaki wychodzą jako przypadkowe symbole |
^FOx,y | punkt początkowy pola od lewego górnego rogu | jednostką jest punkt, nie milimetr |
^A0N,h,w | czcionka skalowalna, bez obrotu | litera R obraca tekst o 90 stopni |
^BY | szerokość najcieńszej kreski kodu | wpływa na czytelność bardziej niż wysokość |
^BCo,h,f,g,e | kod liniowy Code 128 | parametr f włącza interpretację pod kodem |
^BXo,h,s | kod dwuwymiarowy DataMatrix | parametr h oznacza wielkość modułu matrycy |
^FD i ^FS | treść pola i jego zamknięcie | brak zamknięcia skleja kolejne pola |
Poniżej minimalna etykieta paletowa. Przykład jest ilustracyjny i nie przedstawia szablonu dostarczanego z produktem. Znaczniki w nawiasach klamrowych to tokeny, które system zastępuje wartościami w chwili wydruku.
^XA
^CI28
^FO30,30^A0N,40,40^FD{NAZWA}^FS
^FO30,90^A0N,30,30^FDPartia: {LOT} Ważne do: {EXP}^FS
^FO30,170^BY4^BCN,200,Y,N,N^FD>;>800{SSCC}^FS
^XZ
Współrzędne liczy się w punktach. Przy głowicy 203 punktów na cal jeden milimetr to około ośmiu punktów, a przy 300 punktach na cal około dwunastu. Ta sama etykieta wysłana na drukarkę o innej rozdzielczości wyjdzie w innym rozmiarze.
Tokeny danych w szablonie
Etykieta o stałej treści przydaje się rzadko. W magazynie zmienia się nazwa towaru i partia, a razem z nimi numer nośnika. Szablon zawiera więc tokeny, które system podmienia wartościami z dokumentu.
W Studio WMS.net tokeny są wypisane nad polem kodu i wstawiają się w miejscu kursora po kliknięciu. Nikt ich nie przepisuje z pamięci, więc literówka w nazwie tokena nie psuje szablonu.
| Token | Co podstawia | Skąd pochodzi wartość |
|---|---|---|
{GTIN} | numer jednostki handlowej | kartoteka asortymentowa |
{SSCC} | numer jednostki logistycznej | rejestr jednostek albo generator z prefiksu firmy |
{LOT} | numer partii | pozycja dokumentu |
{EXP} | termin ważności w zapisie czytelnym | pozycja dokumentu |
{EXPRRMMDD} | ten sam termin w zapisie sześciocyfrowym | przeliczany z terminu ważności |
{NAZWA} i {INDEKS} | nazwa towaru i indeks kartotekowy | kartoteka asortymentowa |
Dwa formaty daty oszczędzają kłopotu. Pod kodem potrzebny jest zapis sześciocyfrowy, a w tekście dla człowieka data z myślnikami. Oba pochodzą z jednego pola dokumentu, więc nie mogą się rozjechać. Skąd partia i termin ważności biorą się w systemie, opisuje strona o partiach produkcyjnych i datach ważności. Budowę numeru nośnika opisuje standard GS1 Polska.
Kodowanie danych GS1 w polu kodu
Pole tekstowe przyjmuje treść wprost. Pole kodu wymaga dodatkowo wskazania trybu kodowania i miejsca symbolu funkcyjnego GS1. W kodzie liniowym służą do tego sekwencje sterujące w danych pola. Sekwencja >; przełącza kodowanie na tryb cyfrowy, a >8 wstawia symbol FNC1.
W kodzie dwuwymiarowym funkcję symbolu pełni znak ucieczki zdefiniowany w parametrach pola, zwykle podkreślenie z cyfrą jeden. Zasada jest wspólna. Identyfikatory i ich wartości zapisuje się w danych pola w kolejności, w jakiej mają zostać odczytane. Budowę identyfikatorów opisuje strona o kodach GS1-128 i GS1 DataMatrix.
Najczęstszy błąd w szablonie: pomyłka o jeden znak między identyfikatorem a tokenem przesuwa cały ciąg. Etykieta wygląda normalnie i kod się drukuje, ale parser dostaje pola o złych granicach. Tej usterki nie widać ani w edytorze, ani na wydruku.
Podgląd wydruku i plik gotowy do wysłania
Pierwsza wersja szablonu prawie nigdy nie jest ostateczna. Pola trzeba przesunąć, czcionkę zmniejszyć, a długą nazwę towaru zawinąć. Dlatego edytor pozwala zmieniać szablon i od razu oglądać wynik na danych próbnych.
Zakładka podglądu podstawia dane przykładowe pod tokeny i pokazuje kod z wartościami, jego postać do pobrania oraz poglądowy wygląd etykiety.
Podgląd jest orientacyjny, bo rzeczywisty wygląd zależy od rozdzielczości głowicy i ustawień urządzenia. Wystarcza jednak, aby wychwycić nachodzące na siebie pola albo tekst wychodzący poza etykietę.
Gotowy kod można pobrać jako plik albo skopiować do schowka. W produkcji ten sam strumień wysyła się na adres sieciowy drukarki, standardowo na port 9100. Między systemem a urządzeniem nie ma wtedy sterownika, który mógłby coś zmienić po drodze.
Sprawdzenie szablonu parserem przed drukiem
Podgląd odpowiada na pytanie, czy etykieta dobrze wygląda. Nie mówi, czy dane zapisane w kodzie dadzą się poprawnie odczytać. Te dwie rzeczy są różne i na ich pomyleniu powstaje najwięcej kosztownych pomyłek.
Wystarczy skopiować z wygenerowanego kodu część trafiającą do symbolu, poprzedzić ją identyfikatorem symboliki i wkleić do transakcji weryfikacji etykiety. Parser rozbierze ciąg tak, jak zrobi to czytnik u odbiorcy.
Zrzut pochodzi z testu na szablonie demonstracyjnym. Protokół zgłosił nieznany identyfikator na konkretnej pozycji oraz niezgodną cyfrę kontrolną numeru towaru. Pola terminu i partii w ogóle nie powstały. Przyczyną był jeden nadmiarowy znak między identyfikatorem a tokenem numeru towaru. Po jego usunięciu ten sam kod przechodził wszystkie kontrole.
| Element protokołu | Czego szukać | Typowa przyczyna niepowodzenia |
|---|---|---|
| Rozpoznanie standardu | czy parser skierował kod do właściwego standardu | brak symbolu funkcyjnego na początku danych |
| Struktura pól | czy liczba pól zgadza się z oczekiwaną | przesunięcie ciągu o jeden znak |
| Separator | czy wystąpił tam, gdzie powinien | pole zmienne bez zamknięcia w środku ciągu |
| Cyfry kontrolne | czy numery przechodzą kontrolę sumy | zła długość wartości podstawionej pod token |
| Pola dat | czy daty zostały rozpoznane | token w zapisie czytelnym zamiast sześciocyfrowego |
Procedura zajmuje mniej niż minutę na szablon. Wyłapuje błędy, które inaczej wyszłyby przy przyjęciu towaru u odbiorcy. Mechanizm kontroli opisuje strona o weryfikacji etykiet w czasie rzeczywistym.
Dobór parametrów do rozdzielczości głowicy
Współrzędne i wymiary są w punktach, więc szablon przygotowany dla 203 punktów na cal wydrukuje się na urządzeniu 300 punktów na cal w około dwóch trzecich zamierzonego rozmiaru. Rozdzielczość dobiera się do najmniejszego elementu na etykiecie, a nie do jej wielkości.
| Rozdzielczość | Punktów na milimetr | Typowe zastosowanie |
|---|---|---|
| 203 dpi | około 8 | etykiety paletowe i kartonowe, kody liniowe |
| 300 dpi | około 12 | małe etykiety jednostkowe i kody dwuwymiarowe |
| 600 dpi | około 24 | oznaczenia miniaturowe i drobny druk |
Drugim parametrem jest szerokość najcieńszej kreski. Zwiększenie jej z dwóch do czterech punktów podwaja szerokość kodu, ale poprawia odczyt z dystansu i pod kątem. Kod, który ma wystarczającą wysokość, ale zbyt wąskie kreski, czyta się dobrze tylko z bliska. Przy etykiecie paletowej skanowanej z wózka ta zamiana miejsca na niezawodność zwykle się opłaca. Dobór urządzenia opisuje strona o drukarce kodów kreskowych, a wpływ jakości druku strona o znakowaniu towarów w magazynie.
Zwykle utrzymuje się kilka szablonów. Etykieta nośnika i oznaczenie opakowania jednostkowego różnią się formatem, ale korzystają z tych samych tokenów. Powiązanie nośnika z zawartością opisuje strona o etykietach logistycznych GS1, a jakość odczytów w całym magazynie strona o wskaźnikach skanowania.
Pytania i odpowiedzi o projektowanie etykiet ZPL
Opis ZPL to kilkaset bajtów, obraz etykiety to setki kilobajtów, a przy druku seryjnym różnica wydłuża czas oczekiwania. Kod kreskowy rysowany przez drukarkę ma też ostre krawędzie, bo powstaje w rozdzielczości głowicy. Obraz przeskalowany daje rozmyte kreski.
Odpowiada za polskie znaki diakrytyczne. Bez kodowania UTF-8 drukarka wydrukuje w miejscu liter z ogonkami znaki przypadkowe albo puste pola. Komenda stoi zaraz po znaczniku otwierającym etykietę, przed pierwszym polem tekstowym.
Wysokość to długość kresek i wpływa na zasięg odczytu. Szerokość modułu określa grubość najcieńszej kreski i decyduje, czy kod jest w ogóle czytelny. Zbyt mała wartość przy niskiej rozdzielczości daje kod, który rozpada się przy odczycie pod kątem.
W kodzie liniowym używa się sekwencji sterującej w danych pola, która przełącza kodowanie i wstawia symbol funkcyjny. W kodzie dwuwymiarowym tę rolę pełni znak ucieczki z parametrów pola. W obu przypadkach separator jest częścią danych, a nie osobną komendą.
Wygenerować podgląd z danymi przykładowymi, skopiować ciąg danych z pola kodu i wkleić go do transakcji weryfikacji etykiety. Parser poda liczbę pól i wynik kontroli cyfr kontrolnych. Jeśli oczekiwano trzech pól, a system zgłasza dwa, szablon ma błąd.
Zwykle nie. Etykieta paletowa, karton zbiorczy i oznaczenie opakowania jednostkowego różnią się formatem, zestawem danych i rozdzielczością. Utrzymuje się kilka szablonów przypisanych do typów jednostek, a wspólny pozostaje zestaw tokenów.
Glosariusz pojęć związanych z etykietami ZPL
- ZPL
- Język opisu etykiety opracowany przez Zebra Technologies, przesyłany do drukarki jako zwykły tekst.
- Token danych
- Znacznik w szablonie zastępowany wartością z bazy w chwili generowania wydruku.
- Punkt (dot)
- Najmniejszy element obrazu drukowany przez głowicę. Liczba punktów na cal wynika z rozdzielczości urządzenia.
- Szerokość modułu
- Grubość najcieńszej kreski kodu, wyrażona w punktach, decydująca o czytelności symbolu.
- Interpretacja czytelna
- Ciąg znaków drukowany pod kodem, który pozwala odczytać dane ręcznie, gdy skaner zawiedzie.
- Zestaw znaków
- Ustawienie kodowania liter, wymagane do poprawnego druku polskich znaków diakrytycznych.
- Port 9100
- Standardowy port sieciowy, na który wysyła się strumień danych do drukarki etykiet.
- Podzbiór kodu
- Tryb kodowania znaków w kodzie liniowym, osobny dla ciągów cyfrowych i alfanumerycznych.