Autor Tema: Serialport Visual Basic 2005 Express  (Leído 13744 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado FJPPitta

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 116
    • Mi pagina personal
Serialport Visual Basic 2005 Express
« en: 20 de Febrero de 2007, 00:43:18 »
como puedo leer datos en el visual basic, he tratado con el siguiente codigo pero me marca un error cuando le mando datos del pic.

Código: [Seleccionar]
   Private Sub serialport_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles serialport.DataReceived
        texto.AppendText(serialport.ReadExisting)
    End Sub

he buscado en ejemplos y todos marcan una funcion simlar lo que quiero es poner los datos que leo en una textbox, asi mismo poder tratarlos en formulas matematicas.

La linea que marca error es:

Código: [Seleccionar]
texto.AppendText(serialport.ReadExisting)
despues de que abro el puerto con
Código: [Seleccionar]
serialport.open()
tambien he abierto el puerto con:
Código: [Seleccionar]
My.Computer.Ports.OpenSerialPort("COM1", 57600, IO.Ports.Parity.None, 8, IO.Ports.StopBits.One)
pero no hace nada cuando le mando datos de mi pic
Que la fuerza te acompañe

Desconectado FJPPitta

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 116
    • Mi pagina personal
Re: Serialport Visual Basic 2005 Express
« Respuesta #1 en: 23 de Febrero de 2007, 02:44:24 »
me respondo a mi mismo, pues no se que sea pero en tres dias trate de usar el serialport y nada de nada. Mejor me mude con el viejo conocido VB6 y en dia y medio mi aplicacion ya estaba lista por completo.

asi que el VB 2005 esta bien pa bajo :( asi que le dire adios

Que la fuerza te acompañe

Desconectado Picavid

  • PIC12
  • **
  • Mensajes: 89
    • www.seguridomo.es
Re: Serialport Visual Basic 2005 Express
« Respuesta #2 en: 07 de Marzo de 2007, 05:15:55 »
Hola FJPPitta, yo me encuentro exactamente en la misma situación. VB lee los datos (los puedes ver si lo pones en un msgbox), pero no puedo trabajar con ellos. Del mismo modo entre comillas, puedes leerlos como binario o como carácter.

 Cuando intentas verlos en un cuadro de texto, te dice: "Operación no válida a través de subprocesos", y la solución pinta algo complicada. realmente VB 2005 tiene muchas diferencias respecto al 6, pero ahora que dispongo algo de tiempo seguiré intentándolo, ya que a pesar de estos inconvenientes tiene muchas otras ventajas. Espero poder "superarlo".

  Si lo consigo, lo cuento.

  Saludos.

Desconectado Picavid

  • PIC12
  • **
  • Mensajes: 89
    • www.seguridomo.es
Re: Serialport Visual Basic 2005 Express
« Respuesta #3 en: 07 de Marzo de 2007, 06:38:04 »
OK, solucionado. A mi forma de explicar, ya que no soy un experto:

  Desde un evento de SerialPort, no se puede ejecutar ningún proceso de otro control o clase. Debes capturar los datos en una variable y FUERA de esa rutina, puedes operar con ellos:

-------------
Private Sub SerialPort1_DataReceived (....

strRecepcion = SerialPort1.ReadExisting
MsgBox ("Se ha recibido: " & strRecepcion)

End Sub
---------

Ya después, puedes hacer lo que quieras con el string strRecepción, pero ya fuera del evento o función.

Por cierto, strRecepción hay que declararla al principio del código para que sea pública:

-------------
Public class frmCamara
...
Dim strRecepcion as String
...
Private Sub ...
--------------


Espero que no abandones!

Saludos.
« Última modificación: 07 de Marzo de 2007, 06:43:10 por Picavid »

Desconectado FJPPitta

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 116
    • Mi pagina personal
Re: Serialport Visual Basic 2005 Express
« Respuesta #4 en: 07 de Marzo de 2007, 21:28:58 »
En realidad ya casi lo abandono por que no pude hacer mucho y regrese a VB6 pero de todos modos quisiera probar con eso que comentas para transportar el codigo que tengo de VB6 a vB2005, espero no se me complique mucho, claro esta lo hare apenas tengo un poc de tiempo libre y posteare los resultados que obtenga aqui mismo.

Saludos y gracias por la respuesta.
FJPPitta
Que la fuerza te acompañe

Desconectado hammerEQ

  • PIC10
  • *
  • Mensajes: 3
Re: Serialport Visual Basic 2005 Express
« Respuesta #5 en: 05 de Abril de 2007, 20:44:43 »
hola FJPPitta, hace unas semanas estaba con el mismo problema del SerialPort del Visual Basic .NET; pero con la ayuda de un ejemplo hecho en C# de la pag. de codeproject.com logré resolver el problema. Les dejo el codigo.

Código: vb.net
  1. Imports System.IO.Ports 'para el uso del serial port
  2.  
  3. Public Class Form1
  4.     Dim DataIn As String = String.Empty
  5.  
  6.     Delegate Sub SetTextCallback(ByVal text As String)
  7.  
  8.     Private Sub SetText(ByVal text As String)
  9.         If Me.txtRecep.InvokeRequired Then
  10.             Dim d As New SetTextCallback(AddressOf SetText)
  11.             Me.Invoke(d, New Object() {text})
  12.         Else
  13.             Me.txtRecep.Text &= text
  14.         End If
  15.  
  16.     End Sub
  17.  
  18.  
  19.     Private Sub PtoSerial_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles PtoSerial.DataReceived
  20.         DataIn = Me.PtoSerial.ReadExisting
  21.         If DataIn <> String.Empty Then
  22.             SetText(DataIn)
  23.         End If
  24.     End Sub
  25.  
  26.  
  27.     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  28.  
  29.         'Llenando el combobox con la lista de puertos
  30.         Dim SelPort As String
  31.         Dim Puertos() As String = SerialPort.GetPortNames
  32.         For Each SelPort In Puertos
  33.             Me.cmbSelPort.Items.Add(SelPort)
  34.         Next
  35.  
  36.     End Sub
  37.  
  38.  
  39.     Private Sub cmbSelPort_SelectionChangeCommitted(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmbSelPort.SelectionChangeCommitted
  40.         If Me.PtoSerial.IsOpen Then
  41.             Me.PtoSerial.Close()
  42.         End If
  43.  
  44.         Me.PtoSerial.PortName = Me.cmbSelPort.SelectedItem.ToString
  45.         Me.ToolStripStatusLabel1.Text = String.Format("{0} {1}:8N1", Me.PtoSerial.PortName, Me.PtoSerial.BaudRate.ToString)
  46.         Try
  47.             PtoSerial.Open()
  48.  
  49.         Catch ex As Exception
  50.             MessageBox.Show("El puerto no está disponible", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
  51.             Me.cmbSelPort.SelectedText = ""
  52.             Me.ToolStripStatusLabel1.Text = "Selecciona un COM"
  53.         End Try
  54.  
  55.     End Sub
  56.  
  57.     Private Sub btnEnviar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEnviar.Click
  58.         If Me.PtoSerial.IsOpen Then
  59.             Me.PtoSerial.WriteLine(Me.txtEnvio.Text)
  60.             Me.txtEnvio.Clear()
  61.         Else
  62.             MessageBox.Show("El puerto está cerrado", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
  63.             Me.txtEnvio.Clear()
  64.         End If
  65.     End Sub
  66.  
  67.     Private Sub btnLimpiar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLimpiar.Click
  68.         Me.txtRecep.Clear()
  69.     End Sub
  70.  
  71.     Private Sub btnBRate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBRate.Click
  72.         PtoSerial.BaudRate = CInt(txtBRate.Text)
  73.         Me.ToolStripStatusLabel1.Text = String.Format("{0} {1}:8N1", Me.PtoSerial.PortName, Me.PtoSerial.BaudRate.ToString)
  74.     End Sub
  75. End Class

Desconectado FJPPitta

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 116
    • Mi pagina personal
Re: Serialport Visual Basic 2005 Express
« Respuesta #6 en: 26 de Abril de 2007, 17:08:38 »
hola FJPPitta, hace unas semanas estaba con el mismo problema del SerialPort del Visual Basic .NET; pero con la ayuda de un ejemplo hecho en C# de la pag. de codeproject.com logré resolver el problema.

Muchas gracias por el codigo, desinstale el VBexpress pero aun me quedo con la idea de pasar el programa que tengo en VB6 ahí, espero ahora que tenga un poco de tiempo libre probar el codigo que mencionas, y posteo los resultados que obtenga.
Que la fuerza te acompañe

Desconectado armego25

  • PIC10
  • *
  • Mensajes: 1
Re: Serialport Visual Basic 2005 Express
« Respuesta #7 en: 07 de Febrero de 2009, 11:15:37 »
Tengo un problema, No se me activa la interrupcion de dato recibido en vb.net 2005. Osea que envio datos al micro y el me responde correctamente pero no se me activa la interrucion y me toca leerlos con con el comado .readchar sin la interrupcion.
mi codigo es el siguiente.

Imports System.IO.Ports
Public Class PControl
    'Dim WithEvents PuertoSerie As New IO.Ports.SerialPort
    Dim Data As String

    Public Sub New()

        ' Llamada necesaria para el Diseñador de Windows Forms.
        InitializeComponent()
        'CobFiguracion Puerto Serial.
        If Puerto.IsOpen Then
            Puerto.Close() 'Se evalua si esta abierto el puerto para cerrarlo
        End If

        'Se trata de realizar la apertura del puerto en base a las siguientes características
        Try
            With Puerto
                .PortName = "COM3"
                .BaudRate = 19200
                .Parity = IO.Ports.Parity.None
                .DataBits = 8
                .StopBits = IO.Ports.StopBits.One
                .ReceivedBytesThreshold = 1
                '.DtrEnable = False
                '.RtsEnable = False
            End With
            Puerto.Open() 'Se abre el puerto
            'En caso de alguna falla mandamos llamar una excepción
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try




        ' Agregue cualquier inicialización después de la llamada a InitializeComponent().

    End Sub

    Protected Overrides Sub Finalize()

        MyBase.Finalize()
        'Cerrar el Puerto si esta Abierto.
        If Puerto.IsOpen Then
            Puerto.Close() 'Se evalua si esta abierto el puerto para cerrarlo
        End If



    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        'MsgBox("Hola MUndo")
        Puerto.Write("I+20000+10000+5000V100F")
        ' Data = (PuertoSerie.ReadChar)


    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Data = Str(Puerto.ReadChar) 'Lee un Caracter del puerto serial
        MsgBox(Data)
    End Sub

    Private Sub Puerto_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles Puerto.DataReceived
        Data = (Puerto.ReadByte) 'Lee un Caracter del puerto serial
        MsgBox(Data)
    End Sub
End Class

Desconectado FJPPitta

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 116
    • Mi pagina personal
Re: Serialport Visual Basic 2005 Express
« Respuesta #8 en: 19 de Abril de 2009, 16:46:19 »
No puedo apoyarte en esto ya que desde que termine el proyecto no me he vuelto a meter en la programacion, y solo use VB6 nada de .net ni los siguientes, te recomendaría que abrieras un post nuevo con tu consulta para que recibas la ayuda adecuada ya que aqui esta un poco escondido.
Que la fuerza te acompañe

Desconectado rodrigo_control2009

  • PIC12
  • **
  • Mensajes: 54
    • Blog  de la  Orden del  temple
Re: Serialport Visual Basic 2005 Express
« Respuesta #9 en: 23 de Abril de 2009, 01:28:07 »
mira  este  pequeño  manuel   sino  no  me  equivoco  lo  aplique  a  visual   vasic  2005  y  2005 y funciono  quizas  te  sirva
 http://www.dotnetmania.com/Libros/CTdnm01/Robot%20dispensador%20para%20MSDN%20Vídeo.pdf
“El hombre ideal, sería persa de origen, árabe de religión, iraquí por cultura, hebreo por experiencia, cristiano por conducta, hindú por perspicacia, sufí por su estilo de vida, angélico por su moral y divino por sus ideas y conocimiento, destinado a la eternidad”

Desconectado rodrigo_control2009

  • PIC12
  • **
  • Mensajes: 54
    • Blog  de la  Orden del  temple
Re: Serialport Visual Basic 2005 Express
« Respuesta #10 en: 07 de Julio de 2009, 13:54:55 »
No se  si aun estes interesado  en  el  tema  pero encontre  esto  sobre   los  puertos serie  no es  reciente  pero  igual de útil 
http://msmvps.com/blogs/peplluis/archive/tags/Puertos+Serie/default.aspx
“El hombre ideal, sería persa de origen, árabe de religión, iraquí por cultura, hebreo por experiencia, cristiano por conducta, hindú por perspicacia, sufí por su estilo de vida, angélico por su moral y divino por sus ideas y conocimiento, destinado a la eternidad”

Desconectado tuxandres

  • PIC10
  • *
  • Mensajes: 3
Re: Serialport Visual Basic 2005 Express
« Respuesta #11 en: 12 de Marzo de 2010, 04:21:47 »
Hola amigos,

Tengo problemas con la recepcion serial en Visual Basic 2008 express:

He intentado que me lea el puerto con serialport1.readbyte, me funciona perfecto cuando lo hago con botones, pero cuando lo intento hacer con el control timer por debajo de unos 2000 ms la ventana del formulario se pone lenta al moverla como si se bloquera. quisiera si me pueden ayudar gracias


en el timer1 con 100 ms:

serialport1.open()
var=serialport1.readbyte
serialport1.close()


El serialport1 estan con 9600,N,8,1

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Serialport Visual Basic 2005 Express
« Respuesta #12 en: 12 de Marzo de 2010, 11:13:20 »
Eso es porque la aplicación espera a que llegue algo al buffer. Mientras espera, como tu programa es de un solo thread o hilo, pues todo se pausa. Si lo haces más frecuentemente entonces la pausa es más notoria.

Tendrías que implementar un segundo hilo a tu aplicación o hacer el envío de datos rs232 más rápidamente. Si es un pic debe hacerlo más frecuentemente, por ejemplo, si el timer de visual basic es de 100ms, entonces que el pic envíe datos cada 50ms. Así aseguras que el buffer siempre tenga información cuando ocurre el tick del timer y no habrá pausas.


 

anything