el 07-12-2011 01:25 AM
Buenos días, me gustaría saber cómo se puede extraer datos de un subVI que está en ejecución sin usar los conectores.
Yo tengo un VI principal, en este hay un RichTextBox (.NET), este VI llama a otro VI y éste a otro subVI que recogerá los datos. El problema es que tengo que pasar esos datos al VI principal mientras el subVI sigue un proceso contínuo por lo cual no puedo usar los conectores.
Supongo que tiene que ser con algún tipo de referencia o algo así, pero soy novato y no estoy seguro.
Saludos a todos.
el 07-12-2011 05:17 AM
Hola.
Como bien dices, tienes que pasar la referencia del indicador en el vi principall a la subvi en la que deseas que actualice los datos.
Tienes un ejemplo en ejemplo
Saludos.
Alipio
07-13-2011 01:51 AM - editado 07-13-2011 01:54 AM
07-13-2011 01:53 AM - editado 07-13-2011 01:56 AM
Hola buenos días, he mirado el ejemplo pero no termino de conseguir hacerlo funcionar.
En la siguiente foto aparece la referencia del RichTextBox que le paso a mi subVI.
En el subVI tengo un Control Refnum al cual le paso el ActiveXContainer del RichTextBox.Pero no me aparece la opción de insertar texto.
A modo de ejemplo pongo esta foto para ver cómo insertar texto en el RichTextBox. El problema es que sólo lo puedo hacer desde el VI principal.
Está claro que no es lo mismo conectar el PropertyNode al RichTextBox que al CtlRefnum. No sé, no me aclaro.
Saludos.
el 07-13-2011 03:40 AM
Hola.
Fijate que el modo de isertar texto que pones es un metodo y por tanto va en un invoke node ( flechita en la cabecera).
Sin embargo, en el subvi estas usando un protperty node ( herramienta en la cabecera) que no es lo mismo.
Susituye el property node por un invoke node y deberia funcionar.
Si no lo consigues, pon la vi ( o vis) para ver como se puede solucionar el asunto.
Saludos.
el 07-13-2011 04:16 AM
Con un invoke node tampoco aparecía la opción de insertar texto. He probado todo lo que he podido y no consigo que aparezca esa opción. De momento voy a seguir trabajando en otras partes del proyecto porque no puedo perder más tiempo en esto. Te explico brevemente qué necesito hacer y seguramente me des una idea mejor, porque lo que quiero hacer es algo que creo que es común. Yo tengo un VI principal que tiene que mostrar un log del proceso (de momento log del proceso será lo que envíe los puertos de comunicación). Entonces el VI va avanzando y haciendo llamadas varios subVI's que acaban enviando órdenes por los puertos de comunicación. Lo que envío por los puertos lo escribo en un archivo, pero claro, no sé cómo escribir un string o array de un subVI en el panel principal de la aplicación (en tiempo real, o sea cuando se mande que se almacene en el RichTextBox). Como detalle te digo que no me interesa enlazarlo con conectores, ya que dentro del programa que será muy largo y habrá muchísimas llamadas a los subVI's de comunicación, haya que poner una referencia del RichTextBox.
Muchas gracias por tu tiempo. Perdona que no me explique muy bien, es que no he trabajado nunca en LabView.
el 07-13-2011 04:25 AM
Hola.
Te adjunto un ejemplo rapido de como hacerlo.
Puees copiar y pegar las referencias, nodos etc en tu programa.
Saludos.
Alipio
el 07-13-2011 04:52 AM
Gracias de nuevo, veo y entiendo claramente tu ejemplo, aunque todavía me falta una cosa. Ayer conseguí más o menos lo que tú me has enseñado ahora pero la parte que me falta no he conseguido hacerla. Lo que faltaría es que cada vez que haya un cambio en el string del subVI, se genere un evento que sea el que ejecute la función de escribir en el RichTextBox. Ahora está con un bucle y un temporizador, pero hay que conseguir que sólo se ejecute cuando haya cambios en el string. Con esta otra cosa me he peleado también mucho y no he conseguido detectar el evento de un subVi dentro del VI principal.
Saludos nuevamente.
el 07-13-2011 05:21 AM
Hola.
Que escriba solo si hay cambio se puede conseguir de diversas maneras.
La mas sencilla es comparando el nuevo valor con el anterior y escribir solo si es diferente. Si es igual, no hacer nada.
Te adjunto ejemplo de como podria hacerse.
Asimismo, observa que la referencia al control se pasa como variable local. Esto ahorra cableado pero hay que ser cuidadoso con el orden de ejecucion
Saludos y espero que te sirva.
Alipio
el 07-13-2011 08:14 AM
Hola de nuevo.
¿Hay alguna razón especial para usar el richtextbox .NET?
Por la descripcion del programa,se podria usar un indicador string de Labview en la vi principal, en cuyo caso podrias crear una variable global para leer/escribir en el desde cualquier parte del programa.
Saludos.
Alipio.