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

랩뷰 시프트 레지스터 (Shift Register)

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

프로그래밍에서 루프를 사용할 때, 종종 이전에 LabVIEW에서 이미 실행된 루프 반복의 데이터를 사용해야 할 경우가 있습니다. 예를 들어 루프의 각 반복에서 데이터를 하나씩 수집하면서 가장 최근에 수집된 데이터 5 개의 평균을 계산해야 할 때, 루프의 이전 반복에서 나온 데이터를 간직하고 있어야 합니다.

 

시프트 레지스터

루프를 사용하여 이전 반복의 값을 다음 반복으로 전달하고자 할 때 시프트 레지스터를 사용합니다. 시프트 레지스터는 하나의 터미널 쌍으로 표시됩니다. 이 터미널 쌍은 루프 경계의 좌우의 세로선 상에서 정반대로 마주보며 위치하게 됩니다.

루프 오른쪽의 터미널에는 윗방향 화살표가 있고, 반복이 한 번 끝날 때마다 데이터를 저장합니다. 시프트 레지스터 오른쪽에 연결된 데이터는 LabVIEW에서 다음 반복으로 전달됩니다. 루프가 실행된 후, 루프 오른쪽의 터미널은 시프트 레지스터에 저장된 마지막 값을 반환합니다.

 

루프의 왼쪽이나 오른쪽 경계에서 마우스 오른쪽 버튼을 클릭하고 바로 가기 메뉴에서 시프트 레지스터 추가를 선택하여 시프트 레지스터를 만듭니다.

시프트 레지스터는 모든 데이터 타입을 전달할 수 있으며, 시프트 레지스터에 연결된 첫 번째 객체와 일치하도록 자동으로 데이터의 타입을 변환시킵니다. 시프트 레지스터의 양 끝의 두 터미널에 연결하는 데이터는 동일한 타입이어야 합니다.

 

한 루프에 여러 개의 시프트 레지스터를 놓을 수 있습니다. 이전 루프 반복의 값을 사용해야 하는 작업이 루프 안에 여러 개 있는 경우가 있습니다. 이 때는 다음 그림 1과 같이, 여러 개의 시프트 레지스터를 사용하여 루프 구조 안에 있는 각기 다른 프로세스의 데이터 값들을 각각 저장할 수 있습니다.

그림 1. 여러 시프트 레지스터 사용하기

 

시프트 레지스터 초기화하기

 

시프트 레지스터를 초기화하는 것은 VI가 실행될 때 시프트 레지스터가 루프의 처음 반복에 전달하는 값을 리셋하는 것입니다. 그림 2와 같이 루프 왼쪽의 시프트 레지스터 터미널에 컨트롤이나 상수를 연결하여 시프트 레지스터를 초기화합니다.

그림 2. 초기화된 시프트 레지스터

 

그림 2에서 For 루프가 5번 실행되고, 각 실행이 반복될 때마다 시프트 레지스터가 전달하는 값이 1씩 증가합니다. For 루프가 5번 실행을 반복한 후, 시프트 레지스터가 마지막 값인 5를 인디케이터에 전달하면 VI는 멈추게 됩니다. VI를 실행할 때마다 시프트 레지스터는 0의 값으로 시작합니다.

 

시프트 레지스터를 초기화하지 않는 경우, 루프는 마지막으로 실행되었을 때 시프트 레지스터에 기록된 값을 사용하며, 루프가 실행된 적이 없으면 해당 데이터 타입의 기본값을 사용합니다. VI를 순차적으로 여러 번 실행할 때, 그 사이의 상태 정보를 유지하기 위하여 시프트 레지스터를 초기화하지 않고 사용하기도 합니다.

 

그림 3.초기화되지 않은 시프트 레지스터

 

그림 3에서 For 루프가 5번 실행되고, 각 실행이 반복될 때마다 시프트 레지스터가 전달하는 값이 1씩 증가합니다. 처음으로 VI를 실행하면, 시프트 레지스터는 32 비트 정수형 데이터의 기본값인 0에서부터 시작됩니다. For 루프가 5번 실행을 반복한 후, 시프트 레지스터가 마지막 값인 5를 인디케이터에 전달하면 VI는 멈추게 됩니다.

 

다음 VI를 실행할 때, 시프트 레지스터는 이전 실행의 마지막 값인 5에서부터 시작됩니다. For 루프가 5번 실행을 반복한 후, 시프트 레지스터가 마지막 값인 10을 인디케이터에 전달합니다. 이 VI를 다시 실행하면, 시프트 레지스터는 10의 값에서부터 시작됩니다. 초기화하지 않은 시프트 레지스터는 VI를 닫을 때까지 이전의 최종 반복 값을 유지합니다.

 

 

다층 시프트 레지스터

 

다층 시프트 레지스터를 사용하면 루프 이전의 반복에서의 데이터에 접근할 수 있습니다. 다층 시프트 레지스터는 여러 번의 이전 반복에서 생성된 데이터까지 저장하여 그 값들을 다음 반복으로 넘길 수 있음. 다층 시프트 레지스터를 만들려면, 시프트 레지스터의 왼쪽 터미널에서 마우스 오른쪽 버튼을 클릭한 후 바로 가기 메뉴에서 원소 추가를 선택합니다.

다층 시프트 레지스터는 루프의 왼쪽에만 나타납니다.

 

왜냐하면 오른쪽 터미널은 단지 현재 루프 반복에서 생성된 데이터를 다음 루프 반복에 전달하는 역할만 하기 때문입니다.

 

그림 4. 다층 시프트 레지스터 사용하기

 

이전 블록다이어그램에서 왼쪽 터미널에 원소를 하나 더 추가하면, 최근 두 번의 반복 값을 다음 반복으로 전달할 수 있습니다. 이 중에서 가장 최근의 반복 값은 맨 위에 있는 시프트 레지스터에 저장됩니다. 아래에 있는 터미널은 그보다 더 이전의 반복에서 전달된 데이터를 저장합니다.

 

728x90
반응형
그리드형

'프로그래밍 > 랩뷰 기술자료' 카테고리의 다른 글

랩뷰 데이터 구조  (0) 2023.06.08
랩뷰의 배열 및 클러스터  (0) 2023.06.04
랩뷰의 실행구조  (0) 2023.06.04
랩뷰의 디버깅 도구  (0) 2023.06.04
랩뷰의 기본적인 도구  (0) 2023.06.03