Discusiones sobre Productos NI

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

Programas en pararlelo que escriben a la vez en el puerto serie ¿como sincronizarlo?

Mi probl,ma es que tengo 4 programas:
 
Uno de ellos es el principal que lee y escribe en el puerto serie.
Desde este programa se invoca a tres programas.
 
Cada uno de estos tres programas mandan instrucciones al puerto serie.
El problema esta en que cuando lo quieren hacer a la vez, porque aunque he puesto un buffer de transmisión (creado por mi) el proble ma esta en la escritura en el buffer. ¿Como puedo garantizar que los datos se transmiten tarde o temprano, vanmos que no se pierdan o se quede esperando media hora para intentarlo colocar en el buffer?
 
 
Tengo dos problemillas mas:
 
1. Desde el progranma principal se como mandar la ejecución de los otros programas, pero lo que no se hacer es como puedo pararlos desde el programa principal, pero sin apagar el programa principal. Realamente los tres programas son bucles while que se estan ejecutando siempre.
 
2. El ordenador en que estoy trabajando es nuevo, pero sucede que cada vez que lo arranco se pone  el uso de la CPU practicamente al 100%. Yo creo que el motivo es porque tengo bucle while que se estan ejecutando siempre, aunque no se si esto es cierto. Mi pregunta es como hacerlo para reducir el consumo de CPU porque esto creo que es una de las causas por las que los programas se quedan bloqueados.
 
Si alguien me puede ayudar se lo agradeceria porque tengo que entregarlo mañana.
0 kudos
Mensaje 1 de 3
3.408 Vistas

El problema de la sincronización lo puedes resolver con semáforos:
https://www.ni.com/docs/en-US/bundle/labview/page/suggestions-for-using-execution-systems-and-priori...
https://knowledge.ni.com/KnowledgeArticleDetails?id=kA00Z000000kFGkSAM&l=en-US.

Para crearte un buffer la mejor forma serían las colas:
https://knowledge.ni.com/KnowledgeArticleDetails?id=kA00Z000000P7OfSAK&l=en-US.

Para lanzar y parar VIs desde otro puedes usar VI Server. Aquí http://digital.ni.com/public.nsf/allkb/F60C3F5BC762B62986256CCD0054F26E  se muestra cómo abrir, para cerrar usar abort en lugar de Run.

Y para que la cpu no se ponga al 100% seguramente será simplemente añadir un retardo: http://digital.ni.com/public.nsf/allkb/8638139D6236D42086256A340073554A 

Mensaje 2 de 3
3.404 Vistas
 

Hola,

 

Efectivamente, para lanzar vi's tienes que hacerlo con vi servers.

 

El problema del 100% de CPU es que no tendrás temporizado el bucle while. Inserta un wait o un wait until next ms dentro del bucle while para resolver dicho problema.

 

Las comunicaciones de datos entre vi's lo puedes hacer de diferentes formas. Tal y como te comentan tienes las colas, pero también tienes las variables. Desde LV 8 están las shared variables que lo hacen mucho más sencillo. Te paso un link con la explicación:

https://www.ni.com/en/support/documentation/supplemental/06/using-the-labview-shared-variable.html

 

Espero que te sirva de ayuda,

 

Saludos,

 

Regards,

Jaime Cabrera

NI Applications Engineering Spain
0 kudos
Mensaje 3 de 3
3.389 Vistas