- 5장. 제어연산(실습2)
• 케이스 구조(불리언 조건 입력)
• 케이스 구조(링 조건 입력)
• 수식 노드
• Mathscript 노드
• 연습문제
• 프로젝트
목 차
1/27
2/27
케이스 구조2(불리언 조건 입력)
예제 5-7
두 입력 숫자를 곱하고 나누는 불리언 케이스 구조 설계
3/27
① 컨트롤 > 읷반 > 숫자형 팔레트에서 숫자형 컨트롤 2개와 숫자형 읶디케이 터 1개 클래식 팔레트에서 수직 스위치 1개를 선택해서 프런트 패널에 배치 하고 컨트롟의 라벨은 각각 A, B 읶디케이터의 라벨은 C Output으로 입력한 다.
② 컨트롤 > 읷반 > 불리언 팔레트에서 라운드 LED를 선택해서 프런트 패널에 배치하고 위치/크기/선택 도구를 사용해서 크기를 조젃한다.
③ 컨트롤 > 클래식 > 클래식 불리언 팔레트에서 수직 스위치를 선택해서 프런 트 패널에 배치한다.
프런트 패널의 입력 숫자들은 터널(Tunnel)을 통과해서 케이스 구조로 젂달되고 선택자 터미널에 연결된 불리언 값에 의해 케이스 구조 내에 서 곱하거나 나누어짂다. 여기서 나누는 수가 0이면 라운드 LED에 불이 켜지게 된다.
동작 설명
4/27
④ 블록 다이어그램으로 이동한 후 함수 > 프로그래밍 > 구조 팔레트에서 케이 스 구조를 선택한 후 블록 다이어그램에 배치한다.
⑤ 케이스 구조의 선택자 터미널에 수직 스위치 터미널을 와이어 한다.
⑥ 선택자 라벨이 참읶 케이스에서는 곱하기 함수를, 거짓읶 케이스에는 나누기 함수를 배치한다.
⑦ 선택자 라벨이 거짓읶 케이스에서 A, B 컨트롟의 터널을 나누기 함수의 입력 으로 와이어 한 후 나누기 함수의 춗력을 C Output 읶디케이터의 입력으로 와이어 한다.
⑧ 선택자 라벨이 거짓읶 케이스에서 나누는 분모가 0읶지 비교해서 0이면 라운 드 LED에 불이 켜지도록 함수 > 프로그래밍 > 비교 팔레트에 있는 같음? 함 수를 배치해서 입력으로 B 컨트롟 터미널과 상수 0을 와이어한 후 춗력을 라 운드 LED로 와이어한다.
⑨ 선택자 라벨이 참읶 케이스에서 A와 B 컨트롟 터미널을 케이스 구조 테두리 로 와이어해서 클릭하면 터널이 생긴다. 양쪽 터널에서 케이스 구조 내부에 있는 곱하기 함수로 와이어한 후 곱하기 함수의 춗력을 C Output 읶디케이 터의 입력으로 와이어한다.
⑩ 프로그램이 완성되면 Case Structure.vi로 저장하고 실행하여 확읶한다.
5/27
두 입력 숫자를 곱하고 나누는 불리언 케이스 구조 예제
6/27
케이스 구조3(링 조건 입력)
링에서 선택핚 형태의 웨이브 폼을 생성하는 VI를 만들어 보자
예제 5-8
7/27
① 새 VI를 만들고, 링.vi로 저장한다.
② 프런트 패널에 링 컨트롤을 위치시키고, 아이템 편집...을 이용하여 „DC', '사 읶파‟, „사각파‟, „톱니파‟, „삼각파‟를 차례로 입력한다. 컨트롤 > 읷반 > 링 &
열거형 팔레트에서 텍스트 링을 찾을 수 있다.
8/27
③ 블록 다이어그램에 케이스 구조를 위치시키고, 링 컨트롟을 케이스 선택자에 연결한다.
④ 단축메뉴의 다음 케이스 추가를 이용하여 2, 3, 4 케이스를 추가해준다.
⑤ 케이스 0을 선택하고 싞호 시뮬레이션을 위치시킨다. 함수 > 익스프레 스 > 입력 팔레트에서 싞호 시뮬레이션을 찾을 수 있다. 싞호 시뮬레이션 설 정 창에서 싞호 타입으로 [DC]를 선택해준다.
9/27
⑥ 같은 방법으로 각 케이스에 싞호 시뮬레이션을 하나 씩 위치시키고, 차례로 사읶파, 사각파, 톱니파, 그리고 삼각파를 생성시킨다.
⑦ 각 케이스에서 싞호 시뮬레이션 춗력을 케이스의 오른쪽 테두리로 연결한다.
이때 모든 케이스에서 한 곳으로 춗력을 연결해야 한다.
⑧ 춗력단을 클릭하고 단축메뉴에서 생성 > 그래프 읶디케이터를 선택한다.
⑨ While 루프를 위치시키고, 시간 지연으로 1초를 설정한다.
⑩ 프런트 패널의 링 컨트롟에서 [사읶파]를 선택하고 실행한다.
10/27
프런트 패널
블록 다이어그램
11/27
수식 노드
수식 노드로 데이터를 만들어 그래프에 표현해 본다
예제 5-9
12/27
① 새 VI를 만들고, 수식노드.vi로 저장한다.
② 프런트 패널에 웨이브 폼 그래프를 위치시킨다.
③ 다음과 같이 블록 다이어그램을 구성한다.
x는 입력 변수로 선언하고, y와 a는 춗력 변수로 선언한다.
13/27
수식은 아래와 같다 a = tanh(x) + cos(x);
y = a**3 + a;
※ 각 Line의 끝에는 세미콜롞 ;을 꼭 붙여주어야 하며 소문자와 대문자를 구별 해서 사용해야 한다.
④ VI를 실행시켜본다.
14/27
MathScript 노드
MathScript 노드를 이용하여 수식을 계산하는 VI를 만들어 보자 이 예제는 MathScript 노드를 이용해서 수식을 계산하고 그 결과
를 배열에 출력하는 VI를 만들어보는 예제이다.
예제 5-10
15/27
① 프런트 패널에서 컨트롤 > 읷반 > 배열, 행렬, 클러스터 > 배열을 선택하여 배치하고, 컨트롤 > 읷반 > 숫자형 > 숫자형 읶디케이터를 선택하여 배열 안 에 배치한다. 배열 라벨을 W로 지정한다.
② ①번과 같은 방법으로 Z에 대한 배열을 생성한다.
③ 블록 다이어그램으로 이동하여 함수 > 프로그래밍 > 구조 > For 루프를 배 치하고 카운터 터미널에서 단축메뉴를 선택하고 생성 > 상수를 클릭한 후 20을 입력한다.
④ 함수 > 프로그래밍 > 숫자형 > 난수(0-1) 함수, 곱하기 함수를 선택하여 배 치하고 카운터 터미널의 춗력과 난수(0-1)함수를 곱하기 함수의 입력 x, y에 와이어 한다.
16/27
⑤ 함수 > 수학 > 스크립트 & 수식 > MathScript 노드를 For루프 내부에 배치 한다. MathScript 노드의 왼쪽 가장자리에서 단축메뉴를 선택하고 입력 추가 를 클릭한 후 입력 변수로 x를 입력한다.
⑥ MathScript 노드의 오른쪽 가장자리에서 단축메뉴를 선택하고 춗력 추가를 클릭한 후 춗력 변수로 W를 입력한다. 같은 방법으로 Z에 대한 춗력 변수를 생성한다.
17/27
⑦ VI를 실행시켜서 확읶한다
18/27
MathScript 노드2
MathScript 노드를 이용하여 주파수를 분석하는 VI를 만들어 보자
예제 5-11
19/27
① 새 VI를 만들고, FFT 연산.vi로 저장한다.
② 다음과 같이 블록 다이어그램에 While 루프와 MathScript 노드를 위치시킨다.
While 루프 조건에서 불리언 컨트롟읶 정지 버튼을 생성해준다.
20/27
③ 프런트 패널에 웨이브 폼 그래프 두 개를 위치시킨다. 컨트롤 > 읷반 > 그래 프 팔레트에서 웨이브 폼 그래프를 찾을 수 있다.
④ 웨이브 폼 그래프의 라벨을 „Original Signal'과 ‟FFT Signal'로 바꿔준다.
⑤ 블록 다이어그램에서 웨이브 폼 그래프의 터미널들을 다음과 같이 While 루 프 속에 위치시킨다.
⑥ 싞호 시뮬레이션을 While 루프 속에 위치시킨다. 함수 > 익스프레스 > 입 력 팔레트에서 찾을 수 있다.
21/27
⑦ 싞호 시뮬레이션 익스프레스 VI를 블록 다이어그램에 위치시키면 다음과 같 이 싞호 시뮬레이션 설정 창이 팝업 된다.
22/27
다음과 같이 싞호 시뮬레이션 설정을 변경하고 저장한다.
⋅싞호 타입: 사각파
⋅짂폭:1
⋅노이즈 추가: 선택함
⋅노이즈 타입: 균읷한 화이트 노이즈
⋅노이즈 짂폭: 0.6
⋅타이밍의 초당 샘플(Hz) = 10000
⋅샘플 개수: 자동으로 선택함
⑧ MathScript 노드의 왼쪽 경계에서 단축메뉴를 열고, 입력 추가를 선택한다.
“Input”을 입력한다.
⑨ 같은 방법으로 오른쪽 경계에서 단축메뉴를 열고, 출력 추가를 선택한다.
“Output”을 입력한다. 블록 다이어그램은 다음과 같다.
23/27
⑩ Output에서 단축메뉴를 열고, 데이터 타입 선택 > 1D 배열 > DBL 1D를 선 택한다.
⑪ MathScript 노드 속에 다음과 같은 스크립트를 입력한다. 각 라읶의 끝에는 항상 세미콜롞 ;을 넣어준다.
Output = abs(fft(Input));
Output = Output(1:end/2);
24/27
⑫ While 루프 속에 다이나믹 데이터로부터 변환을 위치시킨다. 함수 > 익스 프레스 > 싞호 조작 팔레트에서 찾을 수 있다.
⑬ 다이나믹 데이터로부터 변환 팝업창에서 결과로 나오는 데이터 타입으로 [스 칼라의 1D배열 - 자동]을 선택한다.
⑭ 싞호 시뮬레이션의 춗력을 다이나믹 데이터로부터 변환에 연결하고, 다이나 믹 데이터로부터 변홖의 춗력을 Input에 입력한다. 또한 Output을 [FFT Signal]에 연결한다.
⑮ 단축키 Ctrl + U를 이용하여 다음과 같이 블록 다이어그램을 최적으로 정리한 다.
⑯ VI를 실행시키면 다음과 같이 그래프가 디스플레이 된다.
25/27
연습 문제
5.1 For 루프를 사용해서 매 반복 시 난수를 생성하는 VI를 설계하여라. 시프트 레지스터를 사용해서 생성된 난수의 총합을 계산해서 프런트 패널에 표시한다.
5.2 예제 5.1에서 만든 VI에 타이밍을 제어해 보도록 한다. 5장에서 배웠던 기다 림(ms) 함수 또는 틱 카운터 함수(ms)를 사용해서 For 루프의 타이밍을 조젃한다.
5.3 While 루프를 사용해서 사용자가 정지 버튼을 누르기 젂까지 반복 터미널 값 을 프런트 패널에 표시하는 VI를 설계하여라.
5.4 케이스 구조를 사용해서 참(True)읶 경우에는 두 입력 숫자를 곱하고 거짓 (False)읶 경우에는 두 수를 나누는 VI를 설계하여라. 선택자 터미널에는 불리언 컨트롟을 와이어하고 각각의 케이스에 필요한 코딩을 해야 할 것이다.
5.5 While 루프와 난수 (0-1) 함수를 사용해서 입력한 실수 값과 읷치하는 난수가 생성될 때까지 While 루프의 반복 횟수를 표시하는 VI를 설계하여라. 실행 하이 라이트 버튼을 클릭해서 생성되는 난수를 보도록 한다.
5.6 함수 y = x² + 2x + 1 sin(x) + cos(x)를 계산하는 두 개의 VI를 설계하여라.
첫 번째 VI는 숫자형 팔레트에서 필요한 함수들을 사용해서 코딩하고, 두 번째 VI 는 수식 노드를 사용한다. 두 VI의 설계를 마친 후 프로그램의 갂결성을 비교해 보도록 한다.
26/27
프로젝트 : 온도 변환
이번 실습은 4장에서 만든 온도.vi를 이용하여 계속적으로 실 습을 핛 것이다. 여기서는 For 루프를 사용해서 루프의 타이
밍을 제어핛 수 있도록 필요핚 변경 작업을 핛 것이다.
온도 변홖
이 작업을 하기 위해 아래의 몇 가지 수정을 하도록 한다. 4장에서 온도.vi를 더 블 클릭해서 프런트 패널을 열고 윈도우 메뉴에서 블록 다이어그램 보이기를 선 택해서 블록 다이어그램으로 이동한다.
① 함수 > 프로그래밍 > 구조 팔레트에서 For 루프를 선택한 후 블록 다이어그 램의 모든 개체를 포함하도록 드래그한다.
② 카운트 터미널에서 팝업한 후 컨트롤 생성을 선택해서 루프를 몇 번 실행할 지 실행 횟수를 입력할 컨트롟을 생성한다. 루프 반복 횟수로 라벨을 붙읶다.
③ 함수 > 프로그래밍 > 숫자형 팔레트에서 곱하기 함수를 블록 다이어그램에 두고 화씨온도 터미널과 반복 터미널을 입력으로 연결하고 이 함수의 춗력을 C_F Sub VI에 와이어한다.
27/27
④ 함수 > 프로그래밍 > 타이밍 팔레트에서 기다림(ms) 함수를 선택해서 For 루프 내로 가져온다. 지연 컨트롟 터미널과 상수 1000을 곱하기 함수에 와이 어하고 춗력을 기다림(ms) 함수에 와이어한다.
VI의 편집과 디버깅이 완료되면 이 VI를 Using For Loop Thermometer.vi로 저 장한다. 지연 숫자형 컨트롟의 값을 다양하게 해서 VI를 실행시킨다. 즉, 5초로 맞 춖 후 실제로 지연이 5초가 되는지 확읶하기 위해 갂격을 계산한다.