el 06-13-2008 01:30 PM
Hola Johana entonces no hay ningún problema en que los dos trabajen simultáneamente siempre y cuando no metas el ciclo del sub VI dentro de un Ciclo del VI principal, o por lo menos en la parte de monitoreo. Por ejemplo puedes en tu VI principal separa la parte de monitoreo del puerto en un while y la parte que manda a llamar a tus SubVIs en otro while. de esta forma el principal no se va a detener cuando mandes a llamar el subVI.
Saludos
06-13-2008 01:41 PM - editado 06-13-2008 01:47 PM
Hola Benjamin, es decir que si tengo un inconveniente por que mi subvi esta dentro de un event structure y no dejaja ejecutar otras tareas hjasta que termine con al grabacion.. cierto... me tocaria hacer lo de los od swhile pero eso no lo entiendo muy bien..
el 06-13-2008 02:01 PM
Hola Johanna un a forma fácil seria simplente saca el subVI de la estructura de eventos y colócalo en otro ciclo while, en este ciclo while mételo en un case y este case aliméntalo con un valor de una variable que modifiques desde tu VI principal, pero no olvides poner un wait until next Ms.
Sin embargo una mucho mejor forma seria utilizar un notifier, generas la notificación desde la parte de eventos, así en el segundo loop no es necesario agregar temporización, ya que no va a pasar al siguiente ciclo hasta que reciba la notificación.
Puedes revisar esto con el template de Master/Salve que viene en LabVIEW y puedes encontrar mas detalles en esta pagina
Application Design Patterns: Master/Slave- Developer Zone - National Instruments
Saludos
el 06-13-2008 04:04 PM
el 06-17-2008 05:04 PM
Hola Johanna si vas a tener problema si los dos intentan utilizar el puerto serial exactamente al mismo tiempo. Un pequeño truco que puedes hacer aquí seria trabajar en forma similar a una variable funcional global para manejar tu recurso de VISA. SI el vi no es reentrante se convierte en un recurso compartido (solo uno de los dos lo puede hacer) , en este no se va realizar mas que una interacción. Así no hay forma de que en los dos lugares lo manejen en el mismo momento.
Ahora lo único que tienes que tener cuidado es si desde tu SubVI envías algo y estas esperando recibir el dato, pero en eso tu subVI decide leerlo el va a leer la respuesta por lo que no es muy recomendable.
Te anexo un ejemplo de un VFG y la interface de Producer Consumer con eventos.
PD Antes de que envies o leeas tienes que darle una vez a configurar.
Saludos
el 06-17-2008 05:47 PM
el 06-17-2008 07:42 PM
Hola Johanna así es como describes, no entra ni el timeout ni ningún evento hasta que se termine de procesar el evento actual. Ahora la ventaja de usar la parte del puerto serial como te dije en una variable funcional global, es que te ahora el pasar el cable de la referencia de VISA y la otra es que protege que tu puerto no se escriba exactamente al mismo tiempo. Si un SubVI esta trabajando, y lo llamas en otro lugar (el mismo subVI) en el segundo lugar se a a empezar a utilizar cuando termine de utilizarse en el primero lo que protegería tu puerto de ser utilizado y así lo podrías utilizar en dos lugares.
Ahora si como mencionas no si el event case es largo mientras este esté trabajando no va a poder trabajar tu programa final por eso podrías hacer de abrir la sesión de visa fuera de tu ciclo while con el case (llamar a el vi en modo de inicializar) y cerrarla al final (llamarlo en modo de cerrar) y este vi lo puedes incluir en tu otro subVI y lo mandas a llamar en un ciclo aparte así no se detiene tu programa principal. El hecho de que este como subVI va a funcionar como un semaforo. También podrías utilizar estas estructuras en lugar de utilizar el SubVI como variable funcional Global.
Saludos