Autor Tema: ¿Cómo envio enteros en Visual Basic 6.0?  (Leído 6954 veces)

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

Desconectado literatronic

  • PIC12
  • **
  • Mensajes: 98
¿Cómo envio enteros en Visual Basic 6.0?
« en: 20 de Abril de 2009, 14:30:55 »
Un saludo a todos. 
Quiero comunicar el PC con un PIC a través de un programa en Visual Basic utilizando MSComm pero por lo que veo todo lo que se copie en los TextBox sale como ASCII y lo necesito es decimal, es decir, no quiero restarle 48 a los datos que me lleguen al PIC.  ¿Es posible enviar estos enteros con alguna función?

Lo que he visto hasta el momento es que si pongo Chr$(TextBox) el envía el valor equivalente en decimal a lo que haya en la caja, entonces si quiero enviar un 1 decimal el envía un caracter raro (SOH según la tabla ASCII), si pongo 49 el me envía el valor equivalente que es 1 en ASCII.

Muchas gracias.

Desconectado literatronic

  • PIC12
  • **
  • Mensajes: 98
Re: ¿Cómo envio enteros en Visual Basic 6.0?
« Respuesta #1 en: 22 de Abril de 2009, 16:21:26 »
OK, voy a trabajar con Chr(TextBox).  Ahora tengo otra duda, si yo quiero mandar un número de dos cifras, por ejemplo 12, entonces el programa en Visual me los toma como un 1 y un 2, como hago para que el 12 que mando sea un sólo byte.

Gracias.

Desconectado PalitroqueZ

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: ¿Cómo envio enteros en Visual Basic 6.0?
« Respuesta #2 en: 22 de Abril de 2009, 16:29:06 »
usa el convertidor Val("número")
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado literatronic

  • PIC12
  • **
  • Mensajes: 98
Re: ¿Cómo envio enteros en Visual Basic 6.0?
« Respuesta #3 en: 23 de Abril de 2009, 11:11:15 »
Gracias PalitroqueZ.  Ahora el problema es en la recepción de Visual Basic, me explico, como estoy esperando que me lleguen 8 bytes desde el PIC entonces configuro RThreshold = 8, pero si envío desde el PIC una cadena que contiene números con dos cifras me los toma  por separado, por ejemplo: 10 1 2 3 4 5 6 7  me llega al TextBox de recepción como: 1 0 1 2 3 4 5 6 y se pierde el último número.

Muchas gracias. 

Desconectado PalitroqueZ

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: ¿Cómo envio enteros en Visual Basic 6.0?
« Respuesta #4 en: 23 de Abril de 2009, 19:27:24 »
Eso tiene que ver con el tamaño del buffer, y si estas usando el evento on comm, cuantos caracteres esperas recibir para que se active dicho evento.

Lo mejor es que lo hagas de a un carácter por vez y enviando un *eco para controlar el flujo de datos.


*eco: enviar un carácter que sea reconocido por el receptor como señal de validación para enviar el siguiente dato.


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

Desconectado literatronic

  • PIC12
  • **
  • Mensajes: 98
Re: ¿Cómo envio enteros en Visual Basic 6.0?
« Respuesta #5 en: 24 de Abril de 2009, 10:05:06 »
PalitroqueZ no tengo ni idea de como implementar lo que me decís.  Esta es la rutina que tengo para recibir:

Public Sub MSComm1_OnComm()

Select Case MSComm1.CommEvent
    Case comEvReceive   
    txtDatosIn.Text = MSComm1.Input + vbNewLine + txtDatosIn.Text
    Exit Sub
End Select

End Sub


Te agradecería que me pudieras ayudar con un ejemplo.

Gracias.

Desconectado PalitroqueZ

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: ¿Cómo envio enteros en Visual Basic 6.0?
« Respuesta #6 en: 24 de Abril de 2009, 21:15:43 »
yo cuando quiero fijar el size del dato que quiero recibir, pongo a RThreshold y a InBufferSize del mismo size, luego en el evento on comm, si llegaron todos los datos que esperaba, entonces se cumple comEvReceive

