FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Error sobre una bascula (SOLUCIONADO)
Posts: 257
Joined: Mon Jun 10, 2013 06:40 PM
Error sobre una bascula (SOLUCIONADO)
Posted: Wed Jun 01, 2016 03:37 PM
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 (fw): Select all Collapse
    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.
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Error sobre una bascula
Posted: Wed Jun 01, 2016 04:15 PM

Poste el ERROR.LOG.

Que usas HBCOMM.LIB?

Saludos.

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 257
Joined: Mon Jun 10, 2013 06:40 PM
Re: Error sobre una bascula
Posted: Wed Jun 01, 2016 06:29 PM

Esta es la imagen : me dice que dejo de funcionar

Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Error sobre una bascula
Posted: Wed Jun 01, 2016 06:48 PM

Cual tu version de Fivewin? Usas el ERRSYSW.PRG original de tu version ó usas una más vieja(antigua) de una version inferior?

Saludos.

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Error sobre una bascula
Posted: Wed Jun 01, 2016 06:57 PM

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-&gt;COMANDO)) //aquimando una &quot;P&quot;
IF nBytes &lt;= 0
    RETURN
ENDIF   
IF FlushComm(nComm,0) != 0
    RETURN 
ENDIF   
ReadComm( nComm, @cBuffer )   
IF Empty(cBuffer) .OR. Len(AllTrim(cBuffer)) &lt;= 0 .OR. AllTrim(cBuffer) = &quot;kg&quot;      
    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

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 257
Joined: Mon Jun 10, 2013 06:40 PM
Re: Error sobre una bascula
Posted: Thu Jun 02, 2016 03:00 PM

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.

Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Error sobre una bascula
Posted: Thu Jun 02, 2016 03:14 PM
Internta asi, antes del DEFINE DIALOG...

Code (fw): Select all Collapse
  Define Timer oTimer INTERVAL 500 Action LecturaPto1()


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

Saludos
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Error sobre una bascula
Posted: Thu Jun 02, 2016 03:16 PM
Mira se ejiste una funcion equivalente del fivewin asi:

Code (fw): Select all Collapse
IF !ISWORKING(nComm)
    MsgStop( "Porta do Leitor Desconectada! ",
             "Erro Ao Tentar Abrir a Porta Serial " )
    RETURN( .T. )
ENDIF
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 257
Joined: Mon Jun 10, 2013 06:40 PM
Re: Error sobre una bascula
Posted: Thu Jun 02, 2016 04:27 PM

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.

Posts: 632
Joined: Tue Dec 12, 2006 07:34 PM
Re: Error sobre una bascula (SOLUCIONADO)
Posted: Fri Jun 03, 2016 07:09 PM
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 (fw): Select all Collapse
    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

Continue the discussion