- 5장. 제어연산(실습1)
• For 루프 예제
• While 루프 의 속도
• 난수 발생 및 일치되는 실수 값 찾기
• While 루프를 이용한 난수 발생 및 플롯
• 난수의 연속적인 합 계산기
목 차
For 루프 예제
2/18
이 예제는 블록 다이어그램에 위치한 For 루프 내에 난수(0-1)함수( ) 와 더하기 함수( )를 위치시키고 프런트 패널 상에 컨트롤과 인디케이 터를 배치시킬 것이다.
예제 5-1
① 컨트롤 > 일반 > 숫자형 팔레트에서 숫자형 컨트롤과 인디케이터를 선택하 여 프런트 패널에 배치하고 각각 라벨을 X와 Y로 입력한다.
② 함수 > 프로그래밍 > 숫자형 팔레트에서 난수(0-1) 함수 와 더하기 함수 를 선택해서 블록 다이어그램에 배치한다.
③ 그림과 같이 난수(0-1) 함수의 출력과 컨트롤 X를 더하기 함수의 입력으로 와 이어 한다.
④ 카운터 터미널에서 단축메뉴를 띄우고 상수 생성을 선택해서 For루프에 상수 를 생성한다. 상수의 값(기본적으로 0)은 100으로 한다.
⑤ 반복 터미널에서 단축메뉴를 띄우고 인디케이터 생성을 선택해서 인디케이 터를 생성하고 반복 카운터로 라벨을 입력한다.
⑥ 디버깅하고 실행한다. 한 가지 제안한다면 실행 하이라이트 버튼을 선택하고 프로그램을 실행시킨다. 그렇지 않으면 루프의 실행은 관찰하기 어려울 정도 로 빠를 것이다.
4/18
결 과
While 루프의 속도
While 루프는 CPU의 성능이 가능한 범위에서 최대한 빨리 실행된다. 다음 예제를 통하여 확인해 보자.
예제 5-2
6/18
① 새 VI를 만들고, 반복횟수.vi라는 이름으로 저장한다.
② While 루프를 블록 다이어그램에 위치시킨다.
③ 참인 경우 정지에서 단축메뉴의 생성 > 컨트롤을 이용하여 [정지]버튼을 생 성시킨다.
④ 의 단축메뉴에서 생성 > 인디케이터를 합니다. I32 정수 값의 인디케이터 가 생성된다.
⑤ 실행 하이라이트를 이용하여 관찰해본다.
⑥ While 루프 속에 시갂 지연을 위치시킨다. 그리고 시갂 지연(초)에 0.2를 입력 한다.
⑦ VI를 실행시켜 관찰한다.
난수 발생 및 일치되는 실수 값 찾기
8/18
While 루프와 난수 발생기를 이용하여 입력한 실수 값과 똑 같은 난수가 생성될 때까지의 While 루프 반복횟수를 찾는 VI를 만들어 보자
예제 5-3
① 새 VI를 열고, 난수 자동 일치.vi라는 이름으로 저장한다.
② While 루프를 블록 다이어그램에 위치시킨다.
③ 난수(0-1)를 위치시킨다. 함수 > 프로그래밍 > 숫자형 팔레트에서 난수(0-1) 을 찾을 수 있다.
④ 곱하기를 위치시키고, 단축메뉴에서 상수 생성을 이용하여 상수를 만들고 10,000을 붙인다. 난수는 0에서 1사이의 값이므로 10,000을 곱하여 0에서 10,000사이의 값으로 바꿔준다.
⑤ 함수 > 프로그래밍 > 숫자형 팔레트에서 반올림을 찾아서 위치시키고, 출력 단의 단축메뉴에서 생성 > 인디케이터를 선택하여 DBL 인디케이터를 만들어 준다. 라벨을 ‘현재값’으로 바꿔준다.
10/18
⑥ 함수 > 프로그래밍 > 비교 팔레트에서 같지 않음?을 찾아서 위치시키고, 입력 쪽의 단축메뉴에서 컨트롤 생성으로 DBL 컨트롤을 만들고 라벨을 ‘입력’
으로 바꾼다.
⑦ 의 단축메뉴에서 참이면 계속을 선택하여 로 바꾼 다음, 의 출력을 연결한다.
⑧ 을 오른쪽으로 옮기고 함수 > 프로그래밍 > 숫자형 팔레트에서 증가를 찾아서 위치시킨다. 그리고 출력에 인디케이터 생성을 하고 라벨을 ‘반복회수’
로 바꾼다. 1을 더해주는 것은 가 0에서부터 시작하기 때문이다.
12/18
최소값: 0 리미트 밖의 값에 응답: 강제 변환 최대값: 10,000 리미트 밖의 값에 응답: 강제 변환 증가: 1 리미트 밖의 값에 응답: 강제 변환
⑩ 입력에 0에서 10,000사이의 정수 값을 입력하고 실행시킨다.
⑪ 실행 하이라이트를 이용하여 관찰해본다.
⑨ 난수에 10,000을 곱하고 반올림 처리를 했기 때문에, 0에서 10,000사이의 정 수만 생성된다. 만약 [입력]에 이외의 값을 입력하면, 일치되는 값을 찾지 못 하고 무한 루프가 된다. 그래서 [입력]에 0에서 10,000사이의 정수 값만 입력 되도록 범위를 정해준다. 단축메뉴에서 데이터 입력 부분을 선택하고 아래와 같이 설정을 바꿔준다.
While 루프를 이용한 난수 발생 및 플롯
웨이브 폼 차트를 이용하여 난수(0-1)를 플롯 해보자
예제 5-4
14/18
③ VI를 실행 시켜서 확인해본다.
① 새 VI를 만들고 블록 다이어그램에 While 루프를 위치시킨다.
② 프런트 패널에 웨이브 폼 차트를 위치시킨다.
• 난수(0-1)는 0에서 1사이의 난수를 생성하는 함수이며, 함수 > 프로그래밍
> 숫자형 팔레트에서 찾을 수 있다.
• 시간 지연은 함수 > 프로그래밍 > 타이밍 팔레트에서 찾을 수 있다. While 루프는 실행속도를 조절한다. 0.5초에 한 번씩 While 루프를 실행하기 위하여 [시갂 지연(초)]에 0.5를 입력한다.
난수의 연속적인 합 계산기
일련의 난수의 연속적인 합을 계산하기 위해 시프트 레지스 터를 사용할 것이다. Sum
i= Sum
i-1+ Sum
i예제 5-5
• 난수의 생성 횟수는 프런트 패널의 노브 컨트롤을 통해 입력된다. 블록 다이 어그램을 이용해서 일렦의 난수의 연속적인 합을 계산하는 VI를 만들어 보도 록 한다. 합은 다음과 같이 구해진다.
• Sumi = Sumi-1 + Sumi
• i는 0에서 N-1까지의 수이고, Sumi는 i번째 반복에서 계산된 합이며, Sumi-1 는 현재 반복 이전까지의 총합이다. 이 예제의 주목적은 시프트 레지스터를 For 루프, While 루프와 함께 사용하는 방법에 대해 이해하는 것이다. 아래의 단계를 따라 VI를 구성해 보도록 한다.
16/18
① 프런트 패널에 노브 컨트롤과 탱크 인디케이터를 배치하고 라벨을 각각 루프 카운트 실행 횟수와 합계로 입력한다. 노브 컨트롤은 For 루프의 실행 횟수를 지정하고, 탱크 인디케이터는 연속적인 합계를 보여 준다. 노브 컨트롤과 탱 크 인디케이터는 컨트롤 > 일반 > 숫자형 팔레트에 있다.
② 컨트롤 > 일반 > 숫자형 팔레트에서 숫자 인디케이터를 선택하여 프런트 패 널에 배치하고 라벨을 반복 횟수로 입력한다. 이 인디케이터는 For 루프의 반 복 횟수를 나타낸다. 그리고 노브 컨트롤과 탱크 인디케이터의 각각에 팝업 한 후 보이는 아이템 > 디지털 디스플레이를 선택하여 데이터를 볼 수 있게 한다.
③ 블록 다이어그램으로 이동한다. 그림과 같이 For 루프를 위치시키고 노브 컨 트롤 터미널을 카운트 터미널에 와이어 한다.
④ For 루프의 테두리에서 마우스 오른쪽 버튼을 누르면 나타나는 단축메뉴에서 시프트 레지스터 추가를 선택하여 시프트 레지스터를 생성한다. 함수 > 프로 그래밍 > 숫자형 팔레트에서 숫자 상수를 선택하여 왼쪽 시프트 레지스터에 와이어 하면 시프트 레지스터는 0으로 초기화된다.
⑤ 함수 > 프로그래밍 > 숫자형 팔레트에서 난수(0-1) 함수와 더하기 함수, 증가 함수를 For루프 내에 위치시킨다.
18/18
⑦ 반복 터미널을 증가함수에 와이어 한다. 카운트가 0에서부터 시작되므로 카 운트를 1씩 증가시켜서 프런트 패널에 표시한다.
⑧ 실행 버튼을 눌러서 VI를 실행하고, 그 결과를 살펴보도록 한다.
이 예제에서 시프트 레지스터는 한번 반복해서 다음 반복으로 변수 Sumi-1의 값을 넘겨주기 위해 사용된다.