Kas paslėpta internetiniuose kasos aparatuose: mokesčių registratoriaus kūrimas. ESC POS ESC * komanda spausdinti bitmap spausdintuve Kelių eilučių spausdinimas naudojant ESC

ESC * yra viena iš kelių „vaizdo bitų“ komandų ESC/POS. Jis priima „stulpelio formato“ duomenis, kurie gali būti tik viena 8 arba 24 pikselių eilutė. Taigi čia yra du geri variantai.

Kelių eilučių spausdinimas naudojant ESC*

Panašu, kad galite atspausdinti vieną eilutę, todėl manyčiau, kad pats duomenų formatas nėra problema.

Galite spausdinti kelias eilutes tiesiog pakartodami komandą, kad išspausdintumėte papildomas eilutes, atskirtas \n eilučių lūžiais. Tam reikia susmulkinti vaizdą ir užpildyti jį vietos, kad jo aukštis būtų 8 arba 24 pikselių kartotinis (vėlgi dėl formato).

Dėl tarpų tarp eilučių turite duoti komandą pakeisti linijinių kanalų dydį spausdinant vaizdą, o tada kitą komandą, kad juos iš naujo nustatytumėte.

Naudoju ESC 3 0x10 16 kanalų eilučių (baitai 0x1b 0x33 0x10) ir ESC 2 (baitai 0x1b 0x32) iš naujo nustatyti.

Šis spausdinimo būdas puikiai suderinamas su senesniais spausdintuvais, tačiau išvestyje gali atsirasti plonų horizontalių linijų.

spausdinkite visą vaizdą naudodami GS v 0

Ši vaizdo komandos dalis priima įvairius „rastrinio formato“ duomenis. Aš naudojuosi tuo, kad šio formato blobas yra identiškas dvejetainiams duomenims plačiai naudojamame PBM bitmap formate (konkrečiai dvejetainiams duomenims P4 antraštės failuose).

Vaizdo aukštis bus ribojamas atsižvelgiant į spausdinimo buferio dydį, bet gali būti iki 65535 pikselių. Dėl vaizdavimo plotis turi dalytis iš 8.

Mažai kas galvoja apie tai, kaip veikia kasos technologija apsipirkdami parduotuvėje. Tiesą sakant, tai yra gerai suteptas mechanizmas ne tik techniniu, bet ir teisiniu požiūriu. Visi žino, kad svarbiausia yra gauti čekį, tačiau tik patys verslininkai žino, kodėl čekis yra pirkimą patvirtinantis fiskalinis dokumentas.

Šiame straipsnyje mes pasidalinsime savo patirtimi kuriant kasos aparatą ir papasakosime, kaip viskas veikia iš vidaus.



Senovinis kasos aparatas

1. Sistema: techninė įranga + programinė įranga kasoje

Visas programinės ir techninės įrangos kompleksas, kuris yra įdiegtas kasininko darbo vietoje, gali būti vadinamas POS sistema arba POS terminalu, iš angliškos pardavimo vietos - pardavimo vietos.

Pažiūrėkime, kaip veikia POS sistema. Kadangi esminis skirtumas tarp sistemos ir terminalo yra fiskalinės atminties (FP) arba fiskalinės saugyklos (FS) vieta: POS sistemoje ji yra įmontuota spausdinimo įrenginyje, o POS terminale ji yra kompiuteryje. vienetas.


Tipiškas kasos aparatas. Rusijos įmonės „SHTRIKH-M“ POS sistema

POS sistema – programinės ir techninės įrangos kompleksas, veikiantis fiskalinio registratoriaus pagrindu. Paprastai jį sudaro POS kompiuteris, monitorius ir klaviatūra, kvitų spausdintuvas, mokesčių registratorius, klientų ekranas, pinigų stalčius ir banko kortelių skaitytuvas. Tipiškas kasos funkcijų rinkinys: prekių apskaita ir išdavimas, pinigų gavimas ir išdavimas, pirkimo atšaukimas.

Įdomiausia POS sistemos dalis yra mokesčių registratorius - tai yra sistemos širdis ir viena iš kasos aparatų (CCM) klasių.

Kvitų spausdintuvas su integruota fiskaline atmintimi veikia kaip mokesčių registratorius. Ji gauna informaciją komunikacijos kanalu, ją apdoroja ir spausdina. Duomenys apie grynųjų pinigų operacijas gali būti saugomi fiskalinėje atmintyje tiek laiko, kiek norite, kol reikės iš naujo nustatyti.

Serveris naudojamas tiesiogiai perduoti duomenis iš mokesčių registratoriaus į mokesčių tarnybą fiskalinių duomenų operatorius – OFD - specialus juridinis asmuo, atsakingas už fiskalinių duomenų gavimą, tvarkymą, saugojimą ir perdavimą mokesčių tarnybai.

Praėjusiais metais Rusijos verslininkai aktyviai diskutavo apie perėjimą prie internetinių kasos aparatų ir čekių siuntimą mokesčių inspekcijai per OFD, priėmus įstatymą 54-FZ „Dėl kasos aparatų naudojimo“.


OFD vaidmuo. Schema iš straipsnio apie 54-FZ ir perėjimą prie internetinių kasų

Federalinė mokesčių tarnyba yra Rusijos Federacijos federalinė mokesčių tarnyba. Kazachstane šią funkciją atlieka Finansų ministerijos Valstybės pajamų komitetas. O Baltarusijoje – Mokesčių ir rinkliavų ministerija.

Rusijos Federacijoje veikia keli OFD, tačiau Kazachstane yra tik vienas – Kazakhtelecom JSC.

2. Teisės aktai: pasaulinė kasos aparatų kontrolė internetu

Mažmeninės prekybos operacijų stebėjimas internetu jau veikia daugelyje šalių: Pietų Korėjoje (2005 m.), Švedijoje (2008 m.), Kanadoje (2010 m.), Lenkijoje (2011 m.), Kroatijoje (2013 m.). 2015 m. šis metodas buvo pradėtas įgyvendinti Kazachstane. O Baltarusijoje kasos aparatų prijungimo prie nuotolinės pajamų kontrolės sistemos terminas buvo nukeltas į 2018 m. liepos 1 d. (toks pat terminas numatytas ir Rusijoje).

Internetinių kasos aparatų naudojimą Kazachstane reglamentuoja Mokesčių kodekso 90 skyrius. Nuo 2015 m. degalų ir alkoholio pardavėjai pradėjo siųsti kvitus mokesčių inspekcijai internetu. Antrajame etape – nuo ​​2016 m. – prie sistemos buvo prijungti didmenine prekyba įvairiomis medžiagomis ir įranga užsiimantys asmenys; mažmeninė prekyba baldais, programine įranga ir elektronika; viešbučių, restoranų, kirpyklų ir kino teatrų savininkai. Numatytas trečiasis projekto etapas.

Ne veltui remiamės įstatymais, kuriuose aprašomi privalomi techniniai reikalavimai duomenims rinkti ir siųsti mokesčių inspekcijai, kurie yra jų pagrindas. užduotys plėtros inžinieriams. Pavyzdžiui, Kazachstano Respublikos finansų ministro įsakymu buvo paskelbtas reikalavimų kasos aparatui, perduodančiam informaciją apie atsiskaitymus grynaisiais pinigais, sąrašas, kuris mums labai pravertė kuriant fiskalinį registratorių.

3. Fiskalinio registratoriaus dizainas ir verslo logika

Mūsų pagrindinis kūrimo įrenginys yra terminis kvitų spausdintuvas. Surinkimo sistema yra „Buildroot“. Programavimas - Qt.

Projektui reikėjo sukurti:

1) techninės specifikacijos;
2) mainų protokolas su POS kompiuteriu, pavadinkime jį POS-C protokolu;
3) demono programa, kuri valdo įrenginį:

  • modulis duomenų mainams su OFD serveriu naudojant CCT protokolą (kasos įranga);
  • modulis duomenų mainams su POS kompiuteriu naudojant POS-C protokolą;
  • spausdinimo valdymo modulis;
  • ryšio sąsajos valdymo modulis;
  • duomenų bazės sąveikos modulis;
  • Tinklapio serveris.

1) Duomenų mainų modulis su OFD serveriu

Keitimasis tarp įrenginio ir serverio vykdomas naudojant TCP/IP protokolą. Šioje sąveikoje įrenginys yra klientas, o OFD yra serveris. Protokolo buferiai naudojami kaip CCP protokolu perduodamos informacijos kodavimo ir dekodavimo pagrindas.

Žiniatinklio sąsajos paskirtis:

  1. nustatymai;
  2. įrenginio būsenos peržiūra;
  3. Programinės įrangos atnaujinimas.


Interneto sąsaja

4. Išvada

Remdamiesi išvardintomis technologijomis sukūrėme įrenginį su daugybe funkcijų ir nustatymų per žiniatinklio sąsają, įvairių apsikeitimo protokolų su POS kompiuteriu palaikymą bei galimybę atnaujinti programinę įrangą.

Ir dabar atrodo, kad Promwad inžinierių komanda niekada negalės tiesiog ateiti į parduotuvę ir ką nors nusipirkti, negalvodama apie visus šiuos internetinių kasų aparatų vidinius elementus, duomenų perdavimo protokolus, teisinius reikalavimus ir visos šios virtuvės spausdinimą:
- Paimk čekį, prašau!
- Ne, ačiū! :-)

P.S. Ir pabaigai – humoro akimirka: britų ufologai iš „ArtAlienTV“ komandos „Curiosity“ marsaeigio vaizduose aptiko objektą, panašų į seną kasos aparatą.

ESC/POS yra komandų rinkinys, leidžiantis kvitų spausdintuvams spausdinti

Įvadas

Prieš pradėdami, apie ESC / POS turite žinoti tris dalykus:

  1. Dauguma šiuolaikinių kvitų spausdintuvų tam tikra forma palaiko.
  2. Rašyti mirtinai paprasta.
  3. Komandos prasideda ESC simboliu (ASCII 27).

Beje, aukščiau esančiame vaizdo įraše išspausdintas kvitas yra pavyzdys iš escpos-php saugyklos. Peržiūrėsiu šį spaudinį, nes jame parodytos visos pagrindinės ESC / POS funkcijos.

Komandų struktūra

Keturi konkretūs ASCII simboliai pasirodo komandų sekose -

Santrumpa vardas Kodas (šešioliktainis)
NUL Null 0x00
LF Linijos tiekimas 0x0A
ESC Pabegti 0x1B
G.S. Grupės skyriklis 0x1D

Įprastas tekstas tiesiog siunčiamas į spausdintuvą, atskirtas eilučių pertraukomis. Komandos prasideda ESC arba GS, o po jų yra spausdinamas simbolis, o kartais ir kai kurie skaičiai

Skaičiai tiesiog perduodami kaip simbolis. Pavyzdžiui, „5“ perduodamas kaip 0x05.

Pavyzdžiai

Inicijavimas

Kai pirmą kartą prisijungiate prie spausdintuvo, turėtumėte jį inicijuoti. Tai grąžina numatytąjį formatavimą, o ne trigubai pabrauktą dvigubą brūkšnį šriftą, kuris galėjo būti naudojamas ankstesniame spaudinyje.

Formatavimo iš naujo nustatymo komanda yra tokia:

Reikalauti __DIR__. "/autoload.php"; naudoti Mike42\Escpos\Printer; naudokite Mike42\Escpos\PrintConnectors\FilePrintConnector; $jungtis = naujas FilePrintConnector("/dev/usb/lp0"); $spausdintuvas = naujas Spausdintuvas($jungtis); $spausdintuvas -> uždaryti();

00000000 1b 40 |.@| 00000003

Tekstas „Sveikas pasaulis“.

Tai paprasčiausias kvito tipas, kuriame yra tik neformatuotas tekstas.

Tekstas tiesiog siunčiamas į spausdintuvą, atskirtas eilučių tiekimu.

