如何在Python上通过X系列数据采集卡实现带触发的counter任务

更新 Feb 1, 2024

环境

硬件

  • PXIe-6368

程式语言

  • Python

这篇文章详细介绍了如何在Python上通过X系系列数据采集卡实现带触发的counter任务。在完成连线和运行程序后,counter将会开始对接入信号进行上升沿计数任务并显示计数结果。计数结果在trigger被触发前将一直为0,trigger被触发后,计数结果开始正常显示。

如果您希望在Python上通过X Series DAQ数采卡实现一个简单的counter任务,且希望此任务由trigger触发,请参考以下步骤:
1. 硬件连线
以PXIe-6368为例,若您想使用Gate 0实现无缓冲边沿计数任务,则需要将暂停触发接到Gate 0的Gate接线端,将待测信号接到Gate 0的源输入端。
image.png
具体PXIe-6368的端口请参照下图:
image.png
值得一提的是,对于X系列数采卡,counter支持三种触发选项,分别是arm start trigger, start trigger和pasue trigger。这三种trigger适用场景各不相同,在本例子中,我们采用的是pause trigger。关于这三种触发选项的具体介绍请参照X Series User Manual 中的Counter Triggering章节。

2. 代码编写
您需要先安装nidaqmx package来在Python中使用相关的驱动。
以PXIe-6368为例,请您参照下图代码。其中关于配置上升沿/下降沿,pause trigger类型和工作方式的方法和参数,请您参照NI-DAQmx Python Documentation
"""Example of CI edge count operation."""
import pprint
import time

import nidaqmx

pp = pprint.PrettyPrinter(indent=4)


with nidaqmx.Task() as task:
    task.ci_channels.add_ci_count_edges_chan("/6368/ctr0")

# Configure the count edges term (source terminal)
    task.ci_channels.count_edges_term = "/6368/PFI8"  # 这里改成您要测的信号源接口
# Configure the active edge (rising or falling edge)
    task.ci_channels.count_edges_active_edge = nidaqmx.constants.Edge(10280)  # 上升沿测

# Configure the pause trigger
    task.triggers.pause_trigger.trig_type = nidaqmx.constants.TriggerType(10152) #选择pause trigger中的digital level类型
    #根据您的描述您要在高电平触发采集,低电平停止,这个trigger接在Gate,您根据您需求改这个源
    task.triggers.pause_trigger.dig_lvl_src = "/6368/PFI9" 
    #这里选择在trigger source为低的时候停止
    task.triggers.pause_trigger.dig_lvl_when = nidaqmx.constants.Level(10214)
    
    task.start()

    n=0
    while True:
        n=n+1
        print(str(n)+" : 1 Channel 1 Sample Read: ")
        data = task.read()
        pp.pprint(data)
        time.sleep (1)

    # print("1 Channel N Samples Read: ")
    # data = task.read(number_of_samples_per_channel=8)
    # pp.pprint(data)

在您完成硬件连线和代码编写后,您即可开始任务。当您运行Python程序后,程序即会以1s时间间隔向您报告counter计数。假定pause trigger初始状态为低电平,则您能看到counter计数始终为0。当您将pause trigger调至高电平,若待测信号有电平变化,您即可看到对应程序counter计数的变化。