VI 스크립팅을 사용하여 모르는 타겟 VI의 객체 참조 얻기
- 업데이트 날짜:2025-08-27
- 3분 (읽기 시간)
필수: VI 스크립팅
VI 스크립팅을 사용하여 실행 시까지 그 내용을 알지 못하는 타겟 VI를 검사하거나 수정할 수 있습니다. 다른 모든 VI 스크립팅 어플리케이션과 같이, 타겟 VI에서 조작하려는 객체가 있으면 그 객체의 참조를 얻어야 합니다. 그러나, 실행 시까지 타겟 VI의 내용을 알지 못하기 때문에, [VI 객체 참조 열기] 함수를 사용하여 객체를 라벨로 찾을 수 없습니다. 그 대신, [G객체의 탐색] VI를 사용하여 같은 클래스에 속한 객체 그룹을 찾아낼 수 있습니다. 그 후 반환된 객체 배열을 반복하여 조작하려는 객체를 찾아냅니다.
사용 객체
이러한 VI 스크립팅 태스크에는 다음 객체가 필요합니다:
실행 단계
시작하기 전: 다음 과정을 각 단계별로 보여주는 예제를 확인하려면 labview\examples\Application Control\VI Scripting\Finding and Modifying Objects 디렉토리에 있는 Obtaining Unknown Object References VI를 엽니다.
-
상호작용하거나 편집하려는 객체를 포함하는 타겟 VI의 참조를 얻습니다.
예제 세부사항
예제에서, [VI 참조 열기] 함수는 타겟 VI의 경로 컨트롤에 의해 지정된 VI의 참조를 제공합니다. 이를 실행하면 다른 VI 경로를 지정하여 스크립팅 VI를 모든 타겟 VI에 적용할 수 있습니다. 또한 사용자가 스크립팅 VI를 VI 세트에 프로그램적으로 적용하려는 경우, 스크립팅 VI를 subVI로 변환할 수 있습니다.
- 참조를 얻으려는 객체의 클래스와 위치를 결정합니다.
- VI 포함하기―이 참조를 [G객체의 탐색] VI의 VI 참조 번호 입력에 연결합니다.
- VI 내 위치―타겟 VI 내에서, 객체는 For 루프 또는 케이스 구조와 같은 구조의 프런트패널, 블록다이어그램, 클러스터 또는 다이어그램에 위치할 수 있습니다. 타겟 트래버스 입력에서 상수를 생성하여 이러한 위치 중 [G객체의 탐색] VI가 검색할 위치를 지정해야 합니다.
예제 세부사항
예제에서, 스크립팅 VI는 블록다이어그램 객체인 컨트롤 터미널을 조작해야 합니다. 그러므로 스트립팅 VI는 BD를 스크립팅 VI가 검색할 컨테이너로 지정합니다.
노트 관심 대상 객체가 구조의 클러스터나 다이어그램에 있는 경우, 타겟 트래버스 입력의 후보 대상이 열거된 리스트에서 기타를 선택합니다. 두 경우 모두, 컨테이너 클러스터 또는 다이어그램의 참조를 [G객체의 탐색] VI의 다른 참조 번호 입력에 연결합니다. - 객체의 클래스 이름―조작하려는 객체의 클래스 이름을 결정하려면 일반 VI 객체의 조직을 참조하십시오.
예제 세부사항
예제에서, 스크립팅 VI가 터미널을 컨트롤하는 참조를 얻기 때문에, 스크립팅 VI는 컨트롤 터미널의 클래스 이름인 ControlTerminal을 사용합니다.
- [G객체의 탐색] VI를 사용하여 단계 2의 정보를 [G객체의 탐색] VI에 연결함으로써 원하는 객체의 참조를 얻습니다.
- 반환된 참조 배열을 반복하여 객체를 개별적으로 조작합니다.
예제 세부사항
예제에서, 스크립팅 VI는 For 루프를 사용하여 참조 배열의 각 원소에 접근합니다.
-
[보다 구체적인 클래스로] 함수를 사용하여 각각의 반환된 참조를 보다 구체적인 클래스로 캐스트합니다. [G객체의 탐색] VI는 클래스 이름 입력에 의해 지정된 클래스에 속하는 참조 대신에 G객체 참조의 배열을 반환합니다. 그러나 안전하게 [보다 구체적인 클래스로] 함수를 사용하여 클래스 이름에 의해 지정된 클래스로 반환된 참조를 캐스트할 수 있습니다. 참조를 보다 구체적인 클래스로 캐스트하면, 참조에서 보다 구체적인 프로퍼티나 메소드를 호출할 수 있습니다.
예제 세부사항
예제에서, 스크립팅 VI는 각각의 반환된 참조를 ControlTerminal로 캐스트합니다. 컨트롤 터미널:라벨.보이기 프로퍼티를 참으로 설정해야만 컨트롤 터미널 라벨을 보이게 할 수 있고, 라벨.보이기 프로퍼티가 G객체에 사용 가능하지 않기 때문에 이러한 캐스트가 필요합니다. [G객체의 탐색] VI가 특별히 ControlTerminal 객체를 검색하기 때문에, 이와 같이 캐스트해도 에러가 발생하지 않습니다.
- 참조를 프로퍼티 노드나 인보크 노드에 연결하여 참조된 객체에 대한 정보를 얻거나 설정합니다.
예제 세부사항
예제에서, 스크립팅 VI는 프로퍼티 노드를 사용하여 각 ControlTerminal 참조의 라벨.보이기 프로퍼티를 참으로 설정하고, 이로써 대응하는 컨트롤 터미널의 라벨이 보이게 됩니다.
- [참조 닫기] 함수를 사용하여 모든 열린 객체 참조를 사용 후 닫습니다.
유의점 및 권장사항
-
필요한 경우 각 참조의 클래스 확인―직상위 클래스의 이름을 [G객체의 탐색] VI에 연결하면, 직상위 클래스는 같지만 직하위 클래스는 다른 참조의 배열을 얻게 됩니다. 예를 들면, [G객체의 탐색] VI를 사용하여 루프 클래스에 속하는 모든 객체를 검색하면, VI가 For 루프, While 루프 모두에 해당하는 참조를 반환합니다. 다음 두 가지 방식 중 하나로 참조의 클래스를 확인할 수 있습니다.
- [보다 구체적인 클래스로] 함수를 사용하여 특정 클래스로 참조를 캐스트합니다. 함수가 에러를 반환하지 않으면, 참조는 해당 특정 클래스에 일치하는 것입니다.
- 개별 반환된 참조의 클래스 이름 프로퍼티를 맞추려는 클래스이름과 비교합니다.
- 열어 놓은 참조 모두 닫기―지나치게 많은 수의 참조가 열려 있으면 VI의 성능에 부정적인 영향을 미칩니다. 성능에 대한 세부사항은 VI 및 객체 참조 닫기를 참조하십시오.
추가 예제
[G객체의 탐색] VI 사용 예제는 labview\examples\Application Control\VI Scripting\Finding and Modifying Objects 디렉토리에 있는 Using Traverse VI를 참조하십시오.