Conectarme a puerto

Conectarme a puerto

Postby horacio » Mon Feb 01, 2016 9:52 pm

Compañeros,estoy usando un aplicacion que tiene que acceder al puerto COM1 y no puedo en ninguno de los puertos. Debo configurar algo en mi maquina ?. Desde ya muchas gracias.

Saludos
horacio
 
Posts: 1358
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina

Re: Conectarme a puerto

Postby karinha » Tue Feb 02, 2016 12:59 pm

Que usas, HBCOMM.LIB? Muestre tú código fuente. És mejor.

Saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7215
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Conectarme a puerto

Postby horacio » Tue Feb 02, 2016 1:15 pm

Karinha, estoy programando una rutina para una impresora fiscal. Utilizo un OCX que viene con la impresora. El OCX me dice que no puede conectarse al puerto COM1. Utilicé otro programa, que trae la misma impresora para programas MS-DOS y me dice exactamente lo mismo. No puede abrir los puertos, posteo el código que encontré en este foro y pertenece a Salvador y me dice exactamente lo mismo. Desactive el firewall por si este me bloqueaba la comunicación.

Code: Select all  Expand view

#include "hbcom.ch"

PROCEDURE Main( cPortName )

   LOCAL cString := "ATE0" + Chr( 13 ) + "ATI3" + Chr( 13 )
   LOCAL nTimeOut := 3000 // 3000 miliseconds = 3 sec.
   LOCAL nResult
   LOCAL nPort := 1
       
        cPortName := "COM1"

   IF ! Empty( cPortName )
      hb_comSetDevice( nPort, cPortName )
   ENDIF
   IF ! hb_comOpen( nPort )
      ? "Cannot open port:", nPort, hb_comGetDevice( nPort ), ;
        "error: " + hb_ntos( hb_comGetError( nPort ) )
   ELSE
      ? "port:", hb_comGetDevice( nPort ), "opened"
      IF ! hb_comInit( nPort, 9600, "N", 8, 1 )
         ? "Cannot initialize port to: 9600:N:8:1", ;
           "error: " + hb_ntos( hb_comGetError( nPort ) )
      ELSE
         nResult := hb_comSend( nPort, cString, hb_BLen( cString ), nTimeOut )
         IF nResult != hb_BLen( cString )
            ? "SEND() failed,", nResult, "bytes sent in", nTimeOut / 1000, ;
              "sec., expected:", hb_BLen( cString ), "bytes."
            ? "error: " + hb_ntos( hb_comGetError( nPort ) )
         ELSE
            ? "SEND() succeeded."
         ENDIF

         WAIT "Press any key to begin reading..."
         cString := Space( 32 )
         nTimeOut := 500 // 500 milliseconds = 0.5 sec.
         nResult := hb_comRecv( nPort, @cString, hb_BLen( cString ), nTimeOut )
         IF nResult == -1
            ? "RECV() failed,", ;
              "error: " + hb_ntos( hb_comGetError( nPort ) )
         ELSE
            ? nResult, "bytes read in", nTimeOut / 1000, "sec."
         ENDIF
      ENDIF
      ? "CLOSE:", hb_comClose( nPort )
   ENDIF

   RETURN
 

Muchas Gracias

Saludos
horacio
 
Posts: 1358
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina

Re: Conectarme a puerto

Postby karinha » Tue Feb 02, 2016 1:20 pm

una impresora fiscal? Cual és la Marca? Creo que usted tiens que usar el puerto USB de tu computadora, mira el manual de la impresora.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7215
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Conectarme a puerto

Postby horacio » Tue Feb 02, 2016 1:40 pm

Es una Hasar y estoy usando un puerto usb.

Saludos
horacio
 
Posts: 1358
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina

Re: Conectarme a puerto

Postby karinha » Tue Feb 02, 2016 1:45 pm

Code: Select all  Expand view

#include "hbcom.ch"  //??  -> HCOMM.LIB

