Discusiones sobre Productos NI

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

flat squence structure

buenas, todos sabreis que es una flat squence structure....

 

bien tengo una pregunta:

 

si dentro de una frame, pongo un timed loop, por que se queda repitiendo todo el rato el mismo frame y no pasa al siguiente????

 

le pongo un timedd loop porque quiero que tarde un tiempo que quiero yo..por eso...como puedo hacer usando squence structure y timmed loops para pasar de frame en frame???

 

 

gracias!

0 kudos
Mensaje 1 de 14
4.273 Vistas

Hola Alan, lo que te esta pasando es por el flujo de datos en LabVIEW, una estructura no va dar datos hasta que termine todos los procesos internos. El Timed loop internamente es un Ciclo While con un Wait until next ms (y otras cosas adicionales). Por lo que a menos que pongas una condicion para deterner el timed loop, este se va a quedar ciclado y no va a permitir que se ejecute tu programa.

 Ahora si lo que quieres ejecutar es una secuencia, la flat sequence no es la solucion ideal, esta es util en FPGA y para forzar en ocaciones flujo de datos, pero no es el mecanismo ideal para controlar la ejecucion de todo el programa.

 Ahora en este caso veo que tienes que estar haciendo una secuencia de pasos, ahorita que tu programa no esta tan avanzado te recomiendo que cambies tu flat sequence por una maquina de estados. La desventaja de La Flat Sequence es que esta si quieres agregar un paso intermedio es muy limitado, también por ejemplo para detener tu programa tienes que esperar a que termine de ejecutarse toda tu estructura lo cual puede aparentar retraso y si quieres cambiar en forma dinámica en tu secuencia se vuelve muy complicado.

 

Aqui hay un ejemplo de maquina de estados con temporizacion:

Mezcladora de Cemento Con Recetas

 

Estos links tambien te pueden ser de utilidad:

Application Design Patterns: State Machines

Using a State Machine (Event Driven) Architecture - Developer Zone - National Instruments

Tutorial: State Machines - Developer Zone - National Instruments

 

Ahora cuando manejas tiempos en LabVIEW existe 2 tipos de temporizacion

  • Tiempo de Ejecución: Controla que tan rápido se ejecuta una aplicación en el procesador
  • Control de tiempo por software: Controla el tiempo en el que se tiene que realizar una operación en el mundo real.

 

