다수의 공유 변수에 접근하는 어플리케이션이 있는 경우, 공유 변수 함수를 사용하여 프로그램적으로 해당 공유 변수를 읽고 쓸 수 있습니다. 각 공유 변수 노드가 하나의 공유 변수에만 접근할 수 있는 반면, 하나의 공유 변수 함수로 여러 공유 변수에 접근할 수 있기 때문에, 공유 변수 노드를 사용하는 것보다 이러한 프로그래밍 기술이 종종 더 깔끔하고 확장 가능합니다.

노트 다음 타입의 공유 변수에 프로그램적으로 접근할 수 있습니다:
  • PSP 변수NI Publish-Subscribe Protocol (NI-PSP)을 사용하여 네트워크에 공개된 데이터 아이템. 네트워크 공유 변수, 네트워크 공개가 활성화된 I/O 변수, NI-DAQmx I/O 서버를 통해 공개된 DAQ 채널이 PSP 변수의 일반적인 예에 포함됩니다.
  • I/O 변수―I/O 데이터에 대한 단일 포인트 접근을 위해 NI 스캔 엔진을 사용하는 공유 변수.

다음 그림은 공유 변수를 프로그램적으로 읽고, 해당 값을 미리 할당된 배열로 놓고, 해당 값을 처리하는 예를 보여줍니다.

다음과 같은 이벤트가 위의 그림에서 발생합니다:

  1. [변수 컨테이너 검색] 함수는 My Library 아래에서 모든 배정도 데이터 타입 공유 변수를 찾고, 참조 번호 배열 출력 출력은 해당 공유 변수에 대한 참조의 배열을 반환합니다.
  2. [변수 연결 열기] 함수는 변수 식별자 URL의 배열을 사용하여 각 공유 변수에 연결합니다. 에러가 발생하면 For 루프는 멈춥니다.
  3. [배열 크기] 함수는 공유 변수 참조의 배열을 사용하여 [변수 컨테이너 검색] 함수가 찾은 공유 변수의 개수를 계산합니다.
  4. [배열 초기화] 함수는 공유 변수의 개수를 사용하여 공유 변수 데이터에 대한 배열을 생성합니다. While 루프 밖에서 공유 변수 데이터에 대한 배열을 초기화함으로써, 이 어플리케이션은 CPU 사용을 최적화합니다.
  5. [변수 읽기] 함수는 [변수 연결 열기] 함수가 열었던 각각의 공유 변수를 읽습니다.
  6. [배열 부분 대체] 함수는 [배열 초기화] 함수가 생성한 배열에 공유 변수 데이터를 저장합니다.
  7. Process Data subVI는 공유 변수 데이터의 배열을 처리합니다.
  8. 에러가 발생할 때까지 또는 사용자가 정지 버튼을 클릭할 때까지 읽기 및 처리 작업은 While 루프에서 지속적으로 실행됩니다.
  9. [변수 연결 닫기] 함수는 공유 변수 연결을 끊습니다.

이 어플리케이션은 공유 변수 노드를 사용하는 것과 동일한 기능을 달성합니다. 그러나 이 어플리케이션은 프로그램적으로 공유 변수에 접근하기 때문에, 블록다이어그램을 업데이트하지 않고도 수백 또는 수천 개의 변수로 확장할 수 있습니다. 예를 들어, My Library에 변수1부터 변수10까지, 10개의 변수가 포함된다고 가정합니다. 일괄 변수 생성 대화 상자를 사용하여 My Library에 변수11부터 변수500까지 추가할 수 있습니다. My Library를 재배포한 후, 다음에 VI를 실행하면, 변수11부터 변수500까지 블록다이어그램에 추가할 필요 없이 변수1부터 변수500까지 읽습니다.

다음 섹션에서는 위 예의 프로그래밍 기술에 대한 정보가 제공됩니다.

공유 변수 찾기

[변수 컨테이너 검색] 함수를 사용하여 특정한 기준을 충족하는 공유 변수와 변수 컨테이너를 검색합니다. 예를 들어, 다음 블록다이어그램에 보이는 VI는 이 함수를 사용하여 주어진 컨테이너에서 다음의 기준을 만족시키는 공유 변수를 찾습니다.

  • 로컬 컴퓨터의 My Library에 존재
  • 배정도 데이터 타입
  • 변수 식별자 URL은 문자열 foo 포함