Reikalauti __DIR__. "/autoload.php"; naudoti Mike42\Escpos\Printer; naudokite Mike42\Escpos\PrintConnectors\FilePrintConnector; $jungtis = naujas FilePrintConnector("/dev/usb/lp0"); $spausdintuvas = naujas Spausdintuvas($jungtis); /* Tekstas */ $printer -> text("Sveikas pasauli\n"); $spausdintuvas -> cut(); $spausdintuvas -> uždaryti();

00000000 1b 40 48 65 6c 6c 6f 20 77 6f 72 6c 64 0a 1d 56 |.@Labas pasauli..V| 00000010 41 03 |A.| 00000012

Eilučių tiekimas

Su šia komanda spausdintuvas gali greitai praleisti tam tikrą eilučių skaičių.

Komandos yra:

LF
ESCd[numeris]
ESC v[numeris]

Pirmoji komanda paduoda pirmyn, antroji – atgal. Iš pavyzdžio matyti, kad demonstracinis spausdintuvas nepalaiko atvirkštinio popieriaus tiekimo.

Require_once(dirname(__FILE__) . "/escpos-php/Escpos.php"); $spausdintuvas = naujas Escpos(); /* Eilučių tiekimas */ $printer -> text("ABC"); $spausdintuvas -> tiekimas(7); $spausdintuvas -> tekstas("DEF"); $spausdintuvas -> feedReverse(3); $spausdintuvas -> tekstas("GHI"); $spausdintuvas -> tiekimas(); $spausdintuvas -> cut(); $spausdintuvas -> uždaryti();

00000000 1b 40 41 42 43 1b 64 07 44 45 46 1b 65 03 47 48 | [apsaugotas el. paštas]| 00000010 49 0a 1d 56 41 03 |I..VA.| 00000016

Spausdinimo režimai

Spausdinimo režimai apima šrifto aukštį, plotį ir paryškinimą viename atribute.

Komanda yra:

Šrifto režimai sudaromi logiškai ARBA sujungiant atributų pasirinkimą. 0 reiškia plano A šrifto tekstą. Režimo vėliavėlės yra:

Režimas Skaičius
A šriftas (be režimo) 0
Šriftas B 1
Pabrėžė 8
Dvigubas aukštis 16
Dvigubas plotis 32
Pabraukti 128

Kvito pavyzdys iliustruoja kiekvienos vėliavėlės poveikį.

Reikalauti __DIR__. "/autoload.php"; naudoti Mike42\Escpos\Printer; naudokite Mike42\Escpos\PrintConnectors\FilePrintConnector; $jungtis = naujas FilePrintConnector("/dev/usb/lp0"); $spausdintuvas = naujas Spausdintuvas($jungtis); /* Šrifto režimai */ $modes = masyvas(Spausdintuvas:::MODE_FONT_A, Spausdintuvas:::MODE_FONT_B, Spausdintuvas:::MODE_EMPHASIZED, Spausdintuvas:::MODE_DOUBLE_HEIGHT, Spausdintuvas:::MODE_DOUBLE_WIDTH, Spausdintuvas:::MODE_UNDERLINE); for($i = 0; $i< 2 ** count($modes); $i++) { $bits = str_pad(decbin($i), count($modes), "0", STR_PAD_LEFT); $mode = 0; for($j = 0; $j < strlen($bits); $j++) { if(substr($bits, $j, 1) == "1") { $mode |= $modes[$j]; } } $printer ->selectPrintMode($mode); $spausdintuvas -> tekstas("ABCDEFGHIJabcdefghijk\n"); ) $printer -> selectPrintMode(); // Atstatyti $printer -> cut(); $spausdintuvas -> uždaryti();

