全部, 我正在尝试使用Python和DAQmx Base来记录模拟输入并从USB 6009设备生成模拟输出。我一直在使用我发现的包装,并且能够获得AI,但我正在与AO挣扎。 有一个基类NITask来处理任务生成等。我正在调用的类在下面。尝试配置时钟时,该函数会引发错误。当我不这样做时没有错误,但输出上也没有电压产生。任何帮助,将不胜感激。
谢谢!
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)
您的问题涉及两个问题:
DAQmxBaseCfgSampClkTiming
会返回错误?rjb3写道:
当我尝试配置时钟时,该函数会抛出错误。当我不这样做时,没有错误,但输出端也没有产生电压。
您的程序收到错误,因为USB 600x设备不支持硬件定时模拟输出[1]:
NI USB-6008/6009有两个独立的模拟输出通道,可以产生0到5V的输出。模拟输出通道的所有更新都是软件定时的。 GND是模拟输出通道的接地参考信号。
“软件定时”表示只要调用DAQmxBaseWriteAnalogF64
,程序就会按需编写样本。如果写入一个样本数组,则一次写入一个数组。您可以从DAQmx帮助[2]了解NI如何定义时序的更多信息。虽然该文档适用于DAQmx,但相同的概念适用于DAQmx Base ,因为行为是由设备而不是其驱动程序定义的。不同之处在于驱动程序实现了多少硬件功能 - DAQmx实现了所有功能,而DAQmx Base是一个小型选择子集。
rjb3写道:
当我没有时,没有错误,但输出上也没有电压产生。
我不熟悉DAQmx Base API的Python绑定,但我可以推荐两件事:
genVoltage.c
C示例并确认您可以在ao频道上看到电压。
/Applications/National Instruments/NI-DAQmx Base/examples
genVoltage.c
。乍一看,我会尝试:
DAQmxBaseStartTask
DAQmxBaseWriteAnalogF64
autostart
的调用中的DAQmxBaseWriteAnalogF64
参数设置为true。 [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