Šis spausdintuvas naudojamas prie POS (Point Of Sale) pardavimo taškas. Iš jo lenda čekis. Praktiškai bet kurioje parduotuvėje galime rasti tokį kur naudojamos kompiuterizuoti kasos aparatai.
Būtent šie modeliai būna su trijų tipų interfeisais, COM (serial rs232), USB arba LAN. Man į rankas papuolęs yra su COM prievadu. Tikslas, pajungti jį prie linux’inio kompiuterio naudojant USB <-> COM perėjimą ir pasiųsti jam kažkokį tekstą spausdinimui. Teko matyti kažkurioje picerijoje, kad kepėjams užsakymus taip perduoda 🙂
Taigi vienas iš svarbiausių momentų tai yra prisijungimo parametrai. Jei nors vienas parametras bus kitos, spausdintuvas nereaguos į siunčiamus duomenis (bent man nereagavo).
* Device (įrenginys): /dev/ttyUSB0 Gali būti kitoks, jei jau pajungti keli perėjimai ar pajungtas tarkime Vodafone/Tele2 ar kažkoks kitoks GSM modemas ar jungiama tiesiai į COM jungti be perėjimo.
* Baud rate (ryšio greitis): 38400 Būtinai toks ir ne kitoks.
* Data bits (duomenų paketo dydis?): 8
* Stop bits: 1
* Parity: none
* Handshake (“pasisveikinimas”): Hardware Tik Hardware, nejungti Software ar nejungti abiejų iš karto.
Pasijungus ir rašant tekstą, spustelėjus enter tekstas atspausdinamas ant čekiuko.
Programą rašiau Lazarus (FPC – Free Pascal Compiler).
Biblioteka bendravimui per COM naudoju http://synapse.ararat.cz Beje labai geras puslapis, yra tikrai gerų modulių kurių gali prisireikti rašant kažkokią programą. Visa dokumentacija http://synapse.ararat.cz/doc/help/
Susikuriu katalogą šiam projektui, išsaugau jame lazarus projektą ir į tą patį katalogą išpakuoju aukščiau minėtą archyvą.
Kodo pradžioje prie uses įterpiu Synaser
Prie var pridedu ser: TBlockSerial;
Kaip komunikuoti su lazarus puikūs pvz pateikti čia: http://wiki.freepascal.org/Hardware_Access
ser:=TBlockSerial.Create; ser.Connect('/dev/ttyUSB0'); ser.config(38400, 8, 'N', SB1, false, True);
Atkreipiam dėmesį į trečią eilutę. Būtent tokie turi būti prisijungimo parametrai (gal kažkokiam kitam modeliui ir kitokie).
Tekstą spausdiname su:
Ser.SendString ('siunciamas tekstas keliauja cia');
Taip pat šis aparatas turi kirpimo funkciją t.y. jo priekyje yra “peilis” kuris atkerpa čekį. Kirpimui reikia pasiųsti komandą:
Ser.SendString (char(27)+'@'+char(29)+'V'+char(1));
Atspausdinus teksto porciją ir vykdant kirpimą, čekis nukerpamas ne po tekstu, o kiek aukščiau, todėl, kad kirpimas būtų po tekstu, būtent mano atveju reikia tekstą pakelti per penkias eilutes. Šis skaičius gali skirtis, nes tam tikrais įrankiais (Utils) galima keisti šrifto dydį, tarpą tarp eilučių. Tiesa tam yra speciali komanda kuri paslenką būtent tiek, kad nukirptu po tekstu, bet man jos pasiųsti į spausdintuvą nepavyko. Taigi aš pasiunčiu penkis eilutės pabaigos simbolius:
Ser.SendString (char(10)+char(10)+char(10)+char(10)+char(10));
Taip pat į šio spausdintuvo atmintį su tam skirtais įrankiais galima įkelti logitipą, monochrominį bitmap’ą. Begooglindamas radau, kad kiti modeliai gali turėti atmintyje ir du, tris logotipus. Logotipo spausdinimui naudojame:
Ser.SendString (char(28)+char(112)+char(1)+char(72));
Beieškodamas internete, buvau radęs cups’ui visus reikalingas bylas. Pridėti spausdintuvą pavyko, bet bandant pasiųsti paprasčiausią tekstą rezultatas būdavo nulinis. Bet rašant savo kažkokį projektėlį vargu ar patogų per cups spausdinti, tikrai paprasčiau ir aiškiau valdyti situaciją per COM’ą.