// Esto es para LECTOR de CODIGOS DE BARRAS
STATIC cPorta               // := "COM1" - Porta de Onde vem os Bits da Memoria.
STATIC nBaudios  := 9600    //-> nBaudios - Velocidade do Bit - Numerico.
STATIC nBits     := 8       //-> Tratamento de Bits - Digito Binario.
STATIC cParidad  := "n"     //-> <1,2,3> Paridade do Bit - Analogia - Numerico.
STATIC nStops    := 0       //-> 0 Protocolo de Parada e Espera do Bit.
STATIC cBuffer   := 8000    //-> Controle do Buffer Default Antigo era 1024
STATIC nComm                //-> Controle de Abertura da Porta Serial

PROCEDURE Main( cPortName )

   LOCAL cString := "ATE0" + Chr( 13 ) + "ATI3" + Chr( 13 )
   LOCAL nTimeOut := 3000 // 3000 miliseconds = 3 sec.
   LOCAL nResult
   LOCAL nPort := 1
       
        cPortName := "COM1"

   IF ! Empty( cPortName )
      hb_comSetDevice( nPort, cPortName )
   ENDIF
   IF ! hb_comOpen( nPort )
      ? "Cannot open port:", nPort, hb_comGetDevice( nPort ), ;
        "error: " + hb_ntos( hb_comGetError( nPort ) )
   ELSE
      ? "port:", hb_comGetDevice( nPort ), "opened"
      IF ! hb_comInit( nPort, 9600, "N", 8, 1 )
         ? "Cannot initialize port to: 9600:N:8:1", ;
           "error: " + hb_ntos( hb_comGetError( nPort ) )
      ELSE
         nResult := hb_comSend( nPort, cString, hb_BLen( cString ), nTimeOut )
         IF nResult != hb_BLen( cString )
            ? "SEND() failed,", nResult, "bytes sent in", nTimeOut / 1000, ;
              "sec., expected:", hb_BLen( cString ), "bytes."
            ? "error: " + hb_ntos( hb_comGetError( nPort ) )
         ELSE
            ? "SEND() succeeded."
         ENDIF

         WAIT "Press any key to begin reading..."
         cString := Space( 32 )
         nTimeOut := 500 // 500 milliseconds = 0.5 sec.
         nResult := hb_comRecv( nPort, @cString, hb_BLen( cString ), nTimeOut )
         IF nResult == -1
            ? "RECV() failed,", ;
              "error: " + hb_ntos( hb_comGetError( nPort ) )
         ELSE
            ? nResult, "bytes read in", nTimeOut / 1000, "sec."
         ENDIF
      ENDIF
      ? "CLOSE:", hb_comClose( nPort )
   ENDIF

   RETURN

// ejemplos, usando HBCOMM para Lector de codigos de barras.


//-Leitura da Porta Serial, Desde HBCOMM.LIB em [x]Harbour-------------------//

FUNCTION LER_PORTA( oLbx, oDbfpedf, oDbfestoque, oDbfNumNf,      ;
                                       oDbfVendedor )

    LOCAL nBytes  := 15
    LOCAL cCodigo := SPACE(15), xresto

    PUBLIC cCod, xCod, XTPV

    DEFAULT cCod  := SPACE(15)
    DEFAULT xCod  := SPACE(15)

    IF EMPTY(nComm)
        //-> Chama a Funcao de Ativar a Porta Serial.
        Ativar_Porta()
        //-> Chama a Funcao de Ativar a Porta Serial.
    ENDIF

    nBytes    := InbufSize(nComm) // Pega Dados do Buffer.

    nBitReceb += nBytes

    IF nBytes > 0

        cCodigo = SPACE(nBytes)

        //->nBytesRead - Ler os Bytes do Handle da Porta. o Conteudo do Codigo.
        InChr( nComm, nBytes, @cCodigo ) //-> Leitura dos Dados do Buffer.

        IF ASC(RIGHT(CCODIGO,1))#13

            XRESTO:=cCodigo

            CCODIGO = SPACE(15)

            //->nBytesRead - Ler os Bytes do Handle da Porta. o Conteudo do Codigo.
            InChr( nComm, nBytes, @cCodigo ) //-> Leitura dos Dados do Buffer.

            CCODIGO:=ALLTRIM(XRESTO)+ALLTRIM(CCODIGO)

        ENDIF

        CCODIGO := ALLTRIM(CCODIGO)

        IF LEN(CCODIGO)>13

            CCODIGO:=LEFT(CCODIGO,13)

        ENDIF

        IF ASC(RIGHT(CCODIGO,1))=13

            CCODIGO:=LEFT(CCODIGO,LEN(CCODIGO)-1)

        ENDIF

        //-------------------------------------------------

        //-> Tratamento do C¢digo de Barras.
        If LEN( ALLTRIM( cCodigo ) ) > 0

            //-> Area dos Leitores Seal

            xCod := SubStr( cCodigo, 1, 15 ) // Original do Edvaldo NÆo Mexi

            // Os Leitores Metrologic, Al‚m do C¢digo de Barras, Geram
            // Dois <Enter-CRLF> Ap¢s o C¢digo de Barras. Retir -los Assim:
            // Lˆ C¢digos de Barras Com 15 Digitos -> Metrogic MS700i

            // Para Leitores At&T Tipo o da Sapataria
            If Left( cCodigo, 1 ) = "A"  // Leitor At&T
                xCod := Substr( cCodigo, 2, 13 )
            Endif

            cCod := ALLTRIM( xCod )

            while right(cCod,1)#"0".and.right(cCod,1)#"1".and.right(cCod,1)#"2".and.;
                  right(cCod,1)#"3".and.right(cCod,1)#"4".and.right(cCod,1)#"5".and.;
                  right(cCod,1)#"6".and.right(cCod,1)#"7".and.right(cCod,1)#"8".and.right(cCod,1)#"9".and.len(cCod)>0

                sysrefresh()
                cCod:=alltrim(left(cCod,len(cCod)-1))

            enddo

            cCod:=left(cCod+space(15),15)

            VER_PRODUTOS( cCod, Aget, oLbx, oDbfPedf, oDbfEstoque,      ;
                                                  oDbfNumNf, oDbfClientes,    ;
                                                  oDbfVendedor, oDbfAreceber, ;
                                                   oDbfRetirada, lAppend )

        ENDIF

     ELSEIF nBytes > 15

        MsgInfo( "Leitura Não Realizada!!!", "Erro na Porta Serial" )

        Fechar_Porta()
        Ler_Porta( oLbx, oDbfpedf, oDbfestoque, oDbfVendedor )

    ENDIF

    //-> Limpeza da Vari vel e do Buffer do Leitor Serial
    nBitReceb := 0
    nBytes    := OutBufClr(nComm) // Limpa o Buffer de Sa¡da do Leitor Serial.
    cCod      := SPACE(15)
    cCodigo   := SPACE(15)

RETURN NIL

//-> Funcao Para Fechar a Porta Definitivamente.-----------------------------//

FUNCTION Fechar_Porta()

    //->Fechar a Porta Serial, na Saida do Modulo.
    Fechar_Leitura()

RETURN NIL

//-> Funcao Para Ativar a Porta Serial do Micro Computador.------------------//

STATIC FUNCTION Ativar_Porta() //-> Continha Erros... J  Era!

    LOCAL nError
    LOCAL nHandle

    PUBLIC BUFFER := SPACE(4000)

    //-> Vai Iniciar a Porta, Se Houver ConexÆo Remota Correta.
    IF (nComm:=Init_Port(cPorta,nBaudios,nBits,cParidad,nStops,cBuffer)) == -1

        IF !ISWORKING(nComm)
            MsgStop( "Porta do Leitor Desconectada! ",                        ;
                     "Erro Ao Tentar Abrir a Porta Serial " )
            RETURN( .T. )
        ENDIF

    ENDIF

RETURN( .T. )

//-> Funcao Para Encerrar a Leitura da Porta Definitivamente. Saida Geral.---//

STATIC FUNCTION Fechar_Leitura()

    //-> Comando Para Desativar a Porta Serial Definitivamente

RETURN UNINT_PORT(nComm)

