프로그래밍/랩뷰 기술자료

랩뷰의 실행구조

에이티에스 2023. 6. 4. 10:39
728x90

실행 구조에는 그래픽 코드의 일부가 포함되어 있으며, 구조의 내부에서 코드가 실행되는 시기나 방법을 컨트롤합니다.

 

가장 일반적인 실행 구조는 While 루프, For 루프, 케이스 구조로써, 코드의 동일한 부분을 여러 번 실행하거나 일부 조건에 기반하여 코드의 다른 부분을 실행할 때 사용할 수 있습니다.

 

 

루프

 

While 루프

텍스트 기반 프로그래밍 언어의 Do 루프 또는 Repeat-Unitl 루프와 유사하게, While 루프는 그림 1에서 볼 수 있는 것과 같이 조건이 발생할 때까지 서브다이어그램을 실행합니다.

(1) LabVIEW While 루프 | (2) 순서도 | (3) 유사 코드

그림 1은 LabVIEW의 While 루프, While 루프 기능을 나타내는 순서도와

While 루프와 유사한 기능을 가진 코드의 예를 보여줍니다.

 

 

While 루프는 구조 팔레트 안에 있습니다. 구조 팔레트에서 While 루프를 선택한 후, 블록다이어그램에서 While 루프의 선택 사각형을 클릭하고 커서를 끌어서 반복 실행하고자 하는 영역을 포함할 수 있도록 크기를 설정합니다. 마우스 버튼을 놓으면, While 루프 경계가 선택한 영역을 둘러싸게 됩니다.

블록다이어그램의 특정 객체를 While 루프에 포함시키려면, 해당 객체를 루프 안으로 끌어서 놓습니다.

While 루프는 입력 터미널인 조건 터미널이 특정 불리언 값을 받을 때까지 코드를 실행합니다.

 

또한 While 루프의 조건 터미널을 사용하면 기본적인 에러 핸들링 작업을 수행할 수 있습니다. 에러 클러스터를 조건 터미널에 연결하면, 에러 클러스터의 상태 파라미터에서 참 (TRUE) 또는 거짓 (FALSE) 값만이 터미널에 전달됩니다. 또한, 참인 경우 정지 및 참인 경우 계속 바로 가기 메뉴 아이템은 에러 발생시 정지 및 에러 발생시 계속으로 변경됩니다.

반복 터미널은 완료된 반복 횟수의 데이터를 포함하는 출력 터미널입니다.

While 루프의 반복 카운트는 항상 0에서 시작합니다.

참고: While 루프는 언제나 최소한 한 번은 실행됩니다.

 

 

무한 루프

무한 루프는 정지하지 않는 루프가 포함된 일반적인 프로그래밍 실수입니다.

조건 터미널이 참인 경우 정지인 경우, 불리언 컨트롤의 터미널을 While 루프의 바깥에 놓습니다. 루프가 시작할 때 컨트롤이 거짓인 경우, 무한 루프가 발생하게 됩니다.

그림 2. While 루프 밖의 불리언 컨트롤

 

컨트롤의 값을 변경하더라도 무한 루프는 종료되지 않습니다. 이는 루프가 시작되기 전에 컨트롤 값을 한 번만 읽기 때문입니다. While 루프를 정지하는 컨트롤을 사용하려면, 해당 컨트롤 터미널을 루프의 내부에 놓아야 합니다. 무한 루프를 멈추려면, 도구 모음의 실행 강제 종료 버튼을 클릭하여 VI를 강제 종료해야 합니다.

 

그림 3에서 While 루프는 [난수(0-1)] 함수의 출력이 10.00보다 크거나 같고, 활성화 컨트롤이 참이 될 때까지 실행됩니다. [AND] 함수는 두 입력 모두가 참인 경우에만 참 출력을 반환합니다. 그렇지 않은 경우 함수는 거짓을 반환 합니다.

 

