2014-01-21 4 views
1

모두 Python과 DAQmx Base를 사용하여 아날로그 입력을 기록하고 USB 6009 장치에서 아날로그 출력을 생성하려고합니다. 나는 래퍼를 사용하여 AI를 얻을 수 있었지만 AO와 어려움을 겪고있다. 작업 생성 등을 처리하는 기본 클래스 NITask가 있습니다. 내가 호출하는 클래스는 아래에 있습니다. 시계를 구성하려고 할 때이 함수는 오류를 발생시킵니다. 내가하지 않으면 오류가 없지만 출력에 전압이 생성되지 않습니다. 어떤 도움을 주시면 감사하겠습니다.Mac OSX에서 Python과 NIDAQmx 기반을 사용하는 USB6009의 아날로그 출력

감사합니다.

class AOTask(NITask): 
    def __init__(self, min=0.0, max=5.0, 
       channels=["Dev1/ao0"], 
       timeout=10.0): 
     NITask.__init__(self) 

     self.min = min 
     self.max = max 
     self.channels = channels 
     self.timeout = timeout 
     self.clockSource ="OnboardClock" 
     sampleRate=100 
     self.sampleRate = 100 
     self.timeout = timeout 
     self.samplesPerChan = 1000 
     self.numChan = chanNumber(channels) 

     if self.numChan is None: 
      raise ValueError("Channel specification is invalid") 

     chan = ", ".join(self.channels) 


     self.CHK(self.nidaq.DAQmxBaseCreateTask("",ctypes.byref(self.taskHandle))) 
     self.CHK(self.nidaq.DAQmxBaseCreateAOVoltageChan(self.taskHandle, "Dev1/ao0", "", float64(self.min), float64(self.max), DAQmx_Val_Volts, None)) 
     self.CHK(self.nidaq.DAQmxBaseCfgSampClkTiming(self.taskHandle, "", float64(self.sampleRate), DAQmx_Val_Rising, DAQmx_Val_FiniteSamps, uInt64(self.samplesPerChan))) 

    """Data needs to be of type ndarray""" 
    def write(self, data): 
     nWritten = int32() 
     # data = numpy.float64(3.25) 
     data = data.astype(numpy.float64) 
     self.CHK(self.nidaq.DAQmxBaseWriteAnalogF64(self.taskHandle, 
      int32(1000), 0,float64(-1),DAQmx_Val_GroupByChannel, 
      data.ctypes.data,None,None)) 
     # if nWritten.value != self.numChan: 
     # print "Expected to write %d samples!" % self.numChan 
+0

찾은 래퍼에 대한 링크를 게시 할 수 있습니까? 비슷한 환경에서 일하는 다른 사람들에게 도움이 될 것입니다. –

답변

1

귀하의 질문은 두 가지 문제를 다룹니다

  1. DAQmxBaseCfgSampClkTiming 반환 오류합니까?
  2. 해당 기능을 사용하지 않으면 왜 출력이 생성되지 않습니까?

    rjb3 소프트웨어 타이밍 대

1. 하드웨어 썼다 : 나는 시계를 구성 할 때

기능에 오류가 발생합니다. 내가하지 않으면 오류가 없지만 출력에 전압이 생성되지 않습니다. 의 USB 600X 장치는 하드웨어 타이밍에 아날로그 출력 [1]를 지원하지 않기 때문에

내 프로그램 오류를 수신한다 :

하기 NI USB-6008/6009는 두 개의 독립적 인 아날로그 갖는다 출력 채널은 0 ~ 5V의 출력을 생성 할 수 있습니다. 아날로그 출력 채널의 모든 업데이트는 소프트웨어 타이밍에 의한 것입니다. GND는 아날로그 출력 채널에 대한 접지 참조 신호입니다.

"소프트웨어 타이밍은"샘플을 DAQmxBaseWriteAnalogF64가 호출 될 때마다 프로그램에 의한 수요에 기록을 의미합니다. 샘플 배열이 기입 해지는 경우, 그 배열은 1 회에 1 개씩 기입 해집니다. DAQmx 도움말 [2]에서 NI가 타이밍을 정의하는 방법에 대해 더 많이 배울 수 있습니다. 이 문서는 DAQmx 용이지만, DAQmx 베이스에는 동작이 해당 드라이버가 아닌 디바이스에 의해 정의되므로 동일한 개념이 적용됩니다. 차이점은 드라이버가 하드웨어의 기능을 구현하는 정도입니다. DAQmx Base는 모든 것을 구현하지만, DAQmx Base는 작은 선택 부분 집합입니다.

2. 소프트웨어 시간 초과가

rjb3 쓴 없음 출력 :

내가 거기에 오류 없지만도하지 않는 출력에서 ​​발생하는 전압이있다.

나는 DAQmx를 기본 API에 대한 파이썬 바인딩에 익숙하지 않은,하지만 나는 두 가지를 추천 할 수 있습니다 :

  1. 설치된 genVoltage.c C 예제를 사용하여 시도하고 당신이 볼 수 있는지 확인 AO 채널의 전압.
    • 예는 여기에 설치됩니다
    • 당신이 출력을 볼 경우 /Applications/National Instruments/NI-DAQmx Base/examples, 당신은 장치 드라이버가 올바르게 작동하는지 확인했습니다, 그리고 버그는 파이썬 파일 가능성이있다.
    • 출력이 표시되지 않으면 장치 또는 드라이버에 문제가 있으며 가장 유용한 문제 해결 방법은 http://forums.ni.com의 NI 토론 포럼입니다.
  2. 시도 genVoltage.c 포팅 파이썬 바인딩을 사용. 언뜻보기에, 나는 시도 할 것이다 :
    • 사용 DAQmxBaseStartTask을 true로 DAQmxBaseWriteAnalogF64로 통화에서 autostart 매개 변수를 설정 DAQmxBaseWriteAnalogF64
    • 또는 전에.

참조

[1] NI의 USB-6008/6009 사용자 가이드 및 스펙 :: 아날로그 출력 (16 페이지) http://digital.ni.com/manuals.nsf/websearch/CE26701AA052E1F0862579AD0053BE19

[2] 타이밍
, 하드웨어 대 소프트웨어

http://zone.ni.com/reference/en-XX/help/370466V-01/TOC11.htm