03-29-2013 01:06 PM
Hola a Todos,
Estoy implementando un SCADA para una planta deshidratadora de gas, en el momento estoy creando las HMI para el operador. el inconveniente que tengo es el siguiente:
Tengo un vi que funciona como una ventana emergente que visuliza la informacion pertienente de un instrumento transmisor cada vez que se da click sobre el instrumento desde la HMI principal. pero el problema es al dar click sobre otro instrumento porque la informacion se traslapa. la idea es poder abrir dos paneles frontales del mismo vi con la informacion correspondiente a cada instrumento, sin nececidad de hacer una copia del VI por cada instrumento
Estoy intentando con las propiedades de Reentrant Execution del VI, y es asi como soluciono que la informacion no se traslape, pero no se como hacer que se abra el panel frontal de cada Clone que se crea del VI.
Con un Invoke Node solo abre el panel frontal original pero no muestra ninguna informacion.
Probe con la opcion Open Front Panel When Called, y funciona abriendo los paneles de cada clone, pero las ventanas quedan intermitentes y no se dejan manipular.
Gracias por la informacion y sugerencias o un ejemplo que puedan brindarme de como se podria implementar esta solucion
Solved! Go to Solution.
04-03-2013 05:44 PM
Hola lucho_e7
Esto lo puedes solucionar mandando llamar el VI de forma dinámica. A lo que me refiero es que puedes arrastrar el icono del subVI al diagrama de bloques de tu VI principal y configurarlo dando click derecho al icono, seleccionando la opción "SubVI Node Setup" y marcando la opción "Show front panel when called". Te anexo unos VI's donde ilustro lo mencionado.
Saludos
04-04-2013 09:46 AM
Hola FranciscoS,
Muy amable por su respuesta, me ayudo a comprender mejor la utilizacion de subvi clone con la opcion "open front panel when called", aunque ya lo habia intentado de esta manera, el error que yo tenia era que mi subvi no estaba contenido dentro de una estructura While, y por tal motivo el panel frontal del subvi quedaba abriendo y cerrando intermitentemente sin posibilidad de manipularlo.
Gracias por su atencion
04-09-2013 09:21 AM
Hola Fracisco,
Continuo sin poder hacer lo busco con la ventanas emergentes, tengo los siguientes incovenientes:
Subvi que funciona como ventana emergente no lo puedo contener en un ciclo while porque necesita esta intercambiando informacion con el vi que lo llama.
cunado le doy la opcion en "subvi node stup" - "open fronta panel when called" funciona perfecto, se abre el panel frontal como debe ser y mustra la informacion correcta. pero necesito que se cierre automaticamente cuando dejo de llamarlo, entonces le doy la opcion "close aftertwards if originally closed", pero como el subvi no contiene un ciclo while, la ventana del subvi se abre y se cierra intermitentemente.
Al ser subvi clone, no eh podido con las opciones del invoke node, porque siempre me redirige al subvi original.
Existe alguna forma de cerrar programaticamente un sbvi clone?
Agradezco mucho su colaboracion, no eh logrado avanzar mucho y ya estoy sobre el tiempo.
06-13-2013 02:36 AM
Hola lucho_e7,
¿Solucionaste el problema con las ventanas emergentes? Yo también tengo pero al tener los subvi contenidos en bucles while sí puedo cerrarlos con un Stop Button. Te remito al siguiente post por si te sirve de ayuda: http://forums.ni.com/t5/Discusiones-sobre-Productos-NI/como-llamar-a-otro-VI-sin-subvis/td-p/593259
Si tienes sitio en la pantalla quizá te merezca la pena usar un Subpanel gracias al cual puedes llamar a diferentes subvi a modo de ventanas pop-ups. Necesitas un Invoke Node para "Run VI" y un Invoke Node para "Insert VI". En "Find Examples", en el menú de búsqueda si escribes "subpanel" encontrarás varios ejemplos relacionados.
Espero que te sea de ayuda
Un saludo
06-13-2013 08:25 AM
Hola Irenuka, Gracias por tu comentario
Ya encontre la forma de abrir y cerrar el front panel de un subVI clone programaticamente como una ventana emergente, con un property node y un invoke node, el cual se hace de la misma forma que con un VI normal, la diferencia es que hay que crear una referencia para el subVI Clone usando el nombre del subVI clone asi: "subVIclone.vi:1", luego con la funcion "open VI reference" se crea la referencia y se conecta al "invoke node" de abrir o cerrar el front panel.
LabView crea un numero consecutivo por cada clone que se haga del VI que es el numero que esta despues de los " : " que siguen al nombre del VI, para esto usamos un "property node" con la funcion "CloneName" la cual devuelve en un string el nombre correcto y el consecutivo del subVI clone asi "subVIclone.vi:1".
Adjunto una imagen con el modelo del codigo que debe estar contenido dentro del codigo del subVI clone
De esta forma puedo usar un mismo VI como modelo de ventana emergente, usarlo cuantas veces sea necesario y llamar varias ventanas emergentes del VI al mismo tiempo desplegando diferente informacion
Los subVI emergentes podran estar ejecutandoce, realizando operaciones especificas y solo se abre el Panel Frontal cuando el usuario haga click en un boton, asi puedo pasar informacion a otros VIs sin tener que esperar a salir del ciclo del subVI emergente.
06-13-2013 08:45 AM
Hola lucho_e7,
Gracias a tí por tu aportación no sabía que se podían hacer clones del VI principal
Solo una pregunta: el tener varios subVI clones operando a la vez,¿consume mucha memoria?
Yo por ahora lo tengo todo en una gigantesca VI principal salvo algunos SubVI a los que llamo de manera dinámica a través de un event structure, pero no se si eso consume más memoria que lo que has propuesto
Gracias de antemano
06-13-2013 09:21 AM
Hola Irenuka,
Claro que puedes crear una copia o clone del VI sin necesidad de crearla en disco, esto se hace en las propiedades del VI, en la opcion Execution, ahi puedes selccionar el comportamieto del VI con las opciones de Reentrancy asi:
-Non-reentrant execution :
Serializa las llamadas simultáneas a un VI, uso mínimo de memoria. hace que todas las llamadas a este VI compartan un solo Estado, preserva los valores de los controles y registros de desplazamiento sin inicializar entre llamadas. No crea Clones
-Shared clone reentrant execution:
Permite la ejecución en paralelo de llamadas simultáneas al VI con un uso relativamente bajo de memoria. Con el fin de reducir el uso de la memoria, este tipo de reentrada reutiliza los clones entre llamadas VI. Si una llamada VI se produce mientras que todos los clones están en uso, LabVIEW asigna un nuevo clon de esa llamada VI.
-Preallocated clone reentrant execution:
permite la ejecución en paralelo de llamadas simultáneas a este VI minimizando gastos de llamadas y jitter. Este tipo de reentrada asigna un clon independiente para cada llamada a la VI. Por lo tanto, cada llamada VI mantiene su propio estado, preservando los valores de los controles y registros de desplazamiento sin inicializar. este tipo de reentrada requiere más memoria que la anterior.
Bueno dependiendo del alcance de la aplicacion, se escoje el comportamiento del subVI, por ejm si el subVI es una funcion que no se tiene que ejecutar al mismo tiempo con diferentes datos de otros VIs pues no es necesario que se creen clones y consume menos memoria.
En mi caso, requiero visualizar varias veces ese subVI emergente al mismo tiempo, pero con diferentes datos segun la peticion del usuario, es por eso que utilizo la ultima opcion de reentrancy.