00000000 1b 40 1b 21 00 41 42 43 44 45 46 47 48 49 4a 61 |.@.!.ABCDEFGHIJa| 00000010 62 63 64 65 66 67 68 69 6a 6b 0a 1b 21 80 41 42 |bcdefghijk..!.AB| 00000020 43 44 45 46 47 48 49 4a 61 62 63 64 65 66 67 68 |CDEFGHIJabcdefgh| 00000030 69 6a 6b 0a 1b 21 20 41 42 43 44 45 46 47 48 49 |ijk..! ABCDEFGHI| 00000040 4a 61 62 63 64 65 66 67 68 69 6a 6b 0a 1b 21 a0 |Jabcdefghijk..!.| 00000050 41 42 43 44 45 46 47 48 49 4a 61 62 63 64 65 66 |ABCDEFGHIJabcdef| 00000060 67 68 69 6a 6b 0a 1b 21 10 41 42 43 44 45 46 47 |ghijk..!.ABCDEFG| 00000070 48 49 4a 61 62 63 64 65 66 67 68 69 6a 6b 0a 1b |HIJabcdefghijk..| 00000080 21 90 41 42 43 44 45 46 47 48 49 4a 61 62 63 64 |!.ABCDEFGHIJabcd| 00000090 65 66 67 68 69 6a 6b 0a 1b 21 30 41 42 43 44 45 |efghijk..!0ABCDE| 000000a0 46 47 48 49 4a 61 62 63 64 65 66 67 68 69 6a 6b |FGHIJabcdefghijk| 000000b0 0a 1b 21 b0 41 42 43 44 45 46 47 48 49 4a 61 62 |..!.ABCDEFGHIJab| 000000c0 63 64 65 66 67 68 69 6a 6b 0a 1b 21 08 41 42 43 |cdefghijk..!.ABC| 000000d0 44 45 46 47 48 49 4a 61 62 63 64 65 66 67 68 69 |DEFGHIJabcdefghi| 000000e0 6a 6b 0a 1b 21 88 41 42 43 44 45 46 47 48 49 4a |jk..!.ABCDEFGHIJ| 000000f0 61 62 63 64 65 66 67 68 69 6a 6b 0a 1b 21 28 41 |abcdefghijk..! 6 67 |BCDEFGHIJabcdefg|. 00000110 68 69 6a 6b 0a 1b 21 a8 41 42 43 44 45 46 47 48 |hijk..!.ABCDEFGH| 00000120 49 4a 61 62 63 64 65 66 67 68 69 66 67 68 69 6a 130 18 41 42 43 44 45 46 47 48 49 4a 61 62 63 64 65 |.ABCDEFGHIJabcde| 00000140 66 67 68 69 6a 6b 0a 1b 21 98 41 42 43 44 .f.4 4a 61 62 63 64 65 66 67 68 69 6a 6b 0a |GHIJabcdefghijk.| 00000160 1b 21 38 41 42 43 44 45 46 47 48 49 4a 61 62 63 |.!8ABCDEFGHI6b26b8b 41 42 43 44 |. defghijk..!.ABCD 00000180 45 46 47 48 49 4a 61 62 63 64 65 66 67 68 69 6a |EFGHIJabcdefghij| 00000190 6b 0a 1b 21 444 44 4a 61 |k..!. ABCDEFGHIJa|000001a0 62 63 64 65 66 67 68 69 6a 6b 0a 1b 21 81 41 42 |bcdefghijk..!.AB| 000001b0 43 44 45 46 47 48 49 4a 61 61 68 49 4a 61 61 63 000001c0 69 6a 6b 0a 1b 21 21 41 42 43 44 45 46 47 48 49 |ijk..!!ABCDEFGHI| 000001d0 4a 61 62 63 64 65 66 67 68 69 6a 6b 0a 1b 21 a1 |Jabcdefghijk..!.| 000001e0 41 42 43 44 45 46 47 48 49 4a 61 62 63 64 65 66 |ABCDEFGHIJabcdef| 000001f0 67 68 69 6a 6b 0a 1b 21 11 41 42 43 44 45 46 47 |ghijk..!.ABCDEFG| 00000200 48 49 4a 61 62 63 64 65 66 67 68 69 6a 6b 0a 1b |HIJabcdefghijk. .| 00000210 21 91 41 42 43 44 45 46 47 48 49 4a 61 62 63 64 |!.ABCDEFGHIJabcd| 00000220 65 66 67 68 69 6a 6b 0a 1b 21 31 41 42 43 44 45 |efghijk..!1ABCDE| 00000230 46 47 48 49 4a 61 62 63 64 65 66 67 68 69 6a 6b |FGHIJabcdefghijk| 00000240 0a 1b 21 b1 41 42 43 44 45 46 47 48 49 4a 61 62 |..!.ABCDEFGHIJab| 00000250 63 64 65 66 67 68 69 6a 6b 0a 1b 21 09 41 42 43 |cdefghijk..!.ABC| 00000260 44 45 46 47 48 49 4a 61 62 63 64 65 66 67 68 69 |DEFGHIJabcdefghi| 00000270 6a 6b 0a 1b 21 89 41 42 43 44 45 46 47 48 49 4a |jk..!.ABCDEFGHIJ| 00000280 61 62 63 64 65 66 67 68 69 6a 6b 0a 1b 21 29 41 |abcdefghijk..!)A| 00000290 42 43 44 45 46 47 48 49 4a 61 62 63 64 65 66 67 |BCDEFGHIJabcdefg| 000002a0 68 69 6a 6b 0a 1b 21 a9 41 42 43 44 45 46 47 48 |hijk..!.ABCDEFGH| 000002b0 49 4a 61 62 63 64 65 66 67 68 69 6a 6b 0a 1b 21 |IJabcdefghijk..!| 000002c0 19 41 42 43 44 45 46 47 48 49 4a 61 62 63 64 65 |.ABCDEFGHIJabcde| 000002d0 66 67 68 69 6a 6b 0a 1b 21 99 41 42 43 44 45 46 |fghijk..!.ABCDEF| 000002e0 47 48 49 4a 61 62 63 64 65 66 67 68 69 6a 6b 0a |GHIJabcdefghijk.| 000002f0 1b 21 39 41 42 43 44 45 46 47 48 49 4a 61 62 63 |.!9ABCDEFGHIJabc| 00000300 64 65 66 67 68 69 6a 6b 0a 1b 21 b9 41 42 43 44 |defghijk..!.ABCD| 00000310 45 46 47 48 49 4a 61 62 63 64 65 66 67 68 69 6a |EFGHIJabcdefghij| 00000320 6b 0a 1b 21 00 41 42 43 44 45 46 47 48 49 4a 61 |k..!.ABCDEFGHIJa| 00000330 62 63 64 65 66 67 68 69 6a 6b 0a 1b 21 80 41 42 |bcdefghijk..!.AB| 00000340 43 44 45 46 47 48 49 4a 61 62 63 64 65 66 67 68 |CDEFGHIJabcdefgh| 00000350 69 6a 6b 0a 1b 21 20 41 42 43 44 45 46 47 48 49 |ijk..! ABCDEFGHI| 00000360 4a 61 62 63 64 65 66 67 68 69 6a 6b 0a 1b 21 a0 |Jabcdefghijk..!.| 00000370 41 42 43 44 45 46 47 48 49 4a 61 62 63 64 65 66 |ABCDEFGHIJabcdef| 00000380 67 68 69 6a 6b 0a 1b 21 10 41 42 43 44 45 46 47 |ghijk..!.ABCDEFG| 00000390 48 49 4a 61 62 63 64 65 66 67 68 69 6a 6b 0a 1b |HIJabcdefghijk..| 000003a0 21 90 41 42 43 44 45 46 47 48 49 4a 61 62 63 64 |!.ABCDEFGHIJabcd| 000003b0 65 66 67 68 69 6a 6b 0a 1b 21 30 41 42 43 44 45 |efghijk..!0ABCDE| 000003c0 46 47 48 49 4a 61 62 63 64 65 66 67 68 69 6a 6b |FGHIJabcdefghijk| 000003d0 0a 1b 21 b0 41 42 43 44 45 46 47 48 49 4a 61 62 |..!.ABCDEFGHIJab| 000003e0 63 64 65 66 67 68 69 6a 6b 0a 1b 21 08 41 42 43 |cdefghijk..!.ABC| 000003f0 44 45 46 47 48 49 4a 61 62 63 64 65 66 67 68 69 |DEFGHIJabcdefghi| 00000400 6a 6b 0a 1b 21 88 41 42 43 44 45 46 47 48 49 4a |jk..!.ABCDEFGHIJ| 00000410 61 62 63 64 65 66 67 68 69 6a 6b 0a 1b 21 28 41 |abcdefghijk. .!(A| 00000420 42 43 44 45 46 47 48 49 4a 61 62 63 64 65 66 67 |BCDEFGHIJabcdefg| 00000430 68 69 6a 8b 441 441 46 47 48 |hijk..!.ABCDEFGH| 00000440 49 4a 61 62 63 64 65 66 67 68 69 6a 6b 0a 1b 21 |IJabcdefghijk..! 00000450 18 41 42 43 46 47 4 6 4 4 6 4 65 |.ABCDEFGHIJabcde| 6a 6b 0a 1b 21 98 41 42 43 44 45 46 |fghijk..!.ABCDEF| 00000470 47 48 49 4a 61 62 63 64 65 66 67 68fJab.de 1b 21 38 41 42 43 44 45 46 47 48 49 4a 61 62 63 |.!8ABCDEFGHIJabc| 00000490 64 65 66 67 68 69 6a 6b 0a 1b 21 b8 41 42 43 44.6ghijk | 3 64 65 66 67 68 69 6a |EFGHIJabcdefghij|. a 6b 0a 1b 21 81 41 42 |. .!.AB|. 000004d0 43 44 45 46 47 48 49 4a 61 62 63 64 65 66 67 68 |CDEFGHIJabcdefgh| 45 46 47 48 49 63 64 65 66 67 68 69 6a 6b 0a 1b 21 a1 |Jabcdefghijk..!.| 00000500 41 42 43 44 45 46 47 48 49 4a 61 62 63 64 65 66 |ABCDEFGHIJabcdef| 00000510 67 68 69 6a 6b 0a 1b 21 11 41 42 43 44 45 46 47 |ghijk..!.ABCDEFG| 00000520 48 49 4a 61 62 63 64 65 66 67 68 69 6a 6b 0a 1b |HIJabcdefghijk..| 00000530 21 91 41 42 43 44 45 46 47 48 49 4a 61 62 63 64 |!.ABCDEFGHIJabcd| 00000540 65 66 67 68 69 6a 6b 0a 1b 21 31 41 42 43 44 45 |efghijk..!1ABCDE| 00000550 46 47 48 49 4a 61 62 63 64 65 66 67 68 69 6a 6b |FGHIJabcdefghijk| 00000560 0a 1b 21 b1 41 42 43 44 45 46 47 48 49 4a 61 62 |..!.ABCDEFGHIJab| 00000570 63 64 65 66 67 68 69 6a 6b 0a 1b 21 09 41 42 43 |cdefghijk..!.ABC| 00000580 44 45 46 47 48 49 4a 61 62 63 64 65 66 67 68 69 |DEFGHIJabcdefghi| 00000590 6a 6b 0a 1b 21 89 41 42 43 44 45 46 47 48 49 4a |jk..!.ABCDEFGHIJ| 000005a0 61 62 63 64 65 66 67 68 69 6a 6b 0a 1b 21 29 41 |abcdefghijk..!)A| 000005b0 42 43 44 45 46 47 48 49 4a 61 62 63 64 65 66 67 |BCDEFGHIJabcdefg| 000005c0 68 69 6a 6b 0a 1b 21 a9 41 42 43 44 45 46 47 48 |hijk..!.ABCDEFGH| 000005d0 49 4a 61 62 63 64 65 66 67 68 69 6a 6b 0a 1b 21 |IJabcdefghijk..!| 000005e0 19 41 42 43 44 45 46 47 48 49 4a 61 62 63 64 65 |.ABCDEFGHIJabcde| 000005f0 66 67 68 69 6a 6b 0a 1b 21 99 41 42 43 44 45 46 |fghijk..!.ABCDEF| 00000600 47 48 49 4a 61 62 63 64 65 66 67 68 69 6a 6b 0a |GHIJabcdefghijk.| 00000610 1b 21 39 41 42 43 44 45 46 47 48 49 4a 61 62 63 |.!9ABCDEFGHIJabc| 00000620 64 65 66 67 68 69 6a 6b 0a 1b 21 b9 41 42 43 44 |defghijk. .!.ABCD| 00000630 45 46 47 48 49 4a 61 62 63 64 65 66 67 68 69 6a |EFGHIJabcdefghij| 00000640 6b 0a 1b 21 00 1d 56 41 03 |k..!..VA.| 00000649

