Discusiones sobre Productos NI

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

Eventos con ActiveX en LabView

Hola, tengo el siguiente problema, voy a explicar la aplicación que estoy desarrollando:
Tengo  que mandar a "imprimir" por decirlo asi, porque no es una impresora, es otra marquina que marca objetos, manejandolo desde LabView. Ésta máquina cuenta con ActiveX, entonces pues para abrir el documento que se irá a marcar y todo eso, ya lo manejo con los ActiveX. Ahora, necesito checar una señal, que me dice cuando ya ha terminado de "imprimir".  El soporte técnico de la empresa a la que compré la máquina, me dice que tengo que usar Eventos, y que en cada lenguaje de programación los eventos se manejan distinto. La opción para determinar que evento deseo checar esta en el mismo Type Library de donde selecciono el ActiveX, pero si lo abro como ActiveX me dice 1 error, algo asi como "Is Not a Creatable Object". Entonces como manejo este evento del software de la maquina, mediante LabView?.
Estoy trabajando con LabView 7.1.
 
Agradacería su ayuda.
0 kudos
Mensaje 1 de 5
4.752 Vistas
Creo que tengo una idea, pero no muy clara, creo que es con el RegEventCallBack, mi duda es, en VI Ref, tengo que poner el VI a ejecutar cuando el evento ocurra, cierto?. Pero puse un Vi que solo prende un LED, y y no lo prende. Por cierto, utilice un ejemplo que viene ActiveX EventCallback for Excel, para basarme, ahi en cuanto le doy crear nuevo, automaticamente me abre un libro nuevo y le pone los días de la semana, pero en vez de eso quiero que simplemente prenda un LED, pero no me funciona.
El Vi Ref que usa este ejemplo tiene 4 argumentos, por asi decirlo. el "Event Common Data", el "Ctl Ref" el "Event data" y el "UserParameter", para que sirve cada uno?, donde tendría que moverle para que en vez de que haga todo el proceso de poner los dias de la semana en 1 hoja, no haga nada en Excel, simplemente me prenda un LED en LabView?.
Cuando utilizo el RegEventCallBack enfocado a mi ActiveX de la marcadora, y en VIRef le doy "CreateCallBack Vi", me crea algo parecido al que crea con el de Excel, solo que sin "Event data", y pues en el ejemplo de Excel es lo único que se usa. Por eso quiero saber para que es cada cosa que crea el CreateCallBack, o como modificar el de Excel para que solo prenda un LED.
 
Agradecería mucho su ayuda.
0 kudos
Mensaje 2 de 5
4.753 Vistas

Efectivamente los eventos en ActiveX se manejan con Register Event Callback.

    1. De los tres parámetros que tiene este nodo en el primero (Event) hay que conectar una referencia al ActiveX (que puede venir de Automation Open), cuando conectes la referencia puedes seleccionar uno de los eventos que tiene el ActiveX en este mismo parámetro (el texto Event debe sustituirse por el nombre del evento).

 

    1. En el segundo parámetro (VI Ref) le tienes que conectar una referencia de tipo estricto (sale dibujado una estrella naranja) del VI que debe ejecutarse cuando se produzca el evento (botón derecho sobre VI Ref y Create Callback VI). Como antes has conectado la referencia del ActiveX, cuando este VI se crea ya reconoce las entradas y salidas que tiene la función

 

    1. El tercero sirve para pasar datos al VI que se ejecuta cuando se produce el evento. Estos datos son recibidos por el VI llamado cuando se produce el evento, concretamente en el control User Parameters (prueba a conectar primero aquí un string y luego Create callback, ya verás como este dato pasa de Variant al tipo que has cableado). La razón supongo que es porque como este VI no se llama como un subVI normal, no puedes crear terminales en el icono para cablear...



Luego dentro del VI que se ha creado para manejar el evento como dices hay 4 controles:

    • Control Ref es una referencia al ActiveX (lo que has conectado a VI Ref). Así podrás acceder a métodos y propiedades del ActiveX dentro del evento.

 

    • User Parameter es el que he comentado antes para pasarle datos al VI que maneja el evento desde el VI 'principal'.

 

    • Event common data ofrece información como el origen del evento o el momento en que ocurrió

 

    • Event Data serían como los datos de la cabecera de la función del evento (como los parémetros cuando llamas a una función de una dll).



Para tu aplicación en concreto no sé si necesitarás alguno de estos controles (¿quizás conectar una referencia al led sobre el que quieres escribir en User Parameter?), pero aunque no los uses no los borres.
Para más info:

 

 

 

0 kudos
Mensaje 3 de 5
4.743 Vistas
Muchas gracias por tu ayuda, la aplicación que quiero, ahorita es solo para basarme, pero básicamente es eso, cuando ocurra ese evento que me ponga en verdadero una booleana, me estoy basando en los ejemplos de LabView, pero como te dije anteriormente no encuentro la manera de como hacerlo. Te adjunto los 2 códigos, el que se llama Original, es el ejemplo, lo que hace es en cuanto lo ejecutas abre Excel, y cuando le das crear nuevo, te abre uno nuevo pero automaticamente con los dìas de la semana., el segundo código, llamado Intento, es exactamente lo mismo, solo que  en vez de poner los días de la semana, debería de prender una booleana, pero no me funciona, y no se donde poner la booleana para que prenda cuando le doy "crear nuevo". Te los adjunto para ver si les puedes echar un ojo, y darme algo de ayuda, te lo agradaecería demasiado.
Descargar todos
0 kudos
Mensaje 4 de 5
4.729 Vistas
No puedes modificar el led dentro del VI que responde al usuario porque éste es reentrante (File > VI Properties > Execution > Reentrant Execution). La diferencia entre un VI reentrante y uno 'normal' es que el normal se carga en memoria y cuando se llama se va a esa memoria y se ejecuta (una única copia en memoria), mientras que el reentrante se copiará tantas veces en memoria como es llamado, de esta forma se permite la ejecución concurrente del mismo VI. Imagino que en este caso, al trabajar con un VIs reentrante no puedes modificar el led porque podría producir un conflicto (condición de carrera) si ocurren varios eventos a la vez.

Una posible solución sería hacer que este VI no sea reentrante, pero yo me decantaría por situar el led fuera de este VI y pasarle una referencia para usarla en una propiedad Value y escribir en ella.
0 kudos
Mensaje 5 de 5
4.725 Vistas