Discusiones sobre Productos NI

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

MEJORAR RENDIMIENTO GENERAL

 HOLA A TODOS LOS FOREROS EN GENERAL.

ACABAMOS DE FINIQUITAR UN VI,CON SUS CORRESPONDIENTES SUB VI,Y NUESTRO PROBLEMA QUE PRESENTA ES QUE EL FUNCIONAMIENTO DEL MISMO NOS CONSUME DEL ODEN DE UN 60% DEL CPU,CON LO CUAL UNA MINIMA APLICACION PARALELA(MOZILLA,EXCELL..),SE NOS DISPARA AL 100%,Y NOS ORIGINA FALLOS EN LA LECTURA QUE HACEMOS POR PUERTO SERIE DE UN MANOMETRO DE PRESION(EL PROGRAMA LITERALMENTE TOMA DATOS DE ESTE MANOMETRO Y EFECTUA CONTINUAMENTE COMPROBACIONES ENTRE ELLOS) .

DEBIDO A NUESTRO NIVEL BASICO DE PROGRAMACION EN ESTE ENTORNO NOS GUSTARIA COMO PODEMOS RENDIR MEJOR ESTA APLICACION YA QUE SEGUN HEMOS LEIDO EN LOS DIVERSOS POST PUBLICADOS,PODEMOS TRATARLOS DE DIVERSAS MANERAS(SHARED VARIABLES,WAIT EN CICLOS WHILE,MENORES "BLOQUES",EN EL DIAGRAMA DE BLOQUES, E INTENTAR RELACIONAR LOS DIFERENTES SUB VI DE MANERA DINAMICA).

ME GUSTARIA COLGAR EL PROGRAMA Y SI ALGUNO DE VOSOTROS ME PUDIERA AYUDAR DE MANERA EFECTIVA PARA OPTIMIZAR ALGO EL PROCESO.

GRACIAS A TODOS,

SALUDOS. 

0 kudos
Mensaje 1 de 6
4.237 Vistas

Hola Muonico, Cuando trabajas con LabVIEW, todo es en base al flujo de datos. Para tu programa del consumo de CPU como mencionas la mejor solución es la parte de agregar un wait a tu programa.

Cuando trabajas con LabVIEW existen dos tipos de temporización, la del control del procesador y la del tiempo controlado por software. Por ejemplo si tu lo que buscas es que algo suceda cada minuto, no debes de agregarle un wait a tu ciclo de 1 minuto. Haciendo esto lo que sucede es que tu ciclo solo se ejecuta una vez por minuto así que si tienes funciones que requieras mas rápidas o poder detectar un cambio no lo va a hacer. Aquí lo ideal por ejemplo seria poner un wait de 10 ms y además de eso utilizar algún VI como el de Enlapsed time para controlar lo que quieres ejecutar en el minuto.

Para el control de procesador, por ejemplo cuando quieres que lo que haga es ejecutar un método numérico ciertamente quieres que se ejecute a toda la velocidad posible, aquí no se agrega ningún wait y el programa va a ocupar el 100% de tu procesador. En caso de que es algo como leer la interface de usuario leerla demasiado rápido o constantemente no tiene caso, solo se desperdicia procesador. Para eliminar esto lo que se hace es se agrega el Wait, esto permiten que el procesador se libere y se ejecute algo mas. También puedes usar la estructura de eventos (esto es mas eficiente) que solo se ejecuta cuando hay un evento dejando el procesador libre el resto del tiempo.Ahora los errores de programación que tienes es que caíste en una temporización  controlada por suerte. Tu programa como no tiene control de tiempo cuando tu lo ajustaste trabaja considerando que tiene todo el procesador, por decir algo si ejecuta 100 operaciones en un segundo se ejecuta bien, pero cuando abres otro programa, solo puede ejecutar 90 por lo que se sale de sincronización y por eso falla. La ventaja de poner en forma explícita la temporización es que tu controlas esto.

Ahora en tu código por ejemplo en el frame 2 de Main 4 en la stacked sequence, ahí manejas bien con el Enlapsed time para ver que se cumplió el tiempo, nada mas que te puedes ahorrar la comparación con el 2 simplemente dile al Enlapsed time que no se use el auto reset y que cuente hasta 2, con esto  en lugar de la comparación puedes usar la salida de Time has Enlapsed.  Ahora en forma adicional aquí en tu ciclo while fuera de los cases puedes agregar un Wait Until Next ms con una constate de 100 cableada. Haciendo este cambio vas a ver que mientras esta en esperando en esta parte el consumo de CPU va a disminuir considerablemente (practicante no se va a notar). Puedes usar menos de 100 ms pero como lo que estas haciendo es leer el panel frontal no necesitas que sea mas rápido. También podrías cambiar casi todo lo que esta dentro del while para usar una estructura de eventos.

Changing the Face of Design Patterns with LabVIEW 7 Express Event Structure - Developer Zone -

De la misma forma tienes que revisar el resto de tu código.

Con respecto a las otras modificaciones que mencionas.

Las Shared Variables no van a disminuir en consumo del CPU.

