none
Comunicacion con el puerto serial utilizando VB 2010 RRS feed

  • Pregunta

  • Hola, estoy tratando de hacer un programa que reciba la data de una maquina de laboratorio,  a traves del puerto serial.

    ya logre connectar y leer la data que recibo de la maquina pero los caracteres que me muestra son puro ?????XXXX y caracteres raros.

    he buscado información y he tratado varias cosas Utilizando SerialPort1.ReadExisting y SerialPort.ReadByte hasta con ReadChar pero siempre obtengo el mismo resulatdo

    aqui esta el codigo les agradesco mucho en lo que me puedan ayudar

     

    Public Class Form1

     

    Dim myText As String

    Dim x

     

     

    Delegate Sub AddReceiveString ( ByVal str As String )

     

    Public DelegadoRecString As AddReceiveString

     

     

    Public Sub New ()

     

    InitializeComponent()

     

    DelegadoRecString = New AddReceiveString ( AddressOf InvocarTextBox)

     

    End Sub

     

    Private Sub Button1_Click( ByVal sender As System. Object , ByVal e As System. EventArgs ) Handles Button1.Click, MyBase .Load

     

    If Not SerialPort1.IsOpen Then

    SerialPort1.Open()

    End If

    TextBox1.Text = "Opened"

     

    End Sub

     

     

    Private Sub Button2_Click( ByVal sender As System. Object , ByVal e As System. EventArgs ) Handles Button2.Click

     

    If SerialPort1.IsOpen Then

    SerialPort1.Close()

    End If

    TextBox1.Text = "Closed"

    TextBox2.Text = ""

    myText = ""

    x = 0

     

    End Sub

     

     

    Private Sub SerialPort1_DataReceived( ByVal sender As System. Object , ByVal e As System.IO.Ports. SerialDataReceivedEventArgs ) Handles SerialPort1.DataReceived

     

    Dim bytesrecibidos(SerialPort1.BytesToRead) As Byte

    SerialPort1.Read(bytesrecibidos, 0, SerialPort1.BytesToRead)

     

    Dim resultado As Char = Convert .ToChar(bytesrecibidos(0))

     

    TextBox2.Invoke(DelegadoRecString, New Object () {resultado.ToString})

     

    End Sub

     

     


     

    Public Sub InvocarTextBox( ByVal str As String )

     

    Try

    TextBox2.Text &= str.ToString() & vbCrLf

     

    Catch ex As Exception

    MsgBox(ex.Message)

     

    End Try

     

    End Sub

     

    End Class

     

     

    jueves, 29 de abril de 2010 14:33

Todas las respuestas

  • Hola, yo no he trabajado con puertos series, pero aqui tienesun evento de www.Secondnug.com 

    https://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?culture=es-AR&EventID=1032441699&CountryCode=AR

     

    estuvo muy bien, y tiene el video y el material demo, puede que te sea de ayuda.


    Colabora con el foro: Si este mensaje te es de utilidad marcalo como respuesta.

    Quique Martínez

    Blog: http://www.qmartinez.es

    Grupo .Net: http://www.secondnug.com


    jueves, 29 de abril de 2010 15:09
  • Gracias voy a verlo

     

    Otra cosa que hice para probar fue agragarle el encoding y todavia nada

     

    anexo el nuevo codigo

     

    Public Class Form1
     
        Dim myText As String
        Dim x
        Delegate Sub AddReceiveString(ByVal str As String)
        Public DelegadoRecString As AddReceiveString
     
        Public Sub New()
            InitializeComponent()
            DelegadoRecString = New AddReceiveString(AddressOf InvocarTextBox)
        End Sub
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, MyBase.Load
            If Not SerialPort1.IsOpen Then
                SerialPort1.Open()
            End If
            TextBox1.Text = "Opened"
     
     
        End Sub
     
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            If SerialPort1.IsOpen Then
                SerialPort1.Close()
            End If
            TextBox1.Text = "Closed"
            TextBox2.Text = ""
            myText = ""
            x = 0
     
        End Sub
     
     
        Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
     
            SerialPort1.Encoding = System.Text.Encoding.GetEncoding(28591)
     
            Dim resultado = SerialPort1.ReadExisting
     
            TextBox2.Invoke(DelegadoRecString, New Object() {resultado.ToString})
     
        End Sub
        
     
        Public Sub InvocarTextBox(ByVal str As String)
     
            Try
                TextBox2.Text &= str.ToString() 
     
            Catch ex As Exception
                MsgBox(ex.Message)
     
            End Try
     
        End Sub
     
        Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
     
            Dim myTextWrite As String
     
            myTextWrite = TextBox3.Text
            'SerialPort1.Write(myTextWrite, 0, Len(myTextWrite))
     
     
        End Sub
    End Class

    y este es el resultado

     

    ?Á°°Y
    -åÁ°°XX,¬VK
    åÁ°ŽY\V
    +Íű°X\,,?V
     
    Á³°X-ÖV«
    ÑͶŽY-,+kÝÁ³²
     
    ÍÅ°²++ÑᎱ\X­+Áݵ±Z®V+ÁÑŽµXX,,
     
    Á°°XX,,
     
    ÅÅ°µXXkKÕÕ°²+ëÁÁ±¶Y?
     
    ÁÁ°°XX,,
     
    ÁÁ°°XX,,
     
    Á°°XX,,
     
    ÁÁ°°XX,,
     
    ÁÁ°°,,Ö
    ëÁÅŽ°Y\,­Öë+ÁÙ±ŽVÖ
    ÉÁ¹²KÕÁ²µ-VkKÑÕ²²[Y,+
    áÅ·²¬­+kåŲŽ¬¬VK
    åÅ°žXX

     

     

     

    jueves, 29 de abril de 2010 18:13
  • mmm... por la forma de los caracteres parece q tenés velocidades de comunicacion diferentes entre la pc y el aparato al q lo conectas
    sábado, 5 de marzo de 2011 19:41
  • hola me podria ayudar  stoy trabajando con visual basic 2010 y tngo un error con el puerto serial me podrias ayudar el problema q tngo es lo siguiente

     

    Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles

    SerialPort1.DataReceived

     

    Dim recibido, recibidotodo As

    String

     

    recibido = SerialPort1.ReadChar

    recibidotodo = recibidotodo + recibido

    TextBox3.Text = recibidotodo       :aqui me sale el error me dice lo sigueinte

    End Sub

    Operación no válida a través de subprocesos: Se tuvo acceso al control 'TextBox3' desde un subproceso distinto a aquel en que lo creó.

     

     

     

     

    miércoles, 16 de noviembre de 2011 20:06
  • saludos, tienes un problema en el protocolo de comunicación del equipo con la pc. pueden ser velocidades diferentes o bits o paridad etc.

    jueves, 24 de mayo de 2012 22:32