como obtener la lectura del buffer en COM

como obtener la lectura del buffer en COM

Postby busmatic » Thu Sep 11, 2008 12:29 am

Amigos, va de nuevo

Miren tengo un lector de codigos en 2D, actualmente estoy conectando al com1 y lee perfectamente, y el tamano de la lectura tambien es de 702 nBytes.
Perfecto.

El asunto es que tengo que cargar en un variable la lectura del codigo de 2D, para procesarla, pero no se como hacerlo o algo esta mal pues el tamaño de la lectuta bytes es la correcta, pero no se como cargar esa informacion a un avariable.

estoy usando lo siguiente

FUNCTION leer_bloque()

MsgInfo( "Proceda a leer ahora" )
nComm:= OpenComm("COM1" , 1024,128)
cBuffer:=Space(702)
nBytes := ReadComm (nComm,@cBuffer)
?? cBuffer

RETURN

Pero solo un caracter logro cargar, es aqui donde las ideas podrian ayudar o algo estoy haciendo mal.

Abajo pondo la palicacion que tome de foro.

Graxias desde YA.
Oscar chacon Orozco
Busmatic de CR


//**********
bajado del Foro
//***********

#include "Fivewin.ch"

FUNCTION abrirport
LOCAL IdPort,cDcb,nError
IdPort := OpenComm("COM1",1024,1024)
IF IdPort <= 0
nError = GetCommError( IdPort)
MsgInfo( "Error al abrir: " + Str( nError ) )
ELSE
MsgRun("Puerto abierto como " + STR(IdPort))
ENDIF
IF ! BuildCommDcb("COM1"+":9600,n,8,1" , @cDcb)
nError = GetCommError( IdPort)
MsgInfo( "Error al Configurar: " + Str( nError ) )
RETURN 0
ELSE
MsgRun("Puerto Configurado")
ENDIF

IF ! SetCommState( IdPort, cDcb )
nError = GetCommError( IdPort)
MsgInfo( "Error al setear: " + Str( nError ) )
RETURN 0
ELSE
MsgRun("Puerto Seteado")
ENDIF

leer_bloque()

if ! CloseComm()
nError = GetCommError( "COM1" )
MsgInfo( "Error cerrando puerto: " + Str( nError ) )
endif

QUIT
RETURN IdPort


FUNCTION leer_bloque()

MsgInfo( "Proceda a leer ahora" )
nComm:= OpenComm("COM1" , 1024,128)
cBuffer:=Space(702)
nBytes := ReadComm (nComm,@cBuffer)

?? cBuffer


RETURN
User avatar
busmatic
 
Posts: 51
Joined: Fri Jun 30, 2006 6:56 pm

Postby Antonio Linares » Thu Sep 11, 2008 8:02 am

Prueba asi:

Code: Select all  Expand view  RUN
for n = 1 to Len( cBuffer )
   MsgInfo( Asc( SubStr( cBuffer, n, 1 ) ) )
next
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42161
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Ahora Si funciono-

Postby busmatic » Mon Sep 15, 2008 3:03 am

Algunos lectores laser funcionan estrañamente diferente a otros dijo PEROCILCLES,pero la manera que que aveces hacemos las cosas aunque paresca logico nunca es acertado.

Usando el sentido comun, determine que casi todos los ejempos que habien el el pos leian examente lo mismo, aveces mas carateres o aveces menos carateres.

Encontre este rutina , que trabaja de mil maravillas.
De echo la prove con otros 5 lectores de la famalia Symbol, Metrologic y donde este tienen capacidad de leer codigos de barras , codigos, OCR , y codigos 1, y 2 D y trabaja de perfectamente.

Ahora es importante recalcar que para lecturas de en OCR y 1,2 D repentinamente debes de hacer algunos ajustes en el las parametrizaciones de mismo lector porque los codigo 1 y 2 D se traen las suyas.

Bien Aqui esta.

#include "fiveWin.ch"

function fReadPort

local cDcb, lError, nError

cErrCode := space( 15 )

if !( gnComm := OpenComm( 'COM1', 1024, 16 ) ) == 0
if !(BuildCommDcb( "COM1:9600,E,8,1", @cDcb ) .and. SetCommState( @cDcb ) )
nError := GetCommError( gnComm, @cErrCode )
MsgAlert( "Error No se pudo abrir Puerto "+ str( nError ) + CRLF + cErrCode)
RETURN( .f. )
endif
endif

cBlock=space(702)
nTry=0
do while nTry<10 // can remove this nTry if not applicable
if ( nBytes := readComm( gnComm, @cBlock) ) > 0
msgwait('Cedula ha sido Leida , espere'+str(nTry,5),'',.5)
exit
else
nTry++
msgwait('Leyendo Cedula ... Ahora.. '+str(nTry,5),'',1)
endif
if nTry==10
Quit
endif
enddo

MemoWrit( "ced.txt",cBlock) --: grabamos la lectura binaria en un archivo .TXT

Lector() */* Lueog lo procesamos.




if FlushComm( gnComm, 0 ) != 0
nError = GetCommError( gnComm )
Msgwait( 'Error Limpiando el COM Error:' ,'',.01 )
endif

if ! CloseComm( gnComm )
nError = GetCommError( gnComm )
Msgwait( 'No Pude cerrar el com Error: ' ,'',.01 )
endif

RETURN( .t. )
User avatar
busmatic
 
Posts: 51
Joined: Fri Jun 30, 2006 6:56 pm

Postby Antonio Linares » Mon Sep 15, 2008 9:52 am

Gracias por compartirlo :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42161
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 44 guests