使用 python 导出 PXI 6251 的采样时钟

Export sampling clock of PXI 6251 using python

我想同步 PXI 1000 机箱上的两个 PXI 6251,以同时采集 32 个模拟输入。 我在 nidaqmx 库中使用 python。 为此,我想在数字输出上导出一张卡的采样时钟,将其路由到另一张卡的数字输入并将其用作外部时钟。 这是一个好的策略吗?

我试过下面的代码。模拟输入记录有效,但我在终端 2.7 (PFI15) 上看不到时钟

import nidaqmx
import time

with nidaqmx.Task() as taskAI, nidaqmx.Task() as taskClkExport:
    acquisition_time = 10
    rateAI=50000
    t=time.localtime()
    file_path_2 = r'C:/Users/laboratorium/Documents/remi/{}_{}_{}_{}_{}_{}_slot2'.format(t.tm_year, t.tm_mon,t.tm_mday,t.tm_hour,t.tm_min,t.tm_sec)

    # configure analog input task
    for i in range(16):
        taskAI.ai_channels.add_ai_voltage_chan("PXI1Slot2/ai{}".format(i))
    taskAI.in_stream.configure_logging(file_path_2,
                                  nidaqmx.constants.LoggingMode.LOG,
                                  'myGroupName',
                                  nidaqmx.constants.LoggingOperation.OPEN_OR_CREATE)
    taskAI.timing.cfg_samp_clk_timing(rate=rateAI,
                                 sample_mode=nidaqmx.constants.AcquisitionType.CONTINUOUS,
                                 samps_per_chan=2048)

    # configure clock exporting task
    taskClkExport.do_channels.add_do_chan("PXI1Slot2/port2/line7")
    taskClkExport.export_signals.export_signal(signal_id=nidaqmx.constants.Signal.SAMPLE_CLOCK,
                                           output_terminal="PXI1Slot2/port2/line7")

    print('start')
    taskClkExport.start()
    taskAI.start()

    print('running...')
    time.sleep(10)

    print('stop')
    taskAI.stop()
    taskClkExport.stop()

我检查了 MAX 设备路由,任何 PFI 都适合采样时钟的直接路由。 我可以在 MAX 中反转 DO 任务中的行。

有人知道解决方案吗?

我无法导出此设备上的采样时钟, 我找到的解决方案是使用相同的主时钟,并将第一张卡的启动触发器用于第二张卡。 我开始第二个(等待触发)然后第一个结束。

        self.task2.timing.ref_clk_src = "PXI_Clk10"
        self.task2.timing.ref_clk_rate = 10000000
        self.task2.timing.cfg_samp_clk_timing(rate=rate2,
            sample_mode=nidaqmx.constants.AcquisitionType.CONTINUOUS,
            samps_per_chan=2048)
        self.task3.timing.ref_clk_src = "PXI_Clk10"
        self.task3.timing.ref_clk_rate = 10000000
        self.task3.timing.cfg_samp_clk_timing(rate=rate3,
            sample_mode=nidaqmx.constants.AcquisitionType.CONTINUOUS,
            samps_per_chan=2048)

        self.task2.control(TaskMode.TASK_COMMIT)
        self.task3.triggers.start_trigger.cfg_dig_edge_start_trig(
            "/PXI1Slot2/ai/StartTrigger")

        self.task3.start()
        self.task2.start()