La Web del Programador: Comunidad de Programadores
 
    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