Control, Indicador, Variable local, y Diferencias en el nodo de propiedades de valor

Actualizado el Oct 17, 2023

Reportado en

Software

  • LabVIEW Base
  • LabVIEW Full
  • LabVIEW Professional

Detalles del problema

Mi VI se ejecuta de manera diferente cuando uso variables locales en lugar de valores nodos de propiedad o controles / indicadores directamente. ¿Qué diferencias hay entre estos?

Solución

Hay varias ventajas y desventajas de rendimiento que se deben tener en cuenta al seleccionar qué método usar para actualizar los controles del panel frontal. Los métodos de actualización disponibles son Controles / Indicadores, Variables locales o Nodos de propiedades de valor. Aquí están los beneficios y aspectos negativos de cada método:

Controles / Indicadores
Beneficios
  • Lógica integrada para evitar actualizaciones del panel frontal al actualizar continuamente el mismo valor. Esto evita que el panel frontal se vuelva a dibujar.
  • No es necesario desviar la referencia de los punteros, ni hacer copias de los datos en la memoria. Como tal, esta es la opción más rápida y que requiere menos memoria.
Negativos
  • No puede escribir en un solo elemento en un clúster / matriz, pero debe actualizar la variable completa
Analogía C
(Esto no es un equivalente de C, pero ayuda a mostrar los pasos que se deben seguir para actualizar el control / indicador del panel frontal correspondiente).

int x; // Front Panel Indicators
x = 10; // Write directly to the Front Panel Indicator.



Variables locales
Beneficios
  • Incorpore una lógica para evitar las actualizaciones del panel frontal al actualizar continuamente el mismo valor. Esto evita que el panel frontal se vuelva a dibujar.
  • No es necesario desviar la referencia de los punteros, a diferencia de los nodos de propiedad. Como tales, son más rápidos que los nodos de propiedad.
Negativos
  • Proceso intensivo de memoria. Estos tienen la misma lógica de actualización del panel frontal que los controles / indicadores, sin embargo, deben hacer una copia completa de los datos en la memoria para cada variable local que cree.
  • No puede escribir en un solo elemento en un clúster / matriz, pero debe actualizar la variable completa.
  • Las condiciones de la carrera pueden ocurrir si escribe y lee en la misma variable local a diferentes velocidades.
Analogía C
(Esto no es un equivalente de C, pero ayuda a mostrar los pasos que se deben seguir para actualizar el control / indicador del panel frontal correspondiente).

int x; // Front Panel Indicator
int y; // Local variable
y=10; // Write to local variable
x=y; // LabVIEW does this for you to update the front panel.



Nodos de propiedad
Beneficios
  • No cree copias de datos en la memoria a diferencia de las variables locales.
  • Si está utilizando una referencia de control no estricta, entonces el tipo de datos del valor puede ser una variante en lugar del tipo de datos real del control.
  • Capaz de leer y escribir un solo control dentro de un grupo
  • Puede usarse para actualizar los controles del panel frontal desde un SubVI
Negativos
  • Se requiere para actualizar el elemento del panel frontal cada vez que se llaman.
  • Son una función de paso por referencia en lugar de una función de paso por valor. Esto significa que son esencialmente punteros a ubicaciones de memoria específicas. Los punteros se deben quitar de referencia y luego se debe actualizar el valor en la memoria. El proceso de desvinculación de las variables hace que sean más lentos que los Controles / Indicadores o las Variables locales.
  • Los nodos de propiedades hacen que el panel frontal de un SubVI permanezca en la memoria, lo que aumenta el uso de la memoria. Si no se muestra el panel frontal de un SubVI, elimine los nodos de propiedades para disminuir el uso de la memoria.
Analogía C
(Esto no es un equivalente de C, pero ayuda a mostrar los pasos que se deben seguir para actualizar el control / indicador del panel frontal correspondiente).

int x; // Front Panel Indicator
int *x_pointer = &x; // Create pointer to Front Panel Indicator
// (Property Node)

*x_pointer = 1; // * is used to dereference the pointer and update
// variable X. This is the operation that happens
// every time a property node executes.