그림 3에서 임의의 함수는 10 보다 큰 값을 생성하지 않을 것이므로 무한 루프가 발생합니다.

그림 3. 무한 루프

 

구조 터널

터널은 구조의 안과 밖으로 데이터를 전달합니다. While 루프의 터널은 루프 구조의 경계선 상에 있으며, 속이 채워진 블록 모양으로 표시됩니다. 터널을 나타내는 블록의 색은 연결하는 데이터의 타입에 따라 설정됩니다. 루프가 완료되면 루프 밖으로 데이터가 전달됩니다. 터널이 데이터를 루프 안으로 전달할 때, 해당 데이터가 터널에 도달한 이후에 루프가 실행됩니다.

 

그림 4에서는 루프의 터널에 반복 터미널이 연결되어 있습니다. 블록다이어그램의 While 루프가 실행을 마칠 때까지 터널의 값은 반복 인디케이터에 전달되지 않습니다.

그림 4. While 루프 터널

반복 터미널의 최종값만이 반복 인디케이터에 나타납니다.

 

 

For 루프

 

For 루프는 서브다이어그램을 지정된 횟수만큼 실행합니다. 그림 5는 LabVIEW의 For 루프, For 루프 기능을 나타내는 순서도, For 루프와 유사 코드의 예를 보여줍니다.

(1) LabVIEW For 루프 | (2) 순서도 | (3) 유사 코드

그림 5. For 루프

 

For 루프는 구조 팔레트에 있습니다. 블록다이어그램에 While 루프를 놓고, While 루프의 경계에서 마우스 오른쪽 버튼을 클릭한 후 바로 가기 메뉴에서 For 루프로 대체를 선택하여 While 루프를 For 루프로 바꿀 수도 있습니다.

카운트 터미널은 서브다이어그램을 반복 실행할 횟수를 나타내는 입력 터미널입니다.

반복 터미널은 완료된 반복 횟수의 데이터를 포함하는 출력 터미널입니다.

For 루프의 반복 카운트는 항상 0에서 시작합니다.

For 루프는 지정된 횟수만큼 실행이 반복된다는 점에서 While 루프와 다릅니다. While 루프는 조건 터미널의 값이 충족될 경우에만 실행을 정지합니다.

 

그림 6의 For 루프는 100 초 간 매 초마다, 즉 100번에 걸쳐 난수를 생성하고 이를 숫자형 인디케이터에 표시합니다.

그림 6. For 루프의 예

 

루프에 타이밍 추가하기

루프에서 하나의 반복이 완료되면, 정지 조건이 충족되지 않는 한 바로 다음 반복이 실행됩니다. 대부분의 경우 반복 간격이나 시간을 제어해야 할 필요가 있습니다. 예를 들어 데이터를 수집하려고 하는 경우, 10 초마다 한번씩 데이터를 수집하려면 10 초 간격으로 루프가 반복 실행되도록 시간을 조절할 수 있어야 합니다. 실행을 특정 간격으로 반복할 필요가 없는 경우에도, 사용자 인터페이스에 대한 응답 처리 등 다른 작업들을 수행하려면 컴퓨터에 어느 정도의 시간적 여유를 줘야 합니다.

 

 

기다림 함수

루프 안에 [기다림] 함수를 놓으면, VI는 사용자가 지정한 시간만큼 실행을 정지하게 됩니다. 이를 통해 VI가 기다림 상태를 유지하는 일정 시간 동안 컴퓨터는 다른 작업들을 수행할 수 있습니다. 기다림 함수는 OS(운영 시스템)의 밀리초 클럭을 사용합니다.

[기다림(ms)] 함수는 밀리초 카운터가 사용자가 입력한 시간만큼의 밀리초를 카운트할 때까지 기다립니다. 이 함수는 루프의 실행 간격이 최소한 사용자가 지정한 입력값은 되도록 보장해줍니다.

 

케이스 구조

