Page 1 of 1

Impresora FISCAL por COM1, ayuda en mejorar velocidad

Posted: Thu Jun 21, 2012 10:22 pm
by Adolfo
Hola a todos...

Tengo un sistema que utiliza una impresora fiscal IBM.
Hasta ahora todo me funciona de la siguiente manera. ( Comandos y estructura resumida a lo mas importante)

Code: Select all

//--------------------------------------------------------------------------- INICIALIZA
Function IF_INICIALIZA()
Local nCom
Local cDcb

      nCom:=OPENCOMM( "COM1",1024,256)

      IF nCom < 0
         MSGALERT("Error de Hardware, Reinicie el Computador","Error Comunicacion" )
         Return 0
      ENDIF

      BUILDCOMMDCB( "COM1:19200,N,8,1", @cDcb )

      IF !SETCOMMSTATE( nCom, cDcb )
         MSGALERT("Error de Hardware, Reinicie el Computador","Error Inicializacion de Puerto" )
         Return 0
      ENDIF

RETURN nCom

//---------------------------------------------------------------------------
Function TestdeImpresora()
Local nCom

      nCom:=IF_Inicializa()

      Define Dialog oDlgCom Resource "OPCION4"
          oDlgCom:bCommNotify:={|nCom,nStatus| VerificaCom(nCom,nStatus)}
          ..................codigo..................... 
      Activate Dialog oDlgCom on Init EnableCommNotification(nCom,oDlgCom:hWnd,1,-1)

      If nCom > 0
         CloseComm(nCom)
      Endif
RETURN NIL

//--------------------------------------------------------------------------- Estados Impresora
Function VerificaCom(nCom,nStatus )
Local cText:=space(7)
Local nBytes
Local cRes
      nBytes:=ReadComm(nCom,@cText)
      cRes:=IF_Errores(Substr(cText,1,3))

      If cRes<>""
         MsgAlert(cRes,"Verifique estado de la Impresora Fiscal " )
      Endif
Return .T.

//--------------------------------------------------------------------------- Envia Datos a la Impresora
FUNCTION IF_Envia( nCom, cString )
              WRITECOMM( nCom, cString )
RETURN NIL

 

Hasta ahi todo bien. puedo escribir y ver el estado de la impresora sin problemas, pero en algunas que son mas antiguas, entre cada IF_ENVIA() debo poner un syswait(0.25) para que el comando se envie correctamente. En el caso de documentos con mas de 50 productos, la cosa se pone muy lenta. funciona bien, pero es mas lento que una solucion que tenian en VISUAL BASIc que si le sacaba la velocidad maxima a esas impresoras IBM mas antiguas.
Mi problema radica en como controlo que todo llego bien al impresor una vez enviado el comando.
Urgando encontre este pedazo de PSEUDO CODIGO que entregan a los grandes desarrolladores en un manual ( yo, soy yo y mi sombra.. ja ja).
Asi que si alguno se atreve a ayudarme, tendra mi gratitud.

Este es...

Code: Select all

Envia_Comando(String comando)
String respuesta=""
Char byte=0x00
//se construye comando agregándole inicio frame(87H) y fin frame(88H)
comando=0x87+comando+0x88
// se envía al puerto RS232 byte a byte

Para i=1 hasta largo(comando)
     EscribePuerto(mid(comando,i,1))
Fin Para

// se lee desde el puerto RS232 byte a byte
  Haga_Mientras(byte <> 0x0D and byte <> 0x0C)
  {
   byte = LeePuerto() // lee byte a byte
   Si (byte==0x0A) Entonces
      Break; //ACK(el comando fue satisfactorio)
   Sino
       respuesta=respuesta+byte //se concatena hasta que llega el fin 0DH(errores,comando 35 y 48) o 0CH(comando 43 en modo descarga)
   Fin_Si
  }
  Fin_Haga_Mientras

FIN Envia_Comando
 
Cualquier cable a tierra sera bienvenido

PD : En las impresoras nuevas, si saco el Syswait(), funcionan bien rapido, pero cada cierto tiempo, se pegan , como si el buffer estuviera saturado o algo asi, como les dije, todo funciona sin problemas, pero no he podido mejorar la velocidad sin poder controlar si el comando esta correcto o nop.
He variado el tamaño del bufer hasta 8192 y na'

Saludos desde CHILE

Re: Impresora FISCAL por COM1, ayuda en mejorar velocidad

Posted: Fri Jun 22, 2012 3:05 am
by Willi Quintana
HOla,,,
Cada 8 o 10 lineas de impresion le colocas el SysWait(0.5) y solucionas el lio...
Salu2
Willi

Re: Impresora FISCAL por COM1, ayuda en mejorar velocidad

Posted: Fri Jun 22, 2012 12:18 pm
by Adolfo
Hola Willi.
En las nuevas puede ser, pero las viejas, NO

Ademas si se pudo hacer en VB, poruqe no en HARBOUR, la verdad es que ya estoy medio "congestionado" de ideas. ahora funciona, todavia no hay quejas, pero la idea es dejarlo igual o mejor.

Saludos
Desde Chile
Adolfo

Re: Impresora FISCAL por COM1, ayuda en mejorar velocidad

Posted: Mon Aug 03, 2015 6:10 pm
by elmoiquique
Hola Adolfo

Una consulta, estoy empezando en este tema de la impresoras fiscales,

ya tengo algunas consultas, ya puedo comunicarme con la impresora pero como lo hago para escribir en ella y cortar el papel, agradeceria tu ayuda

Re: Impresora FISCAL por COM1, ayuda en mejorar velocidad

Posted: Tue Aug 04, 2015 2:05 pm
by Adolfo
Eres de Chile...

Te envio mail con info.... dime a cual ?

Saludos

