当前位置:   article > 正文

使用 Python 的 DAQ I/O 模块(三)_nidaqmx-python

nidaqmx-python

本文将举例如何控制DAQ设备的Python代码。使用 DAQ 设备时,通常会用到4个操作。
1. 模拟输出(写) - AO
2. 模拟输入(读取) - AI
3.  数字输出(写) - DO
4. 数字输入(读取) - DI
下面将分别展示一些基本示例。这些示例可以帮助解决如下的应用:从连接到 DAQ 设备的一个或多个传感器中(如温度传感器)读取数值。或者创建一个控制系统,读取过程值,然后将计算出的控制信号值(例如使用 PID 控制器)写回到 DAQ 设备和过程中。

1. 模拟输出(写) - AO

实例中运用USB6008,需要注意的是它只能输出0到5V之间的电压信号。USB-6008 仅有 2 个模拟输出通道:AO0 和 AO1。

在运行下面代码时,可以使用万用表检查程序输出的数值是否正确。

  1. import nidaqmx
  2. task = nidaqmx.Task()
  3. task.ao_channels.add_ao_voltage_chan('Dev1/ao0','mychannel',0,5)
  4. task.start()
  5. value = 2
  6. task.write(value)
  7. task.stop()
  8. task.close()

2. 模拟输入(读取) - AI

USB-6008 有 8 个 AI 参考单端 (RSE) 模拟输入通道,或 4 个 AI 差分模拟输入通道。

在运行下面代码时,可以读取到端口AI0的输入电压值。

  1. import nidaqmx
  2. task = nidaqmx.Task()
  3. task.ai_channels.add_ai_voltage_chan("Dev1/ai0")
  4. task.start()
  5. value = task.read()
  6. print(value)
  7. task.stop
  8. task.close()

模拟输入有着差分(比如AI 0+ AI 0-)和单端 RSE (比如AI0 GND)的区别。接下来将从代码上区分他们。

下面代码是单端模拟输入(RSE)的配置:

  1. import nidaqmx
  2. from nidaqmx.constants import (TerminalConfiguration)
  3. task = nidaqmx.Task()
  4. task.ai_channels.add_ai_voltage_chan("Dev1/ai0",
  5. terminal_config=TerminalConfiguration.RSE)
  6. task.start()
  7. value = task.read()
  8. print(value)
  9. task.stop()
  10. task.close()

而差分模拟输入配置如下:

  1. import nidaqmx
  2. from nidaqmx.constants import (TerminalConfiguration)
  3. task = nidaqmx.Task()
  4. task.ai_channels.add_ai_voltage_chan("Dev1/ai0",
  5. terminal_config=TerminalConfiguration.DIFFERENTIAL)
  6. task.start()
  7. value = task.read()
  8. print(value)
  9. task.stop()
  10. task.close()

3.  数字输出(写) - DO

USB6008 有着12 个数字通道 ,端口 0 数字 I/O 通道 0 至 7 和 端口 1 数字 I/O 通道 0 至 3。可以将每个信号单独配置为输入或输出。

下面是写数字信号的代码:

  1. import nidaqmx
  2. task = nidaqmx.Task()
  3. task.do_channels.add_do_chan("Dev1/port0/line0")
  4. task.start()
  5. value = True
  6. task.write(value)
  7. task.stop
  8. task.close()

因为写入的为True,所以用万用表测得P0.0处电压为5V。

如果是写多个数字信号,如下代码可以参考:

  1. import nidaqmx
  2. import time
  3. from nidaqmx.constants import (LineGrouping)
  4. task = nidaqmx.Task()
  5. task.do_channels.add_do_chan("Dev1/port0/line0:7","MyDOChannels",
  6. line_grouping=LineGrouping.CHAN_PER_LINE)
  7. task.start()
  8. data = [True,False,True,True,False,True,False,True]
  9. task.write(data)
  10. time.sleep(5)
  11. data[1] = True
  12. task.write(data)
  13. task.stop
  14. task.close()

4. 数字输入(读取) - DI

数字信号的读取可以参考下面代码:

  1. import nidaqmx
  2. task = nidaqmx.Task()
  3. task.di_channels.add_di_chan("Dev1/port0/line1")
  4. task.start()
  5. value = task.read()
  6. print(value)
  7. task.stop
  8. task.close()

运行后将读取端口P0.1的逻辑值。

最后一个例子,是同一端口数字信号的写和读。

  1. import nidaqmx
  2. task = nidaqmx.Task()
  3. task.do_channels.add_do_chan("Dev1/port0/line0")
  4. task.start()
  5. value = False #也可改变为True测试
  6. task.write(value)
  7. task.stop
  8. task.close()
  9. task = nidaqmx.Task()
  10. task.di_channels.add_di_chan("Dev1/port0/line1")
  11. task.start()
  12. value = task.read()
  13. print(value)
  14. task.stop
  15. task.close()

Python 控制 DAQ的内容就这些了,完结。

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号