Pabraukti

Komanda yra:

ESC – [numeris]

Argumentas nustatytas į 0, jei nėra pabraukimo, 1 – pabraukti, 2 – stipriai pabraukti.

Reikalauti __DIR__. "/autoload.php"; naudoti Mike42\Escpos\Printer; naudokite Mike42\Escpos\PrintConnectors\FilePrintConnector; $jungtis = naujas FilePrintConnector("/dev/usb/lp0"); $spausdintuvas = naujas Spausdintuvas($jungtis); /* Pabraukite */ for($i = 0; $i< 3; $i++) { $printer ->setUnunderline($i); $printer -> text("Greita rudoji lapė peršoka per tingų šunį\n"); ) $printer -> setUnderline(0); // Atstatyti $printer -> cut(); $spausdintuvas -> uždaryti();

00000000 1b 40 1b 2d 00 54 68 65 20 71 75 69 63 6b 20 62 | [apsaugotas el. paštas] greitas b| 00000010 72 6f 77 6e 20 66 6f 78 20 6a 75 6d 70 73 20 6f |ruginė lapė šokinėja o| 00000020 76 65 72 20 74 68 65 20 6c 61 7a 79 20 64 6f 67 |prie tinginio šuns| 00000030 0a 1b 2d 01 54 68 65 20 71 75 69 63 6b 20 62 72 |..-.Greitasis br| 00000040 6f 77 6e 20 66 6f 78 20 6a 75 6d 70 73 20 6f 76 |sava lapė šokinėja ov| 00000050 65 72 20 74 68 65 20 6c 61 7a 79 20 64 6f 67 0a |er tingus šuo.| 00000060 1b 2d 02 54 68 65 20 71 75 69 63 6b 20 62 72 6f |.-.Greitas brolis| 00000070 77 6e 20 66 6f 78 20 6a 75 6d 70 73 20 6f 76 65 |wn lapė šokinėja ove| 00000080 72 20 74 68 65 20 6c 61 7a 79 20 64 6f 67 0a 1b |r tinginys šuo..| 00000090 2d 00 1d 56 41 03 |-..VA.| 00000096

