PDA

Ver la Versión Completa : Impresión de una imagen en una impresora de tickets, códigos de escape


Jab
25-06-2010, 14:56:07
Estimados amigos.

Llevo ya algún tiempo buscando la información para poder sacar por una impresora de tickets una imagen previamente cargada. Esta imagen se imprimiría antes de la impresión del ticket por el puerto, Serie o paralelo.

Existen unos códigos de escape para la impresión de esta imagen preguardada, en este caso, al igual que la apertura del cajón o del corte automático, intento utilizar los códigos de escape que me figuran en el manual, pero no hace nada.

Con la impresora viene un programita para cargar la imagen que sí imprime el logotipo pero tampoco he sido capaz de redireccionar el puerto y sacarlo en un fichero para así ver qué intenta mandar a la impresora y emularlo en el desarrollo.

La impresora es Bematech TMAX-80, dice el distribuidor en España que tiene los mismos códigos que la impresora EPSON TM88IV.

El código de escape que me figura en el manual es:

Command GS / m
Code (Hex) 1D 2F m
Name Print downloaded bit image

Que traducido a decimal es: 29 , 47 y 109
Ahora bien, buscando en internet, en el manual de la Impresora SAMSUNG SRP-350 pone la misma codificación, pero observaréis que la letra "m" no se convierte sino que parece ser un intervalo, algo que no figura en el manual original... :/

GS / m Imprime la imagen descargada por bit.
Decimal 29 47 m
[Rango]
0 ≤m ≤3, 48 ≤m ≤51
[Descripción] Imprime una imagen por bit descargada utilizando el modo especificado por m.
m selecciona un modo de la siguiente tabla :
m Modo
0, 48 Normal
1, 49 Doble ancho
2, 50 Doble altura
3, 51 Cuádruple

Finalmente la rutina de impresión final os la pongo, lo último que he puesto, es decir, el código que marca 29,47 y luego el modo, 0 y 48. Pero ya no se me ocurre más que hacer. He probado con todos...

Para el puerto serie:

Writeln(Impresora,chr(29)+chr(47)+chr(0)+chr(48))


Para el paralelo

