[英]Analog output from USB6009 using python and NIDAQmx base on Mac OSX
所有,我都尝试使用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
您的问题涉及两个问题:
DAQmxBaseCfgSampClkTiming
返回错误? rjb3写道:
当我尝试配置时钟时,该函数引发错误。 当我没有错误时,输出端也不会产生电压。
您的程序收到错误,因为USB 600x设备不支持硬件定时的模拟输出[1]:
NI USB-6008 / 6009具有两个独立的模拟输出通道,可产生0至5 V的输出。模拟输出通道的所有更新均由软件定时。 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
DAQmxBaseWriteAnalogF64
的调用中将autostart
参数设置为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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.