노트 변수 객체 탐색 대화 상자를 사용하여 편집 시에 공유 네트워크나 현재 프로젝트에서 변수와 변수 컨테이너를 탐색할 수 있습니다. 위 그림의 컨테이너 참조 번호 입력 상수와 같은 변수 컨트롤이나 상수에서 드롭다운 화살표를 클릭한 후 탐색을 선택하여 변수 객체 탐색 대화 상자를 디스플레이합니다.
주의 프로그램식으로 찾은 공유 변수를 읽고 쓸 때 잘못된 데이터 타입의 데이터를 읽거나 쓸 수 있습니다. 변수 컨테이너 검색 함수의 데이터 타입 입력을 사용해서 잘못된 데이터 타입의 공유 변수를 읽거나 쓰는 것을 방지합니다.

또한 다음 변수 컨테이너 프로퍼티메소드를 사용하여 프로그램적으로 공유 변수를 찾을 수 있습니다.

다음 그림의 VI는 모든 변수 프로퍼티를 사용하여 로컬 네트워크에 호스트된 모든 PSP 변수를 찾습니다.

다음과 같은 이벤트가 위의 그림에서 발생합니다:

  1. 로컬 변수 객체 참조 상수는 로컬 PSP 변수 엔진에 대한 참조를 원격 엔진 프로퍼티로 전달합니다.
  2. 원격 엔진 프로퍼티는 네트워크의 다른 컴퓨터에 호스트된 PSP 변수 엔진의 배열을 반환합니다. 그런다음 이 VI가 For 루프에서 각 PSP 변수 엔진을 반복합니다.
  3. 루트 프로퍼티는 각 원격 컴퓨터에서 루트 PSP 변수 컨테이너에 대한 참조를 얻습니다.
  4. 모든 변수 프로퍼티는 각 원격 컴퓨터에 호스트된 모든 변수에 대한 참조의 배열을 얻습니다.
  5. VI는 네트워크에서 발견된 모든 변수를 모든 PSP 변수 배열에 추가합니다.
앞의 블록다이어그램을 만드는 출발점으로, 변수 객체 클래스에서 미리 설정한 변수 프로퍼티 노드를 사용할 수 있습니다.

공유 변수 연결 열기 및 닫기

다음 블록다이어그램에서 보이는 것처럼, [변수 연결 열기] 함수를 사용하여 프로그램적으로 변수에 대한 연결을 열 수 있습니다.

어플리케이션이 공유 변수에 대한 접근을 마치면, For 루프에서 [변수 연결 닫기] 함수를 사용하여 모든 변수 참조를 닫습니다. 이 함수는 각 변수 연결에 할당되었던 메모리 리소스를 해제합니다.

공유 변수 읽기와 쓰기

[변수 읽기] 함수를 사용하여 프로그램적으로 실시간 변수 값을 데이터를 읽습니다. 편집 시에 특정한 공유 변수로 연결해야 하는 공유 변수 노드와 달리, [변수 읽기] 함수는 공유 변수 참조 번호 입력 입력을 포함하며, 이 입력을 사용하여 실행 시에 읽을 공유 변수를 지정할 수 있습니다. 예를 들어, 다음 블록다이어그램에서 처럼 For 루프안에 변수 읽기 함수를 사용하여 참조 번호 배열이 지정한 여러 공유 변수를 읽을 수 있습니다.

[변수 쓰기] 함수를 사용하여 프로그램적으로 실시산 변수 값을 쓸 수 있습니다. 예를 들어, For 루프내에 [변수 쓰기] 함수를 사용하여 참조 번호 배열이 지정한 여러 공유 변수에 쓸 수 있습니다.

배열로 I/O 변수 컨테이너를 읽고 쓰면 성능을 최적화하고, 블록다이어그램을 간소화할 수 있습니다.
노트 공유 변수에 8 킬로바이트 미만의 데이터를 쓰는 경우, LabVIEW가 이 데이터를 네트워크를 통해 전송하는데 소요되는 시간은 최대 10밀리초입니다. 이러한 지연을 없애려면 [공유 변수 데이터 비우기] VI를 사용하여 공유 변수 데이터를 즉시 전송합니다.

데이터 통신 방법