Problema al leer puerto com con un lector de tags

Problema al leer puerto com con un lector de tags

Postby PP1963 » Tue Nov 17, 2009 8: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: Select all  Expand view


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

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

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

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

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

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

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

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

Postby PP1963 » Wed Nov 18, 2009 4: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.
User avatar
PP1963
 
Posts: 22
Joined: Sat Oct 24, 2009 11:55 am
Location: Murcia - España

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

Postby Antonio Linares » Wed Nov 18, 2009 9: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: Select all  Expand view
#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
Antonio Linares
Site Admin
 
Posts: 41436
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

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

Postby PP1963 » Thu Nov 19, 2009 2: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.
User avatar
PP1963
 
Posts: 22
Joined: Sat Oct 24, 2009 11:55 am
Location: Murcia - España


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 38 guests