Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用NIDAQmx触发输出任务_Python_Nidaqmx_Daq Mx - Fatal编程技术网

Python 使用NIDAQmx触发输出任务

Python 使用NIDAQmx触发输出任务,python,nidaqmx,daq-mx,Python,Nidaqmx,Daq Mx,我在NIDAQ usb6002上执行我认为应该是一项非常简单的任务时遇到了问题:我在模拟输入通道上测量了一个低频正弦波,当它过零时,我想点亮一个LED 1秒。我试图使用nidaqmx-pythonapi,但还不能通过文档澄清我的一些基本问题 如果有人能提供关于我的设置的代码或基本逻辑的任何想法,那将非常有帮助 以下是我到目前为止所做的尝试。我从一些导入和频道的定义开始: import matplotlib.pyplot as plt from math import * import nidaq

我在NIDAQ usb6002上执行我认为应该是一项非常简单的任务时遇到了问题:我在模拟输入通道上测量了一个低频正弦波,当它过零时,我想点亮一个LED 1秒。我试图使用nidaqmx-pythonapi,但还不能通过文档澄清我的一些基本问题

如果有人能提供关于我的设置的代码或基本逻辑的任何想法,那将非常有帮助

以下是我到目前为止所做的尝试。我从一些导入和频道的定义开始:

import matplotlib.pyplot as plt
from math import *
import nidaqmx
from nidaqmx import *
from nidaqmx.constants import *
import time

V_PIN = "Dev1/ai6"
LED_PIN = "Dev1/ao0"
我了解任务和事情通常是如何工作的——我可以使用task.ai_通道方法读取和绘制给定采样率和采样数的信号,而不会遇到任何问题。但这里是我对如何执行“检测零位并触发输出”的最佳猜测:

这给出了cfg_anlg_边缘线的以下错误

DaqError: Requested value is not a supported value for this property. The property value may be invalid because it conflicts with another property.
Property: DAQmx_StartTrig_Type
Requested Value: DAQmx_Val_AnlgEdge
Possible Values: DAQmx_Val_DigEdge, DAQmx_Val_None
我不知道为什么这里不支持模拟输入通道。本文件第245页听起来应该是:

我确信代码也有其他问题。例如,似乎样本时钟操作比我上面写的要复杂得多,但我还没有找到任何东西来解释它在这种情况下是如何工作的

提前感谢您的帮助

对于NI,它是“RTFMs” 对NI设备进行编程时,通常需要两本手册

  • (用于编程部分)
  • (对于设备部件)
  • 您需要两者,因为NI DAQmx API支持NI生产的每台DAQ设备,但并非每台设备都具有相同的功能。“能力”不仅包括每种信道的数量,还包括定时和触发子系统以及内部信号路由。与一台设备一起运行的DAQmx应用程序不保证与另一台设备一起运行,因为该应用程序可能以第二台设备无法支持的方式使用API

    最后,在文档方面,任何给定的NI DAQ设备通常属于相关设备系列,这些系列也有一本名为《用户指南》的手册。这些用户指南充当API和设备规范之间的桥梁,帮助您了解设备如何响应命令。对于6002,家庭是

    NI 6002上模拟输出的模拟触发器 你的决心是正确的

    writeLED.triggers.start_trigger.cfg_anlg_edge_start_trig(V_PIN,trigger_level = 0)
    
    是可能的,只是不适用于USB 6002。该线路要求模拟输出子系统使用模拟边缘触发器,但6002的模拟输出子系统仅具有以下触发功能:

    • 软件
    • PFI0
    • PFI 1
    对于该设备,您唯一的选择是
    软件
    触发器,因为PFI线路是数字触发器,其触发电平指定在0.8 V和2.3 V之间

    更改Python程序以检测模拟输入流的过零,当它检测到过零时,调用它,然后执行AO任务

    停止-启动顺序的原因是:您希望为每个过零点亮LED,但任务无法重新启动,除非它已停止(通过API或通过完成其任务)或配置为重新触发。由于6002属于低成本系列,此硬件功能不可用,因此您必须使用API停止AO任务或等待AO生成完成,然后再重新启动LED脉冲


    软件触发不是实时的,在led亮起之前会有不确定的延迟。这取决于您的程序、接口、usb延迟、pc性能

    否则,您可以使用比较器(如lm393)触发数字输入(PFI0或PFI1)

    虽然它只是一个LED,但如果延迟在毫秒内变化,它可能并不重要

    writeLED.triggers.start_trigger.cfg_anlg_edge_start_trig(V_PIN,trigger_level = 0)