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
como obtener la lectura del buffer en COM
- Antonio Linares
- Site Admin
- Posts: 42425
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Has thanked: 15 times
- Been thanked: 48 times
- Contact:
Prueba asi:
Code: Select all | Expand
for n = 1 to Len( cBuffer )
MsgInfo( Asc( SubStr( cBuffer, n, 1 ) ) )
next
Ahora Si funciono-
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. )
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. )
- Antonio Linares
- Site Admin
- Posts: 42425
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Has thanked: 15 times
- Been thanked: 48 times
- Contact: