Python nidaqmx合作频道可以';不要写样本

Python nidaqmx合作频道可以';不要写样本,python,nidaqmx,Python,Nidaqmx,我尝试使用Ni Daq来产生脉冲。 nidaqmx提供的示例如下所示: import nidaqmx from nidaqmx.types import CtrTime with nidaqmx.Task() as task: task.co_channels.add_co_pulse_chan_time("Dev1/ctr0") sample = CtrTime(high_time=0.001, low_time=0.002) print('1 Chan

我尝试使用Ni Daq来产生脉冲。 nidaqmx提供的示例如下所示:

    import nidaqmx
from nidaqmx.types import CtrTime


with nidaqmx.Task() as task:
    task.co_channels.add_co_pulse_chan_time("Dev1/ctr0")

    sample = CtrTime(high_time=0.001, low_time=0.002)

    print('1 Channel 1 Sample Write: ')
    print(task.write(sample))
但在我运行此脚本后,它会生成一些错误,如下所示:

raise DaqError(错误缓冲区值解码(“utf-8”),错误代码)DaqError: 任务未缓冲或没有通道。如果任务是 未缓冲,请使用此函数的标量版本。如果任务已完成 没有频道,请向任务添加一个频道。任务名称:\u未命名任务

状态代码:-201395

是什么导致了这个问题?如何解决这个问题


多谢各位

NI DAQmx的Python示例针对NI的X系列设备(63xx型号)进行了调优。62xx型号是M系列设备,它们的计数器对如何编程更加挑剔。简而言之:脉冲规格必须在创建通道时给出,以后不能给出。X系列设备没有此限制

配置脉冲的形状 而不是

task.co_channels.add_co_pulse_chan_time("Dev1/ctr0")
试一试

而且,由于您以这种方式指定了脉冲,因此不再需要将
write()
写入通道。当您想启动脉冲序列时,只需使用

task.start()
配置脉冲序列的长度 当你产生一个脉冲序列时,你可以告诉司机发出有限数量的脉冲或连续的方波

在执行任务之前,请使用
cfg\u implicit\u timing()
。此代码段生成1200个脉冲:

# https://github.com/ni/nidaqmx-python/blob/master/nidaqmx/_task_modules/timing.py#L2878
pulse_count = 1200;
task.cfg_implicit_timing(
    sample_mode=AcquisitionType.FINITE,
    samps_per_chan=pulse_count)

什么设备型号是“Dev1”?Dev1是NI PCI-6259。谢谢非常感谢你的回答。我很快就会试试。在这种情况下,是否可以定义产生了多少脉冲?当然,我已经更新了我的答案,以包括这一方面。嗨,乔,代码工作。非常感谢你。现在。如何循环这个脉冲序列<代码>范围内i(5):task.start()范围内i(5):task.start()的代码尝试生成脉冲计数5次,但此代码不起作用。NI调用您描述的行为“可重新触发”。您可以(1)在每次迭代中创建、配置、运行和清除任务;或者(2)使用外部信号,在该引脚上配置启动触发器,并启用其可再触发属性task.triggers.start_trigger.cfg_dig_edge_start_trig(“/Dev1/PFI9”);task.triggers.start_trigger.retriggerable=True
# https://github.com/ni/nidaqmx-python/blob/master/nidaqmx/_task_modules/timing.py#L2878
pulse_count = 1200;
task.cfg_implicit_timing(
    sample_mode=AcquisitionType.FINITE,
    samps_per_chan=pulse_count)