From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.

Discusiones sobre Productos NI

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

Ayuda controlador PID con daq assitant

Hola a todos, Estoy haciendo un proyecto para la universidad y se trata de hacer un controlador PID que me coja la señal (voltage) de un sensor a traves de una tarjeta de adquisicion NI USB 6008 y me de la señal de salida modificado por los parametros del PID. Para hacer eso, he hecho un loop (un while), en donde cojo la entrada con el daq assitant --> voltage input y lo configuro bien (nº de muestras y frecuencia).

El problema me surge, cuando yo quiero sacar la señal, es decir escribir en la tarjeta. Me encuentro en que el daq assitant de salida, me escribe la señal con un periodo muy alto (si a la entrada tengo 1KHz de frecuencia es decir 1ms de periodo, a la salida me tendria de salir con la misma frecuencia y periodo pero me sale con un periodo de 30 SEGUNDOS!!).

Mirandome el datasheet de la tarjeta he visto que solo escribe hasta 150Hz de frecuencia, todo y asi, teniendo 150 Hz en la entrada la salida me sale mucho mas lenta. No se escribir a la tarjeta daq ni usb 6008.

Alguien sabe como podria solucionar eso?

En definitiva lo que no consigo es que la señal q me entra no me sale con la misma frecuencia.

P.D. Tambien he provado de hacer la prueba de solo escribir una señal generada en labview (una señal cuadrada) en el daq assitant pero me sale un error que dice que task=1 y data=1000.

Epero que alguien pueda ayudarme. Gracias. A continuación les dejo mi modelo para que vean el error.
Descargar todos
0 kudos
Mensaje 1 de 13
5.305 Vistas

Hola tomas aquí hay dos cosas que tienes que tomar en consideración.

La primera es que la temporización de las salidas analógicas de la 6008 es por software, y no por hardware como en otras tarjetas. Esto significa que vas a escribir cada vez que sea un ciclo, y el periodo mínimo de un ciclo controlado es de 1ms. pero si tienes algo que tarde mas en tu ciclo vas a escribir más lento. En tu caso tienes un Loop Delay de 50ms, por lo tanto vas a escribir, un punto cada 50 ms.

La siguiente parte es que mas que usar un DAQ Assistant te conviene utilizar las funciones normales de DAQmx, un DAQ Assitant abre y cierra la sesión cada vez que lo corres por lo que es mas lento que utilizar las funciones manuales. También dado que solo puedes escribir de una muestra en una  puedes ser conveniente que también tomes de una muestra en una en la adquisición. De hecho esto también puede ser lo que este generando retraso en tu ciclo. Por ejemplo si yo le digo que tome 10 muestras a 1 hz, ese VI va a tardar 10 segundos en tomar las muestras por lo que mi tiempo mínimo en un ciclo que tenga esa adquisición es de 10 segundos.

Hay un ejemplo en Help>>Find Examples , que te podría servir para ver como puedes realizar esto se llama PID Control-Single Channel. Tienes que hacerle algunas modificaciones para que funcione con tu 6008, básicamente quitar el simple clock de la parte de la salida analógica ya que no soporta temporización por hardware, y pasar el VI de DAQmx Wait for sample clock a la entrada analógica en lugar de a la salida .

Saludos

Benjamin C
Principal Systems Engineer // CLA // CLED
0 kudos
Mensaje 2 de 13
5.298 Vistas

Hola Becega,

Primer de todo, gracias por tu rápida respuesta.

He mirado el ejemplo de PID single channel, pero no entiendo como podria hacer lo mismo, pero añadiendo las funciones Integrador y Derivador.

En el ejemplo ese ademas, me parece que la temporización esta hecha por hardware, cosa que no es asi no?

Crees que deberia de canviar los 2 daq assitants y canviarlos por funciones daqmx no?

Y otra cosa, no entendi lo de quitar el simple clock de la parte de salida analogica.

 

Sabes de algun lugar donde poder sacar información de como realizar un controlador como el que necesito mas o menos paso a paso?

 

Muchas gracias por tu información y rápida respuesta.

0 kudos
Mensaje 3 de 13
5.275 Vistas

