Аналоговый выход с USB6009 с использованием Python и базы NIDAQmx на 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

person rjb3    schedule 21.01.2014    source источник
comment
Не могли бы вы опубликовать ссылку на обертку, которую вы нашли? Это было бы полезно для других, работающих с подобными средами.   -  person Erik Kastman    schedule 17.05.2016


Ответы (1)


Ваш вопрос касается двух проблем:

  1. Почему DAQmxBaseCfgSampClkTiming возвращает ошибку?
  2. Без использования этой функции, почему не генерируется никакого вывода?

1. Аппаратная и программная синхронизация

rjb3 написал:

Функция выдает ошибку при попытке настроить часы. Когда я этого не делаю, ошибки нет, но на выходе нет напряжения.

Ваша программа получает сообщение об ошибке, поскольку устройства USB 600x не поддерживают аналоговый выход с аппаратной синхронизацией [1]:

NI USB-6008/6009 имеет два независимых аналоговых выходных канала, которые могут генерировать выходные сигналы от 0 до 5 В. Все обновления аналоговых выходных каналов программно синхронизированы. GND – это сигнал заземления для аналоговых выходных каналов.

«Программно синхронизированный» означает, что сэмпл записывается программой по требованию всякий раз, когда вызывается DAQmxBaseWriteAnalogF64. Если записывается массив семплов, то этот массив записывается по одному. Вы можете узнать больше о том, как NI определяет синхронизацию, из справки DAQmx [2]. Хотя этот документ предназначен для DAQmx, те же принципы применимы и к DAQmx Base, поскольку поведение определяется устройствами, а не их драйверами. Различия заключаются в том, какая часть аппаратных возможностей реализуется драйвером — DAQmx реализует все, в то время как DAQmx Base представляет собой небольшое избранное подмножество.

2. Нет вывода, когда программная синхронизация

rjb3 написал:

Когда я этого не делаю, ошибки нет, но на выходе нет напряжения.

Я не знаком с привязками Python для DAQmx Base API, но могу порекомендовать две вещи:

  1. Try using the installed genVoltage.c C example and confirm that you can see voltage on the ao channel.
    • Examples are installed here: /Applications/National Instruments/NI-DAQmx Base/examples
    • Если вы видите вывод, вы подтверждаете, что устройство и драйвер работают правильно и что ошибка, скорее всего, связана с файлом python.
    • Если вы не видите выходных данных, значит проблема в устройстве или драйвере, и лучшее место, где можно получить помощь по устранению неполадок, — это дискуссионные форумы NI по адресу http://forums.ni.com.
  2. Try porting genVoltage.c using the python bindings. At first glance, I would try:
    • Use DAQmxBaseStartTask before 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

person Joe Friedrichsen    schedule 05.10.2014