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
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
Que usas, HBCOMM.LIB? Muestre tú código fuente. És mejor.
Saludos.
#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
RETURNuna impresora fiscal? Cual és la Marca? Creo que usted tiens que usar el puerto USB de tu computadora, mira el manual de la impresora.
Es una Hasar y estoy usando un puerto usb.
Saludos
#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. )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
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
Entonces, eso es un problema técnico o que no tienen puertas tarjeta COM. llamar a un técnico en computación. saludos.
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
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
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.
Horacio;
pasame tu correo, te voy a conectar con Eduardo Rizzolo, él desarrolló las funciones de comunicación par varios modelos de hasar
Saludos
Gracias Mario por tu interés. Ya pude resolver la emisión de facturas con el controlador fiscal.
Saludos