Discusiones sobre Productos NI

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

variables compartidas Pc-cRio Labview

¡Resuelto!
Ir a solución

Hola,

 

Intento crear un programa que este contenido en mi módulo cRio, y utilizar el ordenador como interfaz con el usuario.

Para ello me he creado dentro de mi proyecto .lvproj, en las carpetas correspodientes al Pc, el correspondiente Host.VI, y su librería.

Me he creado para cada variable su correspondiente "variable compartida" de tipo "Network-published" y según el tipo de datos que tengo en cada una.

 

En cuanto al modulo cRio, he hecho lo mismo en este (su sub.vi y la libreria con variables compartidas).

 

Las variables que son sólo de escritura en mi PC, las arrastro directamente de mi programa Host, al programa de mi cRio como lectura (no hace falta crearlas en la biblioteca de cRio,no??), y además necesito variables de lectura/escritura.

Para esto he intentado crear variables nuevas en las carpetas de cRio y en propiedades utilizar el "enable aliasing" a la variable creada previamente en mi PC, pero no consigo que me funcione correctamente.

 

Me podeis por favor ayudar con esto?

 

un saludo y muchas gracias!!

 

 

0 kudos
Mensaje 1 de 10
6.717 Vistas

hola,

 

Las variables que son de escritura en mi Host, y de lectura en mi modulo cRio me funcionan correctamente (en mi ejemplo send,stop y comand).

 

El problema lo tengo, porque intento crear variables de escritura/lectura (cluster) y no sé como hacerlo.

He intentado hacerlo habilitando el "Enable Aliasing" en mi variable creada en PC, con tipo de acceso: "Read/Write", pero sólo consigo escribir desde el Pc al cRio...se podría hacer que esta misma variable envíe los datos al cRio y reciba de este nuevos datos, mostrandolos de nuevo en mi Pc en la misma variable??

 

Además tengo problemas para pasar las variables como "referencia" en mi sub.vi, es esto posible en RT?? o cómo puedo solucionarlo??

 

Un saludo y muchísmas gracias por vuestro tiempo,

0 kudos
Mensaje 2 de 10
6.708 Vistas

juanfer23, varias cosas: 

 

1. Las variables compartidas tipo cluster no están definidas para usarlas por default. Sin embargo la solución es utilizar el Data Type "From Custom Control", que permite utilizar controles personalizados ( .ctl ) para que funcionen como variable compartida, de esta manera puede crear un tipo de dato cluster  y luego crear el control personalizado ( click derecho >> Advanced >> Customized ) o bien crear un "Type Definition" ( Click Derecho>> Make type def ) y guardarlo; posteriormente al momento de configurar la variable compartida selecciona el tipo "From Custom Control" y busca el control anteriormente guardado , de esta manera puede utilzar cluster como variables compartidas. 

 

