Comunicación de puerto COM con Impresora Fiscal
Posted:
Mon Jul 27, 2015 7:52 pm
by TOTOVIOTTI
Hola amigos,
tengo una rutina desarrollada en Clipper+Clipper Tools que realiza la comunicación y la impresión de Facturas y demás comprobantes
fiscales. Me llegó la hora de pasarlas a FW, sólo que las funciones de ClipperTools, como COM_OPEN, COM_CLOSE, COM_FLUSH no funcionan.
Si he encontrado en el foro, que existen funciones como OpenComm,CloseComm,FlushComm, el tema es que necesito algunas funciones
más y saber como se utilizan éstas, otras que uso son COM_SETIO,COM_SETIRQ,COM_INIT,COM_READ,COM_COUNT.
Si alguien tiene una rutina de comunicación con la IF, les agradecería mucho me ayudaran con éste tema.
Gracias a todos.
Roberto
PD: Aclaro que es con Harbour.
Re: Comunicación de puerto COM con Impresora Fiscal
Posted:
Mon Jul 27, 2015 8:59 pm
by cmsoft
Apertura y seteo del puerto
- Code: Select all Expand view
FUNCTION abrirport(n)
LOCAL IdPort,cDcb,nError
IdPort := OpenComm("COM"+STR(n,1),1024,256)
IF IdPort <= 0
nError = GetCommError( IdPort)
MsgInfo( "Error al abrir: " + Str( nError ) )
ELSE
MsgRun("Puerto abierto como " + STR(IdPort))
ENDIF
IF ! BuildCommDcb("COM"+STR(n,1)+":9600,n,8,1" , @cDcb)
nError = GetCommError( IdPort)
MsgInfo( "Error al Configurar: " + Str( nError ) )
RETURN 0
ELSE
MsgRun("Puerto Configurado")
ENDIF
IF ! SetCommState( IdPort, cDcb )
nError = GetCommError( IdPort)
MsgInfo( "Error al setear: " + Str( nError ) )
RETURN 0
ELSE
MsgRun("Puerto Seteado")
ENDIF
RETURN IdPort
Escribir en el puerto
- Code: Select all Expand view
(nBytes := WriteComm( port,string) ) < 0
Leer desde el puerto
- Code: Select all Expand view
nBytes := ReadComm( port,@string)
Cerrar Puerto
- Code: Select all Expand view
CloseComm(port)
Todo esto lo utilizaba hace tiempo para comunicarme con Registradoras Fiscales por puerto serial.
Igualmente, hay librerias de tercero, economicas, que puedes utilizar para la comunicacion con impresores fiscales.
Espero te haya servido.
Saludos
Re: Comunicación de puerto COM con Impresora Fiscal
Posted:
Mon Jul 27, 2015 9:05 pm
by TOTOVIOTTI
Hola
gracias por tu respuesta, la consulta es: porque me indicas que hay librerías de terceros?
Este comunicación que me pasaste el ejemplo, no te funciona correctamente? Es por eso?
Mil gracias!
Roberto
Re: Comunicación de puerto COM con Impresora Fiscal
Posted:
Mon Jul 27, 2015 9:30 pm
by cmsoft
TOTOVIOTTI wrote:Hola
gracias por tu respuesta, la consulta es: porque me indicas que hay librerías de terceros?
Este comunicación que me pasaste el ejemplo, no te funciona correctamente? Es por eso?
Mil gracias!
Roberto
Esto, como te dije, lo utilice muy bien para Registradoras (Tipo NCR 2050), no para Controladores fiscales. El trabajo con el controlador fiscal es mas ida y vuelta, mas ONLINE, por eso para mis programas decidi usar una libreria que resolvia todo el tema de la comunicacion con cada modelo de impresor fiscal (en mi caso tenia desarrollos para Epson, Hasar y NCR en varios de sus modelos). Por ese motivo, decidi invertir en trabajo ya desarrollado y me facilito el trabajo a mi. Pero esto es solo una posicion, creo que tranquilamente, con estos comandos, puedes reemplazar los del viejo CATOOLS, y hacerlo "artesanalmente". Te comente lo de las librerías solamente para que tuvieses otra opcion...
Saludos
Re: Comunicación de puerto COM con Impresora Fiscal
Posted:
Mon Jul 27, 2015 9:45 pm
by JmGarcia
Si enlazas la librería de Harbour/xHarbour que se llamam HBCOMM.LIB tienes todas estas funciones:
INIT_PORT // Open port and créate handle
OUTBUFCLR // purge output buffer -> Limpeza da Saida do Buffer
ISWORKING // See if port is opened correctly
INCHR // get char/s
OUTCHR // Send out characters. Returns .t. if successful.
INBUFSIZE // Find out how many chars are in input buffer
OUTBUFSIZE // Find out how many characters are in out buf
UNINT_PORT // Close port and clear handle
Ejemplo de PRG:
- Code: Select all Expand view
#define IN_BUFFER 128
function main()
local nComm,cBuffer,nBytes
nComm:=Init_Port("COM3",115200,8,0,1,4000)
if nComm<=0
MsgStop("Error al abrir puerto")
UnInt_Port(nComm)
return nil
endif
OutBufClr(nComm) // Limpa el Buffer de Salida
OutChr(nComm,"Texto a enviar...") // Envia datos
cBuffer:=Space(IN_BUFFER)
nBytes:=InbufSize(nComm)
InChr(nComm,nBytes,@cBuffer) // Lee buffer de entrada
UnInt_Port(nComm)
return nil
Re: Comunicación de puerto COM con Impresora Fiscal
Posted:
Tue Jul 28, 2015 12:47 pm
by TOTOVIOTTI
Gracias a ambos!
Estoy armando algo entre las dos ideas... vamos a ver que sale.
Me quedan un par de dudas... como debo definir el cString del ReadComm, carácter de cuanto?
De que depende la cantidad de bytes que lee?
Y la segunda, como reemplazar el COM_COUNT y la COM_SCOUNT.... creo que va por el lado del ReadComm... pero
no sé, estoy haciendo pruebas...
Gracias!
Re: Comunicación de puerto COM con Impresora Fiscal
Posted:
Mon Aug 03, 2015 9:23 pm
by elmoiquique
TOTOVIOTTI wrote:Gracias a ambos!
Estoy armando algo entre las dos ideas... vamos a ver que sale.
Me quedan un par de dudas... como debo definir el cString del ReadComm, carácter de cuanto?
De que depende la cantidad de bytes que lee?
Y la segunda, como reemplazar el COM_COUNT y la COM_SCOUNT.... creo que va por el lado del ReadComm... pero
no sé, estoy haciendo pruebas...
Gracias!
hola yo estoy en las misma,, con que marca de impresora estas trabajando
Re: Comunicación de puerto COM con Impresora Fiscal
Posted:
Tue Aug 04, 2015 10:35 am
by acuellar
No se sI hay diferencia con las impresoras IBM.
Tengo un impresora Epson TM-U220 conectada en el puerto serial.
Lo único que hice fue compartirla y utilizar la función PrintFileRaw( "\\MIPC\TM-220", cFilePRN )
Saludos,
Adhemar
Re: Comunicación de puerto COM con Impresora Fiscal
Posted:
Tue Aug 04, 2015 8:33 pm
by elmoiquique
acuellar wrote:No se sI hay diferencia con las impresoras IBM.
Tengo un impresora Epson TM-U220 conectada en el puerto serial.
Lo único que hice fue compartirla y utilizar la función PrintFileRaw( "\\MIPC\TM-220", cFilePRN )
Saludos,
Adhemar
Hola Adhemar
LA impresoras fiscal no son iguales que las normales, estas son distintas, tienes que enviar y leer informacion de ellas