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: 

Dividir datos hexadecimales

Buen día, hice una pregunta parecida a esta en otro foro, pero al final el tema se salio de rumbo.

 

Estoy recibiendo datos hexadecimales por el puerto ethernet de mi instrumento de forma correcta y sin errores. Configuré mi instrumento en el MAX con la opción Manual Entry Raw Socket, debido a que las primeras dos opciones no me detectaba el instrumento de forma automática. 

 

Los datos que recibo siempre será un numero del 1 al 4, luegoun delimitador (coma) y luego el valor hexadecimal.

Quiero separar estos dos datos. El primer numero del 1 al 4 me indicará de cual instrumento proviene el dato, y el otro dato despues del delimitador me indicará el numero de serie. 

 

Tengo este codigo, y me funciona solo cuando recibo un solo dato:

 

MatchPattern1.jpg

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Sin embargo, cuando recibo mas de dos datos, solamente me separa la primera trama, y el resto me lo mantiene con todo y delimitador, como se ve en la imagen:

MatchPattern2.jpg

 

 

 

El resultado que quiero obtener sería algo como esto:

Resultado a obtener.jpg

 

 

He intentando con varias de las funciones para Strings y no logro dar con lo que quiero. No sé si deba realizar algun tratamiento previo del dato antes de realizar la operación de "separación".

Tengo mi instrumento configurado "LF" como line ending, con la opcion de configurarlo como None o CRLF.

Como delimitador utilizo la coma, con opcion de utilizar espacio o Tab.

 

Gracias de antemano por la respuesta.

 

 

0 kudos
Mensaje 1 de 7
5.008 Vistas

Hola Norberto,

creo que el foro a que te refieres es esto, sin embargo veo que todavía tienes el código original sin ninguna de las modificaciones que te sugerí.

¿Has intentado modificar el código? ¿Què te salió?

 



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
4.963 Vistas

Estimado Roberto, en efecto me refiero a ese foro. En aquel foro te respondí los resultados de la modificación que me recomendaste. Subí la imagen del codigo original porque era el que tenía a mano, pero sí hice las modificaciones.

 

Abrí este nuevo foro con otro titulo para ver si encontraba alguna diferencia.

 

 

0 kudos
Mensaje 3 de 7
4.880 Vistas

Que tal nguardia Buenos días,

 

Lo que está pasando es que cada que corres la función de VISA Read estás leyendo todo lo que está en el Bus de datos de serial y ahí están todos los mensajes por lo que lees todo el string y la función solo separa la primera coma que encuentra.

 

Te recomendaría leer hacer la separación y luego borrar el bus de VISA. Una vez que hagas esto te recomiendo guardar el resultado previo de el mensaje que separaste en un Shift Register en las orillas del ciclo While para que mantengas todos los mensajes que has mandado. 

 

Con esto puedes corregir los detalles que estás encontrando actualmente en tu programa.

 

Saludos

Juan Arguello Director Support Services @NI
0 kudos
Mensaje 4 de 7
4.676 Vistas

Hola Norberto, buenas noches.

 

Talvez te pueda servir algo como esto:

 

 SnippetSepararHexadecimal.png

 

Nomas la salida de la lectura del serial la conectas a "Lectura Original", y las salidas del While serán lo que tu estas esperando.

 

Espero te sea de utilidad, sino seguimos buscando como ayudarte,

 

Saludos.





0 kudos
Mensaje 5 de 7
4.666 Vistas

Manuel, implementé y ejecute tu codigo y hace la funcion que estaba buscando. Sin embargo, solo me muestra los resultados finales una vez que detengo y vuelvo a iniciar el programa. O sea, cuando termina el ciclo while. He estado intentando de que me muestre el resultado en tiempo real, ya que si se detiene el codigo el programa no sería funcional.

 

Si tienes alguna otra recomendación te lo agradecería.

Un saludo.

0 kudos
Mensaje 6 de 7
4.545 Vistas

Que tal nguardia Buenas Noches,

 

Recuerda que LabVIEW se rige por lo que conocemos como DataFlow o Flujo de Datos lo que nos indica que no tendremos información a la salida de un Nodo hasta que se termine de ejecutar lo que está dentro del nodo, de la misma manera un nodo no se puede ejecutar hasta que tenga todas sus entradas disponibles. 

 

DataFlow

 

 

En este caso en particular el nodo es el ciclo while y tus indicadores son el resultado del ciclo while por lo que no se actualizarán hasta que se detenga este ciclo. Si quieres ver los resultados en cada iteración del Ciclo solo tienes que mover los indicadores de tus datos Strig dentro del ciclo while.

 

Espero que sea de ayuda.

 

Cualquier otra pregunta estamos a la orden

 

Saludos

Juan Arguello Director Support Services @NI
0 kudos
Mensaje 7 de 7
4.524 Vistas