Discusiones sobre Productos NI

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

Problemas con numeros Hexadecimal

Hola otra vez. Este es mi nuevo problema, es algo dìficil de explicar:
Tengo una tarjeta de adquisición de datos de 8 entradas y 8 salidas, que conecto a mi PC por medio del puerto serial. Para esto usé el ejemplo que se llama "Basic Serial Read and Write". Estoy trabajando con LV 7.1. Lo que hago es leer las entradas y escribir en las salidas. Con un ATMEGA, mando byte con las 8 entradas. Si tengo activada solo una entrada, mandaría un 80, por ejemplo.
Cuando leo con el ejemplo de LV,  si leo el 80, veo en la pantalla donde recibo lo leido el caracter ASCII correspondiente al 80h. Si en esa pantalla (que simplemente es un string), le cambio de Normal Display a Hexa Display, ahora si puedo ver el 80 que recibí desde la tarjeta. Después de eso, ese string, lo convierto a número, después a un vector de booleanas, para asi tener de nuevo mis 8bits en LV, para manejarlos. Con la lectura no tengo ningún problema.
El problema es cuando quiero escribir. Intenté hacer el proceso inverso al de lectura: -Pongamos el ejemplo de que quiero mandar un 80-
Tengo un vector de booleanas, lo transformo a un número, ese número para mandarlo por serial lo transformo a String, (number to hexa string). en las propiedades de ese string, le pongo display normal, y si me aparece el 80, pero al mandarlo por el serial me manda un 3830, que sería el ASCII del 8 y el ASCII del 0. Si le doy display Hex, me aparece esta cantidad (3830), y pues como dije anteriormente, no me manda el 80h, sino que los ASCII de esos 2 nùmeros por separado.
Creo que el problema esta en la conversion de Num a String. También probé convertir a Dec-String, pero empeora las cosas, porque en decimal el 80h, sería 128, y lo que me mandaría sería el 313238...
Como le podría hacer, para que, en base a un vector de booleanas, donde cada booleana representa un bit, me mande realmente el Hexa?
Como hay que convertir?
0 kudos
Mensaje 1 de 7
5.623 Vistas
Para convertir tus booleanos en un número puedes utilizar el Boolean array to number.vi


Proud to use LW/CVI from 3.1 on.

My contributions to the Developer Community
________________________________________
If I have helped you, why not giving me a kudos?
0 kudos
Mensaje 2 de 7
5.622 Vistas
Si, eso es lo que hago, tengo mi vector de booleanas, y lo convierto a un numero, con "Boolean array to number". ahi no hay problema, el problema es cuando convierto de numero a String, para poder mandarlo al serial, ya que en el ejemplo tienes que mandarle un string y no un number. Pero si coniverto el numero 80 a Hexnumber string, cuando lo manda al serial no manda el 80 manda un 3830, que es el ASCII del 8 y del 0. Como lo explico en la pregunta ppal.
0 kudos
Mensaje 3 de 7
5.613 Vistas

Tienes que convertir la salida del Boolean array to number a un byte usando el To unsigned byte Integer vi, y la salida de esto la cambias a un array y la pasas al Byte array to string vi.

Te añado un ejemplo que convierte un array de 8 bits a un carácter así como un array de 32 booleanos en una string de tres caracteres: ambos puedes mandarlos por serial a tu tarjeta.



Proud to use LW/CVI from 3.1 on.

My contributions to the Developer Community
________________________________________
If I have helped you, why not giving me a kudos?
0 kudos
Mensaje 4 de 7
5.605 Vistas

 

Saludos a todos, tengo un problema para convertir un String Hexadecimal a decimal

 

Tengo un String Hexadecimal que varia entre 2 y 20 caracteres, el problema es que cuando lo quiero convertir a decimal, en el caso de que el numero de caracteres supera los 8 (ej. FC6FCFC45D0CE0CDA) el comando STRING HEXADECIMAL TO DECIMAL, me corta la cadena a los primeros 8 caracteres.

 

Por ejemplo el HEXADECIMAL STRING TO NUMBER me convierte el numero 0xF0CC30C03CCCFCC4 en 4294967295 decimal 

 

Me gustaria seber si existe una solucion, dando gracias de antemano por toda la colaboracion prestada a este asunto

0 kudos
Mensaje 5 de 7
4.294 Vistas

Estimado Marwuin

 

La razón por la cual te lo acota es porque el número más grande que espera es un U32, puedes cambiar ese comportamiento y seleccionar una representación mayor como U64 que sería la más grande. Sobre el VI que utilizas de "Hexadecimal String to Number" encontrarás una terminal con el nombre de "default (U32)", inserta ahí una constante numérica y cámbiale la representación dando clic derecho>>Representation>>U64. Asegúrate también que el indicador tenga la misma representación.

 

Quedo a tus órdenes para cualquier cosa.

 

Saludos.

 

Coamín Cruz

NI México

0 kudos
Mensaje 6 de 7
4.235 Vistas

Gracias, me sirvio mucho su respuestra

0 kudos
Mensaje 7 de 7
313 Vistas