Hola Tomas estas en lo correcto la temporización es por hardware y esa es la parte que tienes que cambiar, pero si el principio es ese remplaza los DAQ assitants por Codigo de DAQ. SI lo del sampleclock (el vi que trae el reloj en la salida analógica hay que quitarlo porque tu tarjeta no va a soportar esa función.

Estas ligas te podrían ser de utilidad:

PID Theory Explained- Developer Zone - National Instruments

Complete resources for a PID control system with NI M Series devices- Developer Zone - National

PID Control Loop- Developer Zone - National Instruments

Ready-to-Run Pressure Controller- Developer Zone - National Instruments

También podrías revisar algunos libros de control si la parte que necesitas es la del diseño de tu controlador como Ingeniería de Control Moderna Katsuhiko Ogata.

Saludos

Benjamin C
Principal Systems Engineer // CLA // CLED
0 kudos
Mensaje 4 de 13
5.264 Vistas
Hola Becega,
 
Gracias otra vez por tu rapida respuesta.
 
Me he estado mirando el ejemple de PID single channel y probe de emular ese ejemplo poniendo el PID, pero me sale un error en los clocks que dice que tendria de estar en "On Demand" y no se ponerlo, pq me sale hardware time, conituous samples o finite samples. Tambien me deja canviar sample clock por handshaching, implicite, use waveform..
 
Se que el error esta en los clocks, pero no se pq canviarlo.
 
Al final, con el modelo1 que te envie, disminuyendo el Loop Delay a 1ms, me sale lo que quiero y bien, lo que pasa es q me sale solo una señal sin error hasta 20Hz aproximadamente, por eso ahora, quiero hacer lo de hacerlo con las funciones daqmx, para intentar aproximarme a 150Hz ya que es el limite de la tarjeta. Ya me imagino que llegar a 150 Hz no llegare, pero si almenos estubiera por encima los 100Hz con las funciones Daqmx ya estaria bien.
 
Aqui te dejo el modelo2, que he modificado lo del pid que lo he sacado del ejemple de pid single channel, si me pudieras decir el error de los clocks como canviarlo y decirme si me falla alguna cosa mas te lo agradeceria.
 
Muchas gracias por todo.
 
Aqui te adjunto el fichero.
 
P.D. Me dao cuenta mirando todos los ejemplos que he visto, que mi gran problema es la tarjeta porque el tiempo es por software y no por hardware. Por eso tengo tantos problemas con eso cierto?
0 kudos
Mensaje 5 de 13
5.241 Vistas

Hola Tomas así como mencionas la limitante que estas teniendo aquí es precisamente que las salidas de tu tarjeta son controladas por software y no por hardware. Una tarjeta USB que cuanta con esto seria la USB-6211 - Multifunction DAQ .

Modifique tu programa quitándole el hardware timed a tu AO pruébalo así para ver si te da las velocidades que necesitas.

Saludos

Benjamin C
Principal Systems Engineer // CLA // CLED
0 kudos
Mensaje 6 de 13
5.230 Vistas

Hola Becega,

Ahora mismo he estado probando ese modelo modificado que me enviaste, y me sale un error que me dice otra vez lo del hardware time de la entrada y si lo canvio a continuo me sale que el wait de daqmx que hay dentro del loop no es compatible con continuous samples, solo lo es con hardware.

Estoy un poco perdido ahora, porque he estado intentando cosas, pero sin resultados positivos. He intentado poner un un wait for next ms multiple sample pero tampoco funciona bien.

Si sabes alguna forma de hacerlo te lo agradeceria que me lo explicaras.

 

Muchas gracias una vez y otra vez mas.

 

Es que la verdad es que es una parte del proyecto de final de carrera de la universidad y llevo monton de tiempo con eso y no lo consigo. Supongo tb debido a la tarjeta... Pero es lo que tengo.

Aqui abajo te dejo las imagenes de los errores que me han salido:

 

0 kudos
Mensaje 7 de 13
5.218 Vistas

Hola otra vez Becega,

 

Creo que lo último lo solucione... pero no consigo una mejora respecto al hacerlo con daqassistants.

Lo que he hecho para q funcionas es quitarle es sample clock de la entrada y luego en mas de utilizar la funcion wait del daqmx, lo que he hecho es utilizar el tiempo de loop. Esto lo he encontrado en uno de esos enlaces que me mandaste q sale la foto que lo hacen asi.

 

Por tanto he visto que mi modelo de ahora sin daq assistants sigue siendo igual de lento... Que más podria hacer para augmentar la velocidad? 

Te paso el modelo ultimo a partir del que me mandaste, a ver que opinas. Muchas gracias.

P.D. (tambien e provado de canviar el PID para  asegurarme que no fuera que el que tenia fuese el que me introducia la lentitud, pero no es asi.)

 

0 kudos
Mensaje 8 de 13
5.213 Vistas

Hola Tomas, como mencionas cuando usas un wait o un wait until next ms, el ciclo minimo que vas a lugar es de 1 ms,  haciendo pruebas vi como decías legar a ciclos de control de hasta 30hz.  En el ejemplo que te envió lo que hago es que la entrada analógica adquiera en forma continua, y tome una muestra, y simplemente escribo. Con esto la temporización del ciclo la estoy haciendo con los VIs de DAQ. Con los settings que te envió llega a una velocidad aproximada hasta de 100hz, jugando con el número de muestras y el input rate puedes lograr otras velocidades.

Si aumentas el input rate o disminuyes el numero de muestras debes de de tener cuidado es que si no se vacía el buffer vas a obtener el error -200279. Este podrías limpiarlo e ignorarlo y seguiría funcionado.  Con esto puedes lograr sin problema los 150 hz que necesitabas

Saludos



Mensaje editado por BeCeGa
Benjamin C
Principal Systems Engineer // CLA // CLED
0 kudos
Mensaje 9 de 13
5.196 Vistas

Hola Becega,

 

Después de unos dias de ausencia he probado el ultimo modelo que me mandaste, pero hay algo que aun no acabo de entender o que no acaba de funcionar.

Ahora mismo tengo delante el osciloscopio con la entrada y la salida.

La verdad es que a mi no me llega a los 100Hz.. ni se acerca. En 20 Hz ya empiezo a tener una señal bastante distorsionada.

Augmentando el input rate lo que consigo es una señal mejor pero me sale ese error (q me interesaria quitarlo siempre).

A ver yo lo que he hecho es introducir 100Hz a la entrada y he ido jugando con el input rate y las muestras... pero no he conseguido una señal buena.

 

Si me supieras decir, de que depende el input rate y las muestras para conseguir la velocidad deseada te lo agradeceria.

 

Gracias por todo!

 

 

 

 

0 kudos
Mensaje 10 de 13
5.054 Vistas