Principales respuestas
serialport no responde

Pregunta
-
estoy haciendo un proyecto con RFID comunicandome con el puerto serial
mi problema es que el lector le tengo que mandar lo siguiente (enter 001401 enter) para que lea y me mande el ID del dispositivo que registro
cuando lo pruebo con el hyperterminal escribo la secuencia y me regresa el ID pero cuando lo hago desde mi programa no me responde nada
aqui esta el codigo
=============================================================================
Private
Sub puertoRFID_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs)label1.text=ID
==============================================================================
ojala me pudieran ayudar
gracias
- Cambiado Toni Recio [Techdencias] martes, 26 de mayo de 2009 9:47 ([Loc]From:Lenguaje VB.NET)
Respuestas
-
Hola Cary!!
Aqui tienes una posible solucion... o al menos eso espero
'Definir objetos de la aplicacion
Private MiCOM1 As SerialPort 'Puertos serie
Private lbxRecepcion As New ListBox 'ListBox recepcion
Private tmrTransmision As New Timer 'Temporizador transmision
Delegate Sub ProcesarCOM1() 'Delegados proceso
Private RecibidosCOM1 As String = "" 'Recepcion de datos
'
'
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Texto Incial del list box
lbxRecepcion.Items.Add("...Comunicacion con el Rfid")
'Anadir control al form
Me.Controls.AddRange(New Control() {lbxRecepcion})
Me.Text = "Ejemplo: COM <-> Rfid"
'Constructores para el puerto de comunicaciones
MiCOM1 = New SerialPort("COM1")
MiCOM1.Open()
'Definir eventos al recibir datos
AddHandler MiCOM1.DataReceived, AddressOf RecibirdeCOM1
'acoplar listbox
lbxRecepcion.Dock = DockStyle.Fill
'inicializar temporizador
tmrTransmision.Enabled = True
tmrTransmision.Interval = 3000 'Cada tres segundos
AddHandler tmrTransmision.Tick, AddressOf EnviarACOM1
End Sub
'
'Enviamos una peticion al Rfid cada 3 segundos
Private Sub EnviarACOM1(ByVal sender As Object, ByVal e As System.EventArgs)
lbxRecepcion.Items.Add("<Peticion >" + System.DateTime.Now)
MiCOM1.Write(Chr(13) & "001401" & Chr(13))
End Sub
'
'Añadir una linea al listbox al recibir 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
'Añadir los datos recibidos por COM1 al listbox
Private Sub RecepcionesdeCOM1()
lbxRecepcion.Items.Add("<Respuesta>" + RecibidosCOM1)
End Sub
;-))
Saludos,
Pep Lluis
Todas las respuestas
-
de hecho es todo el codigo que tengo, pero no me responde. tengo un programa monitor de puertos y checo que si manda la instruccion pero el dispositivo no me responde.
me podrias informar algo de la seguridad a la que te refieres?
estoy trabajando sobre xp pro
gracias
-
Hola Cary!!
Aqui tienes una posible solucion... o al menos eso espero
'Definir objetos de la aplicacion
Private MiCOM1 As SerialPort 'Puertos serie
Private lbxRecepcion As New ListBox 'ListBox recepcion
Private tmrTransmision As New Timer 'Temporizador transmision
Delegate Sub ProcesarCOM1() 'Delegados proceso
Private RecibidosCOM1 As String = "" 'Recepcion de datos
'
'
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Texto Incial del list box
lbxRecepcion.Items.Add("...Comunicacion con el Rfid")
'Anadir control al form
Me.Controls.AddRange(New Control() {lbxRecepcion})
Me.Text = "Ejemplo: COM <-> Rfid"
'Constructores para el puerto de comunicaciones
MiCOM1 = New SerialPort("COM1")
MiCOM1.Open()
'Definir eventos al recibir datos
AddHandler MiCOM1.DataReceived, AddressOf RecibirdeCOM1
'acoplar listbox
lbxRecepcion.Dock = DockStyle.Fill
'inicializar temporizador
tmrTransmision.Enabled = True
tmrTransmision.Interval = 3000 'Cada tres segundos
AddHandler tmrTransmision.Tick, AddressOf EnviarACOM1
End Sub
'
'Enviamos una peticion al Rfid cada 3 segundos
Private Sub EnviarACOM1(ByVal sender As Object, ByVal e As System.EventArgs)
lbxRecepcion.Items.Add("<Peticion >" + System.DateTime.Now)
MiCOM1.Write(Chr(13) & "001401" & Chr(13))
End Sub
'
'Añadir una linea al listbox al recibir 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
'Añadir los datos recibidos por COM1 al listbox
Private Sub RecepcionesdeCOM1()
lbxRecepcion.Items.Add("<Respuesta>" + RecibidosCOM1)
End Sub
;-))
Saludos,
Pep Lluis
-
muchas gracias Pep Lluis y a ti tambien el bruno
todo me funciona prefecto con el ultimo ejemplo...de hecho ya lo tenia funcionando antes con un ejemplo de codigo de tu pagina pep Lluis...(la de los delegados)
gracias y espero que tambien les sirva a mucha mas gente este ejemplo
saludos
-
Hola:Puedes descargar el manual en pdf sobre VB y puerto serie.Saludo.
-
hola:
muy interesante su información, yo me encuentro realizando mi tesis con rfid pero me debo conectar a traves del puerto ethernet, pero tengo problemas realmente soy nueva en vb y no estoy muy clara si me pODRIAN ayudar estoy trabajando con vb 2008