Q&A 게시판

cancel
Showing results for 
Search instead for 
Did you mean: 

USB-6361로 AI, DI 동시에 DAQ

Solved!
Go to solution
Highlighted
안녕하세요,
AI와 DI 동시(샘플링에 따른 시간차 있어도 됨)에 DAQ 하는 방법이 궁금해 질문 올립니다.
환경은 USB-6361, python 3.7.6, windows 10, NIMAX 19.6 입니다.
꼭 파이썬이 아니어도 텍스트 코딩하는 아이디어가 있으시면 알려주심 감사하겠습니다.
 
아래와 같이 코딩을 해 보았는데, DI는 0만 나오는 상황입니다.
sampleRate은 1M 입니다.
 
nidaq.DAQmxCreateAIVoltageChan(AItaskHandle,b"Dev%d/ai0,Dev%d/ai2" %(num,num),"",DAQmx_Val_Diff,float64(-5.0),float64(5.0),DAQmx_Val_Volts,None)
nidaq.DAQmxCreateDIChan(DItaskHandle,b"Dev%d/PFI0,Dev%d/PFI1" %(num,num),"",DAQmx_Val_ChanPerLine)
nidaq.DAQmxCfgSampClkTiming(AItaskHandle,"",float64(sampleRate),DAQmx_Val_Rising,DAQmx_Val_ContSamps,uInt64(1000000))
nidaq.DAQmxCfgSampClkTiming(DItaskHandle,"Dev%d/ai/SampleClock" %num,float64(sampleRate),DAQmx_Val_Rising,DAQmx_Val_ContSamps,uInt64(1000000))
 
nidaq.DAQmxStartTask( DItaskHandle )
nidaq.DAQmxStartTask( AItaskHandle )
 
while True:
  readAI = uInt32()
  readDI = uInt32()
  bytesPerSamps = uInt32()
    nidaq.DAQmxReadAnalogF64(AItaskHandle,samples_per_chan,float64(-1),DAQmx_Val_GroupByScanNumber,AIdata.ctypes.data,Length,ctypes.byref(readAI),None)
 # timeout은 둘 다 -1, 0, 1 등의 조합으로 바꿔보아도 DI는 0만 나옵니다. nidaq.DAQmxReadDigitalLines(DItaskHandle,samples_per_chan,float64(0),DAQmx_Val_GroupByScanNumber,DIdata.ctypes.data,Length,ctypes.byref(readDI),ctypes.byref(bytesPerSamps),None)
 
혹시 추가적인 정보가 필요하시면 알려주세요.
감사합니다.
0 Kudos
Message 1 of 3
(228 Views)
Highlighted
nidaq.DAQmxCfgSampClkTiming(DItaskHandle,b"Dev%d/ai/sampleClock",float64(sampleRate),DAQmx_Val_Rising,DAQmx_Val_ContSamps,uInt64(1000000))
부분은 comment 처리하면 DI도 되기는 합니다.
 
다만
ReadDigitalLines의 timeout을 0으로 하면 놓치는 데이터가 많은 것인지 띄엄띄엄 나오고,
-1로 하면 AI는 제쳐두고 한없이 DI만 읽는 것인지 AI는 한 번 읽다 말고 DI만 계속 읽는 것처럼 나옵니다.
(ReadAnalogF64의 timeout은 -1)
 
DI의 clock freq를 조절해 주거나, 버퍼 사이즈를 조절해야 하나요?
만약 그렇다면 어떻게 조절이 가능할까요?
 
 
 
0 Kudos
Message 2 of 3
(199 Views)
Highlighted
Solution
Accepted by topic author Serenade
nidaq.DAQmxCfgSampClkTiming(DItaskHandle,b"/Dev%d/ai/sampleClock" %num,float64(sampleRate),DAQmx_Val_Rising,DAQmx_Val_ContSamps,uInt64(1000000))
처럼 두 번째 argument 앞에 '/'를 붙이면 되네요. /Dev%d/ai/sampleClock
(윗 글에 %num을 빼고 썼습니다.)
Message 3 of 3
(173 Views)