nidaqmx co_channels 无法编写示例

nidaqmx co_channels can't write sample

我尝试使用 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(error_buffer.value.decode("utf-8"), error_code) DaqError: The task is not buffered or has no channels. If the task is not buffered, use the scalar version of this function. If the task has no channels, add one to the task. Task Name: _unnamedTask<0>

Status Code: -201395

导致问题的原因是什么?如何解决?

非常感谢!

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

配置脉冲形状

而不是

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

尝试

# https://github.com/ni/nidaqmx-python/blob/master/nidaqmx/_task_modules/co_channel_collection.py#L160
task.co_channels.add_co_pulse_chan_time(
    counter="Dev1/ctr0",
    low_time=0.002,
    high_time=0.001)

并且因为您以这种方式指定了脉冲,所以您不再需要 write() 到该频道。当你想启动脉冲序列时,只需使用

task.start()

配置脉冲串的长度

当您生成脉冲序列时,您可以告诉驱动器发出有限数量的脉冲或连续的方波。

start() 任务之前,使用 cfg_implicit_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)