2. Las librerías que contienen las variables compartidas se deben crear solo es una instancia de trabajo es decir o bien sea en  RT, o en el PC ( no tiene que haber librería en rt y librería en el PC ) para que funcione ya que estas variables tienen la propiedad de cambiar de modo de acceso ( Read o Write ) , típicamente se crean en la la tarjeta RT, para que se puedan utilizar desde diferentes dispositivos ( varios PC's o tablets por ejemplo ) mientras que si se crean en el PC se tendría que tener acceso al mismo para trabajar con las variables. Mediante drag and Drop de las variables a las diferentes Instancias ( PC o RT )  se puede trabajar y cambiar el modo de acceso ( Click derecho >> Acces Mode >> Write o Read )  con las mismas variables.

 

Variable compartida.png



Ing. Jonathan E. Cruz Ortiz

ENERGÍA PROACTIVA S.A.S

Cel : (+57) 3173669343 - (+57) 3124451894

0 kudos
Mensaje 3 de 10
6.697 Vistas

Hola Jonathan,

 

Muchísimas Gracias por tu respuesta.

Mi problema no está en la creación de las variables, sino en su posterior gestión.

 

Lo que intento hacer, es a partir de un programa en Host (mi PC) poder visualizar y controlar, el programa en RT (cRio), que está continuamente corriendo.

Para ello he creado en mi programa de Host, unas variables de escritura (send, stop, command) que me funcionan correctamente en RT.

El problema lo tengo con la gestión de los datos del cluster "InputData 2", ya que intento que sean de lectura/escritura y no consigo hacerlo funcionar. Es decir, al pulsar en SEND, me envía los datos introducidos en el cluster al programa en RT. Hasta aqui me funciona todo bien, el problema lo tengo en la lectura, ya que sólo me actualiza los nuevos datos leidos, en el programa del RT (Data 2), pero no me lee nada en el Host (Data_v --> Data_V1 --> InputData 2).

 

Las variables las tengo todas configuradas como "Enable Aliasing".......me puedes por favor ayudar o comentarme cómo lo podría solucionar.

 

un saludo y muchas gracias!!!

Descargar todos
0 kudos
Mensaje 4 de 10
6.673 Vistas

Lo he ejecutado paso a paso y programa me funciona. Pero sin "Highlight execution" no me hace nada....

A qué puede deberse esto??

 

Gracias por vuestro tiempo.

 

 

0 kudos
Mensaje 5 de 10
6.658 Vistas

Hola juanfer23,

 

Espero puedas encontrar una lógica al comportamiento de tu código en la información contenida en Troubleshooting Network-Published Shared Variables:

http://ae.natinst.com/public.nsf/web/searchinternal/6e37ac5435e44f9f862570d2005fef25?OpenDocument

 

Con el fin poder corregir el programa, ¿podrías compartir el proyecto y VIs para revisarlo?

 

Saludos,

Álvaro Simón
Applications Engineer | NI Spain

Álvaro Simón
Spain TSE | CLD, CTA & CPI
0 kudos
Mensaje 6 de 10
6.652 Vistas

Hola Álvaro,

 

Gracias por la respuesta. El problema lo tengo en la lectura de las variables booleanas.

Si lo hago paso a paso se leen correctamente, pero al ejecutarlo de manera normal, no me las habilita.

He probado en ejecutarlas mediante "switch when pressed" pero se queda activado continuamente y no ha manera de ponerlo a Off.

 

Agradecería cualquier ejemplo o sugerencia de como poder arreglar este problema,

 

un saludo y muchas gracias de nuevo

0 kudos
Mensaje 7 de 10
6.650 Vistas

Hola,

 

        Si te funciona paso a paso pero no de la otra forma puede ser que tengas Race Condition, veo en tu codigo mucho código paralelo, no hay nada que te asegure que cierta variable se haya escrito correctamente antes de que uses su valor en el otro lado, e igual es posible que se actualice algun valor por la red antes de que los otros y leas solo parte de la información. Ciertamente es dificil de seguir tu código solo con imágenes ya que no tengo idea clara de que quieres hacer.

 

         De lo que pude ver:

1.-En Inicial.vi al no estar determinado tu flujo de código es posible que llames al subVI env antes de haber actualizado los valores en los controles Stop, Send, Command y Data, en este caso podrias agregar una flat sequence en donde en el primer frame actualices dichos valores y en el segundo frame tengas el case structure donde se hace el llamado al suVI env.

2.- En RT_Module no tengo idea que quieres hacer, pero creo algunas acciones tienen que ver con que no hay bytes en el puerto, y en una comunicación de 9600bps un byte puede tardar poco mas de 1ms en llegar, tiempo en el cual tu procesador puede hacer algunos millones de ciclos de reloj. Si me dices que haces alli podria evaluar mejor si no hay ningun error, pero con la sola imagen sin explicación es dificil.

 

         Trata de asegurarte que el flujo de tu programa sea el deseado, si aun no te funciona sube los VI principal o una explicacion mas detallada de como estas haciendo las cosas para ayudarte a buscar el error.

 

         Nota Adicional: No he utilizado cRio (creo que no soporta DSC), pero entre dos PCs con el modulo DSC en la paleta DSC Module -> Shared Variables, puedes usar Enable Value Change Notifications y Request Value Change Notifications, para registrar eventos dinámicos cuando cambie el valor de una o varias shared variables.

 

Saludos Cordiales,

Luis A. Mata C.
Ing. Electrónico
Whatsapp: +58-414-1985579
BBM Pin: 2B83E99A
Thanks: Kudos
0 kudos
Mensaje 8 de 10
6.638 Vistas

juanfer23 escribió:

Hola Jonathan,

 

Muchísimas Gracias por tu respuesta.

Mi problema no está en la creación de las variables, sino en su posterior gestión.

 

 


juanfer23 , Creo que la imagen no es lo suficientemente clara para detallar el problema, de echo de todo el código que se observa no se ve una sola variable que realmente este compartiendo datos, si observa en mi comentario anterior comente que no era necesario crear variables en el host y también en el RT, por ejemplo  las variables compartidas booleanas  ( recept , send_c diferente a send ) no se observa donde se están activando, a no ser que no se muestre en el código , por otro lado el "Enabled aliasing " no creo que sea necesario.

 

Para concluir creo que hace falta aclarar varios conceptos a la hora de adelantar un proceso de comunicación por lo que mi sugerencia es leer los detalles y observar lo ejemplos de la guía de desarrolladores en CompactRIO  -------->http://www.ni.com/compactriodevguide/esa/  que entre otras cosas se observa el uso de las networks Streams una herramienta relativamente nueva para transmitir datos que elimina prácticamente la perdida de datos ya que funciona con Memorias FIFO.

 

También observar los ejemplos de la ayuda ( Find Examples >> Toolkit and modules >> Real time >> Network Comunnication ). 

Saludos.



Ing. Jonathan E. Cruz Ortiz

ENERGÍA PROACTIVA S.A.S

Cel : (+57) 3173669343 - (+57) 3124451894

0 kudos
Mensaje 9 de 10
6.622 Vistas
Solución
Aceptado por juanfer23

Hola,

Muchísimas gracias por vuestro tiempo y ayuda.

He subido el programa en el mensaje que cree sólo para este problema. Siento de nuevo el haber repetido la consulta.

Dejo el link para continuar sólo en un mensaje:

 

http://forums.ni.com/t5/Discusiones-sobre-Productos-NI/Control-Booleano-en-RT-Labview/m-p/2414890/hi...

 

Gracias de nuevo por vuestra ayuda,

0 kudos
Mensaje 10 de 10
6.571 Vistas