Sterowniki‎ > ‎

DFEmul

Opis emulatora
Jest sterownikiem do oprogramowania DFEmul: http://pk.inet.pl/dfemul.htm. Jest to programowy emulator drukarki fiskalnej. Teoretycznie Serwer Wydruku Fiskalnego powinien "prosto z pudełka" współpracować z programem DFEmul, jednakże przy testach pojawiły się pewne niezgodności. Stąd, dla potrzeb wewnętrznych testów naszej aplikacji postanowiłem stworzyć osobny sterownik na podstawie sterownika Thermal 2.03, który będzie kompatybilny z programem DFEmul.

Róznice pomiędzy zachowaniem się fizycznej drukarki a programu DFEmul ujęte są w poniższym zestawieniu:
  • Niepoprawna obsługa rozkazu LBSERM - DFEmul odsyła dwa razy odpowiedź w przypadku wysłania rozkazu LBSERM z parametrem 3, oryginalna drukarka wysyła odpowiedź wyłącznie jeden raz.
    2011.05.13 18:12:17,82  <- ..ESCP3#e8A.ESC\
    2011.05.13 18:12:17,84  -> ..ESCP0#Z#e.ESC.\..ESCP0#Z#e.ESC.\
  • Budowa odpowiedzi na rozkaz #s - prawdziwa drukarka używa formatu 23.00 08.00 05.00 natomiast DFEmul wyśle 23.00 8.00 i 5.00. Trudno to uważać za błąd, ale po tym się poznaje, że coś jest emulacją a coś prawdziwym sprzętem.
    2011.05.13 18:22:01,31  <- .ESCP23#s.ESC\
    2011.05.13 18:22:01,45  ->  ESCP2#X0;0;0;1;1;0;11;5;13/23.00/8.00/5.00/0.00/101.00/101.00/101.00/
    87/0.00/0.00/0.00/0.00/0.00/0.00/0.00/0/DFE00000001EB.ESC\ESC.P0#Z#s.ESC\
  • Nieprawidłowe raportowanie stawki ZW w rozkazie #s - zamiast otzrymywać 100, otrzymujemy **.**, ogólnie 101 i 100 są nieobsługiwane. Nalezy wszystkie 101 ręcznie wyrzucić z pliku DFemul.ini i zostawić jedynie zdefiniowaną stawkę G. Przy parsowaniu odowiedzi szukamy **.** jako definicji stawki "ZW":
    2011.05.13 23:56:26,39  <- ESC.P23#s.ESC\
    2011.05.13 23:56:26,51  -> .ESCP2#X0;0;0;1;1;0;11;5;13/23.00/8.00/5.00/0.00/**.**/**.**/**.**/
    3/0.00/0.00/0.00/0.00/0.00/0.00/0.00/0/ZZZ00000000FB.ESC.\ESCP0#Z#s.ESC\
  • Nieprawidłowa obsługa sekwencji LBTRXEND1 - emulator zgłasza "błąd bajtu kontrolnego" - Nie wiem jak to zaprotezować, użyję innego rozkazu zamykającego (najprostszej wersji podsumowującej):
    2011.05.14 00:01:30,03  <- ESC.P3;0;1;0;0;0;0;1;3;0;1;1;2;5;$yXX01\rBartek Prokop\r#R-k 150948#\r
    Serwer wydruku fiskalnego wersja 1.3\r(c) 2001-2010 http://www.ttsoft.pl/\rdriver: PosnetThermal v. 2.03\r
    TEST **** 2345\rTEST ABD 12345\r2 dni testu\r0.07/0.07/0/0.01/0.01/0.01/0.01/0/8C.ESC\
    2011.05.14 00:01:30,09  -> .ESCP2#Z$y.ESC\
  • Niestety nie działają rabaty (ani kwotowe ani procentowe)
Efekt testowania najprostszego paragonu:

Wyżej wymienione różnice zostały dostrzeżone podczas testów i dlatego powstał sterownik dedykowany do programu DFEmul - pozwala to nam na testowanie zachowania się drukarki (choć z ograniczeniami), bez potrzeby jej fizycznego posiadania. Ogólnie duże gratulacje dla pomysłu emulatora, choć bardzo boli niedziałanie "rabatów".

Implementacja w FPS
Serwer wydruku fiskalnego używa klasy DFEmul dla potrzeb obsługi emulatora. Wprowadzono następujące zmniany w stosunku do "prawidłowego" sterownika:
  • ignorowania form płatności - wszystko jest traktowane jako gotówka.
  • emulacja rabatów, poprzez manipulację ceną jednostkową - tak aby uwzględniała ona już rabat procentowy/kwotowy.
Konfiguracja testowa
Instalujemy program com0com i konfigurujemy parę portów szeregowych COM101 i COM102 (wysokie wartości mają nam gwarantować brak konfliktu):

Konfigurujemy drukarkę fiskalną w sposób następujący:
    <GenericFPS daoType="GenericSQL" daoConnection="GenericFPS_MySQL">
        <Printer printerName="XX01" printerType="DFEmul" serialPort = "COM101" />
    </GenericFPS>

I testujemy w standardowy sposób (z linii poleceń) lub naszą docelową aplikacją kliencką.

Emulacja rabatów
Ponieważ rabaty są istotną (przynajmniej dla części klientów) funkcjonalnością oprogramowania Serwer Wydruku Fiskalnego, to wprowadziłem "emulację" rabatów poprzez manipulację ceny. Dodatkowo, żeby widzieć, fakt udzielenia rabatu, zmieniam w sterowniku nazwę towaru, dodając informację o rabacie. Efekt widoczny jest poniżej (zrzut z historii programu DFEmul):
2011.05.17 12:18:57,10  2011-05-17                            33
2011.05.17 12:18:57,12            N I E F I S K A L N Y
2011.05.17 12:18:57,70  Towar.23                1.0x0.01   0.01A
2011.05.17 12:18:58,29  [RK:0.01] Towar.08RK    1.0x0.01   0.01B
2011.05.17 12:18:58,87  [RP:50.0%] Towar.08RP   1.0x0.01   0.01B
2011.05.17 12:18:59,45  Towar.08                1.0x0.01   0.01B
2011.05.17 12:19:00,03  Test_05                 1.0x0.01   0.01C
2011.05.17 12:19:00,60  Towar.00                1.0x0.01   0.01D
2011.05.17 12:19:01,18  Towar.ZW                1.0x0.01   0.01G
2011.05.17 12:19:01,76  - - - - - - - - - - - - - - - - - - - - 
2011.05.17 12:19:01,76  Sprzed.opodatk.A                    0.01
2011.05.17 12:19:01,78  Sprzed.opodatk.B                    0.03
2011.05.17 12:19:01,78  Sprzed.opodatk.C                    0.01
2011.05.17 12:19:01,79  Sprzed.opodatk.D                    0.01
2011.05.17 12:19:01,79  Sprzed.opodatk.G                    0.01
2011.05.17 12:19:01,81  Kwota PTU A 23 %                    0.00
2011.05.17 12:19:01,82  Kwota PTU B 8 %                     0.00
2011.05.17 12:19:01,82  Kwota PTU C 5 %                     0.00
2011.05.17 12:19:01,85  Kwota PTU G 100 %                   0.00
2011.05.17 12:19:01,90  ŁĄCZNA KWOTA PTU                    0.00
2011.05.17 12:19:01,90  SUMA                                0.07
2011.05.17 12:19:01,92  - - - - - - - - - - - - - - - - - - - - 
2011.05.17 12:19:01,92            N I E F I S K A L N Y
2011.05.17 12:19:01,93        #kasa      kasjer            12:19
2011.05.17 12:19:01,93  - - - - - - - - - - - - - - - - - - - - 
2011.05.17 12:19:01,95  Gotówka                             0.07
2011.05.17 12:19:01,95  Reszta                              0.00


.
Comments