posteriormente le aplico un tratamiento a esos datos. a mi me gusta manejar los datos como cadenas, (porque en C para pic se usa printf que le cae muy bien).


ese tratamiento al que me refiero es como organizaré los datos en la cadena a enviar, en un proyecto que hice en su tiempo, necesitaba enviar el resultado de una conversión analógica digital mas su signo, lo que hice fué:

los primeros n caracteres en llegar, eran los datos de la conversión y el último cáracter, correspondía al signo.

¿y como se hace eso en visual basic?

bien, con Mid(), separaba ciertos caracteres dentro de la cadena recibida, luego al final guardaba en otra variable, no sin antes usar el Val()


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

Desconectado literatronic

  • PIC12
  • **
  • Mensajes: 98
Re: ¿Cómo envio enteros en Visual Basic 6.0?
« Respuesta #7 en: 27 de Abril de 2009, 12:59:15 »
PalitroqueZ no doy con lo que me decís.  La función Mid() sirve para "separar" una parte definida de una cadena, pero si no se de cuantos caracteres es la cadena que recibo como hago para utilizar Mid(), es decir, normalmente espero: 1 2 3 4 5 6 7 8, entonces Mid(string, 2, 1) = 2, pero si me envían: 10 2 3 4 5 6 7 8, me llega: 1 0 2 3 4 5 6 7, entonces Mid(string, 2, 1) = 0, y no el 2. 

No se si me estoy enrollando, muchas gracias por tu ayuda.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: ¿Cómo envio enteros en Visual Basic 6.0?
« Respuesta #8 en: 27 de Abril de 2009, 15:29:34 »
Si te negás a restarle los 48 para convertilos, estás usando 1 byte por cada digito. Porque estás enviando cada número con su codigo ASCII correspondiente, entonces cada uno ocupa 1 byte.La cadena 12345678 tiene 8 digitos mientras que el 102345678 tiene 9. Obviamente vas a tener que cambiar algo. Recomiendo que envíes cada dígito como un byte. Es decir, si tenés un 10 enviarlo como chr(10) para que ocupe 1 byte. luego en el uC tenés que separarlo usando un algoritmo BCD.

otra opción es enviar al principio de cada msj un caracter especial seguido de la cantidad de bytes que pensas transmitir:

ejemplos: %08 1 2 3 4 5 6 7 8
               %11 1 2 3 4 5 6 7 8 9 11

O bien, usar dos bytes por cada valor si trabajas con digitos entre 0 y 99 y hacer que el uC espere el doble de la cantidad que espera ahora:

01 02 03 04 05 06 07 08
10 02 03 04 05 06 07 08
"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 PalitroqueZ

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: ¿Cómo envio enteros en Visual Basic 6.0?
« Respuesta #9 en: 28 de Abril de 2009, 17:08:28 »
... pero si me envían: 10 2 3 4 5 6 7 8, me llega: 1 0 2 3 4 5 6 7, entonces Mid(string, 2, 1) = 0, y no el 2. 


entonces ese e el problema que tienes que resolver, tratar de enviar los datos de manera que no te llegue un 10, la respuesta es la que dá Bruno.

...Recomiendo que envíes cada dígito como un byte.
...


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

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: ¿Cómo envio enteros en Visual Basic 6.0?
« Respuesta #10 en: 28 de Abril de 2009, 21:50:09 »
Joer Palitro..jaja es medio redundante lo que dije...Quise decir que envíe cada Numero como un byte...:D
"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 literatronic

  • PIC12
  • **
  • Mensajes: 98
Re: ¿Cómo envio enteros en Visual Basic 6.0?
« Respuesta #11 en: 29 de Abril de 2009, 10:43:00 »
Gracias BrunoF y PalitroqueZ, voy a intentar combinar la ayuda de los dos para solucionar mi problema, pero como conclusión, me  parece que lo más fácil es cambiar el modo en que envío los datos desde el PIC.  Por otro lado, encontré está página con unas explicaciones muy buenas sobre algunos de los comandos de VB que me pueden servir:

http://www.recursosvisualbasic.com.ar/htm/tutoriales/tutorial-basico5.htm#instr

Espero que a alguien más le sirva.



 

anything