Page 1 of 1

Error sobre una bascula (SOLUCIONADO)

PostPosted: Wed Jun 01, 2016 3:37 pm
by VitalJavier
Que tal compañeros
Les quería preguntar si a los que utilizan una bascula les ocurre esto:

- Al estar conectado por el puerto serial, inicia correctamente y todo funcióna
muy bien, pero después de 5 minutos me marca un error : APPCRASH

- Si tengo desconectada la bascula pero el cable conectado al PC no pasa nada
no me marca el error

Le pongo algo de mi fuente para que vean :
1.- Abro el puerto
2.- Meto en un timer el estar leyendo la pesada

Code: Select all  Expand view


    IF !AbrePto1()
        lPuerto := .F.
        _IdI := 106
    ELSE
        lPuerto := .T.
    ENDIF   

      Define Timer oTimer INTERVAL PARBASCULA->LECTURA Action LecturaPto1()

FUNCTION AbrePto1
    local nBytes,cDcb
    nComm := OpenComm(AllTrim(PARBASCULA->COM),AllTrim(PARBASCULA->ENTRADA),AllTrim(PARBASCULA->SALIDA))
    IF nComm <= 0
        nError = GetCommError( nComm )
        MiMsgStop( {"No se pudo abrir el puerto..."+ Str( nError )},"Alto!", , .T., 5)
        RETURN .F.
    ENDIF      
    cCad := AllTrim(PARBASCULA->COM)+":"+AllTrim(PARBASCULA->VELOCIDAD)+","+AllTrim(PARBASCULA->PARITY)+","+AllTrim(PARBASCULA->DATABITS)+","+AllTrim(PARBASCULA->STOPBIT)
    IF !BuildCommDcb( cCad, @cDcb )
        nError = GetCommError( nComm )
        MiMsgStop( {"No se pudo configurar el puerto..."+ Str( nError )},"Alto!", , .T., 5)
        RETURN .F.
    ENDIF
    IF !SetCommState(nComm,cDcb)
        nError = GetCommError( nComm )
        MiMsgStop( {"Error Al Setear el Puerto..."+ Str( nError )},"Alto!", , .T., 5)
        RETURN .F.
    ENDIF
RETURN .T.

FUNCTION LecturaPto1()
    Local cBuffer := Space( 30 )   
    nBytes := WriteComm(nComm,AllTrim(PARBASCULA->COMANDO)) //aquimando una "P"
    IF nBytes <= 0
        RETURN
    ENDIF  
    IF FlushComm(nComm,0) != 0
        RETURN
    ENDIF  
    ReadComm( nComm, @cBuffer )  
    IF Empty(cBuffer) .OR. Len(AllTrim(cBuffer)) <= 0 .OR. AllTrim(cBuffer) = "kg"     
        RETURN
    ENDIF       
   cBuffer := StrTran( cBuffer, CHR( 13 ), "" )
    cBuffer := StrTran( cBuffer, CHR( 10 ), CRLF )
    IF Empty(cBuffer) .OR. Len(AllTrim(cBuffer)) <= 0 .OR. AllTrim(cBuffer) = "kg"     
        RETURN
    ENDIF   
    nPunto := AT(".",cBuffer)
    IF nPunto = 0
        RETURN
    ENDIF   
    cBuffer := AllTrim(cBuffer)
    cBuffer := SubStr(cBuffer,1,AT(".",cBuffer)+3)
    nPesada := Val(AllTrim(cBuffer))
    IF nPesada = 0
        PONE_CEROS1()    // Este pone en pantalla unos ceros
    ELSE
        CalculaNum1(nPesada)   // Aquí pongo la pesada
    ENDIF   
RETURN

 


Ya le intente casi de todo y no logro quitar este error
si alguien ya lo libro me podrían echar un hilo

Gracias.

Re: Error sobre una bascula

PostPosted: Wed Jun 01, 2016 4:15 pm
by karinha
Poste el ERROR.LOG.

Que usas HBCOMM.LIB?

