랩뷰 포스팅의 마지막이다. 아마도 영원히 마지막이 아닐까 생각하고 있다. 랩뷰를 쓸일이 없으므로 굳이 라이센스를 구매해야 할 일도 없고...
마지막 글에서 다룰 기능은 '배열에 삽입'이라는 기능이다. 이 기능은 배열안에 다른 상수 또는 배열을 삽입해주는 기능을 한다. 나는 이 기능을 연속적인 데이터를 배열로 정리하기 위해 사용하였다.
loop구조를 사용하여 얻어낸 데이터를 늘상 상수로만 받았는데, 갑자기 그 누적된 결과들로 그래프를 그려야하는 상황이 발생하였다. 어차피 loop 구조는 반복해서 돌아갈테니, 인디케이터 자리에 그래프를 연결해두면 가능할 것이라고 생각했는데, 시간단위로 해당 결과값만 점의 형태로 깜빡거리고 사라져버리는 놀라운(?) 장면을 목격했다.
그래프창을 살펴보면 분명 점들을 이어서 전체장면을 보여주는 기능이 존재하는 것 같은데, 무엇이 문제일까? 그것은 상수와 그래프의 차이를 생각하지 못한 것에서 발생한다. 매 loop실행마다 결과는 상수로 발생하고, 그 상수값은 당연히 다음 실행에서는 지워질테니, VI의 입장에서는 굉장히 부당한 요구였던 셈이다.
시험삼아 컨트롤을 배열로 바꾸어보니, 그래프에 전체 장면이 그려졌다. 즉, 데이터를 배열의 형태로 받아서 결과값이 지워지지 않고 누적될 수 있도록 조치를 취해주어야 한다는 말이다.
그런 것 같아보이는 기능을 발견했다. 그런데 도움말 이미지를 조금 이해하기가 쉽지 않다. 인덱스 입력창의 갯수가 늘어난다고? 실제로 사용해보면 'n 또는 n-1차원 배열'칸이 늘어난다. 도움말이 굉장히 찝찝하지만, 일단 넘어도록 한다.
'배열에 삽입' 노드는 '함수팔레트 > 배열'에서 찾을 수 있다. 배열에 삽입 기능은 정확하게 소개하자면, 내가 처음에 초기값으로 입력해 준 배열의 (내가 지정해준) 인덱스의 자리에, n(상수)또는 n-1차원의 배열을 입력해주는 기능이다. 직접 하나씩 예를 들면서 살펴보자.
배열 (1,2,3,4)의 인덱스 1의 자리에 상수 5를 입력해달라고 명령해보았다.
배열의 인덱스는 0부터 시작하므로, 출력값을 살펴보면 인덱스 1의 자리에 있었던 2부터 (2,3,4)가 뒤로 밀리고 그 자리에 5가 입력되었다. 즉 (1,5,2,3,4)의 배열이 출력되었다.
이번에는 'n 또는 n-1차원의 배열' 입력값을 여러개로 늘려 기능을 실행해보자.
지정한 인덱스 1의 자리에 입력된 상수 5,6,7이 순서대로 입력되었다. 아랫쪽 입력값부터 차례로 인덱스 자리에 입력되면서 한 칸씩 밀려나는 방식인 것으로 생각된다. 이렇게 이야기하면 헷갈리니 그냥 '순서대로 모두 들어간다'라고 생각하자.
(*배열에 삽입 노드에 관한 설명은 여기까지 입니다.)
원하는 기능을 찾은 것 같으니 이것을 이용하여 데이터를 배열로 받아보자.
데이터가 배열로 출력되는지를 확인하기 위해 구성한 VI이다. 어떻게 구성되어 있는지 살펴보자.
단순히 상수값을 데이터로 받을 때는 시프트레지스터의 초기값을 상수로 지정해주면 되었지만, 배열에 삽입 노드를 사용하기 위해서는 초기 배열이 필요하다. 따라서 초기값을 상수대신 배열 상수로 넣어준다. 루프 밖으로 좌측에 나와 있는 터미널이 배열상수이다. VI의 실행결과 출력된 데이터만으로 배열의 결과값을 구성하고 싶은 것이므로 초기값은 넣어줄 필요가 없다. (0도 하나의 데이터이므로, 생성한 배열상수에 어떠한 작업도 하지 않도록 한다. )
그럼 '인덱스'의 위치에는 어떤 값을 입력해야 할까? 일단 입력된 초기 배열에 어떠한 초기값도 존재하지 않는다는 점을 고려해야한다. 일단 '0보다 큰 숫자'가 들어가는 것은 굉장히 어색하게 들린다. (이미 앞선 인덱스에 원소가 없으므로)
그럼 0을 입력하면 될까? 인덱스 0의 자리는 배열의 첫 자리이다. 그리고 loop구조는 매 실행마다 내부에 코딩된 노드들을 순서대로 실행하여 하나의 데이터로 출력한다. 즉, 인덱스 '0'을 입력하면, 실험이 진행되면서 얻은 결과값들이 역방향으로 배열된다는 의미이다. (0,1,2,3,4..)를 출력하길 기대했는데 (...4,3,2,1,0)이 출력되는 것이다.
따라서 시간순서대로 배열된 데이터를 얻고 싶다면 특정 상수가 아닌 while루프의 회전수를 이용해야 한다. 회전수는 0에서부터 루프가 실행될 때마다 1씩 증가하는 값이므로, 매 시행마다 인덱스값을 새롭게 정의해주어 데이터가 차례대로 배열되게 유도해준다.
마지막으로 n또는 n-1의 배열 자리에는 입력하고자하는 값을 연결해주면 된다. 이 실험에서는 난수를 입력해두었다.
마지막으로 결과를 출력하는 위치의 코드를 확인해보자. 사진의 배열은 결과값을 받는 인디케이터이다. 그런데 왜 이걸 loop안에 가져다 놓은 것일까? 일단 loop안에 들어온 데이터는 loop가 완전히 정지될 때까지 밖으로 나갈 수가 없다. 그런데 만약 인디케이터가 외부에 존재한다면, 모든 실험을 마칠때까지 데이터를 확인할 수가 없는 것이다.
'LebView' 카테고리의 다른 글
랩뷰 거듭제곱 표현하기 (지수함수) (0) | 2016.03.20 |
---|---|
랩뷰 열거형 (0) | 2016.03.20 |
랩뷰 클러스터 (0) | 2016.03.20 |
랩뷰 배열 (0) | 2016.03.20 |
랩뷰 불리언 데이터, 기계적 동작 (0) | 2016.03.19 |
최근댓글