Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   Impresión de una imagen en una impresora de tickets, códigos de escape (https://www.clubdelphi.com/foros/showthread.php?t=68625)

Jab 25-06-2010 14:56:07

Impresión de una imagen en una impresora de tickets, códigos de escape
 
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:
Código:

Writeln(Impresora,chr(29)+chr(47)+chr(0)+chr(48))
Para el paralelo
Código:

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

Cita:

Empezado por ppb (Mensaje 370404)
Hasta donde recuerdo , creo que debes definir el gráfico primero :

GS*.....

y luego GS/.. para imprimir

Esto lo encontre en un documento antiguo.
Código:

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

Código:

//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.

Código:

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:
Cita:

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

Código:


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
 
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

Cita:

Empezado por carlosjimenez (Mensaje 373970)
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

Cita:

Empezado por carlosjimenez (Mensaje 374355)
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

a ponernos en contacto
 
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.


La franja horaria es GMT +2. Ahora son las 23:35:07.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi