Instrukcja programisty elektronicznej kasy rejestrującej INNOVA PRESTO EJ wersja oprogramowania: PRE141 styczeń 2013 wagi dotyczące formy instrukcji, informacje o zauważonych błędach prosimy kierować na adres wdobraczynski@innova-sa.pl. Wersja dokumentu: 1.01 Opracował: Krzysztof Manitius, Włodzimierz Dobraczyński
1 ZASADY PROGRAMOWANIA KASY "PRESTO"... 3 1. Zasady ogólne... 3 2. Opis i komunikacja z bazą danych... 7 2.1. Baza danych opakowań... 8 2.2. Baza danych klawiszy szybkiego dostępu... 9 2.3. Baza danych kasjerów... 10 2.4. Baza danych form płatności... 13 2.5. Baza danych rabatów... 14 2.6. Baza danych PLU... 15 3. Odczyt/zapis danych z kasy... 17 3.1 Odczyt totalizerów... 17 3.2 Nagłówek... 18 3.3 Żądanie odczytu i wysłania stanu zegara RTC... 19 3.4 Obsługa statusu i konfiguracji... 20 3.5 Wybór trybu obsługi błędów... 21 3.6 Obsługa stawek PTU... 22 3.7 Wysłanie identyfikacji... 23 3.8 Zakończenie komunikacji... 23 4 TRYB ON-LINE... 24 REALIZOWANE ROZKAZY STERUJACE... 24 WYKAZ ROZKAZÓW... 25 1. Odczyt jednej z baz danych... 25 2. Odczyt rekordu z bazy PLU (format "skrócony" dla rekordów "pustych")... 25 3. Odczyt stanów magazynowych i sprzedaży z rekordu PLU... 26 Komunikaty wysyłane przez kasę automatycznie po zakończeniu transakcji... 27 5. Wykaz błędów... 28 Błędy warstwy aplikacyjnej... 29 Komunikaty o potwierdzenie wykonania operacji... 29 Ostrzeżenia... 30 Błędy fatalne... 31 Strona 2/31
1 ZASADY PROGRAMOWANIA KASY "PRESTO" 1. Zasady ogólne Język programowania kasy INNOVA "PRESTO" obejmuje rozkazy o następującej syntaktyce: ESC P <n1>; <n2>;...<nk> <char> <b1><b2>...<bn> <check> ESC \ gdzie: <n1>; <n2>...<nk> - jest listą parametrów numerycznych, zawierająca max. 8 parametrów, każdy z nich ma zakres 0..65535 rozdzielane znakiem ;. Ma on najczęściej postać: Pk; Pr; Pb Pk - numer zapytania (0..255), Pr - numer rekordu bazy, Pb - numer bazy (Tylko dla odczytu z baz danych). <char> - Znak identyfikujący rozkaz. Jest to jeden znak. W odpowiedziach ten znak zamienia się na znak mały ( A -> a ) lub znak opozycyjny [ -> ], { -> } etc. <b1><b2>..<bn> - Ciąg bajtów zapisywanych do pamięci RAM kasy - do odpowiedniej bazy danych ciąg ten to DANE BINARNE, jest buforowany w pamięci a następnie sprawdzany jest "bajt kontrolny" <check> (zapis do bazy danych jest możliwy tylko jeżeli bajt kontrolny ma poprawną wartość. Dla danego rozkazu długość ciągu <b1>..<bn> jest stała. Nieistotne znaki zapełniane są znakami obojetnymi tj 0xFF. Typy i sposób kodowania został przedstawiony w następnym podpunkcie. Kasa nie kontroluje semantykę przesyłanych bajtów, tylko wstawia w odpowiednie pola pamięci programu. <check> - bajt kontrolny, zakodowany jako 2 cyfry HEX (EXOR wszystkich znaków za ESC P do tego bajtu z wartością początkową = #255), dokładnie wg następującego algorytmu: unsigned char check = 255; for( int i=3;i<strlen(sekwencja);i++) { check=check^(unsigned char)sekwencja[i]; } Do kontroli sekwencji nie są brane 2 pierwsze bajty ESC P oraz 4-ry ostatnie. Ostatnie bajty składaja się z 2 cyfr kodu heksadecymalnego kodujące bajt kontrolny wraz z terminatorem sekwencji ESC \. Dane przesyłane do kasy mają z reguły postać binarną. Liczby są przesyłane w kodzie BCD, napisy są przesyłane wprost. Natomiast dane odbierane z kasy są konwertowane na kod heksadecymalny, czyli jeden bajt jest opisany przez 2 znaki Strona 3/31
heksadecymalne. Na przykład znak 'A' przy wysyłaniu do kasy nie jest kodowany, ale przy odczycie ten znak jest zapisywany jako '40', czyli kod heksadecymalny znaku A. Wystapienie ESC podczas przesyłania ciągu bajtów <b1><b2>..<bn> powoduje przerwanie odbierania ciągu i zgłoszenie błędu "BLEDNY ZNAK". Interfejsy Kasa posiada interfejs szeregowy RS232 oraz port USB. Parametry transmisji interfejsu szeregowego są stałe tj 9600,8,N,1 bez kontroli transmisji. Bufor odbiornika to 256 bajtowe FIFO. W przypadku transmisji po interfejsie USB, interfejs RS232 jest wyłączany z przesyłania rozkazów. Po dezaktywacji połaczenia po USB interfejs RS232 może być używany jako źródło rozkazów. Interfejs USB może służyć do programowania, a takżę (jednocześnie!) do komunikacji z Kopia Elektroniczną. Kasa w systemach operacyjnych zgłasza się jako 2 wirtualne porty com. Jeden do komunikacji, drugi jest podłączony do Kopii Elektronicznej. Błędy transmisji "BLEDNY ZNAK" - jeżeli w obrębie sekwencji <n1>..<char> wystąpi inny znak niz. cyfra, średnik, spacja lub 'duża litera' (tzn. w tym miejscu sekwencji dopuszczalny jest następujący zbiór kodów: #$30..#$39, '', #$20, #$40..#$5F), "BLAD BAJTU KONTROLNEGO" "BLAD PARAMETRU" - np. numer bazy danych >7, "BLAD DANYCH" - np. wystąpienie kodu kontrolnego w polu napisu lub formalny błąd danych BCD. "BLAD ROZKAZU" - oznaczenie literowe nie identyfikuje żadnego rozkazu, "BLOKADA ZMIANY PLU" - zmiana nazwy / stawki PTU lub kasowanie PLU przy niezerowych totalizerach, Wystąpienie jednego z w/w błędów powoduje (zależnie od wybranego trybu obsługi) ew. komunikat na wyświetlaczu, ew. odesłanie kodu błędu do komputera, a ponadto zawsze zignorowanie sekwencji do końca tj. do ESC \ lub początku następnej tj. ESC P. Wystapienie ESC podczas przesyłania ciągu bajtów <b1><b2>..<bn> powoduje przerwanie odbierania ciągu i zgłoszenie błędu "BLEDNY ZNAK", Typu danych występujących podczas transmisji Kodowanie BCD odbywa się zawsze od najmłodszego bajtu. Na przykład liczba 1234 zostanie zakodowana na 2 bajty BCD o zapisie heksadecymalnym 0x34 0x12. Kod heksadecymalny (heksa) koduje 4 bity na znaki 0... 9 A F. Pozycja przecinka w kodach BCD jest umowna i wynika z semantyki danego rozkazu. W poniższej tabeli przedstawiono wszystkie możliwe typy danych. Niektóre z nich mogą nie wystąpić w kasie Presto. Strona 4/31
Nazwa Ilość Opis typu bajtów EAN 7 Jest to kod EAN13. Zakodowany jest na kod BCD w sposób odmienny od innych formatów BCD tj najstarszy bajt jest na początku. Na przykład: 1234567890123 zakodowane zostaje jako kolejne bajty o kodach heksa 0x12 0x34 0x56 0x78 0x90 0x12 0x3F Kod pusty to 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF Kasa nie kontroluje sumy kontrolnej EAN-13. B1 1 Dane binarne bez znaku zakodowane w kodzie heksa. Na przykład wartość binarna o wartości 100 zostanie zakodowana na ciąg dwóch znaków alfanumerycznych 6 i 4 B1_B 1 Wartość binarna wprost bez kodowania heksa. I2_0 1 Wartość w formacie BCD. Na przykład liczba 56 zostanie zakodowane na jeden bajt o postaci heksa 0x56. Wynik działania na kasy wartościach większych od 99 jest nieokreślony. I4_0 2 Dwa bajty BCD o stałym przecinku o formacie xxxx I4_1 2 Dwa bajty BCD o stałym przecinku o formacie xxx.x. Podczas transmisji nie rozróżnia się przecinka, więc wartość 123.4 zostanie zakodowana w zwykły (dla kodu BCD) sposób to jest 0x34 i 0x12. I4_2 2 Dwa bajty BCD o stałym przecinku o formacie xx.xx I4_3 2 Dwa bajty BCD o stałym przecinku o formacie x.xxx I6_3 3 Trzy bajty BCD o stałym przecinku o formacie xxx.xxx I6_0 3 Trzy bajty BCD o stałym przecinku o formacie xxxxxx I10_3 5 Pięć bajtów BCD o stałym przecinku o formacie xxxxxxx.xxx N2 2 2 bajty w kodzie BCD o stałym przecinku xxxx. Dopuszcza się wartości ujemne w klasycznym kodzie U2(dopełnienie do najstarszego bitu). Wartości dodatnie są kodowane w sposób identyczny jak dla I4_0. Na przykład wartość -2 zostanie zakodowana jako 0xFE 0xFF. W kasie występują niewielkie wartości ujemne. Można je ograniczyć do jednej cyfry. N2_ 2 2 bajty w kodzie BCD nieodwrócone ze znakiem ujemnym. Na przykład -2 zostanie zakodowane jako 0xFF 0xFE. S4 4 Bezpośrednia wartość binarna bez kodowania w notacji Intel a. Pierwszy jest LSB ostatni MSB. K5 5 Pięć bajtów BCD o stałym przecinku o formacie xxxxxxxx.xx Jest to najczęściej używany format przy przesyłaniu kwot wyrażonych w walucie. I10_0 5 Pięć bajtów BCD o stałym przecinku o formacie xxxxxxxxxx Jest to często używany format przy przesyłaniu stanów magazynowych. I10_6 5 Pięć bajtów BCD o stałym przecinku o formacie xxxx.xxxxxx Jest to używany format przy przesyłaniu wartości kursów walut. S6 6 Łańcuch znakowy o długości 6 bajtów. Pola puste uzupełnione znakiem 0xFF. S7 7 Łańcuch znakowy o długości 7 bajtów. Pola puste uzupełnione znakiem 0xFF. Strona 5/31
S10 10 Łańcuch znakowy o długości 10 bajtów. Pola puste uzupełnione znakiem 0xFF. S16 16 Łańcuch znakowy o długości 16 bajtów. Pola puste uzupełnione znakiem 0xFF. S18 18 Łańcuch znakowy o długości 18 bajtów. Pola puste uzupełnione znakiem 0xFF. S19 19 Łańcuch znakowy o długości 19 bajtów. Pola puste uzupełnione znakiem 0xFF. S20 20 Łańcuch znakowy o długości 20 bajtów. Pola puste uzupełnione znakiem 0xFF. S40 40 Łańcuch znakowy o długości 40 bajtów. Pola puste uzupełnione znakiem 0xFF. S_CR String format swobodny. Koniec to znak CR. TM 5/4 Czas. Transmisja do kasy w formacie HH:MM z kasy w formacie MMHH. DT 4 Data Kodowanie Mazovia polskich znaków. Ą Ć Ę Ł Ń Ó Ś Ź Ż ą ć ę ł ń ó ś ź ż 0x8F 0x95 0x90 0x9C 0xA5 0xA3 0x98 0xA0 0xA1 0x86 0x8D 0x91 0x92 0xA4 0xA2 0x9E 0xA6 0xA7 Przykłady transmisji w programowaniu i odczycie można uzyskać Programem Serwisowym Kas Presto. W tym celu należy po nawiązaniu komunikacji otworzyć Menu Dodatki->Podgląd transmisji. W niniejszym opisie przedstawiono tylko niektóre przykłady transmisji. Strona 6/31
2. Opis i komunikacja z bazą danych Komunikacja z bazami danych musi być poprzedzona uruchomieniem w kasie trybu komunikacji z komputerem. W kasie może być max. 8 baz danych. Większość baz (oprócz bazy PLU) ma charakter tablicy o stałej ilości elementów oraz strukturze. Bazy te identyfikowane sa przez parametr numeryczny "numer bazy", Pb, który może przybierać następujące wartości: Pb=0 : baza opakowań kaucjonowanych, Pb=1 : baza klawiszy skrótu, Pb=2 : baza kasjerów, Pb=3 : (niedozwolone) Pb=4 : baza form płatności, Pb=5 : baza rabatów / dopłat, Pb=6 : (rezerwa) Pb=7 : baza danych PLU, Rekordy baz sa identyfikowane przez parametr "numer rekordu", Pr=0..N-1, gdzie N jest ilością rekordów w bazie. Strona 7/31
2.1. Baza danych opakowań Programowanie Kasowanie ESC P Pk;Pr @ <b1><b2> <b3> <check> ESC \ ESC P Pk;Pr Q <check> ESC \ Odczyt danych zapytanie ESC P Pk;Pr;0H<check> ESC \ Odpowiedź na odczyt danych ESC P Pk;Pr;0h <b1h><b2h> <b3h><check> ESC \ Gdzie: Pk - numer komunikatu narastająco Pr - numer rekordu w bazie danych b1 - dane w postaci binarnej b1h - dane w postaci heksadecymalnej. Jeden bajt zakodowany na 2 znakach heksa. Znaczenie poszczególnych wartości. Symbol typu odnosi się do tabeli w poprzednim rozdziale. Typ Ilość bajtów Znaczenie S19 19 Nazwa opakowania K5 5 Cena opakowania K5 5 Przyjęcia K5 5 Wydania K5 5 Saldo B1_B 1 Atrybut B7 - znacznik "zmiana" 40 Długość sumaryczna rekordu 15 Ilość rekordów w bazie danych Strona 8/31
2.2. Baza danych klawiszy szybkiego dostępu Programowanie ESC P Pk;Pr B <b1><b2><b3> <check> ESC \ Kasowanie ESC P Pk;Pr R <check> ESC \ Odczyt danych zapytanie Przykład ESC P Pk;Pr;1H<check> ESC \ \x1bp6;0;1h80\x1b\ Odpowiedź na odczyt danych Przykład ESC P Pk;Pr;1h <b1h><b2h><b3h><check> ESC \ \x1bp6;0;1h110011a0\x1b\ Gdzie: Pk - numer komunikatu narastająco Pr - numer rekordu w bazie danych b1 - dane w postaci binarnej b1h - dane w postaci heksadecymalnej. Jeden bajt zakodowany na 2 znakach heksa. Znaczenie poszczególnych wartości. Symbol typu odnosi się do tabeli w poprzednim rozdziale. Typ Ilość bajtów Znaczenie N2 2 Numer PLU w bazie danych B1_B 1 Atrybut. B3..B0 Ilość. Wielkość tylko całkowita B4 1 koniec transakcji (B7- znacznik "zmiana") 3 Długość sumaryczna rekordu 20 Ilość rekordów w bazie danych Strona 9/31
2.3. Baza danych kasjerów Programowanie ESC P Pk;Pr A <b1><b2>..<b124> <check> ESC \ Kasowanie ESC P Pk;Pr S <check> ESC \ Odczyt danych zapytanie Przykład ESC P Pk;Pr;2H<check> ESC \ \x1bp9;0;2h8c\x1b\ Odpowiedź na odczyt danych Przykład ESC P Pk;Pr;2h <b1h><b2h>..<b124h><check> ESC \ \x1bp17;0;2h41646d696eff0000000000ffff000000003854987100563501 00000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000385498710000000000000000000000 00000000000000000000000000000000000000000000000000000000000012 0000000000009D\x1B\ Gdzie: Pk - numer komunikatu narastająco Pr - numer rekordu w bazie danych b1 - dane w postaci binarnej b1h - dane w postaci heksadecymalnej. Jeden bajt zakodowany na 2 znakach heksa. Znaczenie poszczególnych wartości. Symbol typu odnosi się do tabeli w poprzednim rozdziale. Typ Ilość bajtów Znaczenie S10 10 Nazwa kasjera. 9 znaków nazwy + terminator N2_ 2 Hasło w postaci 4 znaków N2 2 Ilość anulowanych paragonów N2 2 Ilość stornowań w paragonach K5 5 Obrót K5 5 Kaucje przyjete K5 5 Kaucje zwrocone K5 5 Kwota anulacji K5 5 Kwota stornowań K5 5 wplaty do kasy Strona 10/31
K5 5 wyplaty z kasy K5 5 obrot w formie platnosci 1 K5 5 obrot w formie platnosci 2 K5 5 obrot w formie platnosci 3 K5 5 obrot w formie platnosci 4 K5 5 Utarg K5 5 kwota rabatow #1 K5 5 kwota rabatow #2 K5 5 kwota rabatow #3 K5 5 kwota rabatow #4 K5 5 kwota dopłat #1 K5 5 kwota dopłat #2 K5 5 kwota dopłat #3 K5 5 kwota dopłat #4 N2 2 ilosc paragonów S4 4 Uprawnienia kasjerów B1 1 atrybut bajt B1 1 (MSB = znacznik "zmiana") Uprawnienia kasjerów. 124 Długość sumaryczna rekordu 8 Ilość rekordów w bazie danych Maska bitu Numer Uprawnienie jeśli ustawiony. bitu 0x00000001 0 sprzedaż 0x00000002 1 Strornowanie pozycji paragonu 0x00000004 2 Anulowanie paragonu 0x00000008 3 Wpłaty i wypłaty z kasy 0x00000010 4 Zezwolenie na rabatowanie z bazy 0x00000020 5 Zezwolenie na rabat z kasy 0x00000040 6 Zezwolenie na zmiane ceny 0x00000080 7 Otworzenie szuflady 0x00000100 8 Zezwolenie na wykonanie raportu szybkiego 0x00000200 9 Wejście do menu raporty 0x00000400 10 Zezwolenie na raporty z EJ 0x00000800 11 Zezwolenie na raport zerujący 0x00001000 12 Zezwolenie na wykonanie grupy raportów 0x00002000 13 Zezwolenie na wykonanie raportu dobowego 0x00004000 14 Zezwolenie na wykonanie raportów okresowych 0x00008000 15 Zezwolenie na raport kasjera 0x00010000 16 Zezwolenie na wykonanie raportu zmiany 0x00020000 17 Zezwolenie na wykonanie raportu sprzedaży 0x00040000 18 Zezwolenie na wykonanie raportu magazynowego 0x00080000 19 Zezwolenie na raport form płatności 0x00100000 20 Zezwolenie na raport opakowań Strona 11/31
0x00200000 21 Zezwolenie na raport grup towarowych 0x00400000 22 Ogólne wejście do menu raporty baz danych 0x00800000 23 Zezwolenie na Raport PLU z VAT 0x01000000 24 Zezwolenie na raport napisów stałych 0x02000000 25 Wejście do menu PROGRAMOWANIE 0x04000000 26 Wejście do menu KONFIGURACJA 0x08000000 27 Wejście do menu KOMPUTER 0x80000000 31 Wejście do menu serwis Strona 12/31
2.4. Baza danych form płatności Programowanie Kasowanie ESC P Pk;Pr B <b1><b2> <b3> <check> ESC \ ESC P Pk;Pr T <check> ESC \ Odczyt danych zapytanie ESC P Pk;Pr;4H<check> ESC \ Odpowiedź na odczyt danych ESC P Pk;Pr;4h <b1h><b2h> <b3h><check> ESC \ Gdzie: Pk - numer komunikatu narastająco Pr - numer rekordu w bazie danych b1 - dane w postaci binarnej b1h - dane w postaci heksadecymalnej. Jeden bajt zakodowany na 2 znakach heksa. Znaczenie poszczególnych wartości. Symbol typu odnosi się do tabeli w poprzednim rozdziale. Typ Ilość bajtów Znaczenie S19 19 Nazwa formy płatności K5 5 Sprzedaż danej formy płatności I10_6 5 Wartość kursu waluty B1_B 1 Atrybut. (B7- znacznik "zmiana") 30 Długość sumaryczna rekordu 8 Ilość rekordów w bazie danych Strona 13/31
2.5. Baza danych rabatów Programowanie Kasowanie ESC P Pk;Pr D <b1><b2> <b29> <check> ESC \ ESC P Pk;Pr U <b1><b2>..<b22> <check> ESC \ Odczyt danych zapytanie ESC P Pk;Pr;5H<check> ESC \ Odpowiedź na odczyt danych ESC P Pk;Pr;5h <b1h><b2h> <b29h><check> ESC \ Gdzie: Pk - numer komunikatu narastająco Pr - numer rekordu w bazie danych b1 - dane w postaci binarnej b1h - dane w postaci heksadecymalnej. Jeden bajt zakodowany na 2 znakach heksa. Znaczenie poszczególnych wartości. Symbol typu odnosi się do tabeli w poprzednim rozdziale. Typ Ilość bajtów Znaczenie S19 19 Numer PLU w bazie danych I4_0 4 Wartość rabatu/dopłaty. Jeśli wartość rabatu jest równa 0, a kwota różna od 0, to udzielany jest rabat kwotowy.poniżej fragment kodu, jak jest ta wartość liczona. if ( Pr >= 5 ) { //Dopłata wartosc = 1000+10* p.wartosc; } else wartosc = 1000-10*p.wartosc; if ( wartosc > 1999 ) wartosc = 1999; K5 5 Kwota rabatu/dopłaty B1_B 1 B7 - znacznik "zmiana" 29 Długość sumaryczna rekordu 4/4 Ilość rekordów w bazie danych Strona 14/31
2.6. Baza danych PLU Programowanie Kasowanie ESC P Pk;Pr E <b1><b2>..<b50> <check> ESC \ ESC P Pk;Pr V <check> ESC \ Odczyt danych zapytanie ESC P Pk;Pr;7H<check> ESC \ Odpowiedź na odczyt danych ESC P Pk;Pr;2h <b1h><b2h>..<b50h><check> ESC \ Zapytanie o zawartość bazy PLU. Ten rozkaz działa w trybie ONLINE! ESC P Pk;Pr ] <check> ESC \ Odpowiedź na zawartość, jeśli rekord posiada dane ESC P Pk;Pr;0} <b1h><b2h>..<b50h><check> ESC \ Odpowiedź na zawartość, jeśli rekord nie posiada danych ESC P Pk;Pr1 } <check> ESC \ Odpowiedż na zawartość, jeśli został przekroczony zakres numeru rekordów PLU ESC P Pk;Pr2 } <check> ESC \ Gdzie: Pk - numer komunikatu narastająco Pr - numer rekordu w bazie danych b1 - dane w postaci binarnej b1h - dane w postaci heksadecymalnej. Jeden bajt zakodowany na 2 znakach heksa. Typ Ilość bajtów Znaczenie S16 16 Nazwa towaru EAN 7 Kod kreskowy towaru K5 5 Cena towaru B1_B 1 Stawka VAT oraz numer opakowania w BD opakowań. B2..B0 numer stawki VAT. 00 Stawka A Strona 15/31
B7..B4 indeks opakowania w BD opakowań I10_3 5 Ilość sprzedana K5 5 Wartość sprzedana I10_3 5 Ilość magazynowa K5 5 Wartość magazynowa B1_B 1 Atrybut B7 nastąpiła zmiana B5..B0 Numer grupy towarowej 50 Długość sumaryczna rekordu 2300 Ilość rekordów w bazie danych Strona 16/31
3. Odczyt/zapis danych z kasy Wymaga uruchomienia w kasie komunikacji z komputerem 3.1 Odczyt totalizerów Odczyt danych zapytanie ESC P PkI<check> ESC \ Odpowiedź na odczyt danych ESC P Pki <b1h><b2h> <b54h><check> ESC \ Gdzie: Pk - numer komunikatu narastająco b1 - dane w postaci binarnej b1h - dane w postaci heksadecymalnej. Jeden bajt zakodowany na 2 znakach heksa. Typ Ilość bajtów Znaczenie K5 5 Sprzedaż w stawce A K5 5 Sprzedaż w stawce B K5 5 Sprzedaż w stawce C K5 5 Sprzedaż w stawce D K5 5 Sprzedaż w stawce E K5 5 Sprzedaż w stawce F K5 5 Sprzedaż w stawce G K5 5 Sprzedaż zwolniona I4_0 2 Numer ostatniego paragonu I6_0 3 Ilość zmian w bazie towarowej I4_0 4 Ilość anulowanych paragonów K5 5 Kwota anulowanych paragonów 54 Długość sumaryczna rekordu Strona 17/31
3.2 Nagłówek Programowanie Przykład ESC P PkX <b1><b2> <b160> <check> ESC \ [x1b]p10x[x0e][x19] INNOVA SA[x0A][x0E] 05-080 Izabelin[x0A] ul. Estrady 6, Klaudyn[x0A][x19] Innova Presto[x0A][x0E] Testy KM[x0A][x1A]E3[x1B]\ Odczyt danych zapytanie Znaki niedrukowalne ujęto w nawiasy kwadratowe. Przykład ESC P PkK<check> ESC \ /x1bp9k8d/x1b\ Odpowiedź na odczyt danych ESC P Pkk <b1h><b2h> <b160><check> ESC \ Przykład [x1b]p9k0e192020202020494e4e4f56412053410a0e202030352d3038 3020497A6162656C696E0A202020202020202020756C2E20457374726 1647920362C204B6C617564796E0A1920202020202020202020202020 496E6E6F76612050726573746F0A0E2020202020205465737479204B4 D0ADE[x1B]\ Gdzie: Pk - numer komunikatu narastająco b1 - dane w postaci binarnej b1h - dane w postaci heksadecymalnej. Jeden bajt zakodowany na 2 znakach heksa. Ten rekord ma nietypową postać. Dugość całkowita pola nagłówka nie może przekroczyć 160 znaków, ale jego zawartość zawiera znaki sterujące oraz terminator CR. Koniec nagłówka określa bajt Ctrl-Z (0x1A). Typ Ilość bajtów S_CR <40 Znaczenie Linia może być poprzedzona znakami: 0x0E Linia pogrubiona 0x19 Linia o podwójnej wysokości S_CR <40 Opcjonajna linia. Opis powyżej. S_CR <40 Opcjonajna linia. Opis powyżej. S_CR <40 Opcjonajna linia. Opis powyżej. S_CR <40 Opcjonajna linia. Opis powyżej. S_CR <40 Opcjonajna linia. Opis powyżej. B1_B 1 Terminator rekordu kod 0x1A 160 Długość sumaryczna rekordu Strona 18/31
3.3 Żądanie odczytu i wysłania stanu zegara RTC Programowanie ESC P PkY <b1><b2> <b7> <check> ESC \ [x1b]p12ygf#"[x01][x13] 97[x1B]\ Odczyt danych zapytanie ESC P PkL<check> ESC \ Odpowiedź na odczyt danych ESC P Pkl <b1h><b2h> <b7h><check> ESC \ [x1b]p11l2345232201132093[x1b]\ Gdzie: Pk - numer komunikatu narastająco b1 - dane w postaci binarnej b1h - dane w postaci heksadecymalnej. Jeden bajt zakodowany na 2 znakach heksa. Typ Ilość bajtów Znaczenie I2_0 1 sekundy I2_0 1 minuty I2_0 1 godziny I2_0 1 dni I2_0 1 miesiące I4_0 2 rok 7 Długość sumaryczna rekordu Strona 19/31
3.4 Obsługa statusu i konfiguracji Programowanie ESC P Pk;Pm W <check> ESC \ Odczyt danych zapytanie ESC P PkN<check> ESC \ Odpowiedź na odczyt danych ESC P Pkn <b1h><b2h> <b7h><check> ESC \ Gdzie: Pk - numer komunikatu narastająco Pm - Tryb pracy kasy. Poszczególne bity. B1 0 blokada automatycznego wysyłania danych po transakcji B1 1 dane są automatycznie wysyłane po transakcji B2 0 tryb pracy kasy OFF-LINE B2 1 tryb pracy kasy ON-LINE b1 - dane w postaci binarnej b1h - dane w postaci heksadecymalnej. Jeden bajt zakodowany na 2 znakach heksa. Typ Ilość bajtów B1 1 B1 1 B1 1 DT 4 Znaczenie Kod obsługi błędów 00 - włączony wyświetlacz, wyłączony komunikat przez RS, 01 - wyłączony wyświetlacz, wyłączony komunikat przez RS, 02 - włączony wyświetlacz, włączony komunikat przez RS, 03 - wyłączony wyświetlacz, włączony komunikat przez RS, Tryb fiskalny 0 Tryb szkoleniowy 1 Tryb fiskalny Konfiguracja B1-1 dane są automatycznie wysyłane po transakcji B2 0 tryb pracy kasy OFF-LINE B2 1 tryb pracy kasy ON-LINE Data ostatniego zapisu do Pamięci Fiskalnej <ylh><yll><yhh><yhl><mnh><mnl><dh><dl> 7 Długość sumaryczna rekordu Strona 20/31
3.5 Wybór trybu obsługi błędów Programowanie ESC P Pk;PmP<check> ESC \ Gdzie: Pk - numer komunikatu narastająco Pm - dane w postaci binarnej 00 - włączony wyświetlacz, wyłączony komunikat przez RS, 01 - wyłączony wyświetlacz, wyłączony komunikat przez RS, 02 - włączony wyświetlacz, włączony komunikat przez RS, 03 - wyłączony wyświetlacz, włączony komunikat przez RS, Strona 21/31
3.6 Obsługa stawek PTU Programowanie ESC P PkZ <b1><b2> <b14> <check> ESC \ Odczyt danych zapytanie ESC P PkO<check> ESC \ Odpowiedź na odczyt danych ESC P Pko <b1h><b2h> <b14h><check> ESC \ Gdzie: Pk - numer komunikatu narastająco b1 - dane w postaci binarnej b1h - dane w postaci heksadecymalnej. Jeden bajt zakodowany na 2 znakach heksa. Format danych stawek VAT dopuszcza wartości ujemne -1 niekatywna -2 - zwolniona. Kasa Presto toleruje (nie zgłasza błędów) wartości ułamkowe stawek VAT, jakkolwiek je ignoruje. Wartości podawane są w % w formacie XX.XX Stawki VAT mogą być zaprogramowane jeśli wartości totalizerów są zerowe. Typ Ilość bajtów Znaczenie N2 2 Stawka VAT A N2 2 Stawka VAT B N2 2 Stawka VAT C N2 2 Stawka VAT D N2 2 Stawka VAT E N2 2 Stawka VAT F N2 2 Stawka VAT G 14 Długość sumaryczna rekordu Strona 22/31
3.7 Wysłanie identyfikacji Zapytanie ESC P Pk ^ <check> ESC \ Odpowiedź ESC P Pk ~<string> ESC \ Przykład [x1b]p3~innova PRESTO/14.1/230000/ABC00000000F8[x1B]\ Gdzie: Pk - numer komunikatu narastająco <string> - Napis [przedstawiający się. Pola rozdzielone znakiem /. Poszczególne pola: Nazwa urządzenia Wersja oprogramowania Numer seryjny w notacji odwrotnej tj według I3_0 Numer unikatowy. 3.8 Zakończenie komunikacji Zapytanie ESC P_ <check> ESC \ Strona 23/31
4 TRYB ON-LINE Instrukcja programisty kasy fiskalnej INNOVA PRESTO REALIZOWANE ROZKAZY STERUJACE Realizowany jest podzbiór rozkazów sterujących trybu "OFF-LINE" a ponadto proces może wysyłać "bez rozkazu" komunikaty po zakończeniu transakcji. Zasadą jest, że po każdym rozkazie procesor trybu "on-line" wysyła odpowiedź zawierającą: o zawartość testowanego rekordu bazy danych (bądź fragmentu rekordu) o ile rozkaz był poprawny, o dodatkową odpowiedź zawierającą kod błędu (zawsze, ew. kod błędu może być = 0 jeżeli rozkaz został wykonany poprawnie). gdzie: Odpowiedź ta jest wysyłana zawsze niezależnie od stanu zaprogramowania trybu obsługi błędów w stanie "OFF-LINE" i ma format: ESC P Pk;Pe x <check> ESC \ Pk = numer komunikatu, Pe = kod błędu, 0 : OK, <check> = 2 cyfry HEX zapisujące bajt kontrolny wg zasad jak zwykle tj. XOR z wartością początkową #255, począwszy od 3-go znaku (następny za ESC P), x = kod rozkazu, DUŻA LITERA!! Strona 24/31
WYKAZ ROZKAZÓW Instrukcja programisty kasy fiskalnej INNOVA PRESTO 1. Odczyt jednej z baz danych ESC P Pk;Pr;Pb H <check> ESC \ - żądanie wysłania rekordu #Pr z bazy danych #Pb, Pk = numer komunikatu, Pr = numer rekordu = 0.. Pb=0 : baza opakowań kaucjonowanych, Pb=1 : baza klawiszy skrótu, Pb=2 : baza kasjerów, Pb=3 : (niedozwolone) Pb=4 : baza form płatności, Pb=5 : baza rabatów / narzutów, Pb=6 : (rezerwa) Pb=7 : baza danych PLU, - zakres parametru Pr zależy od wybranej bazy danych, Odpowiedź: ESC P Pk;Pr;Pb h <h1h><h1l>...<hnh><hnl> <check> ESC \ gdzie: <h1h>..<hnl> stanowi ciąg 2N cyfr hex użytych do zapisu N bajtów wybranego rekordu bazy danych ( <xxh> jest 'starszą' a <xxl> 'młodszą' cyfrą), <check> = 2 cyfry HEX zapisujące bajt kontrolny 2. Odczyt rekordu z bazy PLU (format "skrócony" dla rekordów "pustych") ESC P Pk;Pr ] <check> ESC \ - żądanie wysłania rekordu #Pr z bazy danych PLU gdzie: Pk = numer komunikatu, Pr = numer rekordu = 0..MAX_PLU_NUM-1, Odpowiedź: ESC P Pk;Pr;0 } <h1h><h1l>...<hnh><hnl> <check> ESC \ gdzie: <h1h>..<hnl> stanowi ciag 2N cyfr hex użytych do zapisu N bajtów wybranego rekordu bazy danych PLU (<xxh> jest 'starszą' a <xxl> 'młodszą' cyfrą), lub: ESC P Pk;Pr;1 } <check> ESC \ - jeżeli rekord jest PUSTY, lub: ESC P Pk;Pr;2 } <check> ESC \ - błąd odczytu danych (np. zły numer rekordu), <check> = 2 cyfry HEX zapisujące bajt kontrolny Strona 25/31
3. Odczyt stanów magazynowych i sprzedaży z rekordu PLU ESC P Pk;Pr M <check> ESC \ - żądanie wysłania fragmentu rekordu #Pr z bazy danych PLU Odpowiedz: ESC P Pk;Pr;0 m <h1h><h1l>...<hnh><hnl> <check> ESC \ gdzie: <h1h>..<hnl> stanowi ciąg 2N cyfr hex użytych do zapisu N bajtów wybranego rekordu bazy danych PLU (<xxh> jest 'starszą' a <xxl> 'młodsza' cyfrą), lub: lub: ESC P Pk;Pr;1 m <check> ESC \ - jeżeli rekord jest PUSTY, ESC P Pk;Pr;2 m <check> ESC \ - błąd odczytu danych (np. zły numer rekordu), <check> = 2 cyfry HEX zapisujące bajt kontrolny UWAGA: treść odpowiedzi zawiera 40 bajtów odpowiadające następującemu fragmentowi rekordu PLU: Nazwa pola Typ Ilość bajtów Znaczenie ILOSC_SPRZED ilość BCD,I10:3 5 ilość towaru dla potrzeb rozliczeń WARTOSC_SPRZED kwota, K5 5 wartość towaru dla potrzeb rozliczeń ILOSC_MAGAZYN ilość BCD,I10:3 5 ilość towaru w "MAGAZYNIE" WARTOSC_MAGAZYN kwota, K5 5 wartość towaru w "MAGAZYNIE" Strona 26/31
Komunikaty wysyłane przez kasę automatycznie po zakończeniu transakcji Komunikaty te są wysyłane o ile włączono taka opcję w konfiguracji. Umożliwia to opcja w programowaniu ręcznym kasy lub sekwencja: ESC P Pk;Pm W <check> ESC \ - wybór czy dane mają być odsyłane, czy nie, Pk = numer komunikatu, Pm.1 (bit 1) = automatyczne wysyłanie danych po zakończeniu transakcji: 0: brak wysyłania danych (Pm=0) 1: dane są wysyłane (Pm=2) Przez kasę wysyłany jest ciąg komunikatów w formacie jak po rozkazie: ESC P Pk;Pr M <check> ESC \ tj. ESC P Pk;Pr;0 m <h1h><h1l>...<hnh><hnl> <check> ESC \ (zwróćmy uwagę, że komunikat ESC P Pk;Pr;1... nie może wystąpić). Każdy z tych komunikatów odpowiada jednej linijce paragonu stąd mogą się one wielokrotnie powtórzyć dla jednego rekordu PLU. Ponadto wysyłanie komunikatów jest realizowane przez procedurę, która jest wywoływana po zatwierdzeniu paragonu ale w jego drukowania zakończenia i nie spowalnia to działania kasy. UWAGA: 1. w tej sytuacji numer komunikatu Pk jest numerem linijki paragonu = 0..ILOSC_LINIJEK-1 2. Pr = numer PLU = 0... Po wysłaniu rekordu dla ostatniej linijki paragonu kasa wysyła rekord końca formacie: w ESC P Pk;Pn { <check> ESC \ Pk = ilosc_linijek_paragonu -1 = 0..MAX-1, Pn = numer kasjera, który zatwierdził paragon = 0..7 Strona 27/31
5. Wykaz błędów Instrukcja programisty kasy fiskalnej INNOVA PRESTO W kasie PRESTO teoretycznie mogą się pojawić błędy u numerach w zakresie 0..253. Błędy te są sygnalizowane na wyświetlaczu kasy w postaci komunikatu: 0.00 s s s s s s s s s s s s s s s s s s s s s s s s x x x x x x x x x x x x x x x x x x [ n n n ] gdzie: nnn = numer błędu (z kompresja spacji) 'ss..s' = opis błędu (max. 24 znaki) 'xx..x' = instrukcja co robić Możliwe są rożne opisy i konieczne reakcje: 'Naciśnij klawisz..' (ikona wykrzyknik) 'Czekaj lub kasuj..' (ikona wykrzyknik) 'Wyłącz zasilanie'(ikona STOP) 'Załóż papier..' (bez ikony) 'TAK, NIE' (dla zapytań) Po wystąpieniu błędu w kasie na wyświetlaczu kasy pojawia się tekst z opisem błędu oraz numer tego błędu umieszczony w nawiasach kwadratowych: Poniżej przedstawiono dwa przykłady sygnalizacji błędu przez kasę PRESTO: 0.00 Z a d u ż a w a r t o ś ć C z e k a j l u b k a s u j.. [ 1 ] Braku papieru sygnalizowany jest poprzez wyświetleniem komunikatu: 70.00 B r a k p a p i e r u Z a ł ó ż p a p i e r.. [ 1 0 2 ] Strona 28/31
Błędy warstwy aplikacyjnej To błędy wynikające np. z braku zaprogramowania pewnych parametrów, nielogicznej sekwencji, błędów programowania (również programowania z komputera). Po wyświetleniu jednego z tych numerów operator może skasować komunikat klawiszem [KASUJ], jeżeli tego nie zrobi komunikat zostanie skasowany AUTOMATYCZNIE PO KILKU SEKUNDACH: 1 Za duża wartość 2 Błąd program. stawek PTU 3 Błędne daty raportu 4 Błędne hasło kasjera 5 Błędny numer PLU 6 Błędny numer opakowania 7 Za dużo pozycji paragonu 8 Za duża kwota transakcji 9 Przepełnienie totalizera 10 Błędny numer rabatu 11 Błędny numer formy płat. 12 Nieakt.stawka PTU towaru 13 Zerowa kwota transakcji 14 Zerowa kwota kaucji 15 Pusta pamięć fiskalna 16 Urządzenie fiskalne 17 Brak raportów dobowych 18 Miesiąc nie zakończony 19-20 Błędny znak 21 Błąd bajta kontrolnego 22 Błąd parametru 23 Błąd danych 24 Błąd oznaczenia rozkazu 25 Blok.prog.PLU: totalizer 26 Blokada program. (tryb) 27 Blokada prog.(totalizer) 28 Błąd nazwy PLU 29 Niedozwol. zmiana czasu 30 Numer seryjny zapisany 31 Nie w trybie fiskalnym 32 Błąd wartości rabatu 33 Błędna ilość 34 Brak uprawnień 35 Błąd dług. kodu kresk. 36 Grupa niezdefiniowana! Komunikaty o potwierdzenie wykonania operacji Komunikaty wyświetlane w przypadku gdy kasa 'prosi' o potwierdzenie wykonania operacji. Naciśnięcie klawisza [KASUJ] powoduje przerwanie operacji, a klawisza [WYKONAJ] jej zatwierdzenie. Strona 29/31
81 Wykonać raport dobowy? 82 Wykonać fiskalizację? 83 Wykonać raport ROM? 84 Anulować paragon? 85 Zapisać nagłówek? Ostrzeżenia modułu fiskalnego lub niektórymi błędami operatora. Są one ważniejsze od opisanych wcześniej błędów (1..99), dlatego OPERATOR MUSI SKASOWAĆ komunikat klawiszem [KASUJ]. Zachodzą tu dwa przypadki: sytuacja jest na tyle istotna, że operator powinien odnotować ten fakt, operacja, która wywołała wyświetlenie komunikatu nie jest możliwa i zostaje przerwana np. błąd #116 oznacza brak nagłówka i uniemożliwia wejście w sprzedaż lub raport dobowy, 101 Zerowanie RAM 102 Brak papieru 103-104 Błąd mech. drukującego 105 Przepełnienie totalizera 106-107 Błędna data zapisu 108 Błąd w trybie fiskalnym 109 Błędna data w kasie 110-111 Zwarta zwora serwisowa 112 Kończy sie pamięć fisk. 113 Błąd zegara RTC 114 Brak stawek PTU 115 Zapis kontrolny poprawny 116 Brak nagłówka 117 Brak numeru seryjnego 118 Zalogowano "KIEROWNIK" 119 Zapisano tylko 160 zn. 241 KASA ZAMKNIĘTA 242 PAMIĘĆ FISKALNA PEŁNA 243 P.F.PEŁNA,KASA ZAMKNIĘTA 244 ILOŚĆ ZEROWAŃ RAM > 30 245 Tylko do odcz.: ROZL,CLR 246 Tylko do odcz.: FULL,CLR 247 TYLKO DO ODCZYTU!! W przypadku wystąpienia błędów: 101,104,107 należy wezwać serwis! Strona 30/31
Błędy fatalne są raportowane głównie po włączeniu zasilania, mogą wystąpić także w trakcie działania (np. w przypadku błędu zapisu do pamięci fiskalnej). Jeśli błędy się powtarzają należy niezwłocznie wezwać serwis kasy! Jedyna możliwa akcja to wyłączenie zasilania klawiszem [KASUJ]; wyjątkiem jest błąd #218: błędna identyfikacja pamięci fiskalnej. 201 Błąd pamięci programu 202 Błąd testu RAM 203 Uszkodzenie zegara RTC 204-205 - 206 Błąd pamięci dziennika 207 Błąd pamięci fiskalnej 208 Błąd inicjalizacji P. F. 209-210 Przekroczona ilość zerowań RAM 211 Błąd napięcia zasilania 212-213 Błąd napięcia baterii 6V 214-215 Przegrzanie głowicy 216-217 Błąd zapisu do pamięci 218 Błędna pamięć fiskalna Strona 31/31