- Para permitir que desde el Front Panel se abra cualquier archivo (cualquier extensión) puedes usar un control Path (o botón que abre un File Dialog) y llamar al gestor del sistema operativo para que abra el archivo con la aplicación asociada (en Linux: xdg-open). En LabVIEW esto suele implementarse con System Exec.vi o con la API de VI Server para abrir documentos.
- Para abrir y ejecutar otros VIs como VIs independientes (no como subVIs) usa VI Server: Open VI Reference → Invoke Node (Run VI) con "Wait Until Done?" = FALSE y, si quieres que se muestre el FP, invoca Front Panel: Open. De esta forma el VI hijo corre en su propio hilo/ejecución y al detenerlo no se detiene el VI padre.
- Proporciono abajo instrucciones paso a paso y ejemplos (comandos para Linux/Windows y esquema del diagrama de bloques con las funciones a usar).
1)
Herramienta/función para abrir archivos de cualquier extensión desde Front Panel
-
Elementos UI:
- Usa un Path Control o un botón que abra un File Dialog (Dialog & User Interface → File Dialog) para que el usuario seleccione el archivo.
- Para abrir el archivo con la aplicación por defecto del sistema (recomendado cuando el objetivo es abrir “cualquier extensión”):
- En Linux: usar System Exec.vi con el comando xdg-open "<ruta_al_archivo>".
- En Windows: usar System Exec.vi con cmd /C start "" "<ruta_al_archivo>".
- En macOS: usar System Exec.vi con open "<ruta_al_archivo>".
- Alternativa (más “LabVIEW-native”): si quieres abrir otros VIs, usa VI Server (Open VI Reference + Run VI + Front Panel: Open). Para archivos que no son VIs, VI Server no aplica — ahí System Exec o la llamada al gestor de documentos del SO es la vía correcta.
2)
Cómo crear un VI que abra otros VIs y que estos corran como VIs independientes (no como subVIs)
Pasos clave:
- No uses Call By Reference Node ni simplemente arrastres el VI dentro del diagrama como subVI si quieres independencia. En su lugar usa VI Server:
1. Coloca un Path Control (o construye la ruta del VI hijo) en el FP del VI padre.
2. En el diagrama de bloques, coloca la función Open VI Reference (Programación → Application Control → VI Server → Open VI Reference).
3. Conecta la ruta del VI hijo a Open VI Reference. Esto devuelve un VI reference (refnum).
4. Crea un Invoke Node a partir del VI reference (clic derecho sobre el ref → Create → Invoke Node) y selecciona el método "Run VI".
- Pasa el control "Wait until done?" = False (no esperar a que termine).
- Si la versión de LabVIEW te lo permite, deja "Run in UI thread?" según necesidades (por lo general no hace falta).
5. Si quieres que se abra la Front Panel del VI hijo, crear otro Invoke Node y seleccionar "Front Panel: Open" antes de ejecutar Run VI.
6. Cuando termines con la referencia, usa Close Reference para liberar recursos.
-
Resultado: El VI hijo se ejecuta independientemente; detener (o cerrar) el VI hijo no debe detener el padre. Si necesitas forzar el cierre desde el padre puedes invocar "Abort VI" o "Stop VI" sobre la referencia del VI hijo.
Notas de configuración del VI hijo (recomendadas)
- En Properties del VI hijo: asegúrate de que NO esté marcado como "Show front panel when called" si vas a controlarlo manualmente — o sí, si quieres que se muestre automáticamente — y que la opción "Allow VI to be called as a subVI" esté según tu diseño.
- Si necesitas múltiples instancias correlacionadas, considera activar "Reentrancy" (reentrant execution) apropiadamente.
- Habilita VI Server solo si vas a controlar VIs de forma remota; en uso local no es necesario modificar ajustes.
3)
Ejemplos/instrucciones básicas de código (diagrama + comandos)
A) Abrir cualquier archivo con la app por defecto (Linux example)
-
Bloques a usar en el diagrama: Path Control -> Build command string -> System Exec.vi
-
Comando Linux:
-
Windows equivalente:
B)
Abrir y ejecutar un VI hijo como VI independiente (esquema del flujo)
-
Paletas/funciones principales: Path Control, Open VI Reference, Invoke Node (Front Panel: Open), Invoke Node (Run VI), Close Reference.
- Pseudopaso a paso en diagrama (representación textual):
- Para detener o abortar el VI hijo desde el padre:
- Si el VI hijo está programado con estructuras que comparten recursos globales con el padre (por ejemplo, archivos o variables globales), detener el hijo puede afectar recursos compartidos; diseña comunicación/recursos con cuidado (queues, notifiers, referencias a variables locales, etc.).
- Si ves que el VI hijo se ejecuta “como subVI” y el padre queda bloqueado, revisa que no estés usando "Call by Reference" con Wait Until Done = TRUE ni que no estés ejecutando el VI en el mismo hilo. Usa Open VI Reference + Run VI sin esperar.
- Permisos y rutas: asegúrate de usar rutas absolutas y de que LabVIEW tenga permisos para ejecutar System Exec si vas por esa ruta (en Linux puede necesitar permisos X para abrir GUI de otra app).
- Si gestionas múltiples instancias, guarda y maneja correctamente cada viRef para poder controlarlas individualmente.