El tiempo de ejecución es el tiempo que vas a colocar en el ciclo, si no colocas nada de temporización en tu ciclo este va a correr lo más rápido que puede y satura el procesador, para controlar este tiempo de ejecución te sirven funciones como el wait, wait until next ms o los timed loops (estos últimos con manejo avanzado también se pueden utilizar para controlar tiempo por software pero hay manejaras más sencillas de hacerlo.

El control de tiempo por software, te permite temporizar actividades por ejemplo si tu quieres que un semáforo este encendido 5 segundos, no vas a usar un ciclo que tarde 5 segundos por ciclo, si haces esto nada dentro del ciclo se va a poder ejecutar durante 5 segundos. Una forma de implementar esto es por ejemplo usas un wait de 10ms (esto es para que tu ciclo reaccione cada 10 ms, y dentro del ciclo agregas un Elapsed time, o generas esta variable funcional global para manejar el tiempo. Cada vez que transcurra el tiempo cambias el semáforo, pero tu ciclo corre mas rápido lo que permite que otras funciones trabajen con esto.

 

Saludos

Benjamin C
Principal Systems Engineer // CLA // CLED
0 kudos
Mensaje 2 de 14
4.266 Vistas

buenas,

 

El tiempo de ejecución es el tiempo que vas a colocar en el ciclo, si no colocas nada de temporización en tu ciclo este va a correr lo más rápido que puede y satura el procesador, para controlar este tiempo de ejecución te sirven funciones como el wait, wait until next ms o los timed loops (estos últimos con manejo avanzado también se pueden utilizar para controlar tiempo por software pero hay manejaras más sencillas de hacerlo.

El control de tiempo por software, te permite temporizar actividades por ejemplo si tu quieres que un semáforo este encendido 5 segundos, no vas a usar un ciclo que tarde 5 segundos por ciclo, si haces esto nada dentro del ciclo se va a poder ejecutar durante 5 segundos. Una forma de implementar esto es por ejemplo usas un wait de 10ms (esto es para que tu ciclo reaccione cada 10 ms, y dentro del ciclo agregas un Elapsed time, o generas esta variable funcional global para manejar el tiempo. Cada vez que transcurra el tiempo cambias el semáforo, pero tu ciclo corre mas rápido lo que permite que otras funciones trabajen con esto.

 

en esta parte no entiendo bein como me explicas entre el wait y el elapsed..., mi pregunta es,

 

si yo pongo un waitcon eso hago que la funcion o el lopp donde coloque el wait, rarcionara cada x tiempo( lo que le ponga al wait)

 

pero el elapsed time??no entiendo su funcion...podrias mandarme un pequeño ejemplo??gracias!!!

0 kudos
Mensaje 3 de 14
4.258 Vistas

Hola Alan, en los links que te puse la máquina de cementos es un ejemplo que tiene los dos conceptos implementados una más simple esta en este:

Temporizacion En LabVIEW

Enlapsed time no afecta el tiempo de ejecución de tu ciclo pero puede controlar el tiempo, la función de enlapsed time te entrega un true cada vez que pasa el tiempo que determinaste si este true lo cableas a un case por ejemplo, el contenido del case se ejecuta cada vez que pasa el tiempo definido en el enlapsed. Este tiempo no afecta la ejecución de tu ciclo. Si tu solo usaras esta en un ciclo while este correría muy rápido, por eso se juntan las dos, por ejemplo pones que tu ciclo se ejecute cada 10ms con el Wait, y con el enlapsed time controlas que algo suceda cada segundo, con eso tu ciclo funciona mas rápido.

Saludos

Benjamin C
Principal Systems Engineer // CLA // CLED
0 kudos
Mensaje 4 de 14
4.255 Vistas

mira el caso es el siguiente, con loq ue me has mandado no hago que una frame o no consigo darle un tiempo de ejecuccion a cada accion...

 

lo he puesto en frames para que se vea mejor...el primer y segundo frame seran de 10ms y el ultimo de 12...y siempe volvera a empezar...

 

como hago eso???

 

no entiendo como hacer con elpased...

 

adjunto mi ejemplo!

0 kudos
Mensaje 5 de 14
4.250 Vistas

Hola Alan lo que tienes ahorita no te va a funcionar porque el primer frame se va a quedar ahi hasta que se presione el stop, en este caso podiras remplazar el boton de stop por un enlapsed lo cual haria que ese ciclo se detuviera cuando pasara el tiempo y asi entraria al segundo frame. Ahora en tu aplicacion ademas te generaria el problema de que se cierra el queue por lo que los valores que tienes ahi ya no le llegarian a otro lugar solo existiria mientras se este ejecutando.

 

En el ejemplo de la maquina de cementos es una maquina de estados que controla algunos estados con tiempo.

Aqui te anexo un ejemplo muy sencillo de una secuencia de 3 etapas con tiempos distintos

 

Saludos

 

Benjamin C
Principal Systems Engineer // CLA // CLED
0 kudos
Mensaje 6 de 14
4.248 Vistas

entonces que me recomienda...con esta maquina de esatdo nose como pasar de estado a estado el queue...es mi problema...

0 kudos
Mensaje 7 de 14
4.245 Vistas

Hola Alan para manejar al queue seria igual podrías inicializarlo fuera del queue o tener un estado donde inicializas el queue, despues escribes los valores al queue, luego los lees del queue y escribes al datasocket. Y lo puedes leer en el otro.

Ahora esto no veo mucho caso porque como tenias implementado el queue era en un producer consumer, en el cual esta uno obteniendo datos mientras el otro los escribe y uno no depende del otro. Y el lector debería de ser independiente no secuencial.

 Que es lo que necesitas que haga tu programa?

Saludos

Benjamin C
Principal Systems Engineer // CLA // CLED
0 kudos
Mensaje 8 de 14
4.242 Vistas

al fin y al cabo lo que necesito es comunicar dos pcs, pero que sea una conexion bidireccional...un pc mandara datos cada 32segundos, y el que recibe tambien enviara otro dato al otro pc...klaro la cosa es que si pongo os dos en ejecucion, los dos empiezan a mandar y a leer y no respetan bien los tiempos...que es lo ma importante para i...que se respeten los tiempos!!!

 

tienes alguna idea de como puediese hacerlo¿¿¿

 

gracias!!!

0 kudos
Mensaje 9 de 14
4.240 Vistas

Hola Alan entonces ninguna de las maquinas envía y recibe al mismo tiempo, sino es secuencial, es decir mientras el cliente manda el servidor recibe?. Para hacer esto podrías usar los ejemplos que hay en Find Examples de TCP/IP, o incluso como lo tienes ahorita puedes poner un ciclo que este corriendo, con un enlapsed time, cada vez que el tiempo pasa envia los datos.

Si la cantidad de datos que tienes es fija incluso puede serte mas fácil con TCP/IP ya que con estos puedes poner que el que este escuchadno escuche hasta que reciba cierta cantidad de datos, así que no necesitarías temporizar la parte de recepción, solo envías y te quedas esperando a recibir los datos.

Saludos

Benjamin C
Principal Systems Engineer // CLA // CLED
0 kudos
Mensaje 10 de 14
4.238 Vistas