컨트롤/인디케이터, 로컬 변수 및 값 프로퍼티 노드 차이점

업데이트 됨 Oct 17, 2023

해당 제품

소프트웨어

  • LabVIEW Base
  • LabVIEW Full
  • LabVIEW Professional

문의사항

내 VI에서 값 프로퍼티 노드 또는 바로 컨트롤/인디케이터를 사용하는 대신 로컬 변수를 사용할 때 다르게 실행됩니다. 어떤 차이점이 있습니까?

해결책

프런트 패널 컨트롤을 업데이트하는 데 사용할 방법을 선택할 때 고려해야 할 몇 가지 성능상의 절충점이 있습니다. 사용 가능한 업데이트 방법은 컨트롤/인디케이터, 로컬 변수 또는 값 프로퍼티 노드입니다. 다음은 각 방법의 장점과 단점입니다.

컨트롤/인디케이터
장점
  • 동일한 값을 지속적으로 업데이트 할 때 프런트 패널 업데이트를 방지하는 로직 내장. 이렇게하면 프런트 패널을 다시 그릴 수 없습니다.
  • 포인터의 참조를 해제하거나 메모리의 데이터 사본을 만들 필요가 없습니다. 따라서 가장 빠르고 메모리 집약적인 옵션입니다.
단점
  • 클러스터/배열의 단일 항목에는 쓸 수 없고 전체 변수를 업데이트해야합니다
C 유사점
(이것은 C와 같지 않지만 해당 프런트 패널 컨트롤/인디케이터를 업데이트하기 위해 해야 할 단계를 보여줍니다).

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



로컬 변수
장점
  • 동일한 값을 지속적으로 업데이트 할 때 프런트 패널 업데이트를 방지하는 로직을 내장했습니다. 이렇게하면 프런트 패널을 다시 그릴 수 없습니다.
  • 프로퍼티 노드와 달리 포인터를 참조 해제 할 필요가 없습니다. 따라서 프로퍼티 노드보다 빠릅니다.
단점
  • 메모리 집약적인 프로세스. 이들은 컨트롤/인디케이터와 같은 프런트 패널 업데이트 로직을 가지고 있지만, 생성한 각 로컬 변수에 대해 메모리에 데이터의 전체 복사본을 만들어야합니다.
  • 클러스/배열의 단일 항목에는 쓸 수 없고 전체 변수를 업데이트해야합니다.
  • 같은 로컬 변수에 다른 속도로 쓰거나 읽을 때 경쟁 조건이 발생할 수 있습니다.
C 유사성
(이것은 C와 같지 않지만 해당 프런트 패널 컨트롤/인디케이터를 업데이트하기 위해 해야 할 단계를 보여줍니다).

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.



프로퍼티 노드
장점
  • 로컬 변수와 달리 메모리에 데이터 복사본을 만들지 않습니다.
  • 엄격하지 않은 컨트롤 참조를 사용하는 경우 값의 데이터 유형은 컨트롤의 실제 데이터 유형이 아닌 변형될 수 있습니다.
  • 클러스터 내에서 단일 컨트롤 읽기 및 쓰기 가능
  • SubVI 내에서 프런트 패널 컨트롤을 업데이트하는 데 사용할 수 있습니다.
단점
  • 프런트 패널 항목을 호출 할 때마다 업데이트해야합니다.
  • 그것들은 pass by value 함수가 아닌  pass by reference 함수입니다. 이는 본질적으로 특정 메모리 위치에 대한 포인터임을 의미합니다. 포인터는 참조 해제되어야하며 메모리의 값이 업데이트됩니다. 변수를 참조 해제하는 과정에서 컨트롤/인디케이터 또는 로컬 변수보다 속도가 느려집니다.
  • 프로퍼티 노드는 SubVI의 프런트 패널이 메모리에 남아 있도록하여 메모리 사용을 증가시킵니다. SubVI의 프런트 패널이 표시되지 않으면 프로퍼티 노드를 제거하여 메모리 사용을 줄이십시오.
C 유사성
(이것은 C와 같지 않지만 해당 프런트 패널 컨트롤/인디케이터를 업데이트하기 위해 해야 할 단계를 보여줍니다).

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.