none
Comunicacion RS232 y puertos COM VB2010. Ayuda. RRS feed

  • Pregunta

  • Buenas noches por aca...

    Necesito ayuda urgente con un programa que estoy desarrollando en VB2010, no soy un experto y ya he probado miles de codigos encontrados en internet,

    solo he podido enviar datos desde mi aplicacion hasta un dispositivo receptor, en este caso estoy trabajando con la siguiente interfaz:


    [center]PICkit2 (Microchip)<---->MAX232<---->PC[/center]

    El software de PICkit2 me permite enviar y recibir data RS232 en formatos ASCII y HEX, el programa que he logrado hacer, me permite enviar desde mi PC

    hasta el PICkit2, en esto no tengo problemas, pero cuando quiero enviar desde el PICkit2 hacia la PC, no logro que la PC me muestre nada de nada de nada

    de nada y mi duda esta en la lectura del programa en VB, he trabajado con casi todos los modos y comandos que he encontrado en la web, pero no logro

    hacer que mi PC lea nada.

    el codigo que tengo hasta ahora es el siguiente, omitiendo los elementos que no son imporantes en la comunicacion:

    Imports System
    Imports System.ComponentModel
    Imports System.Threading
    Imports System.IO.Ports
    Imports System.Text
    Imports System.Threading.Thread
    Imports System.Windows.Forms.Control
    
    Public Class Form1
    
        Dim invocartextbox As String
    
        Dim myText As String
        Dim x As Integer
        Delegate Sub AddReceiveString(ByVal str As String)
        Public DelegadoRecString As AddReceiveString
    
    
        Private Sub Form1_load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
           
            For Each sp As String In My.Computer.Ports.SerialPortNames
                ListBox1.Items.Add(sp)
            Next
    
            SerialPort1.Close()
    
        End Sub
        
        Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click 'Abrir Puerto
            If Not SerialPort1.IsOpen Then
                SerialPort1.Open()
            End If
            TextBox7.Text = "Abierto"
        End Sub
    
        Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click 'Cerrar Puerto
            If SerialPort1.IsOpen Then
                SerialPort1.Close()
            End If
            TextBox7.Text = "Cerrado"
            x = 0
        End Sub
    
        Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click ' Enviar dato
    
            Dim myTextWrite As String
            myTextWrite = TextBox9.Text
            SerialPort1.Write(myTextWrite, 0, Len(myTextWrite))
    
        End Sub
    
        Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles 
    
    SerialPort1.DataReceived ' Recibir Dato
    
            Dim resultado As String = String.Empty
            resultado = SerialPort1.ReadByte()
            RichTextBox1.Text = resultado.ToString
           
            RichTextBox4.Text = Invoke(DelegadoRecString, New Object() {resultado.ToString})
            TextBox12.Text = Invoke(DelegadoRecString, New Object() {resultado.ToString})
        End Sub
    
    End Class
    

    Con el evento DataReceived no logro hacer funcionar la recepcion de nada. No logro mostra nada en el Richtextbox o en el Textbox.

    Podria alguien ayudarme en este problema...

    • Cambiado PepLluisModerator domingo, 6 de noviembre de 2011 20:31 (De:Lenguaje VB.NET)
    jueves, 20 de octubre de 2011 4:43

Todas las respuestas

  • Hola,

    Primero debes asegurarte de que estas recibiendo datos^. En tu código observo que estas sobrescribiendo los destinos, en tal caso si el ultimo carácter recibido no dispone de representación no visualizaras nunca nada en los textboxes o ritchtext... ejemplo <stx>..etc. (recuerda que la recepción es muy rapida)

    En primer lugar puede ser muy útil insertar un punto de interrupción en la función que recibe los datos. y la otra es insertar un temporizador en algún punto que verifique si existen datos en el buffer de recepción... por ejemplo :

    SerialPort1.BytesToRead.ToString()

    en todo caso también puedes dirigirte a mi blog, quizás encuentres algún ejemplo que pueda ayudarte.

    http://msmvps.com/blogs/peplluis/archive/tags/Puertos+Serie/default.aspx

    Saludos,
    PepLluis,


    MVP - Visual Developer
    domingo, 6 de noviembre de 2011 20:30
    Moderador
  • puedes probar con lo siguiente:

    Delegate Sub AddText(ByVal Text As String)

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

    RichTextBox1.Invoke(New AddText(AddressOf RichTextBox1.AppendText), SerialPort1.ReadExisting)

    End Sub

    y asi puede invocar cualquier textbox que tu desees

    lunes, 11 de junio de 2012 15:49