Problema al leer puerto com con un lector de tags

Post Reply
User avatar
PP1963
Posts: 19
Joined: Sat Oct 24, 2009 11:55 am
Location: Murcia - España

Problema al leer puerto com con un lector de tags

Post by PP1963 »

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: Select all


#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.
User avatar
karinha
Posts: 4882
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Problema al leer puerto com con un lector de tags

Post by karinha »

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

Saludos.
João Santos - São Paulo - Brasil
User avatar
PP1963
Posts: 19
Joined: Sat Oct 24, 2009 11:55 am
Location: Murcia - España

Re: Problema al leer puerto com con un lector de tags

Post by PP1963 »

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.
User avatar
karinha
Posts: 4882
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Problema al leer puerto com con un lector de tags

Post by karinha »

Hola,

Dificil, podrias muestrar via imagenes, porfa?

Saludos.
João Santos - São Paulo - Brasil
User avatar
PP1963
Posts: 19
Joined: Sat Oct 24, 2009 11:55 am
Location: Murcia - España

Re: Problema al leer puerto com con un lector de tags

Post by PP1963 »

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

Re: Problema al leer puerto com con un lector de tags

Post by Antonio Linares »

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: Select all

#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
User avatar
PP1963
Posts: 19
Joined: Sat Oct 24, 2009 11:55 am
Location: Murcia - España

Re: Problema al leer puerto com con un lector de tags

Post by PP1963 »

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.
Post Reply