Autor Tema: que leo cuando quiero leer el puerto serie?  (Leído 9269 veces)

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

Desconectado fastyx

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 353
que leo cuando quiero leer el puerto serie?
« en: 31 de Julio de 2006, 09:44:37 »
Amigos: necesito hacer un graficador en vb para una placa que controla el pid de un motor de cc.

con printf saco el valor de los pulsos del encoder por el puerto serie. Mi pregunta es : despues de setear el puerto en vb , abrirlo  etc...

cual es el elemento que contiene los datos que yo saco por printf? es mscomm1.input? de ser asi como puedo asignarle una variable a este elemento o el que sea para despues cargar esos datos en una funcion graficable?

desde ya gracias ,estuve mirando los ejemplos pero todos asignan los valores para mostrarlos por un textbox y no se como tomarlos de alli

Desconectado Toph

  • Colaborador
  • PIC12
  • *****
  • Mensajes: 84
Re: que leo cuando quiero leer el puerto serie?
« Respuesta #1 en: 31 de Julio de 2006, 19:00:23 »
Citar
Mi pregunta es : despues de setear el puerto en vb , abrirlo  etc...

cual es el elemento que contiene los datos que yo saco por printf? es mscomm1.input? de ser asi como puedo asignarle una variable a este elemento o el que sea para despues cargar esos datos en una funcion graficable?

 :) efectivamente fastyx es mscomm1.input, y para asignarle una variable a este elemento es sencillo, simplemente declaras la variable

Código: [Seleccionar]
dim variable as string
y para asignarle el valor que lees del puerto serie asi:
Código: [Seleccionar]
variable = MSComm1.Input
Citar
desde ya gracias ,estuve mirando los ejemplos pero todos asignan los valores para mostrarlos por un textbox y no se como tomarlos de alli

si los quieres tomar de un textbox seria asi:

Código: [Seleccionar]
variable = Text1.Text
saludos  :-)

El tiempo perdido es dificil de recuperar, trata de no desperdiciarlo
atrevete de vez en cuando a hacer algo nuevo
¿Sera este el año que tanto he deseado?

Desconectado fastyx

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 353
Re: que leo cuando quiero leer el puerto serie?
« Respuesta #2 en: 31 de Julio de 2006, 21:26:33 »
gracias !!Tania por la contestación. Lo que me restaria saber es si ese contenido de variable , es decir que cuando yo use esa variable para graficar puntos , van a ir tomando los puntos los valores momentaneos de variable.

espero haberme explicado :lol:

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: que leo cuando quiero leer el puerto serie?
« Respuesta #3 en: 01 de Agosto de 2006, 00:55:15 »
Hola fastyx.
Para dibujar un punto cada vez que recibes la informacion a traves del puerto serie, debes poner la rutina o bien hacer una llamada a ella en el evento "comEvReceive" que podras encontrar en el programa.

Supongamos que tu envias una cadena de texto cada vez que obtienes un solo valor.
En ese caso, entonces no restaria mas que leer el valor desde el MSComm1.Input y enviarlo a la grafica.
Cabe destacar que la grafica tiene 2 ejes, el X y el Y.Como solo tienes 1 valor, es recomendable que a la variable X la vayas autoincrementando para ir generando la grafica. La variable Y sera entonces la que variará.

Aqui te posteo un codigo de ejemplo para que lo veas partiendo del programa que ya tienes.

Código: Visual Basic
  1. Option Explicit
  2.  
  3. Dim VariableX As Single
  4.  
  5. Private Sub Form_Load()
  6. With MSComm1
  7. .CommPort = 1              ' Se usara el puerto Com1
  8. .Settings = "19200,N,8,1"   ' Velocidad de Tx 19200 baud, no paridad, 8 bits de datos, y 1 bit de stop
  9. .InputMode = comInputModeBinary
  10. .InputLen = 0              ' El control MSComm leera todo el contenido del búfer de recepción
  11. .RThreshold = 1
  12. .RTSEnable = True
  13. .SThreshold = 1
  14. .PortOpen = True
  15. End With
  16. Grafica.DrawWidth = 3
  17. End Sub
  18.  
  19. Private Sub CmdEnviar_Click()
  20. MSComm1.InBufferCount = 0     'reseta el buffer de recepcion
  21. MSComm1.Output = TxtEnviar.Text & Chr$(13)
  22. Do While MSComm1.OutBufferCount > 0
  23. Loop
  24.  
  25. End Sub
  26.  
  27. Private Sub CmdSal_Click()
  28. MSComm1.PortOpen = False
  29. End
  30. End Sub
  31.  
  32. Private Sub MSComm1_OnComm()
  33. Select Case MSComm1.CommEvent
  34.     Case comEvReceive
  35.         Dim VariableY As String
  36.         VariableY = MSComm1.Input
  37.         If IsNumeric(VariableY) Then 'Si el valor recibido es un valor numerico entonces...
  38.            VariableX = VariableX + 50 'Autoincrementar posicion X
  39.            Grafica.PSet (VariableX, Grafica.Height - CSng(VariableY)), vbRed 'Dibujar punto en la grafica e invertir eje Y
  40.        End If
  41.     End Select
  42. End Sub

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado Toph

  • Colaborador
  • PIC12
  • *****
  • Mensajes: 84
