Using Python (PyQt) to Interface with AI USB-6008 and DIO-8542 Devices

Posted by


Introduction:

In this tutorial, we will learn how to control National Instruments’ USB-6008 data acquisition device and DIO-8542 digital I/O module with Python using PyQt for building a GUI. The USB-6008 is a USB-based multifunction I/O device that provides analog input and output, digital I/O, and counter/timer functionality. The DIO-8542 is a digital I/O module that provides 64 high-current digital input/output lines. By combining these two devices, we can build a powerful and versatile data acquisition and control system.

Requirements:

Before proceeding with this tutorial, you will need the following hardware and software:

  1. National Instruments USB-6008 data acquisition device
  2. National Instruments DIO-8542 digital I/O module
  3. NI-DAQmx driver software for controlling the USB-6008 and DIO-8542
  4. Python 3.x installed on your computer
  5. PyQt5 library for building the GUI
  6. Basic knowledge of Python programming

Setting up the hardware:

First, we need to set up the hardware by connecting the USB-6008 and DIO-8542 to your computer. Connect the USB-6008 to a USB port on your computer and connect the DIO-8542 to the USB-6008 using a ribbon cable. Make sure to install the NI-DAQmx driver software for the devices to communicate with your computer.

Creating the GUI:

We will use PyQt to create a simple GUI for controlling the USB-6008 and DIO-8542. Here’s a step-by-step guide on how to create the GUI:

  1. Install PyQt5 library by running the following command in your terminal:

    pip install pyqt5
  2. Create a new Python file (e.g., main.py) and import the necessary PyQt modules:

    from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout
  3. Create a MainWindow class that inherits from QWidget and define the constructor method:

    class MainWindow(QWidget):
       def __init__(self):
           super().__init__()
           self.setWindowTitle('Control AI USB-6008 and DIO-8542')
  4. Add buttons for controlling the USB-6008 and DIO-8542:

    self.button_ai_config = QPushButton('Configure AI USB-6008')
    self.button_dio_config = QPushButton('Configure DIO-8542')
    self.layout = QVBoxLayout()
    self.layout.addWidget(self.button_ai_config)
    self.layout.addWidget(self.button_dio_config)
    self.setLayout(self.layout)
  5. Define slots for the button click events:

    def on_ai_config_clicked(self):
       # TODO: Add code to configure the USB-6008
    
    def on_dio_config_clicked(self):
       # TODO: Add code to configure the DIO-8542
  6. Connect the button click events to the slots:

    self.button_ai_config.clicked.connect(self.on_ai_config_clicked)
    self.button_dio_config.clicked.connect(self.on_dio_config_clicked)
  7. Create an instance of the QApplication class and the MainWindow class:
    app = QApplication([])
    window = MainWindow()
    window.show()
    app.exec()

Controlling the USB-6008 and DIO-8542:

Now that we have created the GUI, let’s add the code to control the USB-6008 and DIO-8542 devices. We will use the PyDAQmx library, which is a Python wrapper for the NI-DAQmx C library, to communicate with the devices.

  1. Install the PyDAQmx library by running the following command in your terminal:

    pip install PyDAQmx
  2. Import the PyDAQmx module in your Python file:

    from PyDAQmx import Task
  3. Define the functions to configure the USB-6008 and DIO-8542 devices:

    def configure_ai_usb6008():
       task = Task()
       task.CreateAIVoltageChan("Dev1/ai0", "", DAQmx_Val_Cfg_Default, -10.0, 10.0, DAQmx_Val_Volts, None)
       task.StartTask()
    
    def configure_dio_8542():
       task = Task()
       task.CreateDIChan("Dev1/port0/line0:63", "", DAQmx_Val_ChanForAllLines)
       task.StartTask()
  4. Add the code to configure the devices in the on_ai_config_clicked and on_dio_config_clicked functions:

    def on_ai_config_clicked(self):
       configure_ai_usb6008()
    
    def on_dio_config_clicked(self):
       configure_dio_8542()
  5. Add the code to read analog input and set digital output:

    def read_ai_usb6008():
       task = Task()
       task.CreateAIVoltageChan("Dev1/ai0", "", DAQmx_Val_Cfg_Default, -10.0, 10.0, DAQmx_Val_Volts, None)
       data = numpy.zeros((1,), dtype=numpy.float64)
       task.ReadAnalogF64(1, 10.0, DAQmx_Val_GroupByChannel, data, 1, None, None)
       task.StopTask()
       print('Analog input: ', data[0])
    
    def set_do_8542(value):
       task = Task()
       task.CreateDOChan("Dev1/port0/line0:63", "", DAQmx_Val_ChanForAllLines)
       data = numpy.zeros((64,), dtype=numpy.uint8)
       data[:] = value
       task.WriteDigitalLines(1, 1, 10.0, DAQmx_Val_GroupByChannel, data, None, None)
       task.StopTask()

Conclusion:

In this tutorial, we have learned how to control the National Instruments USB-6008 data acquisition device and DIO-8542 digital I/O module with Python using PyQt for building a GUI. By following the steps outlined in this tutorial, you can easily create a versatile data acquisition and control system for your projects. Experiment with different functions and features of the USB-6008 and DIO-8542 to unleash their full potential. Happy coding!

0 0 votes
Article Rating

Leave a Reply

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x