Usuario
Comunicacion RS232 y puertos COM VB2010. Ayuda.

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)
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 -
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