Writeln(Impresora, #29+#47+#0+#48)


Si alguien me puede ayudar por favor.

De antemano muchas gracias.
Saludos.

Jab
28-06-2010, 13:31:13
¿Alguien ha realizado algo parecido? he hecho todo tipo de pruebas pero sigue sin sacarlo...

¿Alguien sabe sino la forma de capturar la salida a un fichero? algo parecido a redireccionar la salida del LPT1 a un fichero, así de esta manera, puedo ver lo que le mandaría a la impresora el software que viene con ella y poder lanzarlo desde Delphi cuando quieran imprimir la imagen descargada.

¿?:confused:

Jab
07-07-2010, 09:40:28
Una idea que he probado es colocar otra impresora e imprimir la información que manda el propio software de la máquina, lamentablemente saca por pantalla todo el código ASCII por lo que entiendo es que no reconoce la orden, aunque era de esperar...

Sigo buscando... esperando alguna idea, no sé.:confused:

Jab
14-07-2010, 18:47:32
Lo vuelvo a subir por si alguien se le ha ocurrido algo... Gracias!

ppb
14-07-2010, 20:55:23
Hasta donde recuerdo , creo que debes definir el gráfico primero :

GS*.....

y luego GS/.. para imprimir

ppb
14-07-2010, 21:26:32
Hasta donde recuerdo , creo que debes definir el gráfico primero :

GS*.....

y luego GS/.. para imprimir

Esto lo encontre en un documento antiguo.

PRINT #1, CHR$(&H1B);"U";CHR$(1);
PRINT #1, CHR$(&H1D);"/";CHR$(0);CHR$(&HA); ¬ Normal
PRINT #1, CHR$(&H1D);"/";CHR$(1);CHR$(&HA); ¬ Double width


Un saludo.

Jab
21-07-2010, 17:31:21
Hola, gracias por la aportación, he intentado esto


//Definimos la gráfica.
Writeln(Impresora,chr(29)+chr(42)+chr(0)); //GS *
//Imprimimos.
Writeln(Impresora,chr(29)+chr(47)+chr(0)+chr(65)); //GS / 0 A Normal width


También he probado con las variantes que has dado, a usar GS * y luego ESC U 0 y GS / 0 A, pero nada.


Writeln(Impresora,chr(29)+chr(42)+chr(0)); //GS *
Writeln(Impresora,chr(27)+chr(85)+chr(1)); //ESC U 1
Writeln(Impresora,chr(29)+chr(47)+chr(0)+chr(65)); //GS / 0 A Normal width


Ya no se me ocurre que probar porque en teoría está todo bien, según los datos del manual pero no reconoce el código de escape, salvo que se lance con su mini programa...

En fin. Gracias.

Saklut
21-07-2010, 18:20:10
Puedes probar el programa PORTMON de www[punto]sysinternals[punto]com , la descripción dice:

Portmon is an application that lets you monitor serial and parallel activity on your local system, or any computer on the network that you can reach via TCP/IP. It is the most powerful tool available for tracking down port-related configuration problems and analyzing application port usage.


No lo he probado, pero parece que es lo que necesitas...

Jab
29-07-2010, 19:31:49
Hola, gracias amigo.
He instalado el programa y funciona, pero cuando lanzo el programita de la impresora que imprime en el puerto la cadena misteriosa, resulta que el PortMon bloquea la señal y se queda colgado el programita.

Si uso el puerto serie, que no está bloqueado por el otro programa, me empieza a escribir hasta que se bloquea también, pero sale esto hasta donde se puede



0.00005109 NVImg.exe IRP_MJ_CREATE Serial0 SUCCESS Options: Open
0.00000313 NVImg.exe IOCTL_SERIAL_SET_WAIT_MASK Serial0 SUCCESS Mask: RXCHAR TXEMPTY CTS DSR RLSD BRK ERR RING
0.00000098 NVImg.exe IOCTL_SERIAL_SET_QUEUE_SIZE Serial0 SUCCESS InSize: 1024 OutSize: 1024
0.00000211 NVImg.exe IOCTL_SERIAL_PURGE Serial0 SUCCESS Purge: TXABORT RXABORT TXCLEAR RXCLEAR
0.00000084 NVImg.exe IOCTL_SERIAL_SET_TIMEOUTS Serial0 SUCCESS RI:-1 RM:0 RC:0 WM:0 WC:5000
0.00000141 NVImg.exe IOCTL_SERIAL_GET_BAUD_RATE Serial0 SUCCESS
0.00000137 NVImg.exe IOCTL_SERIAL_GET_LINE_CONTROL Serial0 SUCCESS
0.00000117 NVImg.exe IOCTL_SERIAL_GET_CHARS Serial0 SUCCESS
0.00000310 NVImg.exe IOCTL_SERIAL_SET_WAIT_MASK Serial0 SUCCESS Mask: RXCHAR TXEMPTY CTS DSR RLSD BRK ERR RING
0.00000105 NVImg.exe IOCTL_SERIAL_GET_HANDFLOW Serial0 SUCCESS
0.00000141 NVImg.exe IOCTL_SERIAL_GET_BAUD_RATE Serial0 SUCCESS
0.00000196 NVImg.exe IOCTL_SERIAL_SET_WAIT_MASK Serial0 SUCCESS Mask: RXCHAR TXEMPTY CTS DSR RLSD BRK ERR RING
0.00000128 NVImg.exe IOCTL_SERIAL_GET_LINE_CONTROL Serial0 SUCCESS
0.00000000 NVImg.exe IOCTL_SERIAL_WAIT_ON_MASK Serial0
0.00000120 NVImg.exe IOCTL_SERIAL_GET_CHARS Serial0 SUCCESS
0.00000069 NVImg.exe IOCTL_SERIAL_GET_HANDFLOW Serial0 SUCCESS
0.00000810 NVImg.exe IOCTL_SERIAL_SET_BAUD_RATE Serial0 SUCCESS Rate: 9600
0.00000373 NVImg.exe IOCTL_SERIAL_SET_DTR Serial0 SUCCESS
0.00000248 NVImg.exe IOCTL_SERIAL_SET_LINE_CONTROL Serial0 SUCCESS StopBits: 1 Parity: NONE WordLength: 8
0.00000089 NVImg.exe IOCTL_SERIAL_SET_CHAR Serial0 SUCCESS EOF:1a ERR:0 BRK:0 EVT:0 XON:11 XOFF:13
0.00000280 NVImg.exe IOCTL_SERIAL_SET_HANDFLOW Serial0 SUCCESS Shake:9 Replace:80 XonLimit:256 XoffLimit:256



Lo malo que termina entrando en un bucle infinito, es normal, el hardware no le responde lo que está buscando...

En fin, esto es frustrante.

Gracias de todas maneras.

carlosjimenez
19-08-2010, 21:31:06
Confirmame lo qe kieres es imprimir una imagen por un pto paralelo no entiendo bien que es lo que desea.

Jab
24-08-2010, 12:28:22
Confirmame lo qe kieres es imprimir una imagen por un pto paralelo no entiendo bien que es lo que desea.

Hola, gracias por preguntar.
Si lees el hilo creo que está claro si sabes de lo que estamos escribiendo, se refiere a los códigos de escape que mediante una instrucción software genera un pulso mecánico en la impresora. Normalmente estas instrucciones se lanzan mediante el puerto de conexión de la impresora, da igual si es paralelo o serie, siempre funcionan. Existen unos estandarizados para la apertura del cajón que lanza un código y genera un pulso que permite la apertura mecánica del cajón portamonedas. Lo mismo sucedería para el corte automático.

El problema reside que para lanzar la rutina de impresión del logotipo previamente cargado en la memoria de la impresora, el código facilitado por el manual es incompleto. He realizado todo tipo de pruebas, mirado en muchas Webs y aunque hay alguna más completa que otra, no funcionan los códigos de escape facilitados, por eso entiendo que hay algún código que no he hecho.

PPB acertó bastante pero ese código tampoco va, no el código en sí, sino la secuencia, posiblemente sea una tontería, como lanzar previamente un código de inicialización, lo que fuera.

Lo que sí sé es que un distribuidor nacional de esas impresoras no lo conoce y su servicio técnico me indica que es igual que la estándar, algo que no es cierto.

Como conclusión, he decidido dejar el tema aparcado y buscar una solución aparte, imprimir mediante un report gráfico y lanzarlo con los drivers de la propia impresora. El problema es que, además de tener que instalar los drivers te limita muchísimo, ya que según el sistema operativo que tengas instalado, no te permite operar con el puerto serie o paralelo.
De hecho yo trabajo habitualmente contra el puerto y no necesito tener instalado ningún driver de impresora para imprimir un ticket, abrir el cajón, etc. eso lo hace compatible con el 100% de las impresoras.

Saludos.

carlosjimenez
24-08-2010, 20:34:05
ok gracias por tomar tu tiempo y contestar, nada espero que resuelva

Jab
25-08-2010, 13:01:07
ok gracias por tomar tu tiempo y contestar, nada espero que resuelva

Gracias a ti por intentarlo.
Ayer estuve haciendo alguna prueba con el report gráfico pero es un lío, no sé que haré, he visto en sitios las impresoras como imprimen los logos y luego en formato texto el resto del ticket, pero bueno, no soy capaz de solucionar el problema...

carlosjimenez
25-08-2010, 20:02:45
Me gustaria dentro de los posible que nos pongamos en contacto por el msn y asi podemos entre los dos y par de amigos que tengo buscarle la vuelta a eso.

mi correo es carlosjimenez19@hotmail.com me puede agregar y asi podemos ver que se hace y podemos intercambiar ideas, si estas deacuerdo.

Jab
02-09-2010, 12:15:41
Hola Carlos, gracias por tu aportación, estos días estoy esperando qué solución me dan unos compañeros que tienen relación con el mayorista en España, a ver si pueden contactar con el fabricante, si me dan una solución viable la pondré aquí. En otro caso tengo la solución del Quickreport lanzado por los drivers de la impresora y luego posteriormente todo lo que venga, en este caso, es una mala solución pero no hay otra.

No uso el MSN, ni messenger, lo siento.