Pjūviai

Komanda yra:

ESC V [numeris]

Argumentas, matyt, parodo, ar atlikti „dalinį“ (65) ar „visišką“ (66) pjūvį, bet neturi įtakos mano spausdintuvo modeliui.

Reikalauti __DIR__. "/autoload.php"; naudoti Mike42\Escpos\Printer; naudokite Mike42\Escpos\PrintConnectors\FilePrintConnector; $jungtis = naujas FilePrintConnector("/dev/usb/lp0"); $spausdintuvas = naujas Spausdintuvas($jungtis); /* Iškirpti */ for($i = 0; $i< 5; $i++) { $printer ->cut(Spausdintuvas:::CUT_PARTIAL); $spausdintuvas -> cut(Spausdintuvas:::CUT_FULL); ) $printer -> cut(); $spausdintuvas -> uždaryti();

00000000 1b 40 1d 56 42 03 1d 56 41 03 1d 56 42 03 1d 56 | [apsaugotas el. paštas]| 00000010 41 03 1d 56 42 03 1d 56 41 03 1d 56 42 03 1d 56 |A..VB..VA..VB..V| 00000020 41 03 1d 56 42 03 1d 56 41 03 1d 56 41 03 |A..VB..VA..VA.| 0000002e

Pabrėžimas

Komanda yra:

ESC E [numeris]

Naudokite 1, kad įjungtumėte paryškinimą, ir 0, kad jį išjungtumėte.

Reikalauti __DIR__. "/autoload.php"; naudoti Mike42\Escpos\Printer; naudokite Mike42\Escpos\PrintConnectors\FilePrintConnector; $jungtis = naujas FilePrintConnector("/dev/usb/lp0"); $spausdintuvas = naujas Spausdintuvas($jungtis); /* Pabrėžimas */ for($i = 0; $i< 2; $i++) { $printer ->setEmphasis($i == 1); $printer -> text("Greita rudoji lapė peršoka per tingų šunį\n"); ) $printer -> setEmphasis(false); // Atstatyti $printer -> cut(); $spausdintuvas -> uždaryti();

00000000 1b 40 1b 45 00 54 68 65 20 71 75 69 63 6b 20 62 | [apsaugotas el. paštas] greitas b| 00000010 72 6f 77 6e 20 66 6f 78 20 6a 75 6d 70 73 20 6f |ruginė lapė šokinėja o| 00000020 76 65 72 20 74 68 65 20 6c 61 7a 79 20 64 6f 67 |prie tinginio šuns| 00000030 0a 1b 45 01 54 68 65 20 71 75 69 63 6b 20 62 72 |..E.Greitasis br| 00000040 6f 77 6e 20 66 6f 78 20 6a 75 6d 70 73 20 6f 76 |sava lapė šokinėja ov| 00000050 65 72 20 74 68 65 20 6c 61 7a 79 20 64 6f 67 0a |er tingus šuo.| 00000060 1b 45 00 1d 56 41 03 |.E..VA.| 00000067

Dvigubas smūgis

Reikalauti __DIR__. "/autoload.php"; naudoti Mike42\Escpos\Printer; naudokite Mike42\Escpos\PrintConnectors\FilePrintConnector; $jungtis = naujas FilePrintConnector("/dev/usb/lp0"); $spausdintuvas = naujas Spausdintuvas($jungtis); /* Dvigubas brūkšnys (iš esmės atrodo taip pat kaip kirčiavimas) */ for($i = 0; $i< 2; $i++) { $printer ->setDoubleStrike($i == 1); $printer -> text("Greita rudoji lapė peršoka per tinginį šunį\n"); ) $printer -> setDoubleStrike(false); $spausdintuvas -> cut(); $spausdintuvas -> uždaryti();

00000000 1b 40 1b 47 00 54 68 65 20 71 75 69 63 6b 20 62 | [apsaugotas el. paštas] greitas b| 00000010 72 6f 77 6e 20 66 6f 78 20 6a 75 6d 70 73 20 6f |ruginė lapė šokinėja o| 00000020 76 65 72 20 74 68 65 20 6c 61 7a 79 20 64 6f 67 |prie tinginio šuns| 00000030 0a 1b 47 01 54 68 65 20 71 75 69 63 6b 20 62 72 |..G.Greitasis br| 00000040 6f 77 6e 20 66 6f 78 20 6a 75 6d 70 73 20 6f 76 |sava lapė šokinėja ov| 00000050 65 72 20 74 68 65 20 6c 61 7a 79 20 64 6f 67 0a |er tingus šuo.| 00000060 1b 47 00 1d 56 41 03 |.G..VA.| 00000067

Šriftai

Reikalauti __DIR__. "/autoload.php"; naudoti Mike42\Escpos\Printer; naudokite Mike42\Escpos\PrintConnectors\FilePrintConnector; $jungtis = naujas FilePrintConnector("/dev/usb/lp0"); $spausdintuvas = naujas Spausdintuvas($jungtis); /* Šriftai (daugelis spausdintuvų neturi "C šrifto") */ $fonts = array(Spausdintuvas:::FONT_A, Spausdintuvas:::FONT_B, Spausdintuvas:::FONT_C); for($i = 0; $i< count($fonts); $i++) { $printer ->setFont($fonts[$i]); $printer -> text("Greita rudoji lapė peršoka per tinginį šunį\n"); ) $printer -> setFont(); // Atstatyti $printer -> cut(); $spausdintuvas -> uždaryti();

