You are here

레퍼런스 참조에 의한 VI 호출

LabVIEW는 두 가지 방법에 의해 SubVI를 불러옵니다.
정적(프로그램 실행 전 프로그램을 작성할 때 필요한 SubVI를 블록다이어그램에 삽입) 연결 SubVI는 메인 VI의 블록다이어그램에 끌어 놓여진 일반 SubVI입니다. 정적 연결 SubVI는 메인 VI가 실행되는 것과 동시에 메모리로 로딩됩니다. 그러므로, SubVI가 아무리 잠시 실행되더라도 프로그램이 끝날 때까지 메모리에 상주하게 됩니다.

 

다이나믹 연결 SubVI는 메인 VI의 필요에 의해 불러들이지 않으면 메모리 안으로 로딩되지 않습니다. 이 방법을 사용하면 프로그래머는 항시 상주하는 SubVI가 아닌 필요할 때 동적으로 추가되었다가 임무 수행이 완료되면 사라지는 SubVI를 만들 수 있습니다.

 

동적으로 SubVI를 사용하려면 VI 서버(VI Server)가 필요합니다. 동적 호출을 하려면 먼저 어플리케이션 컨트롤(Application Control) 팔레트에 있는 VI 참조 열기(Open VI Reference) 함수를( ) 사용하여 SubVI에 대한 참조를 열게 됩니다. VI 참조 열기 함수는 열고자 하는 VI의 타입(형태)을 지정할 때 "타입 지정자 VI 참조 번호(type specifier VI refnum)"을 사용합니다. 여기서 “타입”은 커넥터의 모양을 의미합니다. 열고자 하는VI와 동일한 커넥터 타입을 가지고 있는 타입 지정자 VI 참조 번호에 연결합니다. 대개 이를 위해 일정한 VI refnum을 생성하고 적절한 커넥터가 있는 VI를 선택하면 됩니다. 또는 다음과 같이 커넥터 정보를 단계단계 찾아가 선택합니다.

 

 

 

 

 

타입 지정자(type specifier)로 인해 참조(refnum)는 커넥터 타입 정보를 갖게 됩니다. 이는 메인 VI로부터 동적으로 로딩되는 SubVI를 호출할 수 있도록 해주는 참조에 의한 호출 노드(Call by Reference Node) 함수의 사용 시 중요합니다. (어플리케이션 컨트롤(Application Control) 팔레트에 위치)
호출을 마치면 SubVI의 레퍼런스 참조를 반드시 닫아주십시오. 동적 호출의 장점은 SubVI가 프로그램 실행 도중(전체)이 아닌 SubVI를 열고 닫는 동안에만 메모리에 상주합니다.

이 방법의 또 다른 장점은 여러 SubVI가 동일한 커넥터 타입을 가지면 이들 SubVI를 동일한 노드에서 호출할 수 있다는 것입니다. 예를 들어, 각 SubVI 마다 하나의 VI 이름과 두 개의 숫자 입력을 갖는 데이터 파일 세트가 있다고 가정합니다.

 

           doc1.op           doc2.op          doc3.op
            add.vi         subtract.vi         multiply.vi
              4.3               5.6               2.0
              2.5               3.4               6.0

 

모든 데이터 파일을 한 번에 처리하려는 경우 다음과 같이 루프를 실행하고 동적으로 각 파일을 로드하고 실행하는 VI를 작성할 수 있습니다.

 

 

 

 

사용자가 .op 파일이 위치한 폴더를 선택하면 메인 VI는 디렉터리의 모든 .op 파일목록을 가져옵니다. 루프 안의 각 파일에 대해 메인 VI는 파일의 처음 세 개의 라인을 읽고 데이터를 VI 이름(첫 번째 라인)과 두 개의 숫자를 추출해 문자열로부터 스캔(Scan from String) 함수로 전달합니다. 그리고 첫 번째 라인의 명칭에 따라 적절한 VI를 불러들입니다. 그러면 Add, Subtract 또는 Multiply VI를 동적으로 로딩되고 지정된 연산 결과를 계산하여 출력 인디케이터를 통해 표시할 수 있습니다.

다이나믹 연결법은 케이스 구조를 필요로 하기 때문에 VI의 코드를 단순화할 뿐 아니라 향후 Divide VI와 같은 새로운 연산이 필요한 경우, 쉽게 기능을 확장할 수 있도록 해줍니다. 이렇게 하려면, 새로운 함수를 생성하여 VI가 동일한 커넥터 타입을 갖도록 하고, 다른 함수 VI와 동일한 위치에 두어야 합니다. 그리고 중요한 점은 메인 VI의 코드는 동일하게 유지되므로 프로그래밍이 수월해집니다.