케이스 구조에는 둘 이상의 서브다이어그램, 또는 케이스가 있습니다.

한 번에 단 하나의 서브다이어그램만을 볼 수 있으며, 구조는 한 번에 단 하나 의 케이스만을 실행합니다. 입력값에 따라 어느 서브다이어그램이 실행될지 결정됩니다. 케이스 구조는 텍스트 기반 프로그래밍 언어에서의 switch 문이나 if...then...else 문과 유사합니다.

케이스 선택자 라벨은 케이스 구조의 가장 윗 부분에 위치합니다. 케이스 선택자 라벨 중앙에는 해당 케이스에 대응하는 선택자 값의 이름이 표시되어있고, 라벨 양쪽에는 증가 및 감소 화살표가 있습니다.

증가 및 감소 화살표를 클릭하면 사용 가능한 케이스들을 스크롤하여 선택할 수 있습니다. 또한 케이스 이름 옆에 있는 아래 방향의 화살표를 클릭하여, 풀다운 메뉴에서 원하는 케이스를 선택하는 방법도 있습니다.

케이스 구조의 선택자 터미널에 입력값이나 선택자를 연결하여 어느 케이스가 실행될지 결정합니다.

 

선택자 터미널에는 반드시 정수, 불리언, 문자열 또는 열거형 타입 값을 연결해야 합니다. 선택자 터미널은 케이스 구조의 왼쪽 경계선 어디에나 위치할 수 있습니다. 선택자 터미널의 데이터 타입이 불리언인 경우, 그 케이스 구조는 참 케이스와 거짓 케이스를 갖게 됩니다. 선택자 터미널이 정수, 문자열, 또는 열거형 타입 값인 경우, 그 구조는 어떤 수의 케이스든지 가질 수 있습니다.

 

기본으로 선택자 터미널에 연결하는 문자열 값은 대소문자를 구분합니다. 대소문자 구분없는 일치를 허용하려면 문자열 값을 선택자 터미널에 연결하고 케이스 구조의 경계에서 마우스 오른쪽 버튼을 클릭한 후 바로 가기 메뉴에서 대소문자 구분없는 일치를 선택합니다.

케이스 구조에 대한 기본 케이스가 범위 밖의 값을 처리하도록 지정하지 않은 경우, 가능한 모든 입력 값을 나열해야 합니다. 예를 들면, 선택자가 정수이고 1, 2, 3인 경우에 대한 케이스를 지정한다면, 입력값이 4이거나 그 외의 다른 특정하지 않은 정수값일 경우에 실행할 기본 케이스를 지정해야 합니다.

 

불리언 컨트롤을 선택자에 연결한 경우, 기본 케이스를 지정할 수 없습니다. 케이스 선택자 라벨에서 마우스 오른쪽 버튼을 클릭하여도 바로 가기 메뉴에 기본 케이스로 만들기가 나타나지 않습니다. 어느 케이스를 실행할지 결정하려면 불리언 컨트롤을 참 또는 거짓으로 설정합니다.

케이스 구조의 경계에서 마우스 오른쪽 버튼을 클릭하여 케이스들을 추가, 복제, 삭제, 재배치하거나 기본 케이스를 선정할 수 있습니다.

 

 

케이스 선택하기

 

그림 7의 VI는 케이스 구조를 사용하여, 사용자가 선택하는 온도 단위가 섭씨 또는 화씨인지에 따라 실행하는 코드를 다르게 설정하고 있습니다. 그림 가장 위에 있는 블록다이어그램를 보면, 케이스 구조 전경에 참 케이스가 보입니다. 가운데에 보이는 블록다이어그램에서는 거짓 케이스가 선택되었습니다.

케이스를 선택하려면, 케이스 선택자 식별자에 값을 입력하거나 라벨링 도구를 사용하여 해당 값을 편집할 수 있습니다. 그림 7의 가장 아래에 있는 블록다이어그램에서 확인할 수 있듯이, 다른 케이스를 선택하면 해당 케이스가 블록다이어그램에 나타납니다.

