Discusiones sobre Productos NI

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

Sugerencias para programar secuencialmente

Bueno, soy relativamente nuevo programando en LabView, pero por lo poco que usado, me di cuenta que los códigos se ejecutan en forma combinacional o en paralelo. Pero aun no se como programar en forma secuencial o en serie. Estoy muy acostumbrado a C, donde primero se ejecuta una instrucción y luego otra y asi sucesivamente. Pero aqui en LabView por decirlo asi, todo se ejecuta al mismo tiempo. Como puedo hacer para que primero se ejecute un proceso u evento, cuando acabe ese, se ejecute otro; por asi decirlo, para que sea algo asi como ejecutar lìnea por línea en C. Estuve pensando en usar banderas, pero no se si exista algún método mejor. Podrían darme alguna sugerencia?
0 kudos
Mensaje 1 de 23
8.142 Vistas

Hola  Fercho 8:

 

Gracias por utilizar los foros de National Instruments.

 

Puedes programar secuencias mediante las estructuras Flat Sequence Structure o Stacked Sequence Structure.  Dichas estructuras obligan a que el código se ejecute en forma de secuencia una parte después de la otra y no al mismo tiempo. Otra forma de llevar un orden en la programación es utilizar la estructura de la máquina de estados la cual es secuencial, pero al mismo tiempo permite el regresar a otros estados mediante decisiones booleanas. Te anexo algunos ejemplos que espero te sean de ayuda, de igual manera puedes buscar ejemplos en el Example Finder de la ayuda de LabVIEW.

 

Que tengas un excelente día y estamos en contacto.

 

Carlos Pazos

AE

NI México

Carlos Pazos

Senior Product Marketing Manager

National Instruments
Descargar todos
Mensaje 2 de 23
8.129 Vistas

Podrías utilizar un "Flat sequence structure" ó un "Stacked sequence structure" pára realizar el proceso en serie que tu requieres. Te adjunto una gráfica y espero te ayude.

JC

Mensaje 3 de 23
8.130 Vistas
Cpazos, oye, tengo un problema, el LabView que tengo es el 8.0, pudieras mandarme algo para esa versión?
0 kudos
Mensaje 4 de 23
8.107 Vistas

Hola  Fercho 8:

 

Te anexo los archivos para LV8.0.

 

Saludos.

 

Carlos Pazos

AE

NI Mexico

Carlos Pazos

Senior Product Marketing Manager

National Instruments
Descargar todos
Mensaje 5 de 23
8.103 Vistas
podrias especificar un poco a que te rerieres con secuencialmente, ya que para quienes programamos en codigo de lineas, es algo confuso empezar con labview, de partida, no todo se ejecuta al mismo tiempo, sino que existe una jerarquia, como por ejemplo si tienes dos ciclos, cualesquiera, por ejemplo un for dentro de un while, el while no continuara ejecutandose hasta que el for termine y entregue sus resultados, mientras se ejecuta los valores puedes guardarlo en un arreglo o perderlos y quedarte solo con los finales, los tuneles y registros de corrimiento son equivalentes a las variables de traspaso de las funciones y procedimientos de un codigo convecional y las variables son los cables, las que labview define como variables tiene  otros usos, los cuales aun no conozco

Mensaje editado por sebapostigo

0 kudos
Mensaje 6 de 23
8.069 Vistas

Bueno, para responderte hay que considerar uno de los paradígmas de LabVIEW: cada VI, cada icono en tu programa podrá ser ejecutado en cuanto tenga todos los señales listos a sus ingresos. Si esta condición es realizada, el VI puede ser ejecutado en cualquier momento, independentemente del estado del proceso y de lo que pasa en otros VI en el mismo esquema (y por la ley de Murphy, puedo garantizar que efectivamente será ejecutado en el peor momento posible! Guiño ).
Para evitar esto, LV te proporciona las sequencias que garantizan que los VI puestos en un frame vengan ejecutados antes de los que están en frames posteriores. Todo esto tiene obviamente un coste, y es la rigidez de las estructuras que no te permiten omitir la ejecución de ciertos frames ni tampoco regresar a frames anteriores.

Ahora, si bien la ejecución paralela puede resultar una novedad tremenda y hasta peligrosa para los que estamos acostumbrados a lenguajes de texto, este mismo paradígma puede ser transformado en una válida opción para tu aplicación, basta con considerar que un VI NO viene ejecutado hasta que TODOS sus ingresos contengan datos válidos. Es este sentido, si tú puedes trazar un hilo que conecta una de las salidas de un VI al ingreso de otro, estarás seguro que el segundo no será ejecutado hasta que el primero termine su ejecución aunque otros ingresos del segundo ya tengan listos sus datos.
Todo esto puede aplicarse de manera muy simple en procesos de adquisición de mediciones u de comunicación con dispositivos externos mediante VISA, puesto que todos estos vi tienen los terminales error in / error out y muchos tienen un resource reference in / out: si conectas en serie estos vi estarás seguro que, por ejemplo, la adquisición de las mediciones no viene ejecutada hasta que el task sea corectamente configurado. Este procedimiento es masivamente aplicado en todos los ejemplos de DAQ y VISA presentes en LV: te sugiero que los examines mirando en especial modo este esquema.



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?
Mensaje 7 de 23
8.053 Vistas
fercho8...NI acaba de sacar al mercado un módulo llamado STATECHART y creo que es lo que tú estas buscando..te anexo ejemplo proporcionado por NI de maquina de venta de refresco..
0 kudos
Mensaje 8 de 23
7.845 Vistas
te envio ejemplo secuencial maquina de refrescos
Mensaje 9 de 23
7.845 Vistas
Muchas gracias, aunque me falta el "NextState.vi", y no pude verlo. pero ya pude solucionar el problema. Ahora ya puedo programar secuencialmente, ya sea con Flat sequence o Stacked Sequence.
0 kudos
Mensaje 10 de 23
7.824 Vistas