MoonNote

반응형

Running this VI causes your computer to run out of memory. What is the most likely cause?

1. The loop time delay is too large

2. The DAQmx Read VI returned an error

3. The specified current range is too high

4. The array output tunnel on the While Loop has no bounds


정답 보기는 아래 더보기 클릭

 

 

더보기

정답 : 4. The array output tunnel on the While Loop has no bounds

위의 코드를 실행하였을 때 PC에서 메모리 부족 현상이 나타날 가능성이 있는 경우에 대한 적절한 원인을 찾는 문제이다. 코드에서 쓰인 LabVIEW 함수는 DAQ와 관련된 함수들로 [DAQmx 채널 생성], [DAQmx 태스크 시작], [DAQmx 읽기], [DAQmx 태스크 정지], [DAQmx 태스크 지우기] 순서로 사용되어졌다. DAQ와 관련된 내용을 모두 다루기엔 DAQ 장비에서 PC로 데이터를 가지고오는 메커니즘까지 알아야되기에 내용이 길어지므로(추후 DAQ 카테고리에 관련 내용을 포스팅한다면 링크를 걸도록 하겠다) 핵심만 살펴도록 하겠다. 핵심은 소프트웨어에서 데이터를 읽어들이고 이를 표현하는데 있어서 메모리 부족 현상이 나타날 가능성이 있는 것을 보면 되며 보기 답안 하나씩 살펴보면 아래와 같다.

1. The loop time delay is too large
[DAQmx 타이밍] 함수로 샘플링 속도를 지정한 것이 아니라 While Loop의 Time에 의해 한 사이클당 읽어오는 샘플의 개수가 결정된다. '1 Chan N Samp'에서 읽을 샘플 개수를 따로 지정하지 않았기 때문에 기본 값인 '-1'이 적용되어 있는데, '-1'의 의미는 함수가 호출될 때 버퍼에 쌓인만큼  데이터를 소프트웨어로 가지고 온다는 의미이다. 시간이 길어질수록 한번에 가지고 오는 데이터의 양은 많아지는 것은 사실이지만 Time delay와 관계없이 시간이 지났을 때 소프트웨어 상에 불러온 데이터의 개수는 결국 같다.

'데이터를 한번에 읽어들일 때 메모리 부족 현상이 나타날만큼 Time delay를 주면 되지 않냐?' 분명 이렇게 생각하시는 분들도 있을 것같아 추가 설명을 하자면.....'틀린 말은 아니다.'라고 말하고 싶지만 해당 증상이 나타나기 전 [DAQmx 읽기] 함수에서 타임아웃 기본 값인 10s를 기다리고 에러가 출력되면서 While Loop가 종료될 것이기에 이 문제에서는 고려할 필요가 없는 경우라고 보면 되겠다.


2. The DAQmx Read VI returned an error
장비쪽에 문제가 있다면 [DAQmx 읽기] 함수에서 에러 출력이 나올 것이고 While Loop가 종료되기에 메모리 부족 현상이 나타나지 않고 단순 VI만 실행 종료가 될 것이다. 따라서, 2번도 정답이 아니다. 

3. The specified current range is too high
[DAQmx 채널 생성] 함수에서 전류 측정 타입으로 채널이 생성되는데 함수 상단의 터미널에서 측정하고자하는 신호의 범위(최소, 최대)를 설정할 수 있다. 기본적으로 장비 메뉴얼에 나와있는 스펙 기준으로 설정하며 입력 범위 설정은 메모리 부족 현상과는 아무 관계가 없다. 따라서, 3번도 정답이 아니다.

4. The array output tunnel on the While Loop has no bounds
[DAQmx 읽기] 함수에서 나오는 데이터들은 While 문 바깥쪽의 웨이브폼 차트와 와이어링 연결이 되어있다. While문 경계의 터널을 자세히 살펴보면 오토인덱싱이 활성화 되어있는 것을 볼 수 있는데  VI 실행이 길어지면 길어질수록 오토인덱싱을 통해 쌓이는 데이터의 양이 점점 증가할 것이다.(웨이브폼 배열 형태로 출력)

출력 타입인 웨이브폼 배열의 크기 제한이 따로 없기 때문에  시간이 길어질수록 쌓이는 데이터 수가 증가하고, 이는 데이터를 표현하기 위한 메모리 리소스를 많이 필요로하게 된다는 의미이다. 메모리 리소스가 점점 증가하다가 한계치에 도달하게되면 메모리 부족 현상이 나타나게 된다. 따라서, 메모리 부족 현상을 일으킬 수 있는 가장 적합한 경우는 4. The array output tennel on the While Loop has no bounds가 정답이다.

 

 

 

 

 

 

 

 

 

 

 

※ 이 글이 도움이 되었다면 "👆🏻구독"과 "🤍공감" 버튼을 클릭해주세요. 클릭 한번이 글 쓰는데 큰 힘이 됩니다.

공유하기

facebook twitter kakaoTalk kakaostory naver band