기본으로, LabVIEW는 VI를 재호출이 아닌 실행으로 설정합니다. 재호출이 아닌 실행에서 여러 VI들이 동시에 하나의 VI를 SubVI로 호출하는 경우, 이러한 호출 중 하나의 호출만이 오직 한 번에 하나씩 해당 SubVI를 실행할 수 있습니다. LabVIEW는 재호출되지 않는 SubVI의 호출자가 순서대로 SubVI를 사용하도록 합니다. 재호출되지 않는 VI에는 호출자의 파라미터, 실행 중 계산된 임시 값 및 재호출되지 않는 VI가 여러 호출 간에 유지하는 모든 상태를 저장할 수 있는 오직 하나의 데이터 공간만이 있습니다. 그러나 VI가 재호출 실행이 가능하도록 설정된 경우, LabVIEW는 동시에 모든 호출자로부터 재호출 VI를 입력할 수 있습니다. 재호출 실행에서 LabVIEW는 데이터 공간의 여러 인스턴스 또는 복제본을 할당하여 각 호출 장소 또는 호출자의 블록다이어그램 내에서의 SubVI의 용도가 병렬로 동시에 실행되어 각 호출 장소에서 독립된 복제본이 사용될 수 있도록 합니다.

노트 (FPGA Module) FPGA VI는 기본으로 재호출입니다.

재호출 실행의 타입

LabVIEW는 다음과 같은 타입의 재호출 VI를 제공합니다:

  • 재호출이 아닌 실행—LabVIEW는 SubVI의 모든 인스턴스에서 사용하도록 단일 데이터 공간을 할당합니다.
  • 공유 복제 재호출 실행—LabVIEW는 먼저 한 복제본에서 생성된 복제본의 풀을 할당하여 여러 호출자가 공유할 수 있도록 합니다. 호출자가 공유 복제 VI를 호출하면, 풀에서 복제본을 가져오고 호출이 실행을 마치면 해당 복제본을 반환합니다. 호출자가 공유 복제 VI를 호출할 때 풀이 비어 있는 경우, LabVIEW는 해당 호출에 대한 새 복제본을 생성하고 실행이 완료될 떄 해당 복제본을 풀에 놓아 복제본 풀을 확장시킵니다.
  • 미리 할당된 복제 재호출 실행—LabVIEW는 SubVI를 사용할 때마다 별도의, 공유할 수 없는 복제본을 할당합니다.

VI의 재호출 셋팅을 설정하려면, VI 프로퍼티 대화 상자의 실행 페이지를 참조하십시오.

어떤 재호출 실행 타입을 사용할지 선택하기

사용 고려사항 재호출이 아님 공유 복제 재호출 미리 할당된 복제 재호출
초기화되지 않은 시프트 레지스터와 같은 상태를 유지할 수 있음 데이터 공간의 단일 인스턴스를 유지하고 모든 호출 사이트에서 그 상태를 사용합니다. 상태를 유지하지 않음—각 호출 사이트는 복제본의 풀에서 무작위로 복제본의 데이터 공간을 사용합니다. 호출 사이트는 상태를 공유할 수 있습니다. 각 호출 사이트에 대해 상태를 유지함—각 호출 사이트는 각각 별도의 특정한 복제본을 가집니다.
여러 개의 동시 호출 VI에 대한 결정성 호출 사이트는 다른 동시 호출자 뒤에서 대기할 수 있음—SubVI의 인스턴스가 실행을 시작하는데 필요한 시간은 해당 인스턴스 이전에 몇개의 인스턴스가 실행되도록 예정되었는지에 따라 다릅니다. 기다릴 수 있음—복제본의 풀이 비어 있는 경우 호출 사이트는 LabVIEW가 새 복제본을 생성할 때까지 대기해야 할 수 있습니다. 풀이 비어 있지 않은 경우, 풀에서 복제본을 가져오고 풀에 복제본을 반환하면 타이밍 결정성이 높지 않은 지연을 일으킬 수 있습니다. 기다리지 않음—LabVIEW는 실행 전 각 호출 사이트에 대해 복제본을 할당합니다. 이렇게 하면 시간 결정성있는 메모리 사용 및 실행 속도가 허용됩니다.
동시 호출 VI가 존재하지 않는 경우 호출 오버헤드가 발생합니다. 증간—LabVIEW는 반드시 동시 호출자를 확인해야 합니다. 최고—LabVIEW는 반드시 복제본의 풀에서 복제본을 가져오고 복제본의 플로 복제본을 반환해야 합니다. 호출은 LabVIEW가 풀에 복제본을 추가하도록 기다려야 합니다. 최저—LabVIEW는 각 호출 사이트에 미리 복제본을 할당합니다.
메모리 사용 최저—LabVIEW는 SubVI에 하나의 데이터 공간만 할당합니다. 중간—LabVIEW는 동시에 실행되는 최대 개수의 인스턴스에 대해서만 복제본을 할당해야 합니다. 최고—LabVIEW는 SubVI의 각 인스턴스에 복제본을 할당해야 합니다.
노트 (FPGA Module) FPGA VI를 사용하는 경우, 공유 복제 재호출 VI 및 미리 할당된 복제 재호출 VI는 동일하게 동작합니다.