Saludos.

Re: Error sobre una bascula

PostPosted: Wed Jun 01, 2016 6:29 pm
by VitalJavier
Esta es la imagen : me dice que dejo de funcionar

Re: Error sobre una bascula

PostPosted: Wed Jun 01, 2016 6:48 pm
by karinha
Cual tu version de Fivewin? Usas el ERRSYSW.PRG original de tu version ó usas una más vieja(antigua) de una version inferior?

Saludos.

Re: Error sobre una bascula

PostPosted: Wed Jun 01, 2016 6:57 pm
by Antonio Linares
Prueba a usar una variable static para que esa función no se ejecute más de una vez:

FUNCTION LecturaPto1()
Local cBuffer := Space( 30 )

static lTrabajando := .F.

if ! lTrabajando
lTrabajando = .T.

nBytes := WriteComm(nComm,AllTrim(PARBASCULA->COMANDO)) //aquimando una "P"
IF nBytes <= 0
RETURN
ENDIF
IF FlushComm(nComm,0) != 0
RETURN
ENDIF
ReadComm( nComm, @cBuffer )
IF Empty(cBuffer) .OR. Len(AllTrim(cBuffer)) <= 0 .OR. AllTrim(cBuffer) = "kg"
RETURN
ENDIF
cBuffer := StrTran( cBuffer, CHR( 13 ), "" )
cBuffer := StrTran( cBuffer, CHR( 10 ), CRLF )
IF Empty(cBuffer) .OR. Len(AllTrim(cBuffer)) <= 0 .OR. AllTrim(cBuffer) = "kg"
RETURN
ENDIF
nPunto := AT(".",cBuffer)
IF nPunto = 0
lTrabajando = .F.
RETURN
ENDIF
cBuffer := AllTrim(cBuffer)
cBuffer := SubStr(cBuffer,1,AT(".",cBuffer)+3)
nPesada := Val(AllTrim(cBuffer))
IF nPesada = 0
PONE_CEROS1() // Este pone en pantalla unos ceros
ELSE
CalculaNum1(nPesada) // Aquí pongo la pesada
ENDIF

lTrabajando = .F.
endif
RETURN

Re: Error sobre una bascula

PostPosted: Thu Jun 02, 2016 3:00 pm
by VitalJavier
Joao, buen dia
Tengo la version de Septiembre de 2010, FWH + xHarbou
y se supone que trabajo con el original ERRSYSW.PRG

Antonio, buen dia.
ya le puse las condiciones que me marcas, pero si le pongo como me
dices ya no marca nada de pesada.

Donde puedo conseguir la librería HBCOMM.LIB para xharbou ??
para probar.

o Sera que le falta algo a la PC, alguna actualización ??

Saludos.

Re: Error sobre una bascula

PostPosted: Thu Jun 02, 2016 3:14 pm
by karinha
Internta asi, antes del DEFINE DIALOG...

Code: Select all  Expand view

  Define Timer oTimer INTERVAL 500 Action LecturaPto1()
 


HBCOMM.LIB esta en el directótio del xharbour\lib

Saludos

Re: Error sobre una bascula

PostPosted: Thu Jun 02, 2016 3:16 pm
by karinha
Mira se ejiste una funcion equivalente del fivewin asi:

Code: Select all  Expand view

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

Re: Error sobre una bascula

PostPosted: Thu Jun 02, 2016 4:27 pm
by VitalJavier
Joao, parece que ya funciono, ya lleva media hora funcionando
antes pasaban 5 minutos y tronaba

1.- Le puse el DEFINE timer (antes del define dialog)
2.- Le cambie la configuración del puerto "Control de Flujo : Xon/Xoff"

y ya esta funcionando, no se cual fue, el detalle que ya quedo (hasta ahorita)

Gracias por su ayuda.

Re: Error sobre una bascula (SOLUCIONADO)

PostPosted: Fri Jun 03, 2016 7:09 pm
by ACC69
VitalJavier wrote:Que tal compañeros
Les quería preguntar si a los que utilizan una bascula les ocurre esto:

- Al estar conectado por el puerto serial, inicia correctamente y todo funcióna
muy bien, pero después de 5 minutos me marca un error : APPCRASH

- Si tengo desconectada la bascula pero el cable conectado al PC no pasa nada
no me marca el error

Le pongo algo de mi fuente para que vean :
1.- Abro el puerto
2.- Meto en un timer el estar leyendo la pesada

Code: Select all  Expand view


    IF !AbrePto1()
        lPuerto := .F.
        _IdI := 106
    ELSE
        lPuerto := .T.
    ENDIF   

      Define Timer oTimer INTERVAL PARBASCULA->LECTURA Action LecturaPto1()

FUNCTION AbrePto1
    local nBytes,cDcb
    nComm := OpenComm(AllTrim(PARBASCULA->COM),AllTrim(PARBASCULA->ENTRADA),AllTrim(PARBASCULA->SALIDA))
    IF nComm <= 0
        nError = GetCommError( nComm )
        MiMsgStop( {"No se pudo abrir el puerto..."+ Str( nError )},"Alto!", , .T., 5)
        RETURN .F.
    ENDIF      
    cCad := AllTrim(PARBASCULA->COM)+":"+AllTrim(PARBASCULA->VELOCIDAD)+","+AllTrim(PARBASCULA->PARITY)+","+AllTrim(PARBASCULA->DATABITS)+","+AllTrim(PARBASCULA->STOPBIT)
    IF !BuildCommDcb( cCad, @cDcb )
        nError = GetCommError( nComm )
        MiMsgStop( {"No se pudo configurar el puerto..."+ Str( nError )},"Alto!", , .T., 5)
        RETURN .F.
    ENDIF
    IF !SetCommState(nComm,cDcb)
        nError = GetCommError( nComm )
        MiMsgStop( {"Error Al Setear el Puerto..."+ Str( nError )},"Alto!", , .T., 5)
        RETURN .F.
    ENDIF
RETURN .T.

FUNCTION LecturaPto1()
    Local cBuffer := Space( 30 )   
    nBytes := WriteComm(nComm,AllTrim(PARBASCULA->COMANDO)) //aquimando una "P"
    IF nBytes <= 0
        RETURN
    ENDIF  
    IF FlushComm(nComm,0) != 0
        RETURN
    ENDIF  
    ReadComm( nComm, @cBuffer )  
    IF Empty(cBuffer) .OR. Len(AllTrim(cBuffer)) <= 0 .OR. AllTrim(cBuffer) = "kg"     
        RETURN
    ENDIF       
   cBuffer := StrTran( cBuffer, CHR( 13 ), "" )
    cBuffer := StrTran( cBuffer, CHR( 10 ), CRLF )
    IF Empty(cBuffer) .OR. Len(AllTrim(cBuffer)) <= 0 .OR. AllTrim(cBuffer) = "kg"     
        RETURN
    ENDIF   
    nPunto := AT(".",cBuffer)
    IF nPunto = 0
        RETURN
    ENDIF   
    cBuffer := AllTrim(cBuffer)
    cBuffer := SubStr(cBuffer,1,AT(".",cBuffer)+3)
    nPesada := Val(AllTrim(cBuffer))
    IF nPesada = 0
        PONE_CEROS1()    // Este pone en pantalla unos ceros
    ELSE
        CalculaNum1(nPesada)   // Aquí pongo la pesada
    ENDIF   
RETURN

 


Ya le intente casi de todo y no logro quitar este error
si alguien ya lo libro me podrían echar un hilo

Gracias.



Hola buenas tardes Ing. VitalJavier, es muy interesante tu codigo fuente,me podria servir a futuro,sera que nos podrias compartir las funciones que faltan Pone_Ceros1() calculaNum1() y los que hagan faltan y que librerias enlazar .

Gracias Ing. VitalJavier te agradeceria mucho .

Saludos

Atte: Adrian C. C.
acc69@hotmail.com