赞
踩
本文将举例如何控制DAQ设备的Python代码。使用 DAQ 设备时,通常会用到4个操作。
1. 模拟输出(写) - AO
2. 模拟输入(读取) - AI
3. 数字输出(写) - DO
4. 数字输入(读取) - DI
下面将分别展示一些基本示例。这些示例可以帮助解决如下的应用:从连接到 DAQ 设备的一个或多个传感器中(如温度传感器)读取数值。或者创建一个控制系统,读取过程值,然后将计算出的控制信号值(例如使用 PID 控制器)写回到 DAQ 设备和过程中。
实例中运用USB6008,需要注意的是它只能输出0到5V之间的电压信号。USB-6008 仅有 2 个模拟输出通道:AO0 和 AO1。
在运行下面代码时,可以使用万用表检查程序输出的数值是否正确。
- import nidaqmx
- task = nidaqmx.Task()
- task.ao_channels.add_ao_voltage_chan('Dev1/ao0','mychannel',0,5)
- task.start()
- value = 2
- task.write(value)
- task.stop()
- task.close()
USB-6008 有 8 个 AI 参考单端 (RSE) 模拟输入通道,或 4 个 AI 差分模拟输入通道。
在运行下面代码时,可以读取到端口AI0的输入电压值。
- import nidaqmx
- task = nidaqmx.Task()
- task.ai_channels.add_ai_voltage_chan("Dev1/ai0")
- task.start()
- value = task.read()
- print(value)
- task.stop
- task.close()
模拟输入有着差分(比如AI 0+ AI 0-)和单端 RSE (比如AI0 GND)的区别。接下来将从代码上区分他们。
下面代码是单端模拟输入(RSE)的配置:
- import nidaqmx
- from nidaqmx.constants import (TerminalConfiguration)
- task = nidaqmx.Task()
- task.ai_channels.add_ai_voltage_chan("Dev1/ai0",
- terminal_config=TerminalConfiguration.RSE)
- task.start()
- value = task.read()
- print(value)
- task.stop()
- task.close()
而差分模拟输入配置如下:
- import nidaqmx
- from nidaqmx.constants import (TerminalConfiguration)
- task = nidaqmx.Task()
- task.ai_channels.add_ai_voltage_chan("Dev1/ai0",
- terminal_config=TerminalConfiguration.DIFFERENTIAL)
- task.start()
- value = task.read()
- print(value)
- task.stop()
- task.close()
USB6008 有着12 个数字通道 ,端口 0 数字 I/O 通道 0 至 7 和 端口 1 数字 I/O 通道 0 至 3。可以将每个信号单独配置为输入或输出。
下面是写数字信号的代码:
- import nidaqmx
- task = nidaqmx.Task()
- task.do_channels.add_do_chan("Dev1/port0/line0")
- task.start()
- value = True
- task.write(value)
- task.stop
- task.close()
因为写入的为True,所以用万用表测得P0.0处电压为5V。
如果是写多个数字信号,如下代码可以参考:
- import nidaqmx
- import time
- from nidaqmx.constants import (LineGrouping)
- task = nidaqmx.Task()
- task.do_channels.add_do_chan("Dev1/port0/line0:7","MyDOChannels",
- line_grouping=LineGrouping.CHAN_PER_LINE)
- task.start()
- data = [True,False,True,True,False,True,False,True]
- task.write(data)
- time.sleep(5)
- data[1] = True
- task.write(data)
- task.stop
- task.close()
数字信号的读取可以参考下面代码:
- import nidaqmx
- task = nidaqmx.Task()
- task.di_channels.add_di_chan("Dev1/port0/line1")
- task.start()
- value = task.read()
- print(value)
- task.stop
- task.close()
运行后将读取端口P0.1的逻辑值。
最后一个例子,是同一端口数字信号的写和读。
- import nidaqmx
- task = nidaqmx.Task()
- task.do_channels.add_do_chan("Dev1/port0/line0")
- task.start()
- value = False #也可改变为True测试
- task.write(value)
- task.stop
- task.close()
- task = nidaqmx.Task()
- task.di_channels.add_di_chan("Dev1/port0/line1")
- task.start()
- value = task.read()
- print(value)
- task.stop
- task.close()
Python 控制 DAQ的内容就这些了,完结。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。