FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Problema al leer puerto com con un lector de tags
Posts: 22
Joined: Sat Oct 24, 2009 11:55 AM
Problema al leer puerto com con un lector de tags
Posted: Tue Nov 17, 2009 08:42 PM
Buenas a todos.

Mi proble es el siguiente: Tengo un lector de tags (las tarjetitas de los autobuses) conectado a COM2 que escanea los mismos varias veces cada vez que se pasa. Cuando se pasa, debe leer el codigo y meterlo en una base de datos con un solo campo que recoge la lectura completa.

El codigo que manda es el siguiente: aa00058001b3586801004900020128253db7.

Cuando lo lee, me general dos registros. uno con: a y otro con el resto: a00058001b3586801004900020128253db7

Se que tengo algo mal en el codigo pero no se que es. Adjunto codigo que en la funcion BytesAtPort() es donde recoge los datos del puerto COM2.

Muchas gracias de antemano.

Code (fw): Select all Collapse
#include "FiveWin.ch"


function Main()

   local oDlg, nComm := InitComm()

   DEFINE DIALOG oDlg

   oDlg:bCommNotify = { | nComm, nStatus | BytesAtPort( nComm, nStatus ) }

   ACTIVATE DIALOG oDlg ;
      ON INIT EnableCommNotification( nComm, oDlg:hWnd, 20, 20 )

   CloseComm( nComm )

return nil

function InitCOMM()

   local cDcb, nError, nBytes
   local nComm := OpenComm( "COM2", 1024, 128 )

   if ! BuildCommDcb( "COM2:9600,n,8,1", @cDcb )
      MsgStop( "Error BUILD!" )
      return .f.
   endif

   #ifdef __CLIPPER__
      if ! SetCommState( cDcb )
   #else
      if ! SetCommState( nComm, cDcb )
   #endif
      MsgStop( "Error SETCOMM!" )
      return .f.
   endif

return nComm

function BytesAtPort( nComm, nStatus )

   local cBuffer := Space(256)
   local oLeido


   ReadComm( nComm, @cBuffer )

   oLeido:=AllTrim( cBuffer )
   oLeido = STRTRAN( oLeido, CHR( 13 ), "" )
   oLeido = STRTRAN( oLeido, CHR( 10 ), "" )

   msgwait('Esperando mas . . .','',1)

   USE CCHIP
   APPEND BLANK
   REPLACE CCHIP->CHIP WITH oLeido

                                        

return nil
La perseverancia es la virtud de los que llegan a la meta.
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Problema al leer puerto com con un lector de tags
Posted: Wed Nov 18, 2009 10:51 AM

Hola, Cual és la marca del lector, AT&T ??

Saludos.

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 22
Joined: Sat Oct 24, 2009 11:55 AM
Re: Problema al leer puerto com con un lector de tags
Posted: Wed Nov 18, 2009 11:29 AM

No tiene marca, es un diseño especifico, la lectura es de tags IP-X A 6.8 GH. Lo que necesito es que al pasarlo,independientemente de que lo lea 1 ó 20 veces, que lo coja y lo meta como registro en una base de datos.

Gracias.

La perseverancia es la virtud de los que llegan a la meta.
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Problema al leer puerto com con un lector de tags
Posted: Wed Nov 18, 2009 12:35 PM

Hola,

Dificil, podrias muestrar via imagenes, porfa?

Saludos.

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 22
Joined: Sat Oct 24, 2009 11:55 AM
Re: Problema al leer puerto com con un lector de tags
Posted: Wed Nov 18, 2009 04:55 PM

Realmente el diseño es como un paquete de tabaco de tamaño y una conexion USB que se instala como puerto serie (COM1, COM2, ETC...). Lo unico que necesito es coger las lecturas que son como he puesto en el primer post y pasarlas a registro, con esto tengo el problema solucionado.

Gracias

José García

La perseverancia es la virtud de los que llegan a la meta.
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Problema al leer puerto com con un lector de tags
Posted: Wed Nov 18, 2009 09:48 PM
Nicolas,

No deberias usar ese MsgWait() ahi.

Debes dejar que te llegue el evento hasta que se complete la longitud de bytes que esperas, algo asi:
Code (fw): Select all Collapse
#include "FiveWin.ch"

function Main()

   local oDlg, nComm := InitComm()

   DEFINE DIALOG oDlg

   oDlg:bCommNotify = { | nComm, nStatus | BytesAtPort( nComm, nStatus ) }

   ACTIVATE DIALOG oDlg ;
      ON INIT EnableCommNotification( nComm, oDlg:hWnd, 20, 20 )

   CloseComm( nComm )

return nil

function InitCOMM()

   local cDcb, nError, nBytes
   local nComm := OpenComm( "COM2", 1024, 128 )

   if ! BuildCommDcb( "COM2:9600,n,8,1", @cDcb )
      MsgStop( "Error BUILD!" )
      return .f.
   endif

   #ifdef __CLIPPER__
      if ! SetCommState( cDcb )
   #else
      if ! SetCommState( nComm, cDcb )
   #endif
      MsgStop( "Error SETCOMM!" )
      return .f.
   endif

return nComm

function BytesAtPort( nComm, nStatus )

   local cBuffer := Space( 256 )

   static cLeido := ""

   ReadComm( nComm, @cBuffer )

   cBuffer = StrTran( cBuffer, Chr( 13 ), "" )
   cBuffer = StrTran( cBuffer, Chr( 10 ), "" )
   cLeido += AllTrim( cBuffer )

   if Len( cLeido ) == 36 // Es esta la longitud completa a leer ? 
      USE CCHIP
      APPEND BLANK
      REPLACE CCHIP->CHIP WITH cLeido
      cLeido = ""
   endif
                                       
return nil
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 22
Joined: Sat Oct 24, 2009 11:55 AM
Re: Problema al leer puerto com con un lector de tags
Posted: Thu Nov 19, 2009 02:04 PM

Funciona perfectamente Antonio.

Muchas gracias y muy agradecido.

José García Nicolás :D :D :D :D

La perseverancia es la virtud de los que llegan a la meta.

Continue the discussion