Jose Antonio Cely Saidiza

Antiguo y olvidado, Weblog personal

Script para abrir cajón de un equipo POS con LPR

By Jose Antonio Cely Saidiza


Antes que nada, este articulo es de interés para personas que trabajan con equipos POS (Point Of Sale), equipos como impresoras EPSON TERMICAS (TM-T88XX), o los cajones DYNAPOS (y habéis comprobado la pésima documentación que hay para GNU/linux).

Trabajando nuevamente para otra empresa secreta, con nuestro software ERP, me encontré con el chicharroncito de abrir automáticamente el cajón monedero en los puntos de pago cuando se imprime la factura, y ademas por sobrado, que también cortara el papel automáticamente.
Los equipos de punto de pago, generalmente consta de un PC, una impresora de tiquetes por puerto paralelo/serie, un lector de código de barras y un cajón monedero. Las impresoras para puntos de pago generalmente traen un conector (RJ11) para un cable que trae el cajón, dicho cajón debe tener un solenoide o algo similar que al activarse se abre. Entonces dicha impresora es la que abre el cajón, por que envía un pulso eléctrico.
Después de Googlear un poco, encontré la documentación del lenguje ESC/POS, que es un lenguaje muy simple creado por EPSON para sus impresoras POS, con algunos comandos muy sencillos típicos, como abrir cajón, cortar papel, avanzar papel, imprimir código de barra, etc. En hora buena, solo es enviar esos comandos a la cola de impresión y funciona de maravilla, ademas probé con otras impresoras… (Samsung, etc. y también funciono).
Lo único molesto fue tener que registrarme en la pagina de EPSON con un correo real, para poder bajar los manuales, deberían estar así no mas para bajar.
A continuación copio los dos comandos ESC/POS que use tal cual como viene en el manual:

…. Generar Pulso …

ESC p m t1 t2
[ N am e] Generate pulse
[Format] ASCII ESC p m t1 t2
    He x 1B 70 m t1 t2
    Decimal 27 112 m t1 t2
[ R ange ] m = 0, 1, 48, 49
     0 ? t1 ? 255
     0 ? t2 ? 255
[Description] Outputs the pulse specified by t1 and t2 to connector pin m to open the chash drawer,
as follows:
     m Function
     0, 48 Drawer kick-out connector pin 2.
     1, 49 Drawer kick-out connector pin 5.
     • t1 specifies the pulse ON time as [t1 × 2 ms].
     • t2 specifies the pulse OFF time as [t2 × 2 ms].

………

….. Cortar Papel …..
GS V m (Function A)
GS V m n (Function B)
[ N am e] Select cut mode and cut paper
[Format] ASCII GS V m (Function A)
     He x 1D 56 m
     Decimal 29 86 m
     ASCII GS V m n (Function B)
     He x 1D 56 m n
     Decimal 29 86 m n
     0 ? n ? 255
[ R ange ]
     (Function A) m = 0, 1, 48, 49
     (Function B m = 65, 66
[Description] Cuts paper in the specified mode.
     m Function
   Function A 0, 48 Executes a full cut (cuts the paper completely).
     1, 49 Executes a partial cut (one point left uncut).
     Feeds paper to (cutting position + n × vertical motion unit) and
   Function B 65
     executes a full cut (cuts the paper completely).
     Feeds paper to (cutting position + n × vertical motion unit) and
     66
executes a partial cut (one point left uncut).

……..

Entonces no es más que crear un filtro para LPR, que por que uso LPR?, por que en algunas cosas me quede atrapado en los noventa :D (me imagino que para CUPS será similar). el filtro debe enviar el comando de abrir el cajón antes de imprimir, y una vez finalizada la impresión, envíe el comando de cortar el papel, de esta forma será automático desde cualquier programa que mandemos a imprimir.
Entonces con el siguiente script podemos hacerlo, el script esta comentado para facilitar su entendimiento, no olvidéis dar permisos de ejecución.
filtro:


#!/bin/bash

# RTFM
# CON echo -e HABILITAMOS LA INTERPRETACION DE ALGUNOS CARACTERES, EN ESTE
# CASO ‘\xnnn’, DONDE x ESPECIFICA HEXADECIMAL Y n TENDRA LOS CODIGOS
# HEXADECIMALES
# ENVIAMOS EL COMANDO DE ABRIR EL CAJON

echo -e ‘\x1B\x70\x0\x64\x64’

# LEEMOS EL CONTENIDO DE LA IMPRESION EN UNA VARIABLE COMUN Y SE LOS
# PASAMOS A LA IMPRESORA

read first_line
echo -n $first_line
cat

# AHORA ENVIAMOS EL COMANDO DE CORTAR EL PAPEL

echo -e ‘\x1D\x56\x1’

Copiamos el fitro , por ejemplo al mismo directorio donde tenemos la cola de impresión (Ej. /var/spool/lpd/caja1/
), Ahora en el archivo /etc/printcap donde se configura la impresora agregamos el filtro. Ej.


caja1:\
  :sd=/var/spool/lpd/caja1:\
   :if=/var/spool/lpd/caja1/filtro:\
   :sh:\
  :lp=/dev/lp0:\
   :bk:

Reiniciamos LPR y funciona con cualquier impresión, además esto no afecta la impresión en otras impresoras de diferente tipo.
Con estas bases creo que podéis hacer el resto, como códigos de barra en los tickets

Links:
1 – Algo de bash
http://www.ss64.com/bash/echo.html
2 – Manuales EPSON
https://www.epson-pos.com/sdssm/td_index.html
3 – Algo de impresión
http://es.tldp.org/COMO-INSFLUG/COMOs/Configuracion-Impresion-Como/Configuracion-Impresion-Como-4.html

49 Responses so far

Me alegra mucho ver la facilidad con la que esta solucionando sus dificultades, gracias a google,……bueno pero entre otras debeis dar gracias de haber encontrado el código para cada una de estas tareas en ESC/POS……

Qué bueno que haya alguien con la paciencia para joderse toda la noche en este tipo de cosas! Ahora puedo venir y aprovecharme como una vil sanguijuela…. cuando lo necesite.

Gracias a tu ayuda he conseguido abrir elcajon de una impresora samsung. he realizado con Qt en debian un pequeño programa para gestionar una tienda de ropa muy basico una pestaña almacen con codigos de barras para dar entrada a productos y una pestaña para venta que imprime el tike y por fin abre tambien el cajon.

lo dicho gracias por tu ayuda.

un saludo.

Estaba buscando la impresion de codigo de barra para una impresosa SAMSUNG, realize una prueba con el codigo de corte de papel que publicaste y funciona muy bien.
Me podrias enviar el manual de EPSON para imprimir codigos de barra, por favor es urgente. o si ya realizaste la impresion copiame el codigo… se agradecera.
Saludos
Raúl.

Hola amigos yo tambien he conseguido codigos hexadecimal para mis impresiones de codigo de barra, he conseguido algunos pero no he podido dar con la informacion, nos pudieramos ayudar los dos mucho si me ayudas tambien

Jose Damaso
A Raul le envié por mail el manual de EPSON el 15 de Marzo, y el me respondió que le funciono. No he hecho aun lo de barras (tal vez por que el cliente no lo ha pedido :D ).
Te envié el manual de EPSON por mail, por si no lo has bajado, si te sirve de algo y/o si desarrollas un script de ejemplo que haga códigos de barra, deberías publicar también el código (Raul no lo hizo).

Hola, tengo un sistema pos con una impresora TM- U 220 DE EPSON QUIERO ABRIR EL CAJON MONEDERO AUTOMATICAMENTE, PERO NO LO HE LOGRADO,

YA ENCONTE ALGO DE ESC/POS PERO NO HE PODIDO SABER COMO APLICARLO.

Dame mas informacion de tu sistema haber si te podemos ayudar en algo…

Quisiera saber si ud para documentar usa word o openoffice.

Gracias

Comentario Jose Cely:
Notese nuevamente el sarcasmo de Angel Eduardo Porras

Excelente, yo trabajo muchos mercados verticales, uso linux y microsoft, lo de epson y sus manuales, todos lo sabemos, gracias por el comando de corte yo no lo usaba ahora lo estoy probando con excelentes resultados.
Te felicito viejo.

Hola, tengo un sistema pos con una impresora TM- U 220 DE EPSON QUIERO ABRIR EL CAJON MONEDERO AUTOMATICAMENTE, PERO NO LO HE LOGRADO,

YA ENCONTE ALGO DE ESC/POS PERO NO HE PODIDO SABER COMO APLICARLO.

Hola José, estoy algo enredado, esos comandos que escribes son de linux, pero para hacer el procedimiento en windows??, yo me les uno a los de arriba sobre abrir el cajon por medio de la TM-U220, y otra pregunta que puede ser tonta, no importa que la TM sea serial, o paralela, o el cojon rj11 o usb, o combinaciones de lo anterior,

Muchas gracias don Jesus Antonio por compartir tan valiosa información, me puede despejar una duda…
tengo un programa ya hecho bajo DOS que se llama Finansis, con un cajon dynapos de cable rj y una impresora de tm de las nuevas, pero no me abre el cajon, claro le falta el codigo.. la pregusnta es: si el programa ya esta hecho y no se puede conseguir el codigo fuente que originalmente abre por serial,, que puedo hacer… existe algun convertidor para conectarlo al puerto serial.
saludos..

Para muchos comentarios anteriores sobre el uso de Windows, pues he tenido la dicha de no enfrentarme a ese problema :D .
Sin embargo aclaro nuevamente el concepto:
1 – La impresora es la que abre el cajón.
2 – Al impresora debe estar programada de fabrica para que al detectar una secuencia de códigos ejecute acciones (como abrir el cajón o cortar papel)
3 – Al momento de imprimir debemos enviar estos comandos

Por lo tanto, en Windows o DOS, tal vez se pueda crear un .bat que envíe la secuencia de códigos y luego este mismo .bar envíe el contenido de la impresión.

Respecto a la compatibilidad, lo he probado con impresoras Epson y Samsung térmicas y de matriz sin problemas. Supongo que cualquier impresora que diga ser compatible con ESC/POS, debe funcionar.

Saludos.
Tengo un programa de facturacion en php en que parte del codigo le puedo agregar estos comandos ??? gracias por la ayuda.

@CAMILO

Como tal php no agrega comandos para el hardware, ni para esto ni para otras cosas!…
PERO php tiene una función muy útil

http://www.php-es.com/function.exec.html

Entonces la idea es desarrollar primero un script, y cuando este script nos funcione correctamente (abriendo y cortando papel) sencillamente mandarlo a ejecutar con la función exec de php.

Saludos

Jose Cely

Gracias por tu ayuda, Te cuento un poco mas, las impresiones de las facturas actualmente lo manejo generando un pdf, lo que necesito es enviar la factura directa a la impresora, pero he buscado bastante como realizarlo en php y no encuentro como, me prodrias dar una manito te agradeceria.

@CAMILO
Hasta donde se… no creo que la EPSON te soporte un PDF directamente.
El proceso que usamos es generar un archivo txt con el contenido de la factura, y luego este txt generado mandarlo a imprimir con un script.
Por ejemplo si el archivo txt generado se llamase «factura.txt», y el script se llamase «print.sh», la linea de ejecución en php sería:

exec(«./print.sh factura.txt 2>&1 &»);

Saludos de nuevo
Jose Cely

Gracias por la ayuda, finalmente loq realice fue lo siguiente:
Genere un programa .exe en C, el cual me imprimia desde un archivo txt, ahora lo que necesito es ejecutarlo desde el cliente si lo hago asi: exec(…. Lo ejecuto solo en el servidor y necesito en el cliente estoy intentando desde html pero no se como genere un boton en flash y me lo ejecuta perfecto pero cuando inserte el boton en el html, por seguridad no deja ejecutar, Si me puedes dar una manito de como ejecutarlo desde el cliente por la pagina necesito q cuando le den click a un boton me ejecute el archivo .exe o .bat, gracias por la ayuda.

Holas: tengo una TMU 220(A), este modelo(A) tiene conexión por puerto paralelo… con lo que, humildemente, quisiera que me ayuden es cómo mando instrucciones POS por puerto paralelo desde C# (VS2005). Muchas gracias de antemano.

Alguien sabe la configuración del cable de la impresora de tickets al cajon de dinero? solo sé al momento que debe tener en un extremo un RJ 11 y del otro un RJ 45, ayuda…!

Gracias

Camilo me podrias pasar los codigos eso mismo necesito?

Hola a todos, por favor este tiket lo tengo hecho en excel, obviamente esta editado con el editor de Visual Basic, la impresora que tengo es una Epson TU 220B, pero no se que tengo que agregarle para que me corte el papel. Por favor si hay alguien que me ayude se los voy a agradecer. MUCHAS GRACIAS.

TIQUE FACTURA A

Nro.

Para imprimir un recibo desde un archivo texto un recibo que caracteres debe tener el archivo texto para que lo reconozca la impresora. Si alguien me puede ayudar con esto.

Buena tarde; he estado intentando abrir el cajon monedero desde la impresora, lo que he hecho es colocar el codigo esc pos en un archivo de texto y lo mando a imprimir, pero no me funciona o no se si el codigo deba tener alguna estructura especial, la verdad no entendi muy bien laq parte de los filtros, si alguien tiene el script o la linea de codigo para abrir el cajon le agradeceria, saber por donde lo manda, si desde el dos o si se manda a imprimir desde un archivo de texto

Tengo una TM-U220 y tengo instalado Ubuntu 9.10, la cuestión es que al imprimir me imprime caracteres raros, el PPD que le asigne es el de la Epson de 9 pines, me podría alguien ayudar con este asunto por favor.

De ante mano gracias.

Primero que todo, gracias por la ayuda de este foro. Quisiera saber si la secuencia para abrir el cajón monedero (con una impresora epson) desde windows funciona escribiéndola tal cual como está descrita arriba (echo -e ‘\\x1B\\x70\\x0\\x64\\x64?) en un archivo .bat. Gracias por la ayuda.

para impresoras usb (incluidas las usb/serial internas )

con rj11 (conector de telefono)

chr(27) & chr(112) & chr(0) & chr(50) & chr(250)

chr(27) & chr(112) & chr(1) & chr(50) & chr(250)

chr(27) & chr(112) & chr(48) & chr(50) & chr(250)

chr(27) & chr(112) & chr(49) & chr(50) & chr(250)

una de estas cuatro combinanciones, funciona en todos los modelos

si es compatible epson (las dos primeras

si es compatible esc/pos las dos segundas

consejo, probad con las cuatro.

No hace falta que me deis las gracias… jajaja

corte de paepl
chr(27) & \’i\’ (es una i latina)

y para linux, podis mandar desde consola
creais un fichero de texto, con kwrite (por ejemplo)

meteis los codigos

y haceis un
cat /home/(usuario)/…. > /dev/ttyUSB0 (aqui el dispositivo)
y et voilá

respecto al ubuntero…
configura la impresora, antes que nada, con sus dip\’s (habrá varios interruptoritos), mira el manual, par que sea compatibilidad epson

y despues

en tu ubuntu o cualquier linux, mira los caracteres regionales, (habitualmente esta en español , peor no el español tradicional)

castellano, ya lo se, por indica español.

HOLA. TENGO UN PROBLEMA CON UN CAJON DYNAPOS POR QUE EL COMPUTADOR NO LO EXPULSA AUTOMATICAMENTE MI PROGRAMA CONTABLE SE LLAMA (SAINT) QUIERO SABER COMO HAGO, ALGUIEN SABE POR FA AYEDEN SE LO AGRADECERE DE COEAZON.

Como se podria hacer esto en un codigo de c#? alguien me podria ayudar se le agradece

Tengo una Impresora de Tickets EPSON TM-U220 y quiero imprimir en ella mediante el Puerto RJ45 osea que sea por IP mediante la Red, eh visto que eso es posible pero no se como hacer para asignarle una IP a esta impresora, si me pudieran ayudar por Favor

Se los agradezco de Antemano

Luigys

Hola a todos, tengo una SRP-270 Impact Printer Rev. 1.02 BIXOLON, en el manual me aparece unos codigos q no entiendo bien uno de estos es : ESC p m t1 t2 , lo q necesito es como generarle un pulso al cajon para q se abra, atravez de codigo php. y tambien para cortar me aparece este : d 1B 64 00 , si alguien me podria dar una mano, para hacer eso en codigo php, para q el cliente cuando imprima y me mande a otra pagina, pueda poner estas acciones y se pueda abrir el cajon y cuando termine de imprimir se corte el ticket muchas gracias les estaría agradecido.

tengo una etiquetadora marka brother modelo QL-580N y estoy intentando acerla funcionar por medio de un pic 16f877A pero noc como declarar los comandos ESC/P para que la impresora me leas los comandos propios…

espero me puedas apoyar o si no darme alguna referencia… de antemano gracias

hola amigo te comento necesito abrir la caja de dinero desde visual basic con una impresora epson tmu220d me puedes ayuda que tengo que hacer

Hola amigo yo tambien tengo el tan comentado problema de tener una miniprinter Epson y un cajon de dinero que no abre a la primera, en pocas palabras nos falta programar para que funcione correctamente …Pero no todos podemos programar como usted lo hace digo ..no seria mas facil poner un dispositivo o swith al cable conector RJ45 para que este mismo nos abra el cajon sin tanto rollo de software. digo NO todos tenemos la nacesidad de imprimir y despues que se abra el cajon
Si tu pudieras decirme como hago dicho swith para abrir mi cajón cada vez que yo quiera sin usar mi PC te lo agradecería enormemente mi correo te lo escribo nuevamente es recargaxp@hotmail.com de antemano MUCHISIMAS GRACIAS

tengo el problema que estoy tratando de instalar una impresora matriz de punto Epson TM-U675P MODELO M146A es para poder ser instalado en un pc , pero se me ha hecho imposible poner a caminar perfectamente esta validadora ya que al momento de imprimir dura más de 40 minutos para imprimir 2 líneas, al instalar la impresora por medio de CUPS sale puerto serie. Conexión serial:/dev/ttySO?baud=115200 sale la lista de impresora se escoge Epson y solamente sale Epson 9-pin Series (en) y Epson 24-pin Series (en) y por agregar impresoras solamente toma la TM-p2-01 que son los únicos drivers que hay para estas impresoras cualquier información que tenga al respecto le agradecería.

la tengo instalada en el Sistema Ubunto 11.10

Hola a todos!, necesito me echen una mano por favor, me compré una impresora Bematech mp-100 para emitir las facturas en tickets por medio de un sistema que estoy realizando en JAVA, pero no tengo ideaa de como enviar por código y decirle a la impresora que me lo corte (el ticket) al finalizar la impresión, y tb para que luego me abra automaticamente la Gabeta de Dinero….
Si me podrían ayudar con esto por favoor!! Ciertamente ya demaaz estuve investigando y nada, se tengo que manejar algunos comandos de la impresora, tengo el manual de la impresora y la gabeta de dinero, pero no se como enviar estos comandos a la impresora con JAVA……… :(

Mil gracias desde ya. Desde paraguay.
Luis Orihuela

Buenas Tardes a todos, utilizo el sistema de punto de Venta open bravo pos y he tenido dificultad para que abra el cajón del dinero, la impresora es Epson(puerto seríal) y el cajón del dinero es generico compatible con epsón se conectan mediante un rj-11, OPEN BRAVO esta programado en java y permite agregar módulos en xml… ¿alguien sabe el código para hacer que abrá el cajón del Dinero?.
Aqui un ejemplo del código xml que maneja para abrir el cajón:

Gracias de antemano,,,

Pero como creo el archivo, es decir yo escrivo lo que tu anotas pero me queda txt, y aunque lo coloque sin formato, cuando mando la impresion me imprime el contenido del archivo , pero no genera el impulso.

uso ubuntu 13.04, en una impresora epson TM- U220PD conectada por medio de puerto usb/paralelo, en /dev/usb/lp0

Hola Jose, por lo que veo eres la persona que mas sabe de todo lo que he visto en la red, yo por mi parte no tengo ni idea de estos temas, cambie el S.O. a windows 8 y consegui todos los controladores para mi programa de ventas excepto hacer que mi bixolon srp-350plusII abra el cajon porta monedas, por lo que he visto tu si sabes bien como hacerlo pero no tengo ni idea podrias hacerlo un poco mas sencillo para que yo pueda hacerlo por favor? te lo agradeceria en el alma ya que intento hacerlo por mi mismo pero soy incapaz, llevo cinco dias investigando y estoy harto, muchas gracias

Hola a todos, tengo una epson TM-T88IIP y no hay manera de que imprima correctamente, se pone como loca a imprimir caracteres y es capaz de gastar el rollo de papel si yo no la paro, he probado con todos los drivers de epson que hay disponibles y no hay forma . Mi SO es ubuntu 12.04 e intento que imprima bajo openbravo pos pero no lo consigo alguien me podria ayudar.

Buenos dias, URGENTE, tengo un sitema POS que hice en PHP y efectivamente el cajon esta conectado a una impresora EPSON TM20 cuando ella imprime ella misma corta el papel y abre el cajon, pero necesito desde el sistema POS con una tecla o un evento CLICK mandar la señal directamente al cajon para que se abra sin necesidad de imprimir nada, como puedo hacerlo, agradezco su informacion.

BUENOS DIAS, EN MI SISTEMA WEB SE ESTA IMPRIMIENDO SIN COLA DE IMPRESION, LO QUE SE HACE ES MISTRAR EN LA PANTALLA EL TIQUETE Y ESO ES LO QUE SE IMPRIME, LO QUE SE VE EN LA PANTALLA, ASI QUE NO SE CREA NINGUN ARCHIVO QUE SE IMPRIMIRA, ME GUSTARIA SABER COMO PUEDO POR MEDIO DE CUALQUIER FUNCION JAVASCRIPT , PHP ETC DISPARAR EL EVENTO QUE ABRA EL CAJON MONEDERO.

José Antinio, cómo estas ? Estoy intentando imprimir un pdf o un txt en una impresora POS (GP-7645IIIR) veo que tenes experiencia en el tema y capaz que me podes dar una mano. No puedo ni imprimir un caracter en el txt mediante la impresora, supongo que requiere algun comando especial o algo por el estilo.
Me podrías orientar un poco en el tema ? Te agradezco la ayuda, estoy complicado con este problema.
Saludos !

como creo el archivo para el filtro lpr e introducir los codigos
gracias desde costa rica

HOLA
Me llamo miguel angel y me gustaría saber si existe la posibilidad de crear ya sea por archivo bat o por vb un boton para que mi madre pudiera abrir el cajon portamonedas sin que tenga que ser la impresora la que abra el cajon por pulso. La impresora es una bixolon srp275c por usb no por serial.
Agradeceria las respuestas y la ayuda
gracias

Leave a comment