1
« 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...