bCommNotify Problem

bCommNotify Problem

Postby MGA » 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
MGA
 
Posts: 1252
Joined: Mon Feb 25, 2008 2:54 pm
Location: Brasil/PR/Maringá

Re: bCommNotify Problem

Postby Antonio Linares » Tue Jan 28, 2014 2: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
User avatar
Antonio Linares
Site Admin
 
Posts: 42099
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: bCommNotify Problem

Postby MGA » Tue Jan 28, 2014 3: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
MGA
 
Posts: 1252
Joined: Mon Feb 25, 2008 2:54 pm
Location: Brasil/PR/Maringá

Re: bCommNotify Problem

Postby MGA » Wed Jan 29, 2014 8:00 pm

UP!
ubiratanmga@gmail.com

FWH24.04
BCC7.3
HARBOUR3.2
xMate
Pelles´C
TDolphin
MGA
 
Posts: 1252
Joined: Mon Feb 25, 2008 2:54 pm
Location: Brasil/PR/Maringá

Re: bCommNotify Problem

Postby Antonio Linares » 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
User avatar
Antonio Linares
Site Admin
 
Posts: 42099
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: bCommNotify Problem

Postby MGA » 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
MGA
 
Posts: 1252
Joined: Mon Feb 25, 2008 2:54 pm
Location: Brasil/PR/Maringá


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 54 guests