00000000 1b 40 1b 4d 00 54 68 65 20 71 75 69 63 6b 20 62 | [apsaugotas el. paštas] greitas b| 00000010 72 6f 77 6e 20 66 6f 78 20 6a 75 6d 70 73 20 6f |ruginė lapė šokinėja o| 00000020 76 65 72 20 74 68 65 20 6c 61 7a 79 20 64 6f 67 |prie tinginio šuns| 00000030 0a 1b 4d 01 54 68 65 20 71 75 69 63 6b 20 62 72 |..M.Greitas br| 00000040 6f 77 6e 20 66 6f 78 20 6a 75 6d 70 73 20 6f 76 |sava lapė šokinėja ov| 00000050 65 72 20 74 68 65 20 6c 61 7a 79 20 64 6f 67 0a |er tingus šuo.| 00000060 1b 4d 02 54 68 65 20 71 75 69 63 6b 20 62 72 6f |.M.Greitas brolis| 00000070 77 6e 20 66 6f 78 20 6a 75 6d 70 73 20 6f 76 65 |wn lapė šokinėja ove| 00000080 72 20 74 68 65 20 6c 61 7a 79 20 64 6f 67 0a 1b |r tinginys šuo..| 00000090 4d 00 1d 56 41 03 |M..VA.| 00000096

Pateisinimas

Komanda yra:

ESC a [numeris]

Naudokite 0, kad lygiuotumėte kairėje, 1, kad centre būtų tekstas, arba 2, kad lygiuotumėte dešinėje.

Reikalauti __DIR__. "/autoload.php"; naudoti Mike42\Escpos\Printer; naudokite Mike42\Escpos\PrintConnectors\FilePrintConnector; $jungtis = naujas FilePrintConnector("/dev/usb/lp0"); $spausdintuvas = naujas Spausdintuvas($jungtis); /* Pagrindimas */ $justification = array(Spausdintuvas:::JUSTIFY_LEFT, Spausdintuvas:::JUSTIFY_CENTER, Spausdintuvas:::JUSTIFY_RIGHT); for($i = 0; $i< count($justification); $i++) { $printer ->setJustification($justification[$i]); $printer -> text("Žmogus planuoja Panamos kanalą\n"); ) $printer -> setJustification(); // Atstatyti $printer -> cut(); $spausdintuvas -> uždaryti();

00000000 1b 40 1b 61 00 41 20 6d 61 6e 20 61 20 70 6c 61 | [apsaugotas el. paštas] vyras a pla| 00000010 6e 20 61 20 63 61 6e 61 6c 20 70 61 6e 61 6d 61 |panamos kanale| 00000020 0a 1b 61 01 41 20 6d 61 6e 20 61 20 70 6c 61 6e |..a.Žmogus planas| 00000030 20 61 20 63 61 6e 61 6c 20 70 61 6e 61 6d 61 0a | kanalo panama.| 00000040 1b 61 02 41 20 6d 61 6e 20 61 20 70 6c 61 6e 20 |.a.Žmogus planas | 00000050 61 20 63 61 6e 61 6c 20 70 61 6e 61 6d 61 0a 1b |panamos kanalas..| 00000060 61 00 1d 56 41 03 |a..VA.| 00000066

Brūkšniniai kodai

Komandos yra:

GS h [numeris]
ESC k [skaičius] [tekstas] NUL

Pirmoji komanda nustato brūkšninio kodo aukštį, išmatuotą taškais, o antroji spausdina tikrąjį brūkšninį kodą. Skaičius reiškia brūkšninio kodo standartą, kuris daugeliu atvejų turėtų būti „4“, reiškiantis CODE39. PHP tvarkyklė palaiko 6 standartus.

Pastebėsite, kad dėl tvarkyklės trikdžių ar spausdintuvo nesuderinamumo atspausdinami ne visi brūkšniniai kodai! Kaip ir aukščiau, patariu naudoti CODE39, jei susidursite su tuo.

Reikalauti __DIR__. "/autoload.php"; naudoti Mike42\Escpos\Printer; naudokite Mike42\Escpos\PrintConnectors\FilePrintConnector; $jungtis = naujas FilePrintConnector("/dev/usb/lp0"); $spausdintuvas = naujas Spausdintuvas($jungtis); /* Brūkšniniai kodai */ $barcodes = masyvas(Spausdintuvas:::BARCODE_UPCA, Spausdintuvas:::BARCODE_UPCE, Spausdintuvas:::BARCODE_JAN13, Spausdintuvas:::BARCODE_JAN8, Spausdintuvas:::BARCODE_CODE39, Spausdintuvas:::BARCODE_UPCA, Spausdintuvas::IT BARCODE_CODABAR); $spausdintuvas -> nustatyti BarcodeHeight(80); for($i = 0; $i< count($barcodes); $i++) { $printer ->text("Brūkšninis kodas $i " . "\n"); $spausdintuvas -> brūkšninis kodas("9876", $brūkšniniai kodai[$i]); $spausdintuvas -> tiekimas(); ) $printer -> cut(); $spausdintuvas -> uždaryti();

00000000 1b 40 1d 68 50 42 61 72 63 6f 64 65 20 30 20 0a | [apsaugotas el. paštas] 0 .| 00000010 1d 6b 00 39 38 37 36 00 0a 42 61 72 63 6f 64 65 |.k.9876..Brūkšninis kodas| 00000020 20 31 20 0a 1d 6b 01 39 38 37 36 00 0a 42 61 72 | 1 ..k.9876..Baras| 00000030 63 6f 64 65 20 32 20 0a 1d 6b 02 39 38 37 36 00 |kodas 2 ..k.9876.| 00000040 0a 42 61 72 63 6f 64 65 20 33 20 0a 1d 6b 03 39 |.Brūkšninis kodas 3 ..k.9| 00000050 38 37 36 00 0a 42 61 72 63 6f 64 65 20 34 20 0a |876..Brūkšninis kodas 4 .| 00000060 1d 6b 04 39 38 37 36 00 0a 42 61 72 63 6f 64 65 |.k.9876..Brūkšninis kodas| 00000070 20 35 20 0a 1d 6b 05 39 38 37 36 00 0a 42 61 72 | 5 ..k.9876..Baras| 00000080 63 6f 64 65 20 36 20 0a 1d 6b 06 39 38 37 36 00 |kodas 6 ..k.9876.| 00000090 0a 1d 56 41 03 |..VA.| 00000095

Protokolo pagrindas

