오늘은 LabVIEW에서 가장 많이 쓰이는 함수중에 하나인 와일루프(While Loop)에 대해서 설명 드리겠습니다.
사진1) 와일루프 선택
프로그램을 시작하시고 블록 다이어그램에서 사진1 처럼 와일루프를 선택합니다.
사진2) 와일루프(While Loop)
사진2에 보면 검은 사각형 안에 코드를 짜는 거고 그안에 반복 터미널과 조건 터미널을 볼수 있습니다. 반복 터미널은 와일루프의 코드가 몇회 반복됬는지 알려줍니다. 와일루프 내의 프로그램이 모두 수행할때까지 숫자가 올라가지 않고 모두 돌았을 때에야 1씩 올라갑니다.
조건 터미널은 와일루프가 종료되는 조건 입니다. 종료 조건은 2가지가 있는데 사진12를 참고하면 됩니다.
사진3) 와일루프 순서도
사진3은 와일루프가 동작되는 간단한 순서도 입니다. 2번의 코드는 와일루프 내에 수행되는 코드 입니다. 3번의 조건은 조건 터미널을 말합니다. 1번의 시작은 프로그램을 시작할때를 말하고 조건이 계속 거짓이면 와일루프는 전원이 꺼지거나 PC가 고장날때 까지 계속 반복합니다.
사진4) 문자열 컨트롤(왼쪽)과 인디게이터왼쪽) 연결
저번 Lesson1에서 처럼 문자열 컨트롤과 인디게이터를 만들겠습니다. 이번에는 와일루프 안쪽에 만드는 것입니다. 완료후 실행을 해 봅시다
사진5) 에러 발생
하지만 실행을 할수 없습니다. 사진5에서 보면 화살표가 깨져 있는 것을 알수 있습니다. 이는 LabVIEW내에서 실행하기 전에 에러를 감지 했다는 것입니다.
사진5) 에러 발생조건
깨진 화살펴를 클릭해면 몇개의 에러가 있는지 그리고 왜 에러가 났는지 알려주게 됩니다.
사진5에서 에러 보이기를 클릭하시면 에러가 발생한 지점으로 갈수 있습니다. 사진5의 에러는 '조건 터미널이 연결되지 않았습니다' 입니다.
사진6) 에러 발생 위치
사진6에서 조건 터미널에 어떻한 것도 연결되어 있지 않습니다. 사진3의 순서도에서 3번이 조건 터미널 입니다. 그런데 이것이 참이나 거짓을 결정하지 않는다면 와일루프는 에러에 걸립니다. 언제 종료해야 할지 컴퓨터가 모르기 때문입니다.
사진7) 버튼 추가
사진7의 버튼을 추가합니다. 버튼은 참,거짓 2가지 경우만 갖고 있습니다.
사진8) 버튼 연결
버튼을 조건터미널에 연결합니다. 사진8에서 왼쪽의 불리언은 프런트 패널에 있는 버튼 입니다. 오른쪽은 불리언과 조건 터미널이 연결된 상태 입니다.
사진9) 프로그램 실행후
이제 화살표를 보면 다시 연결됬다는 것을 알수 있습니다. 실행을하고 사진9 처럼 하면 문자열 인디게이터(문자열2)에 컨트롤에서 입력한 문자열이 나오게 됩니다.
사진10) 문자열 컨트롤에 문장 기입후
사진10은 문자열 컨트롤에 문자를 입력하고 난후 인디게이터에 나온 결과 입니다.
사진11) 프로그램 정지
당연히 프런트 패널에서 코드를 정지를 할수 있습니다. 불리언을 누르면 코드는 정지를 합니다. 사진11은 코드가 정지된 상태이고 불리언이 On(참) 상태 입니다.
사진12) 조건 터미널 조건 모드
하지만 반대의 경우도 만들수 있습니다. 조건 터미널을 클릭하시면 사진12의 아래와 같은 모양이 나옵니다. 이는 거짓이 들어올때 와일루프를 정지 하는 것입니다. 코드를 짜실때 사진12와 같이 상황에 따라서 사용할수 있습니다.
사진13) 반복터미널에 인디게이트 생성
이제 반복터미널의 상태를 보도록 하겠습니다. 사진13에서 반복터미널에 인디게이터를 생성합니다. 이때 생성되는 인디게이터는 숫자를 표시합니다.
사진14) 프로그램 실행후 반복터미널 상태
프로그램을 실행하자마자 숫자형 인디게이터가 미친듯이 올라갑니다. 이는 와일루프가 CPU에서 최대한 많은 자원을 가져가기 때문입니다. 즉 프로그램이 실행될때 와일루프를 최대한 빠르게 돌릴려고 CPU로부터 갖고 올수있는 자원을 갖고 오는 것입니다.
사진15) 프로그램 실행전 CPU
사진16) 프로그램 실행후 CPU
사진15,16은 와일루프 실행 전과 후의 CPU사용율을 나타냅니다. 'Ctrl+ALt+Delete'키를 누르면 위와 같은 창을 띄울수 있습니다. 프로그램의 최적화를 할려면 가능한 최소한의 자원을 사용해야 합니다.
사진17) 기다림(ms) 생성
블록다이어 그램에서 사진17과 같이 기다림함수를 생성합니다. 기다림 함수는 와일루프가 한번 실행하고나서 모든 코드가 실행이 되면 마지막에 일정시간 정지하는 것입니다.
사진18) 왼쪽에 상수 생성
이번에는 왼쪽에 상수를 생성합니다. 상수는 변하지 않는 수입니다. 물론 상황에 따라서 컨트롤을 만들어도 됩니다.
사진19) 코드 완성
상수를 생성하면 사진19처럼 1000이라는 값을 상수값으로 지정합니다. 1000은 1000ms을 말하는 것으로 1초입니다. 그렇게 되면 와일루프가 모든 코드를 실행한 다음 1초간 기다린후 다시 프로그램을 수행하는 구조 입니다. 필요에 따라 500,10000 등등 여러 숫자를 넣을수 있습니다. 사진19는 32비트 정수 입니다.
사진20) 프로그램 수정후 실행
이제 다시 실행을 하면 사진20처럼 많은 자원을 소비하지 않는 것을 알수 있습니다. 만약 와일루프에 있는 코드가 빠르게 실행을 해야 한다면 당연히 CPU의 자원이 더 필요합니다. 하지만 그렇지 않다면 궂이 중요하지 않은데 자원을 많이 쓸 필요가 없는거죠.
안녕하세요. 오늘은 프로퍼티 노드에 대해서 설명을 드리겠습니다. 프로퍼티 노드를 사용하는 방법은 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) 실...
안녕하세요 알렉스 입니다. 오늘은 저번 글과 마찬가지로 프로퍼티 노드에 대해서 설명해 드리겠습니다. 저번에는 프로퍼티 노드 자체를 생성해서 사용했는데 이번에는 참조를 이용해서 만들어보도록 하겠습니다. 제가 참조를 이용해서 프로퍼티 노드를 사용하는 이유는 SubVI때분 입니다. 사실 글로벌 변수로 각 VI들이 데이터를 주고 받을수 있지만 참조를 통해서도 데이터를 교활할수 있습니다. 그럼 먼저 프로젝트를 생성하도록 하겠습니다. 그림1) 프로젝트 생성 그림2) 프로젝트에 Main.vi 생성 먼저 프로젝트를 생성한 후에 Main.vi를 생성해 줍니다. Main.vi는 프로젝트에서 우선적으로 동작될 프로그램 입니다. 그림3) 프런트 패널 디자인 그림4) Stop버튼을 놓을때 스위치로 변경 프런트 패널을 보시면 LED와 Stop버튼만 있습니다. 그림3과 같이 배치 해 주시고 그림4에서 Stop의 기계적 동작을 '놓을때 스위치'로 변경 하면 됩니다. 그림5) Stop버튼에 참조 생성 이제 불리언과 Stop버튼의 참조를 생성해 줍니다. 컨트롤 패널 또는 블록다이어 그램에서 마우스로 해당 컨트롤 또는 변수를 우클릭 한 후에 생성에 들어가면 참조를 생성할수 있습니다. 그림6) 프로퍼티노드 위치 저번 글과 달리 이번에는 참조를 이용한 프로퍼티 노드를 생성하는 방법 입니다. 블록다이어 그램에서 그림6에 위치함 프로퍼티 노드는 생성하시면 됩니다. 프로퍼티 노드 왼쪽에 참조값이 들어가면 기존의 프로퍼티 노드처럼 사용이 가능합니다. 그림7) 프로퍼티노드 속성 선택 프로퍼티 노드를 참조와 연결한 수에 좌클릭을 하시면 여러 속성이 나오는데 지금은 값을 선택하도록 하겠습니다. 그림8) 프로퍼티 노드를 쓰기로 변경 처음 플랫 케이스는 초기화이기 때문에 Stop의 프로퍼티노드를 False로 해야 합니다. 따라서 쓰기로 변경해 줍니다. 그림9) 프로퍼티 노드를 쓰기상태 ...
댓글
댓글 쓰기