재호출 VI의 여러 인스턴스를 비동기적으로 호출하기

재호출 VI를 비동기적으로 호출하는 것에 대한 정보는 병렬 실행을 위해 VI의 여러 인스턴스를 비동기적으로 호출하기 토픽을 참조하십시오.

재호출 VI의 복제본 프런트패널 보기

각 복제본에는 개별적인 프런트패널이 있습니다. 복제본이 실행되지 않을 때 프런트패널을 보려면, 해당 SubVI의 인스턴스를 더블 클릭합니다. 또한 재호출 VI가 실행 중 프런트패널을 열도록 설정할 수 있습니다. SubVI의 제목 표시줄은 (복제)를 포함하며 이 VI가 원본이 아니라 복제본임을 나타냅니다. 복제본에서 VI 원본에 접근하려면 보기≫관계 탐색≫재호출 아이템을 선택합니다. 또한 SubVI 안에서 프런트패널:열기 메소드를 선택하여 각 복제본의 프런트패널을 실행 중에 프로그램적으로 열 수 있습니다. SubVI의 제목 표시줄은 (복제)를 포함하며 이 VI가 소스 VI의 복제본임을 나타냅니다.

재호출이 아닌 VI의 프런트패널과 상호 작용하는 것과 비슷한 방법으로 재호출 VI의 프런트패널과 상호 작용할 수 있으며, 특히 다음의 방법을 참조하십시오:

재호출 실행의 예제

다음 두 섹션은 기다리고 데이터를 공유하지 않는 재호출 VI의 예제를 설명합니다.

SubVI의 여러 인스턴스 동시에 실행되도록 하기

다음 블록다이어그램은 점심 시간휴식 시간 시간에 도달한 것을 사용자에게 알려줍니다. 그러나, 정확한 결과를 얻으려면 Alarm Timer VI를 재호출되도록 설정하는 것이 중요합니다.

사용자가 점심 시간휴식 시간을 지정합니다. 이 예제에서 점심 시간은 오후 12시, 휴식 시간은 오전 10시라고 가정해봅니다.
Alarm Timer VI는 지정된 입력 시간까지 기다립니다. Alarm Timer VI의 인스턴스가 다이어그램의 병렬 부분에 나타나기 때문에, 어떤 인스턴스가 먼저 실행되는지 예측할 수 없습니다. 이 예제에서는 점심 시간 타이머가 먼저 실행된다고 가정합니다.

Alarm Timer VI가 재호출이 아닌 실행으로 설정된 경우, 휴식 시간 타이머는 점심 시간 타이머가 실행을 종료할 때까지 기다려야 하기 때문에 오후 12시까지는 실행을 시작할 수 없습니다. 이러한 지연으로 인해 휴식 시간 타이머는 오전 10시에 알람을 작동할 수 없습니다. 그렇기 때문에 SubVI의 두 인스턴스가 동시에 실행되고 정해진 시간에 알람이 작동되도록 하려면, Alarm Timer VI가 재호출 실행 타입 중 하나를 사용하도록 설정해야 합니다.

각 SubVI 인스턴스를 여러 번 호출할 때 데이터 저장하기

특정 호출 사이트의 SubVI에 대한 호출 사이의 상태를 유지하려면, 반드시 미리 할당된 복제 재호출 실행을 사용해야 합니다. 예를 들어, VI에 전달된 네개의 데이터 포인트의 실행 지수 평균을 계산하는 SubVI인 ExpAvg을 생성합니다. LabVIEW는 4개의 최신 데이터 포인트를 단일 반복 While 루프의 초기화되지 않은 시프트 레지스터에 유지할 수 있습니다.

