laremi400 Master

Registrado: 12 May 2004Mensajes: 179
|
Publicado: Vie 31 Dic, 2004 9:46 am Asunto: Abrir Cajon Portamonedas |
|
|
Hola!!
Hace tiempo que tuve que hacer una función para abrir un cajón portamonedas de una caja registradora.
El cajón, y esto debe de ser lo más común, se abre a través de la impresora.
El caso es que para abrir el cajón, hay que enviar una serie de caracteres "directamente" a través del LPT1. Gracias al foro y a un poco de lectura de la ayuda lo resolví.
Pero estos dias me he enfrentado a mismo problema, con la misma impresora, pero a través de puerto serie. He recurrido a leer el foro y he estado probando unas cuantas de las soluciones que aparecen aquí, y todas me han parecido de lo más complicado, para hacer algo tan simple como abrir un cajón. No digo que estén mal ¿eh?. Al contrario, me he quedado alucinado (una vez más) de sus conocimientos, en especial de los de algunos (Leo, Roberto y compañia). Pero el caso es que probando, probando he "descubierto" una forma muy sencillita, que espero que resulte útil al próximo que quiera hacer algo con el puerto serie sin tener que aprender como funciona éste.
//---------------------------------------------------------------------------
//Esta funcion imprime una serie de caracteres en la impresora que hacen que
//una patilla del RJ45 de la impresora se alimente y abra el cajon portamonedas
//---------------------------------------------------------------------------
void __fastcall TCaja::AbrirCajonPortamonedas(void)
{
HWND Puerto;
unsigned long bytes; //El número de caracteres escritos en el fichero (si no se define casca)
char msg[7] = {0x1B,0x70,0x00,0x09,0x09,0x1A,0x00}; //la cadena que abre el cajón
//Los parámetros de esto se han cogido de la ayuda de Win32 Reference
Puerto = CreateFile("LPT1",GENERIC_WRITE,0x00,0x00,OPEN_EXISTING,FILE_ATTRIBUTE_ARCHIVE,0x00);
// Si en vez de hacerlo a través del paralelo se quiere hacer a través del serie
// se pone en vez de LPT1 el COM1(ó 2 ó 3, etc).
// Puerto = CreateFile("COM1",GENERIC_WRITE,0x00,0x00,OPEN_EXISTING,FILE_ATTRIBUTE_ARCHIVE,0x00);
// No se controla el error (en mi programa en concreto no me hace falta)
WriteFile(Puerto,msg,6,&bytes,0x00); //si esto devuelve 0 es que ha fallado
CloseHandle(Puerto); //si no se cierra luego hay un follón y se bloquea el LPT1
}
La cadena de caracteres está puesta en Hex, pero se puede poner como se quiera. Esto en concreto es para una EPSON TM8811 y funciona con la TM88111 (con el serie). En otras marcas la cadena será diferente, pero la idea es la misma.
El RJ45 es el conector que lleva la impresora y que conecta con el cajón.
Espero que resulte útil.
Saludos... |
|