본문 바로가기

Programming

DAQmxWriteAnalogF64 함수 사용시 -200547 에러 발생에 대한 대처방법



200547 에러는 


#define DAQmxErrorWriteFailsBufferSizeAutoConfigured                                    (-200547)


위와 같이 정의되어 있으며, 발생하는 경향은 다음과 같다.



DAQmxWriteAnalogF64 함수처럼 버퍼에 값을 기록하되, 기록후에 Task를 시작하지 않고 다시 DAQmxWriteAnalogF64 함수를 호출하여 값을 기록하려고 할 때 나타난다.


(버퍼에 값을 overwrite 하는 것이 아니라 이전에 기록되었던 위치 이후에 이어서 기록을 하려고 하여 버퍼사이즈 이상의 메모리 접근이 이루어지기 때문으로 보인다)


그러므로 이 문제를 해결하기 위해서는 두가지 방법이 있을 수 있다.



1. DAQmxWriteAnalogF64 함수를 사용한 뒤에는 반드시 Task를 실행시킨다. 



2. DAQmxWriteAnalogF64 함수를 여러번에 걸쳐서 사용해야하는 상황이라면 DAQmxWriteAnalogF64 함수를 호출하기 전에 DAQmxTaskControl을 호출하고 해당 함수의 두번째 인자인 int32 action 에는 DAQmx_Val_Task_Unreserve 를 입력한다.


예) - DAQmxTaskControl(taskHandle, DAQmx_Val_Task_Unreserve);

 DAQmxWriteAnalogF64(taskHandle, 1000.0, 0, 10.0, DAQmx_Val_GroupByChannel, data, NULL, NULL);




이 중에서는 두번째 해결방안이 보다 합리적이라고 할 수 있다.



의외로 관련 자료가 많지 않아서 인터넷을 한참 뒤져 해결책을 찾았네...... 


........누군가에게 도움이 되길 바라며



참고사이트 : 


https://forums.ni.com/t5/Multifunction-DAQ/How-to-flush-output-buffer-optionally-resize-it-and-write-to-it/td-p/3138640

http://www.hivmr.com/db/9px7m8jd7f7jzd81p9zaj1d7mmmjsc1m