el 03-09-2013 06:41 PM
Tengan todos un cordial saludo, estoy haciendo un proyecto donde mido voltaje a traves de un microcontrolador pic16f877a, los valores medidos los tranmito a LabVIEW 8.6 mediante un adaptador USB-RS232, no tengo problemas en la transmisión, necesito graficar los datos leidos en labVIEW pero mientras transmito los datos, no he podido graficarlos correctamente, la palabra transmitida por ejemplo es de la siguiente forma 3.456V o 2.345mV, bueno los números varian segun la medición, ahora el problema es que al transmitir los datos, el graficador que estoy usando que por cierto es el waveform chart, grafica constantemente y eso implica que mientras la palabra está incompleta es decir puede ser 23V de la completa que es 3.423V, en el graficador aparece como si fuera 23 voltios coando en realidad es 3.423 voltios, no se si me explico bien, he intentado usar VI de la paleta string, y temporizar la lectura usando while loop, pero no he tenido exito, les rogaría una ayuda o una pauta para usar un VI o algo para poder ejecutar correctamente la realización de la gráfica en el labview. Esperando una ayuda, con mucho afecto Gustauro gracias.
el 03-12-2013 06:49 PM
Hola Gustauro
- Podrías usar alguna condición de espera hasta que sepamos que el dato está completo, algo como una estructura de case. Ahora tal vez con una imagen de cómo está implementado esta parte del código podría ayudar para darle una respuesta más precisa.
Saludos
el 03-13-2013 12:01 AM
Opino lo mismo que fromm8 es necesario observar como Gustauro lo esta implementando.
el 03-13-2013 01:43 PM
Hola,
Si vas a transmitir numeros, puedes pasarlo directamente como un IEEE float, que son 4 bytes y luego los unes y casteas a un single. De esta manera usas la condicion numero de bytes at port y cuando sea mayor a 4 haces una lectura de 4 bytes. Si por el contrario estas transmitiendo como numeros ascii tambien seria aconsejable que uses la misma cantidad de bytes para cualquier numero completando con 0 los espacios sobrantes, o si tambien transfieres las unidades pues vayas recibiendo los datos de uno en uno y concatenando como string hasta que llegue la V, y luego que llega la V asumes que ya llego ese numero y lo graficas, claro que tambien tendras q revisar el penultimo caracter para diferenciar V de mV.
Saludos,
el 03-14-2013 02:31 PM
Hola Fromm8, gracias por responder a ti y todos los demás interesados en colaborarme, bueno, mi programación está en lo siguiente:
lo que he hecho es, cambiar la palabra transmitida, el microcontrolador envia los valores de voltaje de la siguiente forma: V2.345 o mV3.456, para diferenciar, bueno con esto he logrado que Search/split string, busque la palabra V y si lo encuentra sale por substring before match el número restante mas la V, es decir el mismo V2.245, entonces si no encuentra V no sale nada por substring before match, entonces Search and Replace String también busca V y si lo encuentra lo suprime y solo salen los números restantes por Result String, y como verás eso lo convierto en número con coma flotante, y esto a Waveform chart, con esto la graficación ya no es tan disparatada como antes, ahora el problema que sigo teniendo es que a madida que van llegando mas datos los decimales van reduciendo y la gráfica se altera, y en un momento se hace cero y la gráfica se altera aun mas, bueno asi es como se afecta:
Como puedes observar, hay isntantes en que el valor se hace cero y eso hace que la gráfica no este clara. (la imagen de fondo nada que ver, mil disculpas, copie la imagen sin querer), sigo intentando eliminar este inconveniente, la solucion que me han recomendado los estoy tomando en cuenta y voy a intentarlo, pero como me han dicho que querian ver como estaba encarando mi proyecto, aqui se los muestro, bueno muy agradecido con su ayuda estaré esperando una pauta, Saludos a ti Fromm8 y a los demás que me han dado nuevas ideas...
el 03-14-2013 04:34 PM
Hola,
Estas leyendo de 6 en 6 caracteres, cuando transmites V2.345 son 6 pero cuando transmites mV3.456 son 7.
Veo que te funciona te fuiste por unas cajas de VISA mas genericas y tienes varias cajas intermedias que normalmente no se usan, en caso de transmisión RS-232 por lo general se acostumbra a usar las que estan en la paleta Serial y no VISA, aunque igual pertenecen a VISA.
Haces la lectura cuando llega algún byte, pero no lees 6 bytes, puede ocurrir que no hayan llegado los 6 bytes cuando mandas a leer y solo obtengas parte del valor, eso luego te descuadraria todos los siguientes valores. Para evitar eso puedes usar Bytes at port y esperar que sea mayor o igual a el numero de bytes que deseas leer.
Saludos,