The DAQmx object ================ You will find its definition in the file ``hardware/national_instruments/daqmx.py``. This is building block for this plugin, this is the object that you will use as a controller inside your custom plugin. The ``DAQmx`` object has an attribute ``task``, which corresponds to a Task for the NIDAQmx driver. Each ``DAQmx`` can only handle a single task, but a task can be executed on several channels. You will find in the same file the definition of many different Channel classes, which are all the channel types that are available physically on such NI devices. The list of these channels is: - AChannel (Analog Channel) - AIChannel: Analog Input - AIThermoChannel: Specific analog input for thermocouples - AOChannel: Analog Output - Counter (Regular edge counter) - ClockCounter: a counter that you use as a clock - SemiPeriodCounter: another specific type of counter which might be useful to count between state transitions of a signal - DigitalChannel - DOChannel: Digital Output - DIChannel: Digital Input To use the ``DAQmx``, you therefore need to create Channels of the type you need, specifying the appropriate ``ClockSettings`` and ``TriggerSettings`` (these are also defined in the same file). Then, you pass these channels to the ``update_task`` method of the ``DAQmx``. Be careful that a task can only handle one channel type, if you need several, you need several ``DAQmx``. The ``update_task`` method sets everything up, but if you are using channels as trigger or clock for other channels, you will need to connects them yourself after calling ``update_task``. Once the task is properly set up, you can start it with the method ``start()`` of the ``DAQmx`` object. Several convenient methods of the ``DAQmx`` object are available to read or write data, depending on the task you are performing. They have self-explaining names: - ``writeAnalog(Nsamples, Nchannels, values, autostart=False)`` - ``readAnalog(Nchannels)`` - ``readCounter(Nchannels, counting_time=10., read_function='Ex')`` - ``readDigital(Nchannels)`` - ``writeDigital(Nchannes, values, autostart=False)`` You can also stop the task with the ``stop()`` method.