Discusiones sobre Productos NI

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

Crear ejecutable y abrir vi's por referencia

Buenos días, tengo una serie de dudas, a ver si alguien puede responderme. 

Si creamos un ejecutable el cual dentro de él abrimos un VI por referencia debe funcionar. Per si colocamos un control en la ruta del archivo VI que le pasamos al objeto OPEN VI REFERENCE, se nos desplegará el menú para seleccionar un vi, si este vi que seleccionaremos a mano ha sufrido modificaciones después de haber creado el ejecutable funcionará correctamente? Este VI abierto por referencia debe llamar a otros subVI's del proyecto. Se perderán los lazos entre este VI abierto por referencia y los otros subVI's del proyecto?

 

Mi objetivo es crear un VI principal y crear un ejecutable. Desde este vi se deberían abrir por referencia otros vi's, pero lo que me interesa es poder modificar en cualquier momento esos VI's y que el proyecto siga funcionando sin tener que recompilar nada.

 

No sé si se entiende mi duda, si no así hacérmelo saber.

 

Un saludo.

 

 

 

0 kudos
Mensaje 1 de 7
4.321 Vistas

Hola,

 

Creo que la idea sería algo parecido a lo que se comentó aquí: http://forums.ni.com/t5/Discusiones-sobre-Productos-NI/crear-parches-de-instalacion/m-p/792518#M7860

 

Cuando haces un ejecutable con llamadas dinámicas a VIs, lo normal es indicarlo al hacer el ejecutable en Source files > Always includes. Cuando se hace esto el VI llamado de forma dinámica se inserta en el ejecutable.

 

Si este no es tu caso, puedes hacer llamadas dinámicas a VIs que no estén en el ejecutable siempre que pongas adecuadamente su ruta y el paso de parámetros sea correcto. Para ello tienes que tener cuidado que las mismas entradas y salidas utilizadas en todos tus VIs sean iguales.

 

Saludos.

 

0 kudos
Mensaje 2 de 7
4.307 Vistas

Se me había olvidado la otra pregunta.

 

Para que los VIs llamados de forma dinámica encuentren sus respectivos subVIs, éstos tienen que cargarse en memoria cuando se realice la llamada. Se podrían cargar en memoria porque:

  • también son subVIs para el VI principal, por lo que se han cargado en memoria al abrir el ejecutable
  • el VI principal los ha cargado también dinámicamente en memoria (previamente incluidos en el ejecutable con Always include) y antes que los VIs que los llaman
  • los VIs llamados dinámicamente puden cargar en memoria los subVIs que necesite cada uno si los puede encontrar en disco, normalmente si están en la misma carpeta.

Puedes probarlo si en el programa adjunto del mensaje anterior creas un VI vacío y lo insertas en resta.vi. En el primer caso tienes que incluir el nuevo VI también en MAIN.vi; en el segundo caso hay que hacer otra llamada dinámica al nuevo VI al principio del programa y modificar las propiedades del proyecto para incluirlo; y en el último caso símplemente guarda el nuevo VI junto con resta.vi.

 

0 kudos
Mensaje 3 de 7
4.304 Vistas

Buenos días, toda la información la analizaré con detenimiento más adelante, pero ahora he hecho una prueba rápida y he podido comprobar que en tu ejemplo me pasa una cosa:

a) Si abro el proyecto Main y creo un nuevo vi llamado multiplica, el programa funciona.

b) Si desde tu ejecutable Application.exe cargo el vi que he creado "multiplica.vi", la operación no la realiza. Esto sería un gran problema porque no podría crear vi sin recompilar el proyecto.

 

Vuelvo a repetir que es una primera impresión y cuando lo analice con detenimiento podré sacar más conclusiones.

 

Un saludo y gracias por tu tiempo.

0 kudos
Mensaje 4 de 7
4.299 Vistas

Hola, me parece extraño que funcione con el código pero no con el ejecutable. Quizás sea un problema de compatibilidad de las versiones, yo tengo la versión 2010. Puedes probar con este VI que a mí me ha funcionado. Si no funciona, puedes probar a generar de nuevo el ejecutable.

Para ayudar a depurar puede ser conveniente hacer un indicador del cluster de error para verlo en el ejecutable.

0 kudos
Mensaje 5 de 7
4.294 Vistas

Ok, perfecto, era eso, yo tengo la versión 2011. Con tu VI funciona bien. Muchas gracias, pasaré a utilizar este concepto.

0 kudos
Mensaje 6 de 7
4.249 Vistas

Buenos días, he retomado este hilo porque no he conseguido hacer funcionar la llamada por referencia en mi aplicación. Sí que funciona cuando es algo simple como una suma pero en una aplicación real el cual el VI llamado por referencia tiene múltiples VIs con subVIs en su interior ya no funciona. He probado lo inimaginable y no consigo hacerlo funcionar. Sí, si incluyo en ALWAYS INCLUDE los VIs, pero esta opción para mi no es válida. Así que parece que mi problema acaba siendo de dependencias. 

 

Después de 5 días de todo tipo de pruebas no he llegado a conseguirlo. ¿Alguna solución para que se incluyan las dependencias?

0 kudos
Mensaje 7 de 7
4.153 Vistas