From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.

Discusiones sobre Productos NI

cancelar
Mostrando los resultados de 
Buscar en lugar de 
Quiere decir: 

problemas en la transmision de datos por rs232

Que tal a todos:

Tengo un gran problema con la conversion de datos que genero en un VI y que puedo graficar en un waveform graph. El punto es que esos datos los quiero transmitir por rs232 para esto debo convertir estos datos a un string pero al tratar de graficar los datos en el VI que recibe estos se alteran debido a la conversion presentandose solo Bytes sin signos.

adjunto el Vi que genero la señal y en la secuencia n° 2 se aprecia el problema . Se puede ver la diferencia de graficos entre WaveformGraph 1 y el 2 .

Agradeceria cualquier tipo de ayuda de antemano gracias y suerte en sus proyectos.
seguire buscando info para ver como se soluciona.

Atte JHUGOX
0 kudos
Mensaje 1 de 11
4.575 Vistas
Al usar String to byte array y byte array to string tu array de floats se transforma en un arary de enteros de 8 bits sin signo, por lo tanto estás perdiendo buena parte de la información. Para evitar esto puedes utilizar Type Cast para convertir del array de float a string; para hacer lo contrario usa también este nodo pero cableando en el terminal type una constante de tipo array de floats (el valor que tenga da igual, sólo importa que sea el mismo tipo de datos que quieres a su salida).
Mensaje 2 de 11
4.557 Vistas
Muchas gracias por la respuesta voy a probar y de ahi te cuento que pasa.

suerte y saludos.
0 kudos
Mensaje 3 de 11
4.553 Vistas
Mira cambie al nodo de typecast y funciona perfectamente en la recontruccion de la grafica pero cuando envio los datos del array hacia el puerto serie el numero de bytes que en este se guardan es 8 veces mas grande que el tamaño del array mandado es decis un array de size 100 se escribe en el serial con 800 bytes, lo que produce al momento de recuperar la señal en otro VI una grafica totalmente distinta a la original.

Cualquier ayuda la agradezco enormemente.
0 kudos
Mensaje 4 de 11
4.552 Vistas
ahi va el VI modificado
0 kudos
Mensaje 5 de 11
4.549 Vistas
Con el array de bytes sin signo perdías información, esa información que ahora ya no pierdes es el tamaño extra que tienes que mandar por el puerto serie, puedes ver en este power point como los floats ocupan 8 bytes en memoria.

Ahora lo que te faltaría es hacer que el receptor acepte también datos de punto flotante. Si el tamaño es un inconveniente puedes probar con datos single precision (que son de 4 bytes) o intentar escalar los valores para trabajar con enteros, eso ya depende de los requisitos de tu aplicación.
0 kudos
Mensaje 6 de 11
4.547 Vistas
Vaya... se me olvidó poner el enlace. Es este: http://zone.ni.com/devzone/cda/tut/p/id/5200
0 kudos
Mensaje 7 de 11
4.545 Vistas
gracias jrafa pero aun me queda una duda. logre solucionar el problema de la grafica pero por ser tantos bytes por punto el puerto se satura y se pierde info.

Existe alguna manera de enviar flotantes por medio de en un solo byte es decir un byte para un punto en la grafica si pudieras darme una direccion de correo para mandarte el codigo seria genial.

lo   que estoy tratando de hacer es la simulacion de paquetes de datos que supuestamente  vendrian por hardware y entrarian al pc por rs232 se trata de monitoriar vafriables fisiologicas asi que la mayor precision es lo ideal.

de antemano gracias.
0 kudos
Mensaje 8 de 11
4.536 Vistas
Cada tipo de datos ocupa un tamaño fijo y no puedes variarlo, lo que puedes hacer es cambiar el tipo de datos, por ejemplo de float (8 bytes) a single (4 bytes); con esto, lógicamente, no podrás representar los mismos valores.
Si no te vale ninguno de los tipos de datos que hay disponibles podrías implementar algún tipo de algoritmo de compresión o (más sencillo) escalar los datos.
Para lo segundo simplemente tienes que multiplicar el array que generas por un número y convertirlo a array de enteros con o sin signo, el número por el que multipliques dependerá de la señal que generas, por ejemplo si el máximo de tu señal es 1 multiplicas por 255 para aprovechar todo el rango disponible (la mitad si trabajas con signo). En la recepción harías lo contrario: 'desescalar' el valor y convertirlo a flotante. Los problemas de este método son que perderás mucha resolución y que el rango de la señal de entrada debe ser pequeño, la ventaja simplemente que es sencillo.
Mensaje 9 de 11
4.528 Vistas
jrafa

Me gustaria que me colocaran una imagen del vi float2U8.vi ya que yo tengo el labVIEW 7.1 y no lo he podido abrir,
0 kudos
Mensaje 10 de 11
4.499 Vistas