• Sábado 9 de Noviembre de 2024, 03:31

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Temas - Chiri85

Páginas: [1]
1
VB .NET / Puerto serie, bucle, mostrar y almacenamiento de datos
« en: Martes 19 de Enero de 2010, 16:58 »
Buenas... estoy teniendo problemas con un programa, necesitaria que el programa envie una serie de cadenas por el puerto serial, capture la respuesta, la muestre y la guarde.
Tengo un problema q es cuando tomo la cadena leida del puerto serial y la muestro en la pantalla, la misma solamente tiene la longitud de 8 digitos, cuando toda la cadena tiene 15 caracteres, por lo cual me toma 2 ciclos. Con respecto a esto, hay posibilidad de hacerlo con 1 solo ciclo? que me lea los 15 digitos?
Ahora bien, esto lo dejo pasar y vuelvo a armar la cadena despues de los 2 ciclos. El inconveniente se me presente cuando yo tengo q enviar mas de una cadena, yo las envio mediante un bucle y solamente me muestra la recepcion de la respuesta una vez finalizado todo el envio (todo el bucle) y solamente es la primera respuesta la que me muestra. Trate dejando un sleep, pero tampoco hay caso.
Necesito que envie y reciba, todo el ciclo. Como seria esto posible? Te dejo el código que estoy utilizando para enviar una sola cadena, el problema es cuando en el archivo del envio "Envio.txt" tiene mas de una cadena...
Public Class Form1
    Dim WithEvents serialPort As New IO.Ports.SerialPort
    Dim cadeEnvi As String = ""
    Dim cadeRecep As String = ""
    Declare Sub Sleep Lib "kernel32" Alias "Sleep" _
    (ByVal dwMilliseconds As Long)
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        serialPort.PortName = "COM1"
        serialPort.BaudRate = 4800
        serialPort.Parity = IO.Ports.Parity.None
        serialPort.StopBits = IO.Ports.StopBits.One
        serialPort.Open()
        serialPort.RtsEnable = True
    End Sub
    'Pausa... (Intenté esto ya que la respuesta puede tardar hasta 4 segundos como max)
    Public Sub Sleep()
        Sleep(4000)
    End Sub
    'Envio!!!
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        FileOpen(1, "Envio.txt", OpenMode.Input)
        Do While Not EOF(1)
            serialPort.RtsEnable = False
            Try
                Input(1, cadeEnvi)
                serialPort.Write(cadeEnvi)
            Catch ex As Exception
                MsgBox(ex.ToString)
            End Try
            serialPort.RtsEnable = True
            Sleep()
        Loop
        FileClose(1)
    End Sub
    Private Sub DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles serialPort.DataReceived
        txtRecepcion.Invoke(New myDelegate(AddressOf updateTextBox), New Object() {})
    End Sub
    Public Delegate Sub myDelegate()
    Public Sub updateTextBox()
        FileOpen(2, "Base.txt", OpenMode.Append)
        With txtRecepcion
            .Font = New Font("Garamond", 12.0!, FontStyle.Bold)
            .AppendText(serialPort.ReadExisting)
            .ScrollToCaret()
            cadeRecep = txtRecepcion.Text
            WriteLine(2, cadeRecep)
        End With
        FileClose(2)
    End Sub
End Class
Desde ya muchas gracias, cualquier duda si no se entendio algo te lo aclaro...

Páginas: [1]