Pregunta: | 21803 - VERIFICACION DE ESTADO EN IMPRESORA EPSON TM-U950 |
Autor: | Juan Pablo Sandoval Rivera |
Buen dia :
La duda es la siguiente : Se tiene una impresora serial Epson TM-950 (POS) y se desea a travez de programacion saber el estado de la impresora, si tiene papel, si ya se va acabar el rollo, o cualquier otro tipo de error de la misma. COn el fin de que por ejemplo si no tiene papel envia un mensaje a operador del punto POS y no permita la facturacion hasta que se instale un rollo nuevo, asi mismo verificar si por el rollo de validacion. Se han hechos pruebas con ESC v, GS a n, DLE EOT, DLE ENQ, GS ENQ, GS r n, Algunos de estos comandos no funcionan por que son para interface paralela. Se elaboro un programa en lenguaje C para leer directamente el puerto, pero siempre despacha lo mismo. COmo podre hacer para verificar estos estados ? Que orden puedo usar ? ( hasta he combinando instruccion y nada). El lenguaje a trabajar es C. La impresora a donde enviar su estado, lo retornara por el mismo puerto Les agradezco la colaboracion. |
Respuesta: | miriam sandoval |
Hola... mira usa la dll io.dll es libre, con ella puedes obtener los valores que te arroaja el lpt de la impresora. por ejemplo
prende tu impresora sin error... llama la funcion obten valor impresoraenlinea as integer =223 arrojado por funcion apaga impresora ... llama funcion impresoraapagada as integer =112 arrojado por funcion .... .... segun el estado Public Declare Function PortIn Lib "io.dll" (ByVal Port As Integer) As Byte Public Declare Function IsDriverInstalled Lib "io.dll" () As Boolean Public lpt1 As String Public Function _aaFRevisaEstado() As Integer On Error Resume Next Dim Valor As Long Valor = IsDriverInstalled Valor = PortIn(&H379) Return Valor End Function y en tu programa cuando kiera imprimir solo consulta la funcion y compara con lo k guardaste en la variable de impresoraenlinea para dejar ono ma da imprimir busca mas info de io.. por k se tiene k configurar desde el bios segun los valores.. esto puede variar segun la mother pero compara con diferentes impresoras y todas deben enviar el mismo valor de enecendido y es ai donde te daras cuenta k el bios esta bien |
Respuesta: | Quique Scan |
Aqui te mando algo de codigo. A mi me funciona ok pero bajo DOS, no funciona baja Win NT.
unsigned TMU950Check :: getStatusGS_ENQ(int puerto, int del){ unsigned status; char abyte = '\0'; delay(del); _bios_serialcom(_COM_SEND, puerto, (char)0x1D); delay(del); _bios_serialcom(_COM_SEND, puerto, (char)0x05); delay(del); status = _bios_serialcom(_COM_RECEIVE, puerto, abyte); return status; } unsigned TMU950Check :: getStatusDLE_EOT(int puerto, int del, int checkType){ unsigned status; char abyte = '\0'; delay(del); _bios_serialcom(_COM_SEND, puerto, (char)0x10); delay(del); _bios_serialcom(_COM_SEND, puerto, (char)0x04); delay(del); _bios_serialcom(_COM_SEND, puerto, (char)checkType); delay(del); status = _bios_serialcom(_COM_RECEIVE, puerto, abyte); return status; } Luego de acuerdo a lo que te devuelven haces unamascara para sacar el estado. Por ejemplo si queres saber si la tapa esta abierta #define MASK_TAPA_ABIERTA 0x04 y lo que haces es un AND bit a bit if (status & MASK_TAPA_ABIERTA) printf("Tapa abierta!!"); el delay que uso yo es de 20ms Espero te sirva Saludos |