El tamaño del diagrama de bloques realmente no perjudica que tanto consume tu CPU, simplemente hace que el código sea mas legible y mas fácil de mantener es una buena técnica de programación.

Las llamadas dinámicas a los SubVIs disminuyen la cantidad de memoria utilizada (un VI solo esta en memoria cuando lo necesita) pero al igual que muchas cosas que mejoran la memoria consumen mas recursos ya que tiene que cargar y descargar el VI en memoria cada vez que se utiliza.En forma adicional en tu programa tienes muchas flat sequence, te recomendaría que organizaras tu programa en un maquina de estados, esta es una arquitectura mucho mas escalable y fácil de ejecutar. En una secuencia no te puedes detener a la mitad de esta tienes que esperar a que se ejecute toda, además agregar un paso se vuelve mucho más complicado, en los siguientes links puedes leer un poco sobre maquinas de estado:

Application Design Patterns: State Machines

Using a State Machine (Event Driven) Architecture - Developer Zone - National Instruments

Tutorial: State Machines - Developer Zone - National Instruments

También es bueno minimizar el uso de Variables.

En forma adicional para hacer código mas robusto y te recomiendo que leas las LabVIEW Style Guidelines.

LabVIEW Style Guide- Developer Zone - NI Developer Zone LabVIEW Style Checklist 

Espero que esto te sea de utilidad.

Saludos

 

Benjamin C
Principal Systems Engineer // CLA // CLED
0 kudos
Mensaje 2 de 6
4.227 Vistas

Hola BeCeGa:

En primer lugar perdona,por no haber indicado del archivo comprimido,cual era el VI principal,en este caso es general4(classic),el padre de todos los demás.

Muchisimas gracias,por las aportaciones que has tenido sobre la optimización de los recursos de la CPU,es una autentica delicia leerlo;lo que practicamente hemos cambiado son los tiempo de espera en cada ciclo while cercanos a 10ms , que presenta el programa --general4(classic)--,y efectivamente se nos ha reducido el rendimiento de la CPU a un 5-9 %,osea notablemente una mejora.

Aún asi hemos de mejorar el código.

Otra cuestión paralela,es que aunque me sigo peleando con ella,seria conseguir un tiempo real del ordenador para poner ese contador en el programa principal,sin más ,quiero un reloj de tiempo,ya que no lo consigo plenamente.

Muchas gracias a todos,y estaremos en contacto porque mil y una dudas se nos presentan.

Saludos.

René

0 kudos
Mensaje 3 de 6
4.212 Vistas

Hola Munico que bueno que te ayudo la información en el post anterior, ahora con respecto a lo de tiempo si solo quieres obtener el tiempo del sistema puedes usar el VI de Gate Date Time in Seconds, este obtiene un Time Stamp del sistema operativo y ya podrías usar este para manejar tu sistema. Si lo que quieres son cronómetros el de Enlapsed time te puede servir también puedes descargar el que esta en este foro:

http://forums.ni.com/ni/board/message?board.id=6170&message.id=1192&query.id=105960#M1192

Incluso también si quieres que se vea calendario podrías Utilizar el Control Active X de Calendario.

Saludos

 

Benjamin C
Principal Systems Engineer // CLA // CLED
0 kudos
Mensaje 4 de 6
4.204 Vistas

Hola de nuevo amigos.

Muchas gracias Becega,por tus sabias y aconsejadas rspuestas.

Bueno,vuelvo a la carga con otro tema asociado a este , pero ahora consta sobre un tratamiento de datos(adquiridos del primero).

Me meto pues en el meollo;el siguiente vi que adjunto Grabar2.vi, lo que básicamente hace es adquirir externamente de un archivo de texto (x.txt),(adjuntado TAMBIÉN),DOS COLUMNAS DE VALORES x e y (resultados que generó el programa General4.vi,para posteriormente hacer un montón de operaciones matemáticas básicas e ir generando columnas de resultados posteriormente,si os fijais en el programa fuente,cada columna de datos o agrupación de ellas las efectúo por sequence y los ciclos for y formulación  por math-scipt,luego hasta ahora normal,todo.

 

Problemas pues,al ejecutarlo me da errores de secuenciación de datos(se traba a mitad de camino y despues he de volver a ejecutarlo para posteriormente acabar de rellenar las columnas que por problemas "desconocidos",no me deja inicialmente,(trabaja Step by Step).

Mi pregunta es: Labview para tratamiento de datos al estilo excell no es muy aconsejado??,o los math-script son secuencias que le resulta más complicado de compilar,ya que he probado más configuraciones y vuelvo a más de  lo mismo. 

Me gustaria por favor alguna indicación para compilar y generar lo resultados lo más optimos posible.

Gracias a todos.!!

René 

Descargar todos
0 kudos
Mensaje 5 de 6
4.146 Vistas

Hola Munico, es mucho mejor como le hiciste de que cuando cambiaste de tema abriste un tread nuevo esto nos facilita mucho a dar seguimiento. Ya te conteste en el el otro post:

http://forums.ni.com/ni/board/message?board.id=6170&message.id=7759&jump=true

Saludos

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