FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Sr. Antonio - Ler COM !
Posts: 1286
Joined: Mon Feb 25, 2008 02:54 PM
Sr. Antonio - Ler COM !
Posted: Fri Dec 19, 2008 01:24 PM

Sr. Antonio, eu vinha utilizando sem problemas as funções do fivewin para ler a porta serial:

local cDcb, nBytes
local nComm := OpenComm( "COM1", 1024, 128 )
local nError,x,cmsg,CTES,cret,npos,cretbalan

if ! BuildCommDcb( "COM1:19200,n,8,1", @cDcb )
nError = GetCommError( nComm )
MsgInfo( "BuildCommDcb Error: " + Str( nError ) )
endif

if ! SetCommState( nComm, cDcb )
nError = GetCommError( nComm )
MsgInfo( "SetCommState Error: " + Str( nError ) )
endif

cretbalan:=space(250)
readcomm( nComm, @cretbalan )

if FlushComm( nComm, 0 ) != 0
nError = GetCommError( nComm )
MsgInfo( "FlushComm Error: " + Str( nError ) )
endif

if ! CloseComm( nComm )
nError = GetCommError( nComm )
MsgInfo( "CloseComm Error: " + Str( nError ) )
endif

Mais de uma hora para outra, ela passou a capturar os dados da porta COM1 pela metade:

HYPER TERMINAL = A0114499112255

FIVEWIN = A0114499

Sr Antonio, por favor, o que pode estar acontecendo?

:(

ubiratanmga@gmail.com

FWH24.04
BCC7.3
HARBOUR3.2
xMate
Pelles´C
TDolphin
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Sr. Antonio - Ler COM !
Posted: Fri Dec 19, 2008 02:04 PM
La función ReadComm() devuelve el número de bytes leidos. Puedes usar un bucle hasta que obtengas la cantidad de bytes esperada y considerar un posible timeout ó cantidad de intentos por si no llega la cantidad de bytes esperada.
while nTotal < nSize .and. nTimes < nValue
   nBytes = ReadComm( ... )
   nTotal += nBytes
   nTimes++
end
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Sr. Antonio - Ler COM !
Posted: Fri Dec 19, 2008 02:44 PM

SGS, seu LEITOR DE CODIGOS DE BARRAS, É UM AT&T??

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 58
Joined: Tue Mar 11, 2008 03:18 AM
Sr. Antonio - Ler COM !
Posted: Sat Dec 20, 2008 02:05 PM
Ex:
**********************
Function Busca_Peso(port,n)  // nos parametros vem o ID da porta mais o tamnho que deseja buscar, no seu caso (14) 
**********************
LOCAL bloque:= SPACE(n), nBytes
DO WHILE .t.
   nBytes := ReadComm( port,@bloque)
   IF nBytes >= n
      EXIT
   ENDIF
ENDDO
RETURN bloque
Posts: 1286
Joined: Mon Feb 25, 2008 02:54 PM
Sr. Antonio - Ler COM !
Posted: Mon Dec 22, 2008 10:12 AM

sygecom,

obrigado

ubiratanmga@gmail.com

FWH24.04
BCC7.3
HARBOUR3.2
xMate
Pelles´C
TDolphin
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Sr. Antonio - Ler COM !
Posted: Mon Dec 22, 2008 10:28 AM

SGS,

El código de sygecom sobreescribirá bytes que ya hayan sido leidos, puesto que sigue usando el mismo buffer para leer.

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1286
Joined: Mon Feb 25, 2008 02:54 PM
Sr. Antonio - Ler COM !
Posted: Mon Dec 22, 2008 11:32 AM

Obrigado Sr. Antonio!

ubiratanmga@gmail.com

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

Continue the discussion