el 06-13-2013 09:17 PM
Hola que tal! Podrìa alguien ayudarme
Apenas estoy familiarizandome con LabVIEW y no entiendo como separar o bien como interpretar los datos que recibo por el puerto serial. Mi caso es el siguiente: atravès del PIC 18F4620 envìo el dato de la temperatura actual, enseguida el del estado de un ventilador, ecendido(1) o apagado(0) y en seguida su velocidad (calculada en el PIC por uso del PWM).
Mi pregunta entoces es como separar esta informaciòn que recibo del PIC en LabVIEW, para que la pueda utilizar en difentes aplicaciones: la temperatura actual en una gráfica, el estado del ventiladro en un led y su velocidad en un diciador de aguja.
Ahora bien, tengo la misma duda para enviar los datos al PIC, ¿de qué forma deben ser enviados?, quiero decir como se que no envio dos datos al mismo tiempo, etc.
Adjunto el VI con lo poco que he logrado hacer.
Gracias!
el 06-14-2013 03:30 AM
Hola:
Para la comunicación es bueno que establezcas un protocolo. Es decir, si envías una temperatura, le pones antes o después un carácter específico (por ejemplo T) para saber que se trata de la temperatura, lo mismo para la velocidad u otras variables que quieras enviar.
Además este protocolo debe estar de acuerdo con el PIC para que interprete estos datos de forma correcta.
Por otra parte para el puerto de comunicaciones y la velocidad de transmisión puedes utilizar un solo control y variables locales.
Saludos.. Moisés
el 06-14-2013 02:40 PM
Hola,
Veo que este es un tema que sobre el cual siempre se presentan dudas, te adjunto un codigo (SIN PROBAR) que pienso puede servirte de ayuda a ti y a las demas personas con el mismo problema.
Entre lo comun y lo facil opte por un paquete de datos de esta forma:
- 1 Byte de inicio (por default puse 0x7E)
- 1 Byte de cantidad de datos = N.
- N Bytes de datos.
- 1 Byte de checksum igual a la suma de los N bytes. (aqui deberia usarse un codigo CRC pero de momento opte por lo facil)
- 1 Byte de fin (por default puse 0x7E)
En el caso del ejemplo que coloque (que es lo que quieres hacer o similar)
- Asumi que para encender el ventilador mandas '1' y para apagarlo '0'.
- Y que si mandas una 'R' el micro envia 4 bytes con las variables que mide en formato binario de esta forma: 2 bytes de temperatura, 1 byte de encendido, 1 byte de velocidad.
Por ejemplo si el micro lee todo cero enviaria 0x7E, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E
Poniendo otros valores mandaria 0x7E, 0x04, 0x00, 0x12, 0x01, 0x1A, 0x2D, 0x7E
Si quieres haz las pruebas mandado unas tramas fijas cuando reciba la 'R' para ver que funcione como lo imagino, y de funcionar, haces los cambios para tu data con el empaquetado adecuado y pruebas como se comporta, y en caso de problemas me comentas a ver que error pude cometer.
Saludos,
el 07-12-2013 04:30 PM
Luis_AM3C escribió:
Hola,
Veo que este es un tema que sobre el cual siempre se presentan dudas, te adjunto un codigo (SIN PROBAR) que pienso puede servirte de ayuda a ti y a las demas personas con el mismo problema.
Entre lo comun y lo facil opte por un paquete de datos de esta forma:
- 1 Byte de inicio (por default puse 0x7E)
- 1 Byte de cantidad de datos = N.
- N Bytes de datos.
- 1 Byte de checksum igual a la suma de los N bytes. (aqui deberia usarse un codigo CRC pero de momento opte por lo facil)
- 1 Byte de fin (por default puse 0x7E)
En el caso del ejemplo que coloque (que es lo que quieres hacer o similar)
- Asumi que para encender el ventilador mandas '1' y para apagarlo '0'.
- Y que si mandas una 'R' el micro envia 4 bytes con las variables que mide en formato binario de esta forma: 2 bytes de temperatura, 1 byte de encendido, 1 byte de velocidad.
Por ejemplo si el micro lee todo cero enviaria 0x7E, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E
Poniendo otros valores mandaria 0x7E, 0x04, 0x00, 0x12, 0x01, 0x1A, 0x2D, 0x7E
Si quieres haz las pruebas mandado unas tramas fijas cuando reciba la 'R' para ver que funcione como lo imagino, y de funcionar, haces los cambios para tu data con el empaquetado adecuado y pruebas como se comporta, y en caso de problemas me comentas a ver que error pude cometer.
Saludos,
Hola que tal, gracias por la información!! Logré recibir un string desde Hyperterminal con tada la información que requiero en LabVIEW y todo se ejecuta correctamente, sin embargo, esto lo hago esperando escribir en el Hyperterminal cuando lo requiere el VISA Read y utilizando el modo Highlight Execution, pero cuando quiero hacer que VISA Read reciba la información desde el PIC ocurre el problema de que no concuerda el envio de uno con la recepción del otro. Actualmente estoy probando con Bytes at Port dentro de un ciclo While (sale cuando es mayor a 0) pero el programa en LabVIEW se queda en ese ciclo nunca sale.
Alguien podría ayudarme? Gracias!
Adjunto uno foto del código.
el 07-12-2013 04:30 PM
jeje se me olvidó la foto
el 07-15-2013 11:10 AM
Hola,
SI Bytes at Port es mayor que cero, pues hasta que no hagas un read de esos valores no va a cambiar la condición y se quedara en el ciclo, tendrias que colocar el read dentro por ejemplo para que una vez que leas los valores se salga del ciclo.
Saludos,
el 07-19-2013 09:08 PM
Problema resuelto, despues de mucho batallar he logrado enviar y recibir una trama correctamente, subo el código para quien quiera consultarlo
el 12-04-2013 09:23 PM
Yo2
seria mucha molestia pedirte que adjuntes el archivo INSTRUCTABLES en version 10.0??.
Saludos y Gracias.
el 06-24-2014 07:54 PM
Discula por no responderte a tiempo, tiene meses que no abría mi cuenta jejejejeje, me he desconetado un poco de labview ultimamente. Bueno, creo que mi código esta en la versión 2010 de LabVIEW, mmmm antes utilizaba el 8.5 pero este esta en el 2010, además..... mmm creo que ya perdi el codigo. Bueno espero te haya servido, de cualquier forma cualquier duda coméntala!