다른 VI가 ExpAvg subVI를 사용하여 두 데이터 수집 채널의 실행 평균을 계산합니다. VI는 과정에서 두 포인트의 전압을 모니터하고 스트립 차트에 지수 실행 평균을 디스플레이합니다. VI의 블록다이어그램은 ExpAvg SubVI의 두 인스턴스를 포함합니다. 번갈아 호출되는데, 하나는 채널 0, 다른 하나는 채널 1입니다. 채널 0이 먼저 실행된다고 가정합니다. ExpAvg subVI가 재호출이 아닌 경우, 채널 1의 호출은 채널 0의 호출에 의해 계산된 평균을 사용합니다. 또한 채널 0은 채널 1의 호출에 의해 계산된 평균을 사용합니다. ExpAvg subVI를 재호출로 만들어, 각 호출은 데이터를 공유하지 않고 독립적으로 실행될 수 있습니다.

Timed 구조에서 SubVI 재호출 셋팅 덮어쓰기

(Real-Time, Windows) Timed 루프 또는 Timed 시퀀스 구조 내에서 공유된 복제 재호출 VI의 복제본을 미리 할당하거나 공유하도록 LabVIEW를 설정할 수 있습니다. 예를 들어, 공유된 복제 재호출 VI를 Timed 루프 또는 Timed 시퀀스 구조 안에 놓으면, 구조 안에서 호출하는 재호출 VI의 인스턴스에 대한 복제본을 미리 할당하도록 구조를 설정할 수 있습니다. 구조 밖에서 호출하는 재호출 VI의 인스턴스는 계속해서 복제본을 공유합니다. Timed 루프 또는 Timed 시퀀스 구조 내에서의 VI 할당을 설정하려면, 구조에서 마우스 오른쪽 버튼을 클릭한 후 공유 복제 할당을 선택하고 다음 중에서 하나를 선택합니다:

  • 자동—LabVIEW는 구조의 내용에 따라 구조를 미리 할당 또는 필요할 때 할당으로 설정할지 결정합니다. LabVIEW는 바로 가기 메뉴에 텍스트를 추가하여 LabVIEW가 선택하는 셋팅을 표시합니다. 예를 들어, LabVIEW가 미리 할당을 선택하는 경우, 메뉴 아이템은 자동(미리 할당)이 됩니다.
  • 미리 할당—LabVIEW가 구조 내의 재호출 VI에 대한 각 호출에 대해 복제 VI를 생성합니다. Timed 구조 또는 Timed 시퀀스 구조는 아이콘을 디스플레이하여 LabVIEW가 구조 내에 있는 모든 재호출 VI에 대한 복제본을 미리 할당하고 있음을 표시합니다.
  • 필요할 때 할당—사용자가 구조 내에 있는 재호출 VI를 호출하기 전까지는 LabVIEW가 복제 VI를 생성하지 않습니다. Timed 구조 또는 Timed 시퀀스 구조는 아이콘을 디스플레이하여 LabVIEW가 구조 내에 있는 모든 재호출 VI에 대한 복제본을 공유하고 있음을 표시합니다.

재호출 VI 디버깅

재호출 VI에서 디버깅을 허용하려면, 파일≫VI 프로퍼티를 선택하여 VI 프로퍼티 대화 상자를 디스플레이하고, 풀다운 메뉴에서 실행을 선택하고, 디버깅 허용 확인란에 확인 표시를 합니다.

미리 할당된 복제본이 있는 VI의 특정 인스턴스를 디버깅하려면, SubVI에서 해당 인스턴스를 엽니다. 복제본 VI를 편집할 수는 없지만, 이 VI의 블록다이어그램을 사용하여 디버깅할 수는 있습니다. 예를 들면, 브레이크포인트를 설정하고, 프로브를 사용하고, 실행 하이라이트를 활성화하고, 단계별 실행도 할 수 있습니다.

복제본을 공유하는 VI의 인스턴스를 디버그하려면, 복제 VI가 아닌 소스 VI에. 서 브레이크포인트, 프로브 및 실행 하이라이트를 사용해야 합니다. 복제 VI는 여러 호출에서 이러한 설정을 그래도 유지하지 않습니다.

노트 어플리케이션과 공유 라이브러리를 디버그할 때 [VI 참조 열기] 함수가 생성하는 재호출 패널은 디버그할 수 없습니다. 또한 LabVIEW 생성 공유 라이브러리의 입력 포인트인 재호출 패널도 디버깅할 수 없습니다.