Buenos dias estimados amigos del foro
En el foro encontre estas funciones que estoy tratando de adecuarlas a mis necesidades, pero tengo 2 problemas.
1.- cuando ligo el programa con esta funcion SetCommState( @cDcb ) ) me da un error de Windows encontro un problema y debe cerrar
2.- Comentada esta funcion corre el programa , la primera vez captura la llamada y tomo de la cadena emitida el valor correspondiente al
numero telefonico, para al volver a intertar tomar la siguiente llamada ya no aparece nada.
por favor si alguien me puede ayudar adjunto el codigo
Utilizo xHarbour 10.4 y Fwh de abril del 2010
Gracias de antemano
#include "fiveWin.ch"
function fReadPort
local cDcb, lError, nError
local numero := space(8)
cErrCode := space( 15 )
if !( gnCom := OpenComm( 'COM3', 1024, 256 ) ) == 0
*IF ! SetCommState( gnCom, cDcb )
* nError = GetCommError( gnCom)
* MsgInfo( "Error al setear: " + Str( nError ) )
* RETURN 0
* ELSE
* MsgRun("Puerto Seteado")
*-ENDIF
if !(BuildCommDcb( "COM3:9600,E,8,1", @cDcb )) //.and. SetCommState( @cDcb ) )
nError := GetCommError( gnComm, @cErrCode )
MsgAlert( "Error No se pudo abrir Puerto "+ str( nError ) + CRLF + cErrCode)
RETURN( .f. )
endif
endif
*?? 'pase open'
cBlock=space(702)
*nTry=0
*?? 'antes de do'
do while .T.
do while .T. //nTry<10 // can remove this nTry if not applicable
if ( nBytes := readComm( gnComm, @cBlock) ) > 0
msgwait('Llamada a ingresado..','',2)
?? cblock
exit
else
msgwait('Esperando llamada.... ','',1)
endif
enddo
numero := substr(cBlock,47,10)
*?? numero
*Lector() //*/* Lueog lo procesamos.
*graba_llamada(numero)
*numero := space(8)
if FlushComm( gnComm, 0 ) != 0
nError = GetCommError( gnComm )
Msgwait( 'Error Limpiando el COM Error:' ,'',.01 )
endif
if ! CloseComm( gnComm )
nError = GetCommError( gnComm )
Msgwait( 'No Pude cerrar el com Error: ' ,'',.01 )
endif
cBlock=space(702)
if MsgYesno('Desea salir','Atencion')
return nil
endif
enddo
RETURN( .t. )
function graba_llamada(numero)
local codbus
DBSELECTAREA("tregis")
ordSetfocus("iregis")
*dbgotop()
if regismas(codbus:=numero)
ponlock()
trtelefono := numero
trfecha := date()
quilock()
endif
return nil
CAPTURAR LAMADA DE CENTRAL TELEFONICA
Re: CAPTURAR LAMADA DE CENTRAL TELEFONICA
Hola buenas tardes
Una solución es la siguiente
al principio del programa abres el puerto utilizando las mismas funciones con sus respectivas validaciones como lo estas haciendo
Function Main
nCommB := OpenComm( )
BuildCommDcb()
SetCommState( )
.
. llamado de Funciones
.
closecomm()
Primero que no estas abriendo y cerrando el puerto cada vez que estas registrando una llamada y segundo te evitas el error del SetCommState( )
dejas la misma función sin la parte de abrir y cerrar los puerto
function l fReadPort
cBlock=space(702)
*nTry=0
*?? 'antes de do'
do while .T.
do while .T. //nTry<10 // can remove this nTry if not applicable
if ( nBytes := readComm( gnComm, @cBlock) ) > 0
msgwait('Llamada a ingresado..','',2)
?? cblock
exit
else
msgwait('Esperando llamada.... ','',1)
endif
enddo
numero := substr(cBlock,47,10)
*?? numero
*Lector() //*/* Lueog lo procesamos.
*graba_llamada(numero)
*numero := space(8)
if FlushComm( gnComm, 0 ) != 0
nError = GetCommError( gnComm )
Msgwait( 'Error Limpiando el COM Error:' ,'',.01 )
endif
cBlock=space(702)
if MsgYesno('Desea salir','Atencion')
return nil
endif
enddo
RETURN( .t. )
le quitas el closecomm() que debe ir es cuando vas a cerrar por completo el programa
recomendación puedes usar el FlushComm( gnComm, 1 ) para que limpie la cola de recepción.
Eso sirve bien para balanzas, abrir gavetas, llamadas todo lo relacionado con puerto
Ing. Luis Duque - Venezuela
Una solución es la siguiente
al principio del programa abres el puerto utilizando las mismas funciones con sus respectivas validaciones como lo estas haciendo
Function Main
nCommB := OpenComm( )
BuildCommDcb()
SetCommState( )
.
. llamado de Funciones
.
closecomm()
Primero que no estas abriendo y cerrando el puerto cada vez que estas registrando una llamada y segundo te evitas el error del SetCommState( )
dejas la misma función sin la parte de abrir y cerrar los puerto
function l fReadPort
cBlock=space(702)
*nTry=0
*?? 'antes de do'
do while .T.
do while .T. //nTry<10 // can remove this nTry if not applicable
if ( nBytes := readComm( gnComm, @cBlock) ) > 0
msgwait('Llamada a ingresado..','',2)
?? cblock
exit
else
msgwait('Esperando llamada.... ','',1)
endif
enddo
numero := substr(cBlock,47,10)
*?? numero
*Lector() //*/* Lueog lo procesamos.
*graba_llamada(numero)
*numero := space(8)
if FlushComm( gnComm, 0 ) != 0
nError = GetCommError( gnComm )
Msgwait( 'Error Limpiando el COM Error:' ,'',.01 )
endif
cBlock=space(702)
if MsgYesno('Desea salir','Atencion')
return nil
endif
enddo
RETURN( .t. )
le quitas el closecomm() que debe ir es cuando vas a cerrar por completo el programa
recomendación puedes usar el FlushComm( gnComm, 1 ) para que limpie la cola de recepción.
Eso sirve bien para balanzas, abrir gavetas, llamadas todo lo relacionado con puerto
Ing. Luis Duque - Venezuela
Fivewin 16.11
Harbour 3.2.0
Visual Studio 2015 community
MariaDb/MySql
Ing. MSc. Luis Duque
http://www.accasoft.net
Harbour 3.2.0
Visual Studio 2015 community
MariaDb/MySql
Ing. MSc. Luis Duque
http://www.accasoft.net
Re: CAPTURAR LAMADA DE CENTRAL TELEFONICA
Luis Muchas gracias
voy a probar y comunico los resultados
voy a probar y comunico los resultados
Saludos
Oscar
Fwh 10.4, bcc55
Oscar
Fwh 10.4, bcc55