Re: que leo cuando quiero leer el puerto serie?
« Respuesta #4 en: 01 de Agosto de 2006, 20:29:46 »
Citar
gracias !!Tania por la contestación. Lo que me restaria saber es si ese contenido de variable , es decir que cuando yo use esa variable para graficar puntos , van a ir tomando los puntos los valores momentaneos de variable.

espero haberme explicado

cada vez que recibas algo tienes que pasar por  la sentencia variable = mscomm1.input , y ahi se le asigna lo que esta en el puerto serie a variable para poderlo graficar, como esta en el ejemplo muy bueno que posteo BrunoF  :-)
solo queria destacar que aveces por el tipo de datos o el tamaño del picture que estamos utilizando es necesario multiplicar los datos o el eje x por algun valor, incluso jugar con el tamaño del picture para ver mejor los datos en la grafica en un proyecto que hice tuve que jugar con las variables asi para poder ver la grafica:
Código: [Seleccionar]
Grafica.PSet (VariableX, Grafica.Height/2 - CSng(VariableY*20)), vbRed
   :-/

saludos  :)

El tiempo perdido es dificil de recuperar, trata de no desperdiciarlo
atrevete de vez en cuando a hacer algo nuevo
¿Sera este el año que tanto he deseado?

Desconectado fastyx

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 353
Re: que leo cuando quiero leer el puerto serie?
« Respuesta #5 en: 01 de Agosto de 2006, 23:00:15 »
gracias por la contestacion Tania.

te paso el codigo a ver si me das una mano ya que yo pretendo graficar con circlepara verlo mejor
esta es la parte modificada de brunof
Private Sub MSComm1_OnComm()
Dim Y As Variant
Dim X As Integer


Select Case MSComm1.CommEvent
    Case comEvReceive
        TxtRecibir.Text = TxtRecibir.Text & StrConv(MSComm1.Input, vbUnicode) & vbCrLf
        TxtRecibir.SelStart = Len(TxtRecibir)
        Y = TxtRecibir.Text
        X = 100
        grafica.Circle (Y * 0.2, X), 0.5
    End Select
End Sub

si pongo Y = txtrecibir.txt me da error de compilacion porque las variables no se pueden colocar en circle( con pset me pasa lo mismo).
si pongo Y =  Len(TxtRecibir) lo grafica , pero no es lo que necesito porque no grafica los valores,pero lo use para ver si entraba (debug)