//-> Fechar o Leitor de Códigos de Barras Temporariamente
FUNCTION FECHA_LEITOR()

    PUBLIC XULS

    //-> Fecho a Porta Temporariamente Para Alterar Um Produto
    If Val( xUls ) > 0
        //-> Desativa o Timer do Leitor de C¢digos de Barras
        oTimerVendas:Deactivate()
        //-> Funcao Para Fechar a Porta Serial
        Fechar_Porta()
    Endif

RETURN( .T. )

//-> Reabrir o Leitor de Códigos de Barras Temporariamente
FUNCTION ABRE_LEITOR()

    PUBLIC XULS

    //-> Reabro a Porta do Leitor Novamente, Depois de Alterar.
    If Val( xUls ) > 0
        //-> Ativa o Timer do Leitor de C¢digos de Barras
        oTimerVendas:Activate()
        //-> Funcao Para Fechar a Porta Serial
        Ativar_Porta()
    Endif

RETURN( .T. )
 


Saludos.

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7215
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Conectarme a puerto

Postby karinha » Tue Feb 02, 2016 1:48 pm

Last edited by karinha on Tue Feb 02, 2016 2:16 pm, edited 1 time in total.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7215
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Conectarme a puerto

Postby horacio » Tue Feb 02, 2016 2:05 pm

Gracias Karinha por la info, los enlaces de Hasar ya los conocia. Como te comente no es un problema de la impresora sino que no puedo abrir los puertos. Ni con el software de la impresora ni con el código que te postee.

Saludos
horacio
 
Posts: 1358
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina

Re: Conectarme a puerto

Postby horacio » Tue Feb 02, 2016 2:11 pm

Acabo de hacer una prueba con el código de Salvador en otra PC y abre el port com1. No puedo en la máquina donde trabajo.

Saludos
horacio
 
Posts: 1358
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina

Re: Conectarme a puerto

Postby karinha » Tue Feb 02, 2016 2:19 pm

Entonces, eso es un problema técnico o que no tienen puertas tarjeta COM. llamar a un técnico en computación. saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7215
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Conectarme a puerto

Postby cmsoft » Wed Feb 03, 2016 10:38 am

Hola Horacio:
Si es una impresora fiscal Hasar, para conectarte tenes 2 posibilidades, 1 mediante el puerto serial (COM1 a COM4) o por un puerto USB.
Si te conectas a la impresora por el puerto USB, no puedes usar en tu programa el puerto COM1 para comunicarte. Deberias tener los 2 cables, uno USB y el otro SERIAL. Utiliza el serial y pruebalo. Yo llevo años conectandome a este tipo de impresoras y todo funciona muy bien. Espero te sirva la data
User avatar
cmsoft
 
Posts: 1189
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Conectarme a puerto

Postby horacio » Fri Feb 05, 2016 12:11 pm

Gracias por tus sugerencias, logré conectarme instalando un driver usb-serial y me habilitó el COM4. Ahora puedo comunicarme con la impresora. Tendrías algo de código para configurar un ticket factura A y B ? Estoy un poco perdido. Muchas gracias

Saludos
horacio
 
Posts: 1358
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina

Re: Conectarme a puerto

Postby cmsoft » Fri Feb 05, 2016 3:00 pm

Yo para comunicarme utilizo una libreria (de paga) que podes descargar desde www.impresoras-fiscales.com.ar
Ahi te da ejemplos claros para comunicarte con el impresor fiscal.
User avatar
cmsoft
 
Posts: 1189
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Conectarme a puerto

Postby MarioG » Tue Feb 16, 2016 2:47 am

Horacio;
pasame tu correo, te voy a conectar con Eduardo Rizzolo, él desarrolló las funciones de comunicación par varios modelos de hasar

Saludos
Resistencia - "Ciudad de las Esculturas"
Chaco - Argentina
User avatar
MarioG
 
Posts: 1380
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR

Re: Conectarme a puerto

Postby horacio » Tue Feb 16, 2016 2:35 pm

Gracias Mario por tu interés. Ya pude resolver la emisión de facturas con el controlador fiscal.

Saludos
horacio
 
Posts: 1358
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 76 guests