안녕하세요. 알렉스 입니다. 오늘은 제가 개인적으로 좋아하는 For Loop에 대해서 설명 드리도록 하겠습니다.
사진1) For루프 선택
블록 다이어 그램에서 For Loop의 선택을 위 사진처럼 하시면 됩니다. For 루프가 이전의 While 루프와 다른점이 있다면 반복하는 횟수를 정할수가 있습니다.
사진2) For 루프 구조
For 루프에는 크게 3가지로 구성되어 있습니다. 카운터 터미널, 반복 터미널 그리고 사각 For 루프이죠. 실제 코딩은 For 루프 내부에서 주로 이루어 집니다.
카운터 터미널 : For루프가 반복될 횟수를 입력한다. 입력값이 0이면 For 루프는 실행을 안한다.
반복 터미널 : For루프가 반복할때마다 +1씩 증가 한다. 즉 5를 반복했으면 마지막으로 4가 출력된다. 그 이유는 0부터 시작하기 때문이다.
사진3) For 루프 순서도
사진3의 순서도를 보면 시작 이후에 조건을 보게 되어 있습니다. 이는 카운터 터미널이 몇회인지 보고 For 루프가 몇회 반복했는지 비교후 같으면 참으로 넘어가게 되는 것입니다. 만약 카운터 터미널에 값이 0이면 For 루프는 코드를 실행하지 않고 끝나게 됩니다.
사진4) 카운터 터미널쪽 에러(Error)
카운터 터미널에 정수로 지정을 하지 않는다면 사진4 처럼 에러가 발생하게 된다. 하지만 배열(차후설명)을 이용해서 인덱스 연결을 하면 For 루프는 배열의 크기에 따라 반복한다.
사진5) 카운터 터미널에 상수 생성
사진6) 반복터미널에 인디게이터 생성
사진5,6번에서 각각 상수와 인디게이터를 생성합니다.
사진7) For 루프를 돌렸을때 정수값 비교
사진7은 For 루플를 실행후 나타난 결과 입니다. 반복 터미널에 연결된 인디게이터는 4를 나타내고 있습니다. 그 이유는 앞에서 이야기 했듯이 시작을 0부터 하기 때문입니다. 하지만 지금 상태에서는 For 루프가 빨리 돌기 때문에 기다림 함수를 추가하겠습니다.
사진8) For 루프에 기다림 함수 추가
사진9) For 루프는 1회 반복후 0.5초 대기
이제 기다림 함수를 추가해서 For루프의 진행 상황을 육안으로 확인 할수 있습니다. 500ms는 0.5초를 말합니다.
사진10) 배열상수 선택
사진11) 배열상수를 문자열 배열로 변경
사진10,11과 같이 빈 배열상수를 문자열 배열상수로 바꿉니다. 배열은 수학시간때 배운 배열과 수학적 특성이 같습니다. 지금 만드는 배열은 1차 배열로 오직 1열만 갖습니다.
사진12) 문자열 배열의 너비를 넓히기
사진13) 문자열 배열의 원소개수 나타내기
문자를 입력하기 쉽게 너비을 넓혀주고 원소의 개수도 여러개 나타내서 문자를 입력하기 쉽도록 합니다.
사진14) 문자열 배열을 For 루프에 연결하기
사진14는 인덱스와 인덱스가 비활성화 됬을때의 차이점을 설명하기 위해서 만들었습니다. 일단 인덱스는 배열의 0번째(아니면 1번째)원소부터 차례대로 나오는 것입니다. 즉 반복터미널이 0일때 'Hello1'이 나오고 1일때 'Hello2'가 나옵니다. 하지만 인덱스가 비활성화 되 있다면 For 루프안에서 출력될때 배열이 통째로 출력됩니다.
사진15) 인덱스 부분에 인디게이터 생성
사진16) For 루프 내부에 문자열(인덱스 연결)과 문자열 배열(인덱스 비활성화 연결) 생성
그럼 각각에 인디게이터를 생성하겠습니다. 인덱스 쪽은 문자열만 나오고 인덱스가 비확성화 된 부분은 인디게이터 문자열 배열이 생성됬음을 알수 있습니다.
사진17) 배열과 문자열 비교
전에 설명했듯이 인덱스 부분은 문자가 순차적으로 출력됩니다. 하지만 인덱스가 비활성화 된 부분은 문자열 배열이 통째로 출력이 됩니다.
사진18) 같음 추가
For 루프의 기능중에 하나인 인덱스 조건 출력에 대해서 설명드리겠습니다. 사진 18과 같이 같음 함수를 추가해 줍니다.
사진19) 인덱스에 조건 설정
그리고 사진 19와 같이 인덱스를 가르킨 상태에서 조건적을 선택해 줍니다.
사진20) 조건이 설정된 인덱스
사진21) 조건적용이 완성된 코드
최종적으로 사진 21과 같이 완료시켜 주시기 바랍니다. 사진21에 양쪽은 인덱스가 활성화 되어 있습니다.
사진22) 사진21 For 루프 내부 코드 _ 사진3 참조
사진22에서 보면 For루프 내부에서 일어나는 순서도 입니다. 조건이 참이든 거짓이든 무조건 끝으로 가게 되어 있습니다. 하지만 For루프는 반복을 하기때문에 같은 코드가 반복되게 됩니다.
사진22의 조건은 'Hello3'과 같은지 틀린지를 확인하게 됩니다. 같다면 코드에서 배열로 처리됩니다. 거짓이면 바로 끝나게 되지요.
사진23) 실제 결과값
실제 출력된 배열 입니다. 예상했듯이 Hello3 1개의 원소밖에 없습니다.
For 루프는 LabVIEW에서 유용하게 쓰이기 때문에 많이 연습하시는 것을 추천 드립니다.
안녕하세요. 오늘은 프로퍼티 노드에 대해서 설명을 드리겠습니다. 프로퍼티 노드를 사용하는 방법은 2가지가 있는데 참조를 이용하는 방법과 직접 프로퍼티 노드를 생성해서 사용하는 방법이 있습니다. 오늘은 프로퍼티노드만을 이용해서 카운트를 올리는 프로그램을 만들도록 하겠습니다. 그림1) 버튼생성후 기계적동작 변경 새로운 VI를 생성후 그림 1과 같은 버튼을 설정 합니다. 스위치의 기계적 상태는 '놓을때 위치'로 설정을 합니다. 이후 'Start', 'Hold', 'Reset', 'Stop' 버튼을 만들어 같은 기계적 상태로 놓습니다. 그림2) 숫자형 컨트롤 생성 그림3) 숫자형 컨트롤 글짜크기 변경 그림4) 숫자형 컨트롤의 형을 변경 그림2~4까지 숫자형 컨트롤을 만들고 프런트 패널에 배치합니다. 그림5) 프런트패널 완성 그림6) 숫자형 컨트롤을 인디게이터로 변경 숫자형 인디게이터는 Count에만 사용하기 때문에 블록 다이어그램에서 인디게이터로 변환합니다. 그림7) 플랫 시퀸스, While, 이벤트 케이스 생성후 프로퍼티 생성그림7과 같이 플랫 시퀸스안에 케이스를 2개를 만듭니다. 2번째 케이스에 While루프와 그안에 이벤트 케이스를 만들어 줍니다. 첫번째 케이스에 각 버튼을 초기화 해야 하기 때문에 그림7에서 블록다이어그램에 있는 버튼을 우클릭후 프로퍼티 노드에 들어가서 값을 선택합니다. 그림8) 프로퍼티에 값과비활성화 포함 프로퍼티노드는 원하는 많큼 층을 만들수가 있습니다. 마우스로 프로퍼티노드를 아래로 끌면 다른 속성의 프로퍼티노드가 생성됩니다. 그리고 초기화하는 케이스에 비활성화를 선택해 줍니다. 그림9) 초기화 케이스구조 그림9는 프로그램이 처음 시작될때 버튼들을 초기화 해줍니다. 처음 시작되면 'Start', 'Stop' 버튼을 제외하고 모두 비활...
안녕하세요. 알렉스 입니다. 이번에는 LabVIEW를 이용해서 PC로 전압값을 측정하도록 하겠습니다. 이전글에 USB-6121을 이용해서 측정한다고 하였습니다. 자세한 스펙은 나중에 설명하고 이번에는 전압값을 측정해서 PC에 나타내도록 하겠습니다. 사진1) MAX로 연결상태 확인 일단 USB-6121을 PC와 연결하고 MAX에서 연결상태를 확인합니다. 사진1에서는 USB-6121은 "Dev3"으로 지정이 되어 있습니다. 사진2) 코딩시 필요한 함수 이제 MAX에서 제대로 연결된 것을 확인하면 이제 블록다이어그램에서 필요한 함수들을 나열합니다. 사진3) AI 채널생성 사진4) AI 채널지정 사진5) AI셋팅 사진3,4에서 AI채널 설정을 하여줍니다. 사진5를 보면 AI의 최대,최소 전압을 각각 +10, -10V로 하여주시기 바랍니다. 그리고 입력터미널 설정을 RSE로 설정합니다. (셋팅에 대한 설명은 다음글에) 사진6) 샘플타이밍 설정 사진7) 측정주파수(Hz)설정 이제 DAQ가 어떻게 샘플을 수집할 것인지와(사진6) 1초에 몇회 데이터를 측정할 것인지(사진8)를 결정해 주셔야 합니다. 측정 주파수는 Hz단위를 사용하며 예제에서는 1000을 넣었기 때문에 1초개 1000번 데이터를 수집합니다. 사진7) 전압을 읽을 인디게이터 생성 이제 전압을 읽을 인디게이터를 생성합니다. 현재 아날로그는 1채널의 1샘플을 측정하게 되어있기 때문에 1초에 1000번씩 인디게이터에 전압값을 출력합니다. 이상태에서 Run을 하게 되면 전압은 1번만 측정하고 프로그램이 종료됩니다. 사진8) While루프 생성후 나머지 연결 계속 측정하기 위해서는 While루프를 생성해서 지속적으로 전압값을 측정해야 합니다. 사진8과 같이 코딩을 하신후 마무리 하면 됩니다. 사진9) USB-6121연결 회로도 사진10) 실...
안녕하세요. 알렉스 입니다. 오늘은 플랫 시퀀스 구조에 대해서 알아보도록 하겠습니다. 사진1) 플랫 시퀀스 진행 순서도 플랫 시퀀스의 진행 순서를 보면 매우 간단합니다. 시작후 순차적으로 코드를 실행 하는 것입니다. 랩뷰에서 이런 시퀀스 구조가 나온 이유는 실제 실행할때 어떤 함수가 먼저 실행 될지 모르기 때문입니다. 따라서 순차적으로 코드를 실행할 필요가 있을때 플랫 시퀀스를 사용합니다. 사진2) 플랫 시퀀스를 블록다이어 그램에서 선택 사진3) 플랫 시퀀스 진행 순서 플랫 시퀀스는 왼쪽에서 오른쪽으로 진행이 됩니다. 가장 왼쪽에 있는 코드가 먼저 끝나야 그 다음 시퀀스 케이스로 넘어갑니다. 만약 한쪽 시퀀스에서 무한루프를 돈다면 프로그램은 끝나지가 않습니다. 사진4) 프레임 추가방법 - 우측 사진5) 프레임 추가 방법 - 좌측 프레임 추가 방법 또한 간단합니다. 프레임 모서리에 마우스를 대시고 우클릭을 하고 다음/이전에 프레임 추가를 하시면 됩니다. 프래임의 개수는 제한이 없습니다. 사진6) 더하기 함수 추가 사진7) 기다림 함수 추가 플렛 시퀀스를 이해하기 위해 더하기, 기다림 함수를 각각의 케이스에 넣습니다. 기다림 함수는 우측에 상수를 생성해서 1000으로 입력합니다. 사진8) 완성된 코드 사진8을 보면 각 케이스는 무조건 1000ms를 기다리고 다음 케이스로 진행되게 되어있습니다. Input값이 0일때 처음 Output1은 10을 더합니다. Output2,3도 같은 방식으로 진행되며 마지막 시퀀스때는 Output3에서 출력을 하고 마무리 하게 됩니다. 사진9) 출력 결과 사진9의 출력 결과는 직접 코딩을 하시면 볼수 있습니다. Output1~3까지 1초 단위로 입력이 되는 것을 알수 있기 때문입니다. 이렇든 Flat Sequence 함수는 이러한 단계로 진행 된다는 것을 아셨습니다....
댓글
댓글 쓰기