no le puedo encontrar la vuelta... :?



Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: que leo cuando quiero leer el puerto serie?
« Respuesta #6 en: 02 de Agosto de 2006, 00:41:44 »
Ya te he respondido a esta duda en otro post(http://www.todopic.com.ar/foros/index.php?topic=13177.msg76289#msg76289). Por favor postea sólo una vez tu duda.
Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado fastyx

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 353
Re: que leo cuando quiero leer el puerto serie?
« Respuesta #7 en: 02 de Agosto de 2006, 09:06:10 »
disculpen por las preguntas multiples.

necesitaba para hoy poder tener el graficador pero no lo pude lograr.

no se que esta pasando pero no grafica los circulos en pantalla.

aca posteo el programa entero a ver que pasa :x

Option Explicit
--------------------------------------------------------------------------
Private Sub CmdEnviar_Click()
MSComm1.InBufferCount = 0     'reseta el buffer de recepcion
MSComm1.Output = TxtEnviar.Text & Chr$(13)
Do While MSComm1.OutBufferCount > 0
Loop
End Sub
----------------------------------------------------------------
Private Sub CmdSal_Click()
MSComm1.PortOpen = False
End Sub
----------------------------------------------------------------
Private Sub COM2_Click()
If MSComm1.PortOpen = True Then
  MSComm1.PortOpen = False
End If
With MSComm1
.CommPort = 2          ' Se usara el puerto Com2
.Settings = "9600,N,8,1"   ' Velocidad de Tx 19200 baud, no paridad, 8 bits de datos, y 1 bit de stop
.InputMode = comInputModeBinary
.InputLen = 0              ' El control MSComm leera todo el contenido del búfer de recepción
.RThreshold = 1
.RTSEnable = True
.SThreshold = 1
.PortOpen = True
End With
ledcom2.BackColor = &HFF00&
ledcom3.BackColor = &HFF&
End Sub
------------------------------------------------------------
Private Sub COM3_Click()
If MSComm1.PortOpen = True Then
  MSComm1.PortOpen = False
End If
With MSComm1
.CommPort = 3         ' Se usara el puerto Com3
.Settings = "9600,N,8,1"   ' Velocidad de Tx 19200 baud, no paridad, 8 bits de datos, y 1 bit de stop
.InputMode = comInputModeBinary
.InputLen = 0              ' El control MSComm leera todo el contenido del búfer de recepción
.RThreshold = 1
.RTSEnable = True
.SThreshold = 1
.PortOpen = True
End With
ledcom3.BackColor = &HFF00&
ledcom2.BackColor = &HFF&
End Sub

--------------------------------------------------------------

Private Sub limpiadatos_Click()
TxtRecibir = " "
End Sub
--------------------------------------------------------------
Private Sub MSComm1_OnComm()
Dim Y As String
Dim X As Integer


Select Case MSComm1.CommEvent
    Case comEvReceive
        Y = MSComm1.Input
        TxtRecibir.Text = TxtRecibir.Text & StrConv(Y, vbUnicode) & vbCrLf
        'TxtRecibir.SelStart = Len(TxtRecibir) '¿? ¡innecesario!
        X = 100
         if isnumeric(Y) then grafica.Circle (grafica.height - csng(Y) * 0.2, X), 0.5
    End Select
End Sub

te cuento que si comento la parte de  TxtRecibir.SelStart = Len(TxtRecibir) ,no leo la actualizacion de los datos en el textbox
lo que decis de x es correcto ,luego la voy a usar para cargar tiempos desde el pic , pero ahora no importa estoy midiendo en que posicion se detiene el motor

     



     

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: que leo cuando quiero leer el puerto serie?
« Respuesta #8 en: 02 de Agosto de 2006, 14:31:41 »
Hola.¿Estas teniendo otro error o no logras ver nada en la grafica?

Si lo que sucede es que no logras ver nada, proba cambiando:

if isnumeric(Y) then grafica.Circle (grafica.height - csng(Y) * 0.2, X), 0.5

por:

if isnumeric(Y) then grafica.Circle (grafica.height - csng(Y) * 0.2, X), 50, vbred

Asegurate que el valor que llega por el puerto *0.2 se encuentre dentro de las dimensiones de la grafica. Sino el circulo va a dibujarse pero no vas a poder verlo.
Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado fastyx

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 353
Re: que leo cuando quiero leer el puerto serie?
« Respuesta #9 en: 02 de Agosto de 2006, 21:01:42 »
brunof: se pudre todo cuando en la grafica intento colocar Y , ya que me pone error 13 en tiempo de ejecucion , no coinciden los tipos y señala a la linea en donde esta grafica.circle ( y,x ),1.si reemplazo la Y por otra X , los puntos aparecen ( en realidad uno solo pero lo hago para saber que estoy en pantalla)

te recuerdo que tengo el mscomm1.InputMode = comInputModeBinary

 no se que corno pasa que no me permite hacer ese cambio de variables :8}

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: que leo cuando quiero leer el puerto serie?
« Respuesta #10 en: 02 de Agosto de 2006, 21:19:59 »
Hola. Por favor. Posteame los datos que estas recibiendo.
Setea la propiedad "Autoredraw" de la grafica a "True".

Agrega esta linea:
msgbox Y
antes de:
if isnumeric(Y) then grafica.Circle (grafica.height - csng(Y) * 0.2, X), 50, vbred

y decime lo que aparece.

Debes estar enviando los datos mal.
Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado fastyx

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 353
Re: que leo cuando quiero leer el puerto serie?
« Respuesta #11 en: 02 de Agosto de 2006, 21:27:59 »
hice otra prueba : en la parte que dice if isnumeric(variableY) then....
le puse un cambio de color al form y no cambió , quiere decir que no esta entrando en el if porque Y no es una variable numerica

Desconectado fastyx

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 353
Re: que leo cuando quiero leer el puerto serie?
« Respuesta #12 en: 02 de Agosto de 2006, 21:29:40 »
justo me estabas mandando un mensaje .ahora hago lo que me decis y te cuento

Desconectado fastyx

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 353
Re: que leo cuando quiero leer el puerto serie?
« Respuesta #13 en: 02 de Agosto de 2006, 21:37:49 »
autoredraw esta en true, y con respecto al msgbox aparece un boton con aceptar

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: que leo cuando quiero leer el puerto serie?
« Respuesta #14 en: 02 de Agosto de 2006, 21:40:22 »
Sólo el aceptar? debería mostrar el dato que llego por el puerto serie...
Tal vez tengas mal configurados los parametros del MSComm
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.