MoonNote

반응형
     

 

 

 

버퍼 에러(Buffer Error)

지난 시간 버퍼란 메모리 영역 중 '데이터를 임시 저장하는 공간'이라고 설명했었습니다. 버퍼 에러는 이 버퍼 구간에서 발생하는 에러를 말하며 데이터 수집에서는 기본적으로 크게 오버플로우(Overflow), 오버라이트(Overwrite) 두 가지를 다룹니다.

 

 

오버플로우(Overflow)

디바이스 FIFO(First In First Out) 메모리가 한계치에 도달하였을 때 발생하는 에러입니다. 장비마다 메모리 영역에서의 버퍼 크기는 한계가 있을 수밖에 없는데 이는 우리가 장비를 컨트롤할 때 설정하는 샘플링 스펙에 영향을 많이 받습니다. 샘플링이 빠르면 그만큼 버퍼에 데이터가 쌓이는 속도 또한 빠른만큼 적절하게 빨리 비워줘야지만 오버플로우 현상을 막을 수 있습니다.

 

빨간 표시 부분 : 오버플로우(Overflow) 발생 지점

 

 샘플링 과정에서 오버플로우와 관련하여 고려해볼 것은 ¹센서로부터 얼마의 빠르기로 샘플링하는지, ²디바이스 FIFO 버퍼의 데이터를 얼마나 빨리 PC쪽으로 빼가는지' 2가지입니다. 즉, 입력으로 들어오는 속도가 출력으로 빠져나가는 속도보다 빠를 경우 버퍼에 데이터가 쌓이게되고 언젠가는 '버퍼가 가득 찼다!'라고해서 오버플로우(Overflow)가 발생하는 것이죠.

 

오버 플로우(Overflow)

 

오버플로우 에러를 피하는 방법

- PC 버퍼의 Sampling Rate를 높이거나, DAQ 버퍼(FIFO)Sampling Rate를 낮춰주는 방법

- FIFO 버퍼가 더 큰 디바이스를 구입하는 방법

- 데이터를 FIFO 버퍼로부터 더욱 빠르게 전송할 수 있도록 고속 버스가 장착된 컴퓨터 구입

- 데이터 전송에 DMA를 사용할 수  있는 경우 DMA 사용

 

 

오버라이트(Overwrite)

'덮어쓰기 에러'라고도 부릅니다. 앞서 살펴보았던 순환 버퍼(Circular Buffer)와 연관이 있으며 PC RAM쪽에서 전달받은 샘플을 링 버퍼의 형태로 쌓아나가다가 결국에는 버퍼가 꽉 차면 기존 샘플이 있던 위에 새로운 샘플을 그대로 덮어쓰게 되는 것이죠. 

 

빨간 표시 부분 : 오버라이트(Overwrite) 발생 지점

 

오버라이트 에러 역시 오버플로우와 마찬가지로 RAM에 쌓이는 샘플의 속도와 Application에서 읽어들이는 샘플의 속도를 적절히 조절하여 오버라이트가 나지 않게 해야합니다.  

 

오버라이트(Overwrite)

 

오버라이트 에러를 피하는 방법

- [DAQmx 타이밍] 함수로 채널당 샘플(버퍼 크기)을 증가

- 기본적인 권장 설정은 읽을 채널 당 샘플을 버퍼 크기의 1/4 ~ 1/2로 설정

- 읽을 채널 당 샘플을 증가시켜 보다 빠르게 비우는 방법

- [DAQmx 타이밍] 함수로 채널당 샘플 속도를 감소시키는 방법

 

 

 

 

 

 

 

 

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

공유하기

facebook twitter kakaoTalk kakaostory naver band