Standartinė bet kurio kvitų spausdintuvo užduotis yra spausdinti tekstą. Be to, galite sukurti pasirinktinius šrifto, dydžio, tankio ir kitų įrenginio nustatymų nustatymus. Visa informacija (naudinga ir kontrolinė) perduodama teksto pavidalu, spausdintuvas „pagauna“ valdymo komandas, jas atskiria ir atspausdina tik tekstinę dalį. Taigi kontrolė yra pačiame tekste. Norint atskirti aptarnavimo dalį nuo informacinės, naudojami specialūs simboliai, kurie nespausdinami ir kurių negalima įvesti iš kompiuterio klaviatūros. Tokio simbolio pavyzdys yra „ESC“ arba dešimtainio kodo simbolis 27. Šio simbolio siuntimas į spausdintuvą reiškia, kad po jo seka trumpa spausdinimo valdymo komanda. ESC/POS protokolo komandų aprašymas paprastai pateikiamas kartu su įrenginiu ir yra spausdintuvo dokumentacijos dalis.

Apytikslės spausdintuvo galimybės

Šiuos veiksmus galima apibrėžti kaip apytiksles bet kurio standartinio kvitų spausdintuvo galimybes:

  • Padidinti ir sumažinti šrifto dydį;
  • Atvirkštinio šrifto aktyvinimas (baltos raidės juodame fone)
  • Brūkšninių kodų spausdinimas;
  • Įjunkite spausdintuvo pyptelėjimą;
  • Elektrinio signalo teikimas kasos stalčiui atidaryti;
  • Spausdintuvo peilio aktyvinimas popieriui pjaustyti.

Atsižvelgiant į spausdintuvo modelį ir galimybes, šie veiksmai aktyvuojami naudojant ESC/POS komandas. Tokiu atveju spausdintuvas stebi kiekvieną komandą ir nedelsdamas ją vykdo.

Kada naudoti ESC/POS komandas

Naudoti ESC/POS komandas galima bet kada, kai spausdintuvas jas palaiko (beveik visi spausdintuvai) ir dirbant tiesiogiai su spausdintuvu, nenaudojant tarpinės „Windows“ tvarkyklės. Microinvest Warehouse Pro Light tiesiogiai valdo įrenginį, siųsdamas reikiamas komandas į spausdintuvą. Jie veikia nepriekaištingai naudojant USB spausdintuvą be tarpinės tvarkyklės ir USB į COM emuliaciją.

Kai ESC/POS komandų naudoti neįmanoma

Yra 3 atvejai, kai ESC/POS komandų naudojimas iš esmės neįmanomas: 1. Fiskaliniai registratoriai. Fiskaliniai spausdintuvai naudoja sudėtingą ryšio protokolą, kuris visiškai nesuderinamas su ESC/POS protokolu. Dėl to spausdintuvas nereaguoja į ESC/POS komandas; 2. Kai valdote spausdintuvą per įdiegtą Windows tvarkyklę. Tokiu atveju vairuotojas pats vykdo ESC/POS komandas, o tokias programinės įrangos siunčiamas komandas kategoriškai atmeta. Dėl to spausdintuvas neturi jokio poveikio; 3. Kai naudojamos tarpinės spausdinimo priemonės, pvz., spausdinimo serveris ar kitos panašios technologijos. Tokiu atveju ESC/POS komandos filtruojamos ir prarandamos ryšio metu, net nepasiekus spausdintuvo. Kuriant sistemą būtina tinkamai suplanuoti spausdintuvo valdymą. Rekomenduojame, kad kiekvienas spausdintuvas būtų tiesiogiai susietas su valdymo kompiuteriu ir veiktų tiesiogiai pagal protokolą, be tvarkyklės.

Komandų kodavimas

ESC/POS komandos yra užkoduotos vienu ar keliais specialiaisiais simboliais ir komandų parametrais. Visa tai aprašyta atitinkamame skyriuje (Antraštė, Išsami informacija, Sumos arba Poraštė) spausdintuvo nustatymuose Microinvest Warehouse Pro Light arba Microinvest Device Manager. Pagrindinės valdymo komandos yra šios:

Jų veiksmai aprašyti spausdintuvo dokumentacijoje ir standartizuoti ESC/POS protokolu.

Populiarios komandos

Apytikslis populiariausių ESC/POS protokolo komandų sąrašas:

  • !- Suaktyvina šriftą A;
  • !- Suaktyvina šriftą B;
  • !- Dvigubo aukščio šriftas;
  • !- Dvigubo pločio šriftas;
  • !- Įprasto aukščio šriftas A;
  • E - Yra paryškintas šriftas;
  • E - Išjungia paryškintą šriftą;
  • B - Apima atvirkštinį spausdinimą;
  • B - Išjungia atvirkštinį spausdinimą;
  • i – suaktyvina spausdintuvo peilį.

Nors išvardintos komandos yra standartizuotos pagal skirtingų spausdintuvų ESC/POS protokolų ištraukas, kiekviena iš jų turi savo komandų vykdymo technologiją ir rezultatai gali skirtis priklausomai nuo gamintojo ar modelio. Norint pasiekti norimą efektą, reikia išbandyti ir pasirinkti komandas, kurias vykdo spausdintuvai.

Kita informacija

ESC/POS yra labai galinga spausdintuvo valdymo technologija. Naudodami šį protokolą galite pasiekti puikių rezultatų beveik kiekviename šiuolaikiniame spausdintuve. Deja, nėra 100% suderinamumo tarp skirtingų įrenginių, todėl kiekvieną komandą reikia išbandyti tikrame konkrečiame įrenginyje. Kai kurios komandos priklauso nuo vykdymo laiko. Taigi, pavyzdžiui, suaktyvinus peilį, galima aplenkti spaudinį su turiniu ir nupjauti kvitą netinkamoje vietoje. Todėl, naudojant ESC/POS komandas, reikia išbandyti realiai ir kruopščiai konfigūruoti, atsižvelgiant į spausdintuvo modelį.

Kai kurie naudingi šaltiniai

  • Visų gaminių dokumentacija;
  • Microinvest techninės pagalbos forumas, kuriame galite greitai gauti atsakymą į savo klausimą;


 

Gali būti naudinga perskaityti: