Autor Tema: Recepcion de String en vb?  (Leído 6499 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2062
Recepcion de String en vb?
« en: 28 de Diciembre de 2007, 17:47:00 »
Hola amigos!
Tengo un pequeño  :(  problema con la recepcion de una cadena de caracteres a traves de vb tengo  un pic16F877 conectado al puerto serial de la PC, si envio una letra digamos la "A" esta la muestra bien, pero si envio "Hola amigos" pues no funciona la cosa solo me muestra la ultima letra "s" estoy utilizando el evento oncomm para ello tengo colocado: inputlen = 0, RThreshold = 1, SThreshold = 1
cuando se entra al evento oncomm leo el buffer de entrada asi:

Text2.Text = MSComm1.Input  ' y en vez de mostrarme la cadena de caracteres no lo hace?
Ahora bien si coloco:

Text2.Text = MSComm1.InBufferCount  ' me indica el tamaño de la cadena que hay en el buffer de recepcion la cual es correcta (11), entonces en donde esta el problema?

De antemano gracias

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: Recepcion de String en vb?
« Respuesta #1 en: 28 de Diciembre de 2007, 18:49:12 »
Hola:

Yo lo hago con un timer, prueba configurándolo a 1uS y dentro del evento timer pon:

text1.text=mscomm1.input

Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2062
Re: Recepcion de String en vb?
« Respuesta #2 en: 28 de Diciembre de 2007, 19:02:35 »
Hola amigo probe lo que me dices y no me funciona   :shock:
Me muestra los caracteres muy rapidos y por fragmentos te coloco el codigo en vb. a ver si el problema esta alli?

Dim X As String
Dim cant As Variant


Private Sub Command3_Click()
 End
End Sub

Private Sub Form_Load()
  If MSComm1.PortOpen = False Then
  MSComm1.PortOpen = True
  End If
End Sub

Private Sub Command1_Click()
  MSComm1.Output = Text1.Text
 
End Sub

Private Sub Command2_Click()
  MSComm1.Output = Chr(27)
End Sub

Private Sub Form_Unload(Cancel As Integer)
    If MSComm1.PortOpen = True Then
    MSComm1.PortOpen = False
End Sub


Private Sub Timer1_Timer()
Text2.Text = MSComm1.Input
End Sub

Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2062
Re: Recepcion de String en vb?
« Respuesta #3 en: 28 de Diciembre de 2007, 19:10:47 »
Ahora bien si elimino donde dice:

Private Sub Timer1_Timer()
Text2.Text = MSComm1.Input
End Sub

Y coloco:

Private Sub MSComm1_OnComm()
   X = MSComm1.Input
   Text2.Text = X
End Sub

y coloco, RThreshold = 11
Si funciona, porque?
El problema es que si el ancho de la cadena varia tendria entonces que variar el parametro RThreshold por software o habra otra manera de hacerlo?

Desconectado pocher

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2569
Re: Recepcion de String en vb?
« Respuesta #4 en: 29 de Diciembre de 2007, 02:11:29 »
Porqué no pruebas con Text2.Text = Text2.Text + MSComm1.Input

Esto te funcionará habiendo definido Inputlen=1 (con RThreshold=1)

Un saludo

Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2062
Re: Recepcion de String en vb?
« Respuesta #5 en: 29 de Diciembre de 2007, 06:28:17 »
Hola pocher!
Dejame probar tu idea y te digo si me funciono!  :mrgreen:

Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2062
Re: Recepcion de String en vb?
« Respuesta #6 en: 29 de Diciembre de 2007, 16:33:54 »
Que tal amigos!
Mi estimado pocher dejeme decirle que su respuesta es acertada  :-/ :-/ :mrgreen:

Ya lo probe y me funciono como queria  :)

Un escollo menos y faltan mas  :shock:

Muchas gracias!

Desconectado PalitroqueZ

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: Recepcion de String en vb?
« Respuesta #7 en: 03 de Enero de 2008, 14:09:44 »
bueno llegué un poco tarde, de todas formas un comentario de mi parte:

te recomiendo que leas en el MSDN lo relacionado a:

    MSComm1.OutBufferSize
    MSComm1.InBufferSize
    'MSComm1.InputMode
       
    MSComm1.InputLen
    MSComm1.RThreshold

sobre todo a las ultimas 2, esas propiedades son las que controlan la longitud de la cadena que quieres descargar del buffer del control

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2062
Re: Recepcion de String en vb?
« Respuesta #8 en: 03 de Enero de 2008, 18:43:32 »
Que tal amigo palitroquez!
No llegas tarde aun; esas funciones me las lei en incluso modifique los valores pero la cosa no me funcionaba bien. yo pense que si uno colocaba por ejemplo: text1.text = mscom1.input teniendo colocado el MSComm1.InputLen = 1, y MSComm1.RThreshold = 1 los bytes que ivan llegando la instruccion, text1.text = mscom1.input me los mostraria por pantalla, pero la cosa no era asi solo me mostraba el ultimo caracter, luego con la ayuda del amigo pocher logre entender que era lo que estaba pasando  :mrgreen:

al tener MSComm1.InputLen = 1, y MSComm1.RThreshold = 1 cada vez que recibia un byte se generaba el evento oncomm alli leia el buffer de entrada el cual se ponia a cero luego al llegar otro caracter volvia a leer el buffer y este se ponia de nuevo a cero, ahora bien yo pensaba que cuando colocaba  text1.text = mscomm1.input esta me deberia ir almacenando caracter por caracter y asi me deberia mostrar el mensaje, pero no es asi, porque? bueno segun veo eso es debido a que el buffer de entrada cada vez que era leido se borraba y comensaba en la posicion cero entonces el text1.text solo mostraba una letra que era la que leia del buffer!

Ahora bien si conoces otra forma de hacerlo te agradeceria tus comentarios.  :mrgreen: