Jak obsłużyć 124 płatności na godzinę bez błędu drukarki fiskalnej
Pół godziny przestoju automatu w sobotnie popołudnie to około 380 złotych straty na samej marży w średniej wielkości punkcie. Najczęściej winna nie jest mechanika, ale zapchany bufor drukarki fiskalnej, który zawiesza cały system sprzedaży w najmniej odpowiednim momencie.
Dlaczego standardowe sterowniki zawodzą przy dużym ruchu
Większość gotowych sterowników do drukarek fiskalnych, które dostajemy od producentów sprzętu, radzi sobie świetnie w osiedlowym sklepie, gdzie klientów obsługuje człowiek. Sytuacja zmienia się drastycznie, gdy stawiamy kiosk samoobsługowy. Maszyna nie robi przerw na rozmowę, nie czeka, aż klient wyciągnie portfel – ona wysyła sygnał do druku natychmiast po zatwierdzeniu transakcji. Przy 124 operacjach na godzinę, co daje niecałe 30 sekund na klienta, standardowy protokół komunikacyjny zaczyna się dławić. Dane z komputera PC trafiają do pamięci drukarki szybciej, niż ona jest w stanie fizycznie wysunąć papier.
W OkayBooth zauważyliśmy ten problem u jednego z naszych klientów w Gliwicach, który zarządza siecią 47 automatów biletowych. System zawieszał się średnio 3 razy dziennie. Okazało się, że bufor drukarki przyjmował kolejne polecenia 'Print', mimo że poprzednie nie zostało jeszcze sfinalizowane. To prowadziło do błędu krytycznego i konieczności twardego restartu całego kiosku. Zamiast wymieniać drogi sprzęt, wystarczyło zmienić sposób, w jaki kod zarządza kolejką komunikatów. Szczerze mówiąc, większość producentów zwala winę na sprzęt, a problem leży w zbyt prostym oprogramowaniu sterującym.
Kluczem jest wprowadzenie aktywnego monitorowania stanu urządzenia. Program musi pytać drukarkę o status 'Ready' przed wysłaniem każdego bajta danych. Jeśli drukarka odpowiada, że wciąż mieli papier, system powinien wstrzymać wysyłkę na dokładnie 150 milisekund. To krótkie opóźnienie sprawia, że procesor drukarki nie wpada w pętlę błędów. Stabilność to podstawa handlu, więc nie możemy pozwolić na to, by maszyna 'myślała' zbyt długo nad jednym paragonem.
Stabilność to podstawa handlu. Przy 124 operacjach na godzinę, standardowy sterownik po prostu przestaje wyrabiać.
Optymalizacja kolejki w kodzie źródłowym
Najbardziej skuteczną metodą, jaką wdrożyliśmy w lipcu 2024 roku, było stworzenie asynchronicznego menedżera wydruków. Zamiast wysyłać dane bezpośrednio do portu COM lub USB, nasz system OkayBooth wrzuca je do lokalnej bazy danych SQLite. Osobny proces, działający w tle, wyciąga te dane i próbuje je 'przepchnąć' do drukarki tylko wtedy, gdy ta zgłasza pełną gotowość. Dzięki temu interfejs użytkownika na ekranie pozostaje płynny. Klient widzi komunikat 'Dziękujemy, odbierz paragon' i może odejść od kasy, podczas gdy drukarka wciąż kończy swoją pracę. Ekran ma reagować natychmiast, a nie czekać na mechanikę.
Wprowadzenie tej zmiany skróciło czas oczekiwania klienta przy okienku o średnio 2.4 sekundy. Może wydawać się, że to niewiele, ale przy 156 projektach, które zrealizowaliśmy, wiemy, że te sekundy sumują się w konkretny zysk. Mniej osób rezygnuje z zakupu, widząc szybko poruszającą się kolejkę. Dodatkowo, wyeliminowaliśmy błędy typu 'Resource Busy', które wcześniej wymuszały interwencję serwisu. Teraz serwisant musi pojawić się przy maszynie tylko po to, żeby dołożyć nową rolkę papieru, co dzieje się raz na 3 dni, a nie codziennie rano z powodu błędu softu.

Testy obciążeniowe i wyniki z realnych wdrożeń
Zanim oddaliśmy nową wersję oprogramowania do użytku, przeprowadziliśmy testy na stanowisku testowym w naszym biurze przy ul. Zwycięstwa 42. Symulowaliśmy ekstremalny ruch: 187 transakcji w ciągu godziny przez 4 godziny bez przerwy. Użyliśmy do tego popularnych na polskim rynku modeli drukarek Posnet i Elzab. Wynik był jednoznaczny: zero błędów bufora. Poprzednia wersja kodu przy takim obciążeniu wysypywała się już po 14 minutach. To pokazuje, że zero zbędnych bajerów w kodzie i skupienie się na czystej komunikacji sprzętowej daje najlepsze efekty biznesowe.
Jeden z naszych partnerów, prowadzący 12 punktów z automatami do kawy i przekąsek, zgłosił nam, że po aktualizacji softu liczba telefonów na infolinię spadła o 27% w pierwszym miesiącu. Ludzie przestali dzwonić z pretensjami, że 'automat zjadł pieniądze i nie dał potwierdzenia'. To konkretna oszczędność na kosztach wsparcia technicznego. Wsparcie techniczne w 4 godziny to nasz standard, ale najlepiej jest, gdy klient w ogóle go nie potrzebuje, bo system po prostu działa. Warto zainwestować w porządny kod sterownika, zamiast łatać błędy co tydzień.
Jak wdrożyć te zmiany samodzielnie
Jeśli budujesz własny system dla kiosków, zacznij od analizy logów komunikacji. Szukaj przerw w transmisji danych i błędów typu timeout. Pierwszym krokiem powinno być dodanie mechanizmu 'Retry' z wykładniczym czasem oczekiwania (tzw. exponential backoff). Jeśli drukarka nie odpowiada, spróbuj ponownie za 100ms, potem 200ms, potem 400ms. To zapobiega całkowitemu zablokowaniu wątku głównego aplikacji. Pamiętaj też o czyszczeniu bufora wejściowego przy każdym starcie aplikacji – to częsty błąd, przez który stare, niedrukowane dane blokują nowe transakcje.
Druga sprawa to formatowanie danych. Unikaj wysyłania skomplikowanych grafik na paragonie, jeśli nie jest to absolutnie konieczne. Każde logo w formacie BMP to setki kilobajtów, które muszą przejść przez wolne złącze szeregowe. My w OkayBooth zalecamy stosowanie czystego tekstu i wbudowanych fontów drukarki. To przyspiesza druk o około 35%. Jeśli Twój system potrzebuje audytu lub stabilnego sterownika, możemy przygotować go dla Ciebie w około 2 tygodnie. Skupiamy się na tym, co ważne: stabilności i szybkości, bez zbędnego marketingu.
Zero zbędnych bajerów w kodzie. Skup się na czystym tekście i wbudowanych fontach, aby przyspieszyć druk o 35%.