Re: Impresora FISCAL por COM1, ayuda en mejorar velocidad

Posted: Tue Aug 04, 2015 8:29 pm
by elmoiquique
Adolfo wrote:Eres de Chile...

Te envio mail con info.... dime a cual ?

Saludos
Hola Adolfo

Si soy de Chile-Iquique email: elmoceballos@gmail.com


agradeceria tu ayuda

Re: Impresora FISCAL por COM1, ayuda en mejorar velocidad

Posted: Mon Aug 17, 2015 11:23 pm
by elmoiquique
Hola Adolfo

Una consulta existe alguna diferencia en la programacion o en los comando entre una IBM 4610 1NR y TF6, porque la pregunta,,,

Programe y realice pruebas en la 1NR y todo bien, pero cuando instale la TF6, imprime solo el titulo y el final, y queda como colgada... me da la impresion que debe ser por la velocidad, pero en la TF6 no puedo hacer pruebas ya que esta esta en modo fiscal...

cualquier sugerencia es bienvenida

Re: Impresora FISCAL por COM1, ayuda en mejorar velocidad

Posted: Tue Aug 18, 2015 3:38 pm
by Adolfo
La tf6 al perecer pide mas velocidad de conexion.

Eso tengo entendido... desgraciadamente no tengo clientes con ese modelo.
Dejame averiguar y te responde bien.

Re: Impresora FISCAL por COM1, ayuda en mejorar velocidad

Posted: Tue Aug 18, 2015 3:47 pm
by elmoiquique
Adolfo wrote:La tf6 al perecer pide mas velocidad de conexion.

Eso tengo entendido... desgraciadamente no tengo clientes con ese modelo.
Dejame averiguar y te responde bien.
ok, he buscado en internet y no aparece nada de como configurar el puerto de la TF6, pero si aparece de la 1NR...

igualmente si encuentro la solucion, aviso

ggracias

Re: Impresora FISCAL por COM1, ayuda en mejorar velocidad

Posted: Tue Aug 18, 2015 5:39 pm
by karinha
Intenta asi,

Code: Select all

// Working sample of a simple ASCII terminal program - Developed by Enrico M. Giordano

#include "Fivewin.ch" 

FUNCTION MAIN() 

    LOCAL oDlg 

    LOCAL oGet, cTxt := "" 

    LOCAL nCom 

    DEFINE DIALOG oDlg; 
           SIZE 500, 500; 
           TITLE "Terminale" 

    @ 0, 0 GET oGet VAR cTxt MEMO READONLY 

    oGet:bKeyDown = { | nKey | Tasti( nCom, nKey ) } 

    ACTIVATE DIALOG oDlg; 
             ON INIT ( oGet:AdjClient(),; 
                       nCom := APRICOM( oDlg, oGet ),; 
                       IF( nCom < 0, oDlg:End(), ) ); 
             CENTER 

    IF nCom >= 0; CLOSECOMM( nCom ); ENDIF 

    RETURN NIL 


STATIC FUNCTION TASTI( nCom, nKey ) 

    SENDSTR( nCom, CHR( nKey ) ) 

    RETURN NIL 


STATIC FUNCTION APRICOM( oDlg, oGet ) 

    LOCAL nCom, cDcb 

    BEGIN SEQUENCE

        nCom = OPENCOMM( "COM1", 16384, 16384 ) 

        IF nCom < 0 
            ? "Errore di apertura della porta di comunicazione." 
            BREAK 
        ENDIF 

        BUILDCOMMDCB( "COM1:115200,N,8,1", @cDcb )

        /*

        Ó

        BUILDCOMMDCB( "COM1:9600,N,8,1", @cDcb )

        */

        IF !SETCOMMSTATE( nCom, cDcb ) 
            ? "Errore di impostazione della porta di comunicazione." 
            BREAK 
        ENDIF 

        oDlg:bCommNotify = { | nCom | Connect( nCom, oGet ),; 
                                      EnableCommNotification( nCom, oDlg:hWnd, 1, -1 ) } 

        IF !ENABLECOMMNOTIFICATION( nCom, oDlg:hWnd, 1, -1 ) 
            ? "Errore di abilitazione della notifica." 
            BREAK 
        ENDIF 
    RECOVER 
        nCom = -1 
    END SEQUENCE 

    RETURN nCom 


STATIC FUNCTION CONNECT( nCom, oGet ) 

    LOCAL cStr 

    ENABLECOMMNOTIFICATION( nCom, 0, 1, -1 ) 

    cStr = RECEIVESTR( nCom ) 

    cStr = STRTRAN( cStr, CHR( 13 ), "" ) 
    cStr = STRTRAN( cStr, CHR( 10 ), CRLF ) 

    oGet:Append( cStr ) 

    RETURN NIL 


STATIC FUNCTION SENDSTR( nCom, cString ) 

    LOCAL nBytes := WRITECOMM( nCom, cString ) 

    RETURN nBytes = LEN( cString ) 


STATIC FUNCTION RECEIVESTR( nCom ) 

    LOCAL cBuf := SPACE( 1000 ) 

    RETURN LEFT( cBuf, READCOMM( nCom, @cBuf ) )
 

Re: Impresora FISCAL por COM1, ayuda en mejorar velocidad

Posted: Tue Aug 18, 2015 5:42 pm
by karinha

Re: Impresora FISCAL por COM1, ayuda en mejorar velocidad

Posted: Tue Aug 18, 2015 10:55 pm
by elmoiquique
Hola Karinha

el problema que tengo no es la comunicacion,,, es la programacion con respecto a la impresora IBM 4610 1NR y TF6, no se son iguales o no en los comandos...esa es mi duda

Re: Impresora FISCAL por COM1, ayuda en mejorar velocidad

Posted: Wed Aug 19, 2015 4:07 pm
by karinha