그림 7. 케이스 구조에서 보이는 케이스 바꾸기

 

선택자 터미널에 와이어로 연결된 객체와 다른 타입의 선택자 값을 입력하면 이 값은 빨간 색으로 보입니다. 이 경우 사용자가 해당 값을 삭제하거나 편집하지 않는 한, VI는 실행되지 않습니다. 또한 부동소수에는 반올림 관련 문제가 발생할 수 있으므로, 부동소수 값을 케이스 구조의 선택자 값으로 사용할 수 없습니다. 부동소수 값을 케이스에 연결하면, LabVIEW는 이를 가장 가까운 정수로 변환합니다. 케이스 선택자 라벨에 부동소수 값을 입력하면, 그 값이 빨간색으로 표시됩니다. 이는 해당 구조를 실행하기 전에 이 값을 삭제하거나 편집해야 한다는 것을 나타냅니다.

 

 

입력 및 출력 터널

케이스 구조에 여러 개의 입력 및 출력 터널을 만들 수 있습니다. 구조에 있는 모든 케이스는 어떤 입력이든지 사용할 수 있지만, 그렇다고 각 입력을 다 사용해야 하는 것은 아닙니다. 하지만 각 케이스의 출력 터널은 반드시 정의해야 합니다.

다음의 예제를 생각해 봅시다: 블록다이어그램에서 케이스 구조에 출력 터널이 있습니다.

 

하지만 케이스 중 적어도 하나에서 터널에 연결된 출력값이 없습니다. 이 케이스를 실행하는 경우, LabVIEW는 어떤 값을 출력에 반환해야 할 지 모르게 됩니다. 이때 LabVIEW는 터널 가운데가 하얀색으로 표시하여, 출력 터널에 값이 연결되지 않아서 에러가 발생했음을 알립니다. 터널에 연결되지 않은 케이스가 현재 블록다이어그램에 보이는 케이스가 아닐 수도 있습니다.

 

이러한 에러를 수정하려면, 연결되어 있지 않은 출력 터널이 있는 케이스를 전경에 보이도록 하여 해당 터널에 출력을 연결해야 합니다. 또한 출력 터널에서 마우스 오른쪽 버튼을 클릭한 후 바로 가기 메뉴에서 연결되지 않으면 기본값 사용을 선택하여, 연결되지 않은 모든 터널에 그 터널의 데이터 타입에 대한 기본값을 사용하도록 설정할 수 있습니다. 모든 케이스에 출력이 연결되어 있는 경우, 출력 터널은 흰색이 아닌 다른 색으로 표시됩니다.

 

연결되지 않으면 기본값 사용 옵션은 되도록 이용하지 마십시오. 이 옵션을 사용하면 블록다이어그램을 효과적으로 문서화하기 어려우며, 이 코드를 사용하는 다른 개발자들에게 혼란을 가져올 수 있기 때문입니다. 또한 연결되지 않으면 기본값 사용 옵션을 사용하면 코드를 디버깅하기 힘들어집니다. 이 옵션을 사용할 경우, 이 때의 기본값은 터널에 연결된 데이터의 타입에 대한 기본값이라는 점에 유념하십시오.

예를 들어, 터널이 불리언 데이터 타입인 경우에는 기본값이 거짓으로 설정됩니다.

데이터 타입
기본값
숫자형
0
불리언
거짓
문자열
비어 있음 (“”)

테이블 1. 데이터 타입 기본값

 

기타 구조

 

LabVIEW에는 UI 상호작용과 인터럽트 드리븐 태스크를 처리하기 위해 사용하는 이벤트 구조 또는 실행 순서를 강제로 지정하기 위해 사용하는 시퀀스 구조와 같은 보다 고급 타입의 실행 구조가 있습니다.

 

728x90
반응형
그리드형