Discusiones sobre Productos NI

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

ESCRITURA PUERTO SERIE

Mi nombre es Miguel ,
Soy nuevo en este foro debido a que estoy empezando a intentar realizar, de forma autodidacta, aplicaciones hechos por mi, ya sea en Visual Basic o en Labview.

En este caso es una aplicación sencilla hecha en labview.
La versión que estoy utilizando es Labview 13 64 bits.

Os paso acontar de que se trata esta aplicación;

Estoy leyendo por un puerto serie de mi computadora (virtualemulateport),
Estoy leyendo unos digitos, ejemplo: MIGUEL"12345"\PRACTICA LABVIEW
Quiero escribir estos mismos dígitos por otro puerto serie pero quiero hacer una discriminación de esta lectura y solo escribir por el puerto serie 12345.

Hasta ahora he conseguido escribir lo mismo que lee, se que para vosotros eso es facil pero yo llevo practicando todo el fin de semana y es lo que he conseguido, pero me he quedado atascado en como hacer la discriminación y escribir solo los dígitos que yo quiero.

Me podriais dar alguna pista para solucionarlo??

Muchas gracias por vuestra ayuda de antemano.

Os adjunto la aplicación.

Un saludo a todos

0 kudos
Mensaje 1 de 4
4.200 Vistas

Buenas,

 

un par de apuntes. No es una buena idea ejecutar dos bucles while anidados. Si te fijas bien, estas ejecutando la configuracion de los puertos a cada iteracionEmoticono frustrado

Pero, como has dicho que estas empezando...Guiño

Te recomiendo que busques el ejemplo "Continuous Serial Write and Read.vi" en "Ejemplos" del menu Ayuda. "State Machine Fundamentals" tambien te puede echar una mano para ver como puedes estructurar tu programa. Es muy basica pero da una idea muy clara sobre el fucionamiento de esta estructura en LabVIEW.

 

Como pista para poder discriminar dentro de una cadena de caracteres. Hay diversas maneras en funcion del mensaje que se recibe. Yo acostumbro a usar "Match Regular Expresion" por la flexibilidad que da poder usar PCRE.

 

Un saludo

0 kudos
Mensaje 2 de 4
4.193 Vistas

Hola BenRoura

 

Gracias de antemano por responderme.

 

He logrado hacer la aplicacion, te paso el ejemplo.

Al final lo he hecho con String Subset.

En la escritura le he puesto, efectivamente anidado, otro bucle while porque quiero mostrar el resultado final en cada escritura del puerto.

 

He estado probandolo continuamente con una aplicacion que tengo creada con un lector de barcode y plc durante la tarde y no me ha fallado.

 

Bajo tu experiencia y atendiendo a mi ignorancia en este tema, es posible que a la larga me de problemas?

 

Saludos

0 kudos
Mensaje 3 de 4
4.185 Vistas

Hola,

cuando ejecutas un bucle while, mantienes ocupado al procesador constantemente si no pones atencion en como se desarrolla el flujo de datos. Si tu progrma tiene que leer un par de veces y luego lo cierras, no es problema. No estaoptimizado de ninguna manera y aunque sea eficaz, no es eficiente. Como aplicacion no aguantaria el paso del tiempo. siento ser tan crudo, pero es asi. Aunque si es para hacer un par de pruebas y a ti te vale...

 

Una buena idea es inicializar el los puertos en bucles paralelos y separar las funciones de escritura y lectura. Si te fijas, lo que pretendes es leer datos de un puerto mientras escribes en otro. La clave de asunto es ese "mientras". Para ese tipo de funciones hay una manera mas eficiente y escalable de hacerlas. un primer paso (aparte de la State Machine que te mencione) seria els diseno Producer/Consumer, que es exactamente lo que tu haces: los datos leidos (producidos) de un puerto son escritos (consumidos) por otro. Si necesitas el mismo tipo de funcionamiento pero un poco mas avanzado puedes anadir queues: aqui tienes una gran explicacion.

 

Sinceramente, uno de los grandes errores a la hora de empezar con LabVIEW es hacer programas que "funcionan" sin mas. Se vuelven caoticos e inmanejables muy rapido.

Tomate un tiempo para entender los ejemplos. Merece la pena.Guiño

 

 

 

Mensaje 4 de 4
4.149 Vistas