티스토리 뷰

안녕하세요. 구스입니다


오늘은 NI 9401과 Compact DAQ 샤시를 이용할 때 발생할 수 있는 문제점에 대해서 이야기를 해볼께요.


NI 9401은 디지털입력과 출력 그리고 카운터를 이용한 펄스 트레인(Pulse Train) 출력 및 Encoder 입력 신호를 처리할 수 있는 모듈입니다. 


이는 NI 9401 핀맵을 보면 확인할 수 있는데요.


P0.X라고 되어 있는 부분이 디지털 입출력을, PFI n이라고 되어 있는 부분이 엔코더 혹은 카운터 신호 생성이 가능한 부분입니다. 핀맵을 보면 알겠지만 DIO, Counter, Encoder 모두 같은 IO를 사용하고 있습니다.




하지만 디지털입력과 출력을 동시에 사용하거나, 입력과 카운터 출력을 동시에 사용을 하게 되면 아래와 같이 -201133 에러가 발생을 합니다. 


-201133 에러는 입력과 출력을 동시에 사용하고자 하는데, 이미 다른 태스크에서 입력 혹은 출력을 시작해버려서 장비 리소스에 대한 사용이 불가하다는 의미입니다. 



그러면 NI 9401을 이용하여 서로 다른 2개의 작업을 할 수는 없을까요?

그렇지는 않습니다. 바로 DAQmx 태스크 컨트롤(DAQmx Control Task.vi) vi를 이용하면 사용을 할 수 있습니다. 


DAQmx 태스크 컨트롤 vi는 숨어있어서 찾기가 힘듭니다. 아래의 그림을 보시면 어디있는지 알 수 있는데요. DAQmx >> DAQmx 고급 >> DAQmx 태스크 컨트롤로 찾을 수 있습니다. 




아래의 코드를 보시면 이해하기가 빠를 것 같습니다. 



하나의 모듈 9401에서 DI, DO, Counter를 사용하는 예제입니다. 먼저 실행이 되는 태스크를 제외하고, 나머지 태스크는 DAQmx 태스트 컨트롤 VI를 통해서 Reserve 상태로 만듭니다.


예약의 부분을 보시면 태스크에 필요한 하드웨어 리소스 예약을 하는 함수입니다. 



예로 들어 P0.0을 입력, P0.1을 출력, PFI7(P0.7)을 카운터 출력으로 사용한다고 생각해봅시다.


이런 경우 P0.0 태스크를 시작하기 이전에 P0.1과 PFI7(P0.7)을 다른 태스크에서 사용한다 예약을 하게 됩니다. 


그리고 나서 다른 두개의 태스크를 시작하게 되면 이미 리소스가 예약이 되어 P0.0에서 리소스를 이용하지 않기 때문에 -201133 에러가 해결이 되는 것이죠.



DAQ 장비와 관련된 또 다른 꿀팁들은 아래의 링크를 참고하세요.



이 글에서는 하나의 NI 9401에서 DIO, Counter 동시 사용법 (Error -201133 해결 방안)에 대해서 알아보았습니다.

그럼 이만 줄이겠습니다.


이 글이 도움이 되셨으면 아래의 하트를 눌러주세요.


댓글