FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour bCommNotify Problem
Posts: 1286
Joined: Mon Feb 25, 2008 02:54 PM
bCommNotify Problem
Posted: Tue Jan 28, 2014 12:42 PM
Sr. Antonio,

percebi um comportamento diferente do METHOD:

METHOD CommNotify( nDevice, nStatus ) CLASS TWindow

Ao ler um c贸digo de barras por um leitor serial, parece que o methodo esta chamando dois EVENTOS e n茫o um como nas vers玫es anteriores.


(FONTE1) Exemplo de c贸digo com problema:


#include "FiveWin.ch"

static oWnd, nCom

//----------------------------------------------------------------------------//

function Main()
DEFINE WINDOW oWnd TITLE "Serial Test"
ACTIVATE WINDOW oWnd maximized on init(Serial())
IF nCom >= 0; CLOSECOMM( nCom ); ENDIF
return nil

//----------------------------------------------------------------------------//

static function CheckSerial()

local cRetorno:=space(200), nBytesRead

FlushComm( nCom, 0 )

SysWait( 0.4 )

nBytesRead := ReadComm( nCom, @cRetorno )

? cRetorno

return nil

/**********************************************************/
static function Serial()

LOCAL cDcb

BEGIN SEQUENCE
nCom := OPENCOMM( "COM1", 16384, 16384 )

IF nCom < 0
BREAK
ENDIF

BUILDCOMMDCB( "COM1:9600,N,8,1", @cDcb )

IF !SETCOMMSTATE( nCom, cDcb )
BREAK
ENDIF

EnableCommNotification( nCom, oWnd:hWnd, 1, -1 )

oWnd:bCommNotify = { | nCom | CheckSerial()}

RECOVER
nCom = -1
END SEQUENCE
RETURN






(FONTE2) Exemplo de c贸digo adaptado para poder funcionar corretamente:

#include "FiveWin.ch"

static oWnd, oTmr, nCom

//----------------------------------------------------------------------------//

function Main()

DEFINE WINDOW oWnd TITLE "Serial Test"
DEFINE TIMER oTmr INTERVAL 1000 ACTION CheckSerial() OF oWnd
ACTIVATE WINDOW oWnd maximized on init(oTmr:Deactivate(),Serial())
IF nCom >= 0; CLOSECOMM( nCom ); ENDIF

return nil

//----------------------------------------------------------------------------//
static function CheckSerial()

local cRetorno:=space(200), nBytesRead

oTmr:DEACTIVATE()

FlushComm( nCom, 0 )

SysWait( 0.4 )

nBytesRead := ReadComm( nCom, @cRetorno )

? cRetorno

return nil

/**********************************************************/
static function Serial()

LOCAL cDcb

BEGIN SEQUENCE
nCom := OPENCOMM( "COM1", 16384, 16384 )

IF nCom < 0
BREAK
ENDIF

BUILDCOMMDCB( "COM1:9600,N,8,1", @cDcb )

IF !SETCOMMSTATE( nCom, cDcb )
BREAK
ENDIF

EnableCommNotification( nCom, oWnd:hWnd, 1, -1 )

oWnd:bCommNotify = { | nCom | otmr:activate() }

RECOVER
nCom = -1
END SEQUENCE
RETURN




Quando CheckSerial() 茅 chamado da BCOMMNOTIFY(FONTE1) parece que dois eventos s茫o disparados. :-)
Quando CheckSerial() 茅 chamado diretamente(FONTE2) apenas um evento 茅 disparado. :-)
ubiratanmga@gmail.com

FWH24.04
BCC7.3
HARBOUR3.2
xMate
Pelles麓C
TDolphin
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: bCommNotify Problem
Posted: Tue Jan 28, 2014 02:30 PM

Como llegas a la conclusi贸n de que se llama dos veces ?

Tienes alg煤n log de error ?

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1286
Joined: Mon Feb 25, 2008 02:54 PM
Re: bCommNotify Problem
Posted: Tue Jan 28, 2014 03:36 PM

Senhor Antonio,

O c贸digo de barras chega dividido, ex:

7894900111002

1 evento: 78949001
2 evento: 11002

Antes chegava normal.

ubiratanmga@gmail.com

FWH24.04
BCC7.3
HARBOUR3.2
xMate
Pelles麓C
TDolphin
Posts: 1286
Joined: Mon Feb 25, 2008 02:54 PM
Re: bCommNotify Problem
Posted: Wed Jan 29, 2014 08:00 PM

UP!

ubiratanmga@gmail.com

FWH24.04
BCC7.3
HARBOUR3.2
xMate
Pelles麓C
TDolphin
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: bCommNotify Problem
Posted: Wed Jan 29, 2014 10:10 PM

Que versi贸n de Harbour y FWH usas ahora y cual usabas antes ?

Cuando dices en dos eventos, te refieres a que el resultado correcto es ambos, asi ?

1 evento: 78949001 + 2 evento: 11002

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1286
Joined: Mon Feb 25, 2008 02:54 PM
Re: bCommNotify Problem
Posted: Thu Jan 30, 2014 10:02 AM

FWH1308 XHARBOUR 1.2.1 (6406)

Esperava receber o c贸digo de barras: 7894900111002

poderia vir todo o c贸digo de uma vez.

ou

poderia vir em peda莽os, mais no mesmo evento.

Mais parece q BCOMMNOTIFY chama duas vezes CheckSerial() e n茫o apenas uma.

ex:
na primeira: checkserial() 78949001
na segunda: checkserial() 11002

ubiratanmga@gmail.com

FWH24.04
BCC7.3
HARBOUR3.2
xMate
Pelles麓C
TDolphin

Continue the discussion