Instrument Control (GPIB, Serial, VISA, IVI)

cancel
Showing results for 
Search instead for 
Did you mean: 

Sincronización señal escalon

Solved!
Go to solution

Hola,

 

Soy nuevo en el uso de LABView y quisiera pedir ayuda respecto a una modificación que debo hacerle al código adjunto. El problema consiste en que debo enviar una corriente AC de alta frecuencia con un valor determinado durante un tiempo corto (0.1 segundos), posteriormente debo tener un tiempo de ralajación (3 segundos), y así sucesivamente durante un tiempo determinado (del orden de 24h). Es indispensable que se inicie en cero, es decir, 0, Señal, 0, Señal, 0, Señal, etc., para evitar ruido al empezar las medidas. Es indispensable que la señal y el almacenamiento de datos esten sincronizados, así como está el programa ya guarda y grafica los datos, pero no se como implementar esta parte nueva. Si me pueden ayudar les quedo profúndamente agradecido.   

0 Kudos
Message 1 of 8
(4,771 Views)

Hola GuillermoLP

 

Para la parte nueva que quieres implementar es necesario saber primero que dispositivo de HW vas a utilizar para mandar la señal para saber como se va a mandar la señal. Pero para la implementación que deseas te recomiendo una arquitectura llamada Máquina de Estados, esta arquitectura te permitirá tener varios estados uno para cada sección de requerimiento que quieres para tu codigo y esto lo puedes poner dentro de un ciclo while para que funcione las 24 hrs necesarias. Te envío un tutorial sobre esta arquitectura.

 

https://www.ni.com/en/support/documentation/supplemental/16/simple-state-machine-template-documentat...

https://forums.ni.com/t5/LabVIEW-Development-Best/State-Machine-Design-Patterns-Technical-Manual-and...

 

LabVIEW también te puede dar una plantilla de esta arquitectura para que ya puedas comenzar a utilizarla en el menu de File>>New...>>VI>>From Template>>Frameworks>>Design Patterns>>Standard State Machine.

 

Cualquier otra pregunta estoy a tus órdenes.

 

Saludos

Juan Arguello Director Support Services @NI
Message 2 of 8
(4,741 Views)

Hola JuDa,

 

Primero que todo gracias por tu respuesta. El equipo con el que se va a enviar la señal es un Lock In Stanford Research 830, la idea sería que los datos que se guarden SOLO sean en los que el escalón es distinto de cero para construir una curva punto a punto. el programa construido cuenta con el driver del equipo que fue obtenido a través de la página de NI.

 

Voy a revisar la información que me das para ver si tengo alguna luz al respecto.

 

Saludos,

 

 

0 Kudos
Message 3 of 8
(4,736 Views)

Hola JuDa,

 

Hice el programma que adjunto, lamentablemente no me está registrando los valores medidos. No se que hice mal ya, ya que el programacorre y en el búfer puedo ver los valos que se miden, pero no los está almacenando. Podrías revisarlo o hacerme una sugerencia para poder mejorarlo y que guarde los datos que necesito? La señal es enviada por SR830 mediante una GPIB-USB.

 

Saludos,

0 Kudos
Message 4 of 8
(4,688 Views)

Que tal GuillermoLP 

 

El problema que se está presentando es por la manera en la que LabVIEW ejecuta el código que tienes en tu diagrama de bloques. LabVIEW se rige por lo que llamamos Flujo de Datos, esto quiere decir que todos los nodos, funciones y ciclos necesitan todas sus entradas para ejecutarse y no tendrán nada en sus salidas hasta que terminie de ejecutarse todo el código. Para comprobar esto puedes habilitar en la barra de herramientas de tu diagrama de bloques la herramienta que se llama highlight execution(ícono con un foco) y correr tu código desde el diagrama de bloques, de esta manera podrás observar como se ejecuta realmente el código. 

 

Tu programa entra al ciclo While y ahí se queda haciendo la adquisición de los datos, de manera paralela el Express VI de Elapsed Time ejecuta una vez y hace la comparación y manda el resultado a la entrada de la estructura de casos. Lo unico que sigue corriendo aqui es el ciclo while. El express VI y la estructura de casos solo se ejecutarán una vez. Cuando tu presionas el botón de stop salen los resultados del while y entonces llegan a la estructura de casos y se ejecuta la estructura de casos pero como la salida del elapsed time fue True pasa al caso de true y no se ejecuta la parte False que tiene tu código.

 

Tendrías que tener esa parte dentro del ciclo while para que se pueda ir ejecutando cada iteración. 

 

Te recomiendo este curso que da algunos tips sobre temporización y flujo de datos aparte algunas otras herramientas que puedes usar en LabVIEW.

https://learn.ni.com/learn/article/labview-tutorial

 

Saludos

Juan Arguello Director Support Services @NI
Message 5 of 8
(4,677 Views)

Hola JuDa, 

 

Hice lo que me dijiste (archivo adjunto) y me surgió un error en conexión! estoy perdiendo un poco la paciencia ya que no se como solventar el mismo. Si me puedes dar una mano te quedo agradecido.

 

Saludos,

0 Kudos
Message 6 of 8
(4,670 Views)
Solution
Accepted by topic author GuillermoLP

Hola GuillermoLP

 

La conexión te marca un error ya que ahora estás conectando datos escalares y no arreglos, hay que cambiar el tipo de dato que estás transformando. Puedes dar doble click en la función Convert to Dynamic Data que se encuentra antes del Build XY Graph y el merge signals y tienes que cambiar el tipo de dato de entrada a esta función por Single Scalar. Con esto ya se debe de quitar el error de conexión. Si posicionas tu mouse sobre el tache rojo donde están los errores de conexión te da una descripción sobre el error que se está presentando.

 

Saludos

Juan Arguello Director Support Services @NI
0 Kudos
Message 7 of 8
(4,666 Views)

Gracias JuDa,

 

Por tu enorme ayuda.

 

Saludos,

0 Kudos
Message 8 of 8
(4,662 Views)