none
Escritura y Lectura constante por el puerto serie RRS feed

  • Pregunta

  • Hola amigos!

            Estoy haciendo un pequeño programa con Visual Basic .NEt para comunicarme con un lector de tarjetas rfid por el puerto serie.(rs232). Soy bastante nuevo con Visual Basic.

           Le envio comandos definidos en formato hexadecimal

    Por ejemplo para leer una tarjeta envio el siguiente BYTE al lector :   A0

    Y recibo en un textbox la respuesta del lector con el codigo de la tarjeta  :  00 04 FF E2 F1 0A 5C

           Ahora bien , mi idea es no tener que tener un boton que envie el comando.Es decir en forma manual como lo tengo hecho.Sino que envie siempre y lea siempre. Se puede?

           Por ejemplo una persona se acerca al lector y este me devuelve el codigo de la tarjeta. Despues llega otra persona con su tarjeta y el lector lo lee y me envia el codigo al textbox. Es decir que el lector esté siempre atento a recibir tarjetas.

    Intenté con un loop infinito (un while 1 )  y no me funcionó es decir se congeló la aplicacion.

    Para leer tengo que mandar la orden .Luego de ello recibo respuesta.

    Agradeceria infinitamente si me pudiesen orientar ya que he estado estas ultimas noches casi sin dormir tratando de solucionar el problema.

    Muchas gracias!!!







    sábado, 24 de noviembre de 2007 18:40

Todas las respuestas

  • Se puede hacer de diferentes formas... te puedo sugerir una, pero no conociendo el protocolo de las RFID se hace dificil.

     

    MiCOM1 = New SerialPort("COM1", "19200")

    MiCOM1.Open()

    'Definir eventos al recibir datos

    AddHandler MiCOM1.DataReceived, AddressOf RecibirdeCOM1

    '

    'Añadir al listbox, cada vez que recibimos un caracter 13 por COM1

    Private Sub RecibirdeCOM1(ByVal sender As Object, ByVal e As SerialDataReceivedEventArgs)

        RecibidosCOM1 += MiCOM1.ReadExisting

        If RecibidosCOM1.IndexOf(Chr(Keys.Enter)) > -1 Then

            Me.Invoke(New ProcesarCOM1(AddressOf RecepcionesdeCOM1))

            RecibidosCOM1 = ""  'Borrar datos recibidos

        End If

    End Sub

     

    en este caso cada vez que se reciba el caracter 13, la trama completa estara asignada a la variable "RecibidosCOM1".. en tu caso deberemos adecuarlo a la longitud o caracter de fin.

     

    En cuanto a leerla automaticamente... deberias lanzar una MICOM1.Write(&HA0) disparado desde un timer con la cadencia de segundos que consideres adecuada, cada 10,20...30 segundos

     

    Me gustaria saber si puedes enviarme algun link sobre esas etiquetas... pues estoy interesado.

    Saludos,

    Pep Lluis,

     

    domingo, 25 de noviembre de 2007 9:53
    Moderador
  • Hola PepLLuis

    Gracias por responder.Voy a probar como me va con el codigo .

    Los lectores tienen un microcontrolador que se comunican al PC tipicamente con 9600 baudios,Parity none, start bit 1,stop bit 1. No puedo acceder al microcontrolador con alguna API. Sino que debo hacerlo mediante comandos hexadecimales.

    Te dejo un link con el lector rfid : http://atmel.com/dyn/resources/prod_documents/doc4805.pdf
    Y como aparece en ese documento el puerto serial es la unica forma para comunicarse.

    Puedo lanzar MICOM1.Write(&HA0)  cada  0.5 milisegundos? .  O tengo que tener en cuenta el tiempo de respuesta  del microcontrolador con  esos 9600 baudios?

    Agradecido de alguna respuesta
    Saludos!!!
    Fernando

    PD:
    Sobre las etiquetas o tarjetas : http://atmel.com/products/securerf/
                                                  http://www.ti.com/rfid/shtml/rfid.shtml
    domingo, 25 de noviembre de 2007 16:05
  • Gracias por los enlaces...

    En cuanto a lanzar cada 0.5 milisegundos.. supongo que te referieres a 500 milisegundos o sea 1/2 segundo, en ese caso la respuesta seria que es razonable. Ten en cuenta que en una comunicacion bidrireccional tipica estamos hablando de 50 milisegundos entre envio/recepcion.

     

    Suerte!

    Pep Lluis,

     

     

    domingo, 25 de noviembre de 2007 17:37
    Moderador
  • Hola Pep Lluis

     

    Tengo una aplicacion utilizando comunicacion puertos seriales, programo con C#.Net 2005, cuando envio el Caracter ¡ ,  CHR(161) , o el  CHR(241), recibo en el Hypeterminal del sistema el caracter  ? ,  Sabes que podria ser?, a lo que he encontrado creo es problema del lenguaje, algo como que no todos los caracteres del Lenguaje de programacion son compatibles con los del sistema operativo.....

     

    Espero me puedas o puedan ayudarme ,de antemano muchas gracias y Dios los bendiga.

     

    Lorena.

    sábado, 8 de noviembre de 2008 0:18
  • Hola Lorena,

    En situaciones el HyperT no visualiza caracteres de la segunda tabla ASCII (128-256), aunque tambien es cierto que dependiendo de la codificacion quizas no los estemos enviando.

    Sigue este articulo y cuentame mas.

    http://msmvps.com/blogs/peplluis/archive/2008/10/15/system-io-ports-serialport-conversiones-y-codificaciones.aspx

     

    Saludos,

    Pep Lluis,

     

    domingo, 23 de noviembre de 2008 1:21
    Moderador