티스토리 뷰
랩뷰 초급강의 - 시프트 레지스터(Shift Register)
이전 초급강의에서는 반복문 구현에 필요한 While과 For문에 대해서 설명을 드렸습니다.
관련 링크 :
2014/08/24 - [National Instruments/LabVIEW] - 랩뷰 초급강의 - 반복문(While문과 For문)
2014/08/22 - [National Instruments/LabVIEW] - 랩뷰 초급강의 - 랩뷰( LabVIEW)란 무엇인가?
이번 글에서는 반복문을 사용할 때 "반복문 안에서 처리된 결과를 다음 반복 할 때 사용하기 위한 방법은 무엇이 있는가? ", "반복문이 10번 반복한다고 가정 했을때, 내부 값들의 평균을 구하기 위해서는 어떻게 해야하는가?" 에 대한 라는 궁금증이 생기지 않으신가요?
이때 필요한 LabVIEW상의 개념이 바로 Shift Register(시프트 레지스터)입니다.
루프 반복 사이에서 값 전달하기
시프트 레지스터나 피드백 노드를 For 루프, While 루프, 또는 (Real-Time, Windows) Timed 루프와 함께 사용하여, 루프의 한 반복에서 다음 반복으로 값을 전달합니다.
시프트 레지스터를 사용하여 다음 루프 반복으로 하나의 값을 전달하거나 여러 값을 전달합니다. 피드백 노드를 사용하여 이전 실행의 값을 전달하거나 피드백 노드가 실행될 때마다 값을 리셋합니다.
그럼 시프트 레지스터는 어떻게 반복문에 넣을 수 있을까요? While문과 For문을 선택하시고, 마우스 오른쪽 버튼을 누르시면 아래의 그림처럼 "시프트 레지스터 추가"라는 항목을 클릭하시면 됩니다.
시프트 레지스터를 생성하게 되면 While문과 For문의 양쪽 끝에 아래의 그림과 같이 화살표가 생성이 됩니다. LabVIEW에서는 이를 시프트 레지스터라 부릅니다.
그럼 시프트 레지스터를 이용할 때 고려해야 할 점은 무엇이 있을까요?
- 시프트 레지스터 초기화
- 시프트 레지스터의 연산
- 왼쪽 시프트 레지스터의 다중 저장
- 시프트 레지스터의 결과
그럼 시프트 레지스터 고려사항에 대해서 좀더 자세히 알아보도록 하겠습니다.
1) 시프트레지스터의 초기화
시프트레지스터의 초기화는 반복문이 실행하기 이전에 값을 입력하여, 첫번째 실행이 되었을 때 입력이 되는 초기 값을 말합니다. 반복문안에서 +1을 지속적으로 하는 알고리즘의 초기값을 0으로 잡고 싶다면 왼쪽 시프트레지스터(아래쪽 모양의 화살표, )에 0의 값을 넣으시면 됩니다. 결과는 아래와 같습니다. 다른 값을 넣고 싶다면 상수 혹은 컨트롤에 다른 값을 넣으시면 됩니다.
참고 사항:
시프트 레지스터의 초기값을 넣지않으면 특정 반복문이 수행하고 나서, 재실행을 통해서 다시 반복되게 되면 마지막 연산 결과값을 초기값으로 반복문의 시프트레지스트의 초기값으로 들어가게 됩니다.
2) 시프트레지스터의 연산
시프트 레지스터의 연산은 위의 그림을 보고 참조하도록 하겠습니다. 위의 그림 우측 하단을 보시면 빨간색 모양의 테이블이 하나 보이실 겁니다.
이 테이블은 반복문이 첫번째(i=0), 두번째(i=1), 세번째(i=2) , 네번째(i=3) 수행 될때 연산되는 결과를 오른쪽 시프트 레지스터에서 왼쪽 시프트 레지스터로 이동되는것을 알려줍니다. 그리고 이값은 다음 수행시 입력값으로 처리가 되게 됩니다. 참고로 오른쪽 하단의 테이블은 연산 결과에 대한 오른쪽 시프트 레지스터에 저장되는 결과입니다.
위의 그림을 간략히 설명을 하면 시프트 레지스터의 초기값은 0이고 반복문이 돌때마다 1을 더합니다. 첫번째 반복이 수행이되면 코드에서 0 + 1을 하여 1이라는 결과값이 나오게 되고, 이 값은 오른쪽 시프트 레지스트에 전달되게 됩니다.
이렇게 전달된 값이 다음 반복문(i=1일때)이 진행될 때 입력값으로 진행되어 1+1 = 2의 결과가 나오게 됩니다. 그다음은 2+1, 그다음은 3+1을 수행하여 4번의 반복문이 완료되면 오른쪽 시프트 레지스터의 값은 4가 됩니다. 10회를 반복하면 9가 되겠죠!!
3) 왼쪽 시프트 레지스터의 다중 저장
왼쪽 시프트에 반복에 대한 다중 저장을 하실려면 왼쪽 시프트 레지스터에 마우스를 가져간뒤 위의 그림처럼 선택이 되게 된다면 왼쪽 마우스 버튼을 누른 상태에서 마우스 드래그를 통해서 아래로 내려주시면 됩니다. 그러면 2개, 3개, 4개 ... 필요하신 만큼 추가하시면 됩니다.
참고로 오른쪽 하단의 테이블은 연산 시작에 대한 왼쪽 시프트 레지스터에 저장되는 결과입니다.
연산은 시프트 레지스터의 개념을 이해하고 있으면 간단합니다. (이해가 어려우시면 위의 글을 다시 읽어 보십시오) 기존의 왼쪽 시프트 레지스터 아래의 생긴 추가 레지스터 부분은 이전 연산의 결과들이 들어가는 부분입니다.
와일문이 4번째 도는 상황이라 가정을 해보겠습니다. 그러면 i = 3이고 이전 와일문의 연산 결과는 3일 것입니다. 아래의 왼쪽 시프트 레지스터는 i = 2일 때의 결과값을 저장하게 됩니다.
즉 n번째 수행중이면 왼쪽 첫번째 시프트 레지스터(가장 위의)는 n-1번째 수행의 결과를 두번 째 시프트 스터는 n-2번째의 수행결과를, 세번째 시프트 레지스터는 n-3번째 수행결과를 저장하게 되는 것입니다.
4) 시프트 레지스터의 결과
시프트 레지스터의 결과는 마지막 와일문을 돌았을 때 나오는 결과값을 출력하게 됩니다.
결과를 확인하기 위해서는 아래의 오른쪽 시프트 레지스터()에 인디케이터를 연결하면 됩니다.
시프트 레지스터에 대해서 살펴보았습니다.
이글이 도움이 되셨나요?
그렇다면 아래의 그림을 클릭해주세요.
'National Instruments > LabVIEW' 카테고리의 다른 글
랩뷰 초급 강의 - LabVIEW의 기다림 함수에 대해 알아보자. (1) | 2014.09.06 |
---|---|
랩뷰 초급 강의 - 랩뷰(LabVIEW)에서 반복구문의 결과를 얻기 (1) | 2014.09.05 |
랩뷰 초급강의 - 반복문(While문과 For문) (1) | 2014.08.24 |
랩뷰 초급강의 - 랩뷰( LabVIEW)란 무엇인가? (0) | 2014.08.22 |
랩뷰(LabVIEW) 자격증 소개 및 CLAD 